diff --git a/gotify_tray/gui/designs/widget_main.py b/gotify_tray/gui/designs/widget_main.py index de3dfc6..4883949 100644 --- a/gotify_tray/gui/designs/widget_main.py +++ b/gotify_tray/gui/designs/widget_main.py @@ -72,11 +72,11 @@ class Ui_MainWindow(object): self.pb_critical.setChecked(True) self.pb_critical.setObjectName("pb_critical") self.filtersLayout.addWidget(self.pb_critical) + self.le_search = QtWidgets.QLineEdit(parent=self.verticalLayoutWidget) + self.le_search.setObjectName("le_search") + self.filtersLayout.addWidget(self.le_search) spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) self.filtersLayout.addItem(spacerItem2) - self.label_subject = QtWidgets.QLabel(parent=self.verticalLayoutWidget) - self.label_subject.setObjectName("label_subject") - self.filtersLayout.addWidget(self.label_subject) self.pb_remove_filters = QtWidgets.QPushButton(parent=self.verticalLayoutWidget) self.pb_remove_filters.setObjectName("pb_remove_filters") self.filtersLayout.addWidget(self.pb_remove_filters) @@ -105,7 +105,7 @@ class Ui_MainWindow(object): self.pb_normal.setText(_translate("MainWindow", "NORMAL")) self.pb_high.setText(_translate("MainWindow", "HIGH")) self.pb_critical.setText(_translate("MainWindow", "CRITICAL")) - self.label_subject.setText(_translate("MainWindow", "Subject:")) + self.le_search.setPlaceholderText(_translate("MainWindow", "Search messages...")) self.pb_remove_filters.setText(_translate("MainWindow", "Remove Filters")) diff --git a/gotify_tray/gui/designs/widget_main.ui b/gotify_tray/gui/designs/widget_main.ui index 2ce2bdb..71647f1 100644 --- a/gotify_tray/gui/designs/widget_main.ui +++ b/gotify_tray/gui/designs/widget_main.ui @@ -151,6 +151,13 @@ + + + + Search messages... + + + @@ -164,13 +171,6 @@ - - - - Subject: - - - diff --git a/gotify_tray/gui/models/MessagesModel.py b/gotify_tray/gui/models/MessagesModel.py index a3bd71c..a7da27a 100644 --- a/gotify_tray/gui/models/MessagesModel.py +++ b/gotify_tray/gui/models/MessagesModel.py @@ -44,11 +44,16 @@ class MessagesProxyModel(QtCore.QSortFilterProxyModel): def __init__(self, parent=None): super().__init__(parent) self.allowed_priorities = set(range(11)) # 0-10 + self.text_filter = "" def set_allowed_priorities(self, priorities: set[int]): self.allowed_priorities = priorities self.invalidateFilter() + def set_text_filter(self, text: str): + self.text_filter = text.lower() + self.invalidateFilter() + def filterAcceptsRow( self, source_row: int, source_parent: QtCore.QModelIndex ) -> bool: @@ -58,4 +63,9 @@ class MessagesProxyModel(QtCore.QSortFilterProxyModel): priority = message.priority if message.priority is not None else 0 if self.allowed_priorities and priority not in self.allowed_priorities: return False + if self.text_filter: + title = (message.title or "").lower() + msg = message.message.lower() + if self.text_filter not in title and self.text_filter not in msg: + return False return True diff --git a/gotify_tray/gui/widgets/MainWindow.py b/gotify_tray/gui/widgets/MainWindow.py index cce2e0e..d7af261 100644 --- a/gotify_tray/gui/widgets/MainWindow.py +++ b/gotify_tray/gui/widgets/MainWindow.py @@ -100,6 +100,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): self.pb_critical.setCheckable(False) self.pb_remove_filters.clicked.connect(self.on_remove_filters_clicked) + self.le_search.returnPressed.connect(self.on_search_return_pressed) # set refresh shortcut (usually ctrl-r) # unfortunately this cannot be done with designer @@ -281,3 +282,10 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow): self.pb_normal.setChecked(True) self.pb_high.setChecked(True) # Critical is always on + # Clear search + self.le_search.clear() + self.messages_proxy_model.set_text_filter("") + + def on_search_return_pressed(self): + text = self.le_search.text() + self.messages_proxy_model.set_text_filter(text)