fill search results listview; todo: operate on results
This commit is contained in:
parent
072cc50baa
commit
c9ef415ecc
|
@ -129,7 +129,7 @@ class Logger:
|
||||||
'''jids table has jid and jid_id
|
'''jids table has jid and jid_id
|
||||||
logs table has log_id, jid_id, contact_name, time, kind, show, message
|
logs table has log_id, jid_id, contact_name, time, kind, show, message
|
||||||
so to ask logs we need jid_id that matches our jid in jids table
|
so to ask logs we need jid_id that matches our jid in jids table
|
||||||
this method asks jid and returns the jid_id for later sql-ing on logs
|
this method wants jid and returns the jid_id for later sql-ing on logs
|
||||||
typestr can be 'ROOM' or anything else depending on the type of JID
|
typestr can be 'ROOM' or anything else depending on the type of JID
|
||||||
and is only needed to be specified when the JID is new in DB
|
and is only needed to be specified when the JID is new in DB
|
||||||
'''
|
'''
|
||||||
|
|
|
@ -59,6 +59,7 @@ class HistoryManager:
|
||||||
self.window = xml.get_widget('history_manager_window')
|
self.window = xml.get_widget('history_manager_window')
|
||||||
self.jids_listview = xml.get_widget('jids_listview')
|
self.jids_listview = xml.get_widget('jids_listview')
|
||||||
self.logs_listview = xml.get_widget('logs_listview')
|
self.logs_listview = xml.get_widget('logs_listview')
|
||||||
|
self.search_results_listview = xml.get_widget('search_results_listview')
|
||||||
self.search_entry = xml.get_widget('search_entry')
|
self.search_entry = xml.get_widget('search_entry')
|
||||||
self.logs_scrolledwindow = xml.get_widget('logs_scrolledwindow')
|
self.logs_scrolledwindow = xml.get_widget('logs_scrolledwindow')
|
||||||
self.search_results_scrolledwindow = xml.get_widget(
|
self.search_results_scrolledwindow = xml.get_widget(
|
||||||
|
@ -76,10 +77,10 @@ class HistoryManager:
|
||||||
|
|
||||||
self._init_jids_listview()
|
self._init_jids_listview()
|
||||||
self._init_logs_listview()
|
self._init_logs_listview()
|
||||||
|
self._init_search_results_listview()
|
||||||
|
|
||||||
self._fill_jids_listview()
|
self._fill_jids_listview()
|
||||||
|
|
||||||
|
|
||||||
self.search_entry.grab_focus()
|
self.search_entry.grab_focus()
|
||||||
|
|
||||||
self.window.maximize()
|
self.window.maximize()
|
||||||
|
@ -123,6 +124,35 @@ class HistoryManager:
|
||||||
col.set_resizable(True)
|
col.set_resizable(True)
|
||||||
self.logs_listview.append_column(col)
|
self.logs_listview.append_column(col)
|
||||||
|
|
||||||
|
def _init_search_results_listview(self):
|
||||||
|
# log_line_id (HIDDEN), jid, time, message, subject
|
||||||
|
self.search_results_liststore = gtk.ListStore(str, str, str, str, str)
|
||||||
|
self.search_results_listview.set_model(self.search_results_liststore)
|
||||||
|
|
||||||
|
renderer_text = gtk.CellRendererText() # holds JID (who said this)
|
||||||
|
col = gtk.TreeViewColumn('JID', renderer_text, text = 1)
|
||||||
|
col.set_sort_column_id(1) # user can click this header and sort
|
||||||
|
col.set_resizable(True)
|
||||||
|
self.search_results_listview.append_column(col)
|
||||||
|
|
||||||
|
renderer_text = gtk.CellRendererText() # holds time
|
||||||
|
col = gtk.TreeViewColumn('Time', renderer_text, text = C_UNIXTIME)
|
||||||
|
col.set_sort_column_id(C_UNIXTIME) # user can click this header and sort
|
||||||
|
col.set_resizable(True)
|
||||||
|
self.search_results_listview.append_column(col)
|
||||||
|
|
||||||
|
renderer_text = gtk.CellRendererText() # holds message
|
||||||
|
col = gtk.TreeViewColumn('Message', renderer_text, text = C_MESSAGE)
|
||||||
|
col.set_sort_column_id(C_MESSAGE) # user can click this header and sort
|
||||||
|
col.set_resizable(True)
|
||||||
|
self.search_results_listview.append_column(col)
|
||||||
|
|
||||||
|
renderer_text = gtk.CellRendererText() # holds subject
|
||||||
|
col = gtk.TreeViewColumn('Subject', renderer_text, text = C_SUBJECT)
|
||||||
|
col.set_sort_column_id(C_SUBJECT) # user can click this header and sort
|
||||||
|
col.set_resizable(True)
|
||||||
|
self.search_results_listview.append_column(col)
|
||||||
|
|
||||||
def on_history_manager_window_delete_event(self, widget, event):
|
def on_history_manager_window_delete_event(self, widget, event):
|
||||||
gtk.main_quit()
|
gtk.main_quit()
|
||||||
|
|
||||||
|
@ -145,6 +175,7 @@ class HistoryManager:
|
||||||
do_clear = False
|
do_clear = False
|
||||||
|
|
||||||
self.welcome_label.hide()
|
self.welcome_label.hide()
|
||||||
|
self.search_results_scrolledwindow.hide()
|
||||||
self.logs_scrolledwindow.show()
|
self.logs_scrolledwindow.show()
|
||||||
|
|
||||||
list_of_rowrefs = []
|
list_of_rowrefs = []
|
||||||
|
@ -162,16 +193,24 @@ class HistoryManager:
|
||||||
'''jids table has jid and jid_id
|
'''jids table has jid and jid_id
|
||||||
logs table has log_id, jid_id, contact_name, time, kind, show, message
|
logs table has log_id, jid_id, contact_name, time, kind, show, message
|
||||||
so to ask logs we need jid_id that matches our jid in jids table
|
so to ask logs we need jid_id that matches our jid in jids table
|
||||||
this method asks jid and returns the jid_id for later sql-ing on logs
|
this method wants jid and returns the jid_id for later sql-ing on logs
|
||||||
'''
|
'''
|
||||||
if jid.find('/') != -1: # if it has a /
|
if jid.find('/') != -1: # if it has a /
|
||||||
jid_is_from_pm = self._jid_is_from_pm(jid)
|
jid_is_from_pm = self._jid_is_from_pm(jid)
|
||||||
if not jid_is_from_pm: # it's normal jid with resource
|
if not jid_is_from_pm: # it's normal jid with resource
|
||||||
jid = jid.split('/', 1)[0] # remove the resource
|
jid = jid.split('/', 1)[0] # remove the resource
|
||||||
self.cur.execute('SELECT jid_id FROM jids WHERE jid="%s"' % jid)
|
self.cur.execute('SELECT jid_id FROM jids WHERE jid = ?', (jid,))
|
||||||
jid_id = self.cur.fetchone()[0]
|
jid_id = self.cur.fetchone()[0]
|
||||||
return jid_id
|
return jid_id
|
||||||
|
|
||||||
|
def _get_jid_from_jid_id(self, jid_id):
|
||||||
|
'''jids table has jid and jid_id
|
||||||
|
this method accepts jid_id and returns the jid for later sql-ing on logs
|
||||||
|
'''
|
||||||
|
self.cur.execute('SELECT jid FROM jids WHERE jid_id = ?', (jid_id,))
|
||||||
|
jid = self.cur.fetchone()[0]
|
||||||
|
return jid
|
||||||
|
|
||||||
def _jid_is_from_pm(self, jid):
|
def _jid_is_from_pm(self, jid):
|
||||||
'''if jid is gajim@conf/nkour it's likely a pm one, how we know
|
'''if jid is gajim@conf/nkour it's likely a pm one, how we know
|
||||||
gajim@conf is not a normal guy and nkour is not his resource?
|
gajim@conf is not a normal guy and nkour is not his resource?
|
||||||
|
@ -183,7 +222,7 @@ class HistoryManager:
|
||||||
|
|
||||||
possible_room_jid, possible_nick = jid.split('/', 1)
|
possible_room_jid, possible_nick = jid.split('/', 1)
|
||||||
|
|
||||||
self.cur.execute('SELECT jid_id FROM jids WHERE jid="%s" AND type=%d' %\
|
self.cur.execute('SELECT jid_id FROM jids WHERE jid = ? AND type = ?',
|
||||||
(possible_room_jid, constants.JID_ROOM_TYPE))
|
(possible_room_jid, constants.JID_ROOM_TYPE))
|
||||||
row = self.cur.fetchone()
|
row = self.cur.fetchone()
|
||||||
if row is not None:
|
if row is not None:
|
||||||
|
@ -201,9 +240,9 @@ class HistoryManager:
|
||||||
jid_id = self._get_jid_id(jid)
|
jid_id = self._get_jid_id(jid)
|
||||||
self.cur.execute('''
|
self.cur.execute('''
|
||||||
SELECT log_line_id, jid_id, time, kind, message, subject FROM logs
|
SELECT log_line_id, jid_id, time, kind, message, subject FROM logs
|
||||||
WHERE jid_id = %d
|
WHERE jid_id = ?
|
||||||
ORDER BY time
|
ORDER BY time
|
||||||
''' % (jid_id,))
|
''', (jid_id,))
|
||||||
|
|
||||||
results = self.cur.fetchall()
|
results = self.cur.fetchall()
|
||||||
for row in results:
|
for row in results:
|
||||||
|
@ -224,15 +263,31 @@ class HistoryManager:
|
||||||
# FIXME: check kind and set color accordingly
|
# FIXME: check kind and set color accordingly
|
||||||
# exposed in UI (TreeViewColumns) are only JID, time, message and subject
|
# exposed in UI (TreeViewColumns) are only JID, time, message and subject
|
||||||
# but store in liststore jid, time, message and subject
|
# but store in liststore jid, time, message and subject
|
||||||
|
print 'FILL RESULTS'
|
||||||
|
like_sql = '%' + text + '%'
|
||||||
self.cur.execute('''
|
self.cur.execute('''
|
||||||
SELECT jid_id, time, kind, message, subject FROM logs
|
SELECT log_line_id, jid_id, time, kind, message, subject FROM logs
|
||||||
WHERE jid_id = %d
|
WHERE message LIKE ? OR subject LIKE ?
|
||||||
ORDER BY time
|
ORDER BY time
|
||||||
''' % (jid_id,))
|
''', (like_sql, like_sql))
|
||||||
|
|
||||||
results = self.cur.fetchall()
|
results = self.cur.fetchall()
|
||||||
for row in results:
|
for row in results:
|
||||||
pass
|
# exposed in UI (TreeViewColumns) are only time, message and subject
|
||||||
|
# but store in liststore log_line_id, jid_id, time, message and subject
|
||||||
|
time_ = row[2]
|
||||||
|
print row
|
||||||
|
try:
|
||||||
|
time_ = time.strftime('%x', time.localtime(float(time_)))
|
||||||
|
except ValueError:
|
||||||
|
print 'BOO'
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
jid_id = row[1]
|
||||||
|
jid = self._get_jid_from_jid_id(jid_id)
|
||||||
|
|
||||||
|
self.search_results_liststore.append((row[0], jid, time_,
|
||||||
|
row[4], row[5]))
|
||||||
|
|
||||||
def on_logs_listview_key_press_event(self, widget, event):
|
def on_logs_listview_key_press_event(self, widget, event):
|
||||||
liststore, list_of_paths = self.logs_listview.get_selection()\
|
liststore, list_of_paths = self.logs_listview.get_selection()\
|
||||||
|
@ -264,8 +319,8 @@ class HistoryManager:
|
||||||
# remove from db
|
# remove from db
|
||||||
self.cur.execute('''
|
self.cur.execute('''
|
||||||
DELETE FROM logs
|
DELETE FROM logs
|
||||||
WHERE log_line_id = %s
|
WHERE log_line_id = ?
|
||||||
''' % (log_line_id,))
|
''', (log_line_id,))
|
||||||
|
|
||||||
self.con.commit()
|
self.con.commit()
|
||||||
|
|
||||||
|
@ -300,14 +355,14 @@ class HistoryManager:
|
||||||
# remove from db
|
# remove from db
|
||||||
self.cur.execute('''
|
self.cur.execute('''
|
||||||
DELETE FROM logs
|
DELETE FROM logs
|
||||||
WHERE jid_id = %s
|
WHERE jid_id = ?
|
||||||
''' % (jid_id,))
|
''', (jid_id,))
|
||||||
|
|
||||||
# now delete "jid, jid_id" row from jids table
|
# now delete "jid, jid_id" row from jids table
|
||||||
self.cur.execute('''
|
self.cur.execute('''
|
||||||
DELETE FROM jids
|
DELETE FROM jids
|
||||||
WHERE jid_id = %s
|
WHERE jid_id = ?
|
||||||
''' % (jid_id,))
|
''', (jid_id,))
|
||||||
|
|
||||||
self.con.commit()
|
self.con.commit()
|
||||||
|
|
||||||
|
@ -317,11 +372,15 @@ class HistoryManager:
|
||||||
return
|
return
|
||||||
|
|
||||||
self.welcome_label.hide()
|
self.welcome_label.hide()
|
||||||
|
self.logs_scrolledwindow.hide()
|
||||||
self.search_results_scrolledwindow.show()
|
self.search_results_scrolledwindow.show()
|
||||||
|
|
||||||
|
self._fill_search_results_listview(text)
|
||||||
|
|
||||||
def on_search_results_listview_row_activated(self, widget, path, column):
|
def on_search_results_listview_row_activated(self, widget, path, column):
|
||||||
model = widget.get_model()
|
model = widget.get_model()
|
||||||
print model[path][0]
|
print model[path][0]
|
||||||
|
#FIXME: show logs for doube clicked jid and scroll to log_line_id
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
signal.signal(signal.SIGINT, signal.SIG_DFL) # ^C exits the application
|
signal.signal(signal.SIGINT, signal.SIG_DFL) # ^C exits the application
|
||||||
|
|
Loading…
Reference in New Issue