search in history with regex support
This commit is contained in:
parent
8b56184510
commit
de7f3359b8
@ -7,6 +7,7 @@ import basecontact
|
|||||||
import util
|
import util
|
||||||
from messages import *
|
from messages import *
|
||||||
import file_transfers as ft
|
import file_transfers as ft
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
class Contact(basecontact.BaseContact):
|
class Contact(basecontact.BaseContact):
|
||||||
@ -131,6 +132,7 @@ class Contact(basecontact.BaseContact):
|
|||||||
self._unsaved_messages -= 1
|
self._unsaved_messages -= 1
|
||||||
self._corr.remove(elem)
|
self._corr.remove(elem)
|
||||||
self._message_getter.delete_one()
|
self._message_getter.delete_one()
|
||||||
|
self._search_index = 0
|
||||||
|
|
||||||
def delete_old_messages(self):
|
def delete_old_messages(self):
|
||||||
"""
|
"""
|
||||||
@ -176,7 +178,8 @@ class Contact(basecontact.BaseContact):
|
|||||||
for i in range(self._search_index - 1, -l - 1, -1):
|
for i in range(self._search_index - 1, -l - 1, -1):
|
||||||
if type(self._corr[i]) is not TextMessage:
|
if type(self._corr[i]) is not TextMessage:
|
||||||
continue
|
continue
|
||||||
if self._search_string.lower() in self._corr[i].get_data()[0].lower():
|
message = self._corr[i].get_data()[0]
|
||||||
|
if re.search(self._search_string, message, re.IGNORECASE) is not None:
|
||||||
self._search_index = i
|
self._search_index = i
|
||||||
return i
|
return i
|
||||||
self._search_index = -l
|
self._search_index = -l
|
||||||
@ -190,7 +193,8 @@ class Contact(basecontact.BaseContact):
|
|||||||
for i in range(self._search_index + 1, 0):
|
for i in range(self._search_index + 1, 0):
|
||||||
if type(self._corr[i]) is not TextMessage:
|
if type(self._corr[i]) is not TextMessage:
|
||||||
continue
|
continue
|
||||||
if self._search_string.lower() in self._corr[i].get_data()[0].lower():
|
message = self._corr[i].get_data()[0]
|
||||||
|
if re.search(self._search_string, message, re.IGNORECASE) is not None:
|
||||||
self._search_index = i
|
self._search_index = i
|
||||||
return i
|
return i
|
||||||
return None # not found
|
return None # not found
|
||||||
|
@ -192,8 +192,9 @@ class MessageItem(QtGui.QWidget):
|
|||||||
|
|
||||||
def select_text(self, text=''):
|
def select_text(self, text=''):
|
||||||
tmp = self.message.toHtml()
|
tmp = self.message.toHtml()
|
||||||
pattern = re.compile(re.escape(text), re.IGNORECASE) # TODO: save case
|
strings = re.findall(text, tmp, flags=re.IGNORECASE)
|
||||||
tmp = pattern.sub('<font color="red">{}</font>'.format(text), tmp)
|
for s in strings:
|
||||||
|
tmp = tmp.replace(s, '<font color="red">{}</font>'.format(s))
|
||||||
self.message.setHtml(tmp)
|
self.message.setHtml(tmp)
|
||||||
|
|
||||||
|
|
||||||
|
@ -449,14 +449,14 @@ class SearchScreen(QtGui.QWidget):
|
|||||||
self.close_button.setGeometry(width - 40, 0, 40, 40)
|
self.close_button.setGeometry(width - 40, 0, 40, 40)
|
||||||
self.close_button.clicked.connect(self.close)
|
self.close_button.clicked.connect(self.close)
|
||||||
self.close_button.setText('×')
|
self.close_button.setText('×')
|
||||||
self.close_button.setAlignment(QtCore.Qt.AlignCenter)
|
|
||||||
font = QtGui.QFont()
|
font = QtGui.QFont()
|
||||||
font.setPointSize(32)
|
font.setPointSize(32)
|
||||||
font.setBold(True)
|
font.setBold(True)
|
||||||
self.close_button.setFont(font)
|
self.close_button.setFont(font)
|
||||||
|
|
||||||
def search(self):
|
def search(self):
|
||||||
text = self.search_text.text() # TODO: clean selection
|
Profile.get_instance().update()
|
||||||
|
text = self.search_text.text()
|
||||||
friend = Profile.get_instance().get_curr_friend()
|
friend = Profile.get_instance().get_curr_friend()
|
||||||
if text and friend:
|
if text and friend:
|
||||||
index = friend.search_string(text)
|
index = friend.search_string(text)
|
||||||
@ -494,6 +494,6 @@ class SearchScreen(QtGui.QWidget):
|
|||||||
self._messages.itemWidget(item).select_text(text)
|
self._messages.itemWidget(item).select_text(text)
|
||||||
|
|
||||||
def closeEvent(self, *args):
|
def closeEvent(self, *args):
|
||||||
Profile.get_instance().update() # TODO: clean selection?
|
Profile.get_instance().update()
|
||||||
self._messages.setGeometry(0, 0, self._messages.width(), self._messages.height() + 40)
|
self._messages.setGeometry(0, 0, self._messages.width(), self._messages.height() + 40)
|
||||||
super().closeEvent(*args)
|
super().closeEvent(*args)
|
||||||
|
Loading…
Reference in New Issue
Block a user