optimize history search. Fixes #6997
This commit is contained in:
parent
b502f35a9f
commit
783cf55ba7
|
@ -80,6 +80,21 @@
|
||||||
<property name="position">2</property>
|
<property name="position">2</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCheckButton" id="search_in_date">
|
||||||
|
<property name="label" translatable="yes">_In date search</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="receives_default">False</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="draw_indicator">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">False</property>
|
||||||
|
<property name="position">3</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
|
@ -104,14 +119,17 @@
|
||||||
<object class="GtkCalendar" id="calendar">
|
<object class="GtkCalendar" id="calendar">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<signal name="day_selected" handler="on_calendar_day_selected"/>
|
|
||||||
<signal name="month_changed" handler="on_calendar_month_changed"/>
|
<signal name="month_changed" handler="on_calendar_month_changed"/>
|
||||||
|
<signal name="day_selected" handler="on_calendar_day_selected"/>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
<placeholder/>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="resize">False</property>
|
<property name="resize">False</property>
|
||||||
|
|
|
@ -629,7 +629,8 @@ class Logger:
|
||||||
results = self.cur.fetchall()
|
results = self.cur.fetchall()
|
||||||
return results
|
return results
|
||||||
|
|
||||||
def get_search_results_for_query(self, jid, query, account):
|
def get_search_results_for_query(self, jid, query, account, year=False,
|
||||||
|
month=False, day=False):
|
||||||
"""
|
"""
|
||||||
Returns contact_name, time, kind, show, message
|
Returns contact_name, time, kind, show, message
|
||||||
|
|
||||||
|
@ -652,7 +653,19 @@ class Logger:
|
||||||
else: # user just typed something, we search in message column
|
else: # user just typed something, we search in message column
|
||||||
where_sql, jid_tuple = self._build_contact_where(account, jid)
|
where_sql, jid_tuple = self._build_contact_where(account, jid)
|
||||||
like_sql = '%' + query.replace("'", "''") + '%'
|
like_sql = '%' + query.replace("'", "''") + '%'
|
||||||
self.cur.execute('''
|
if year:
|
||||||
|
start_of_day = self.get_unix_time_from_date(year, month, day)
|
||||||
|
seconds_in_a_day = 86400 # 60 * 60 * 24
|
||||||
|
last_second_of_day = start_of_day + seconds_in_a_day - 1
|
||||||
|
self.cur.execute('''
|
||||||
|
SELECT contact_name, time, kind, show, message, subject FROM logs
|
||||||
|
WHERE (%s) AND message LIKE '%s'
|
||||||
|
AND time BETWEEN %d AND %d
|
||||||
|
ORDER BY time
|
||||||
|
''' % (where_sql, like_sql, start_of_day, last_second_of_day),
|
||||||
|
jid_tuple)
|
||||||
|
else:
|
||||||
|
self.cur.execute('''
|
||||||
SELECT contact_name, time, kind, show, message, subject FROM logs
|
SELECT contact_name, time, kind, show, message, subject FROM logs
|
||||||
WHERE (%s) AND message LIKE '%s'
|
WHERE (%s) AND message LIKE '%s'
|
||||||
ORDER BY time
|
ORDER BY time
|
||||||
|
|
|
@ -83,6 +83,7 @@ class HistoryWindow:
|
||||||
self.query_combobox.set_active(0)
|
self.query_combobox.set_active(0)
|
||||||
self.results_treeview = xml.get_object('results_treeview')
|
self.results_treeview = xml.get_object('results_treeview')
|
||||||
self.results_window = xml.get_object('results_scrolledwindow')
|
self.results_window = xml.get_object('results_scrolledwindow')
|
||||||
|
self.search_in_date = xml.get_object('search_in_date')
|
||||||
|
|
||||||
# contact_name, date, message, time
|
# contact_name, date, message, time
|
||||||
model = gtk.ListStore(str, str, str, str, str)
|
model = gtk.ListStore(str, str, str, str, str)
|
||||||
|
@ -511,9 +512,14 @@ class HistoryWindow:
|
||||||
# This may leed to wrong self nick in the displayed history (Uggh!)
|
# This may leed to wrong self nick in the displayed history (Uggh!)
|
||||||
account = gajim.contacts.get_accounts()[0]
|
account = gajim.contacts.get_accounts()[0]
|
||||||
|
|
||||||
|
year, month, day = False, False, False
|
||||||
|
if self.search_in_date.get_active():
|
||||||
|
year, month, day = self.calendar.get_date() # integers
|
||||||
|
month = gtkgui_helpers.make_gtk_month_python_month(month)
|
||||||
|
|
||||||
# contact_name, time, kind, show, message, subject
|
# contact_name, time, kind, show, message, subject
|
||||||
results = gajim.logger.get_search_results_for_query(
|
results = gajim.logger.get_search_results_for_query(
|
||||||
jid, text, account)
|
jid, text, account, year, month, day)
|
||||||
#FIXME:
|
#FIXME:
|
||||||
# add "subject: | message: " in message column if kind is single
|
# add "subject: | message: " in message column if kind is single
|
||||||
# also do we need show at all? (we do not search on subject)
|
# also do we need show at all? (we do not search on subject)
|
||||||
|
|
Loading…
Reference in New Issue