check for missed messages on reconnect

This commit is contained in:
dries.k
2022-03-29 17:06:45 +02:00
parent 5a49881a9b
commit 17e41c414d
5 changed files with 142 additions and 48 deletions

View File

@@ -80,6 +80,8 @@ class MainApplication(QtWidgets.QApplication):
self.tray = Tray()
self.tray.show()
self.first_connect = True
self.gotify_client.listen(
new_message_callback=self.new_message_callback,
opened_callback=self.listener_opened_callback,
@@ -123,10 +125,39 @@ class MainApplication(QtWidgets.QApplication):
i + 1, 0, ApplicationModelItem(application, icon),
)
def update_last_id(self, i: int):
if i > settings.value("message/last_id", type=int):
settings.setValue("message/last_id", i)
def listener_opened_callback(self):
self.main_window.set_active()
self.tray.set_icon_ok()
if self.first_connect:
# Do not check for missed messages on launch
self.first_connect = False
return
def get_missed_messages_callback(page: gotify.GotifyPagedMessagesModel):
last_id = settings.value("message/last_id", type=int)
ids = []
page.messages.reverse()
for message in page.messages:
if message.id > last_id:
if settings.value("message/check_missed/notify", type=bool):
self.new_message_callback(message)
else:
self.add_message_to_model(message)
ids.append(message.id)
if ids:
self.update_last_id(max(ids))
self.get_missed_messages_task = GetMessagesTask(self.gotify_client)
self.get_missed_messages_task.success.connect(get_missed_messages_callback)
self.get_missed_messages_task.start()
def listener_closed_callback(self, close_status_code: int, close_msg: str):
self.main_window.set_connecting()
self.tray.set_icon_error()
@@ -149,6 +180,7 @@ class MainApplication(QtWidgets.QApplication):
message: gotify.GotifyMessageModel,
application: gotify.GotifyApplicationModel,
):
self.update_last_id(message.id)
message_item = MessagesModelItem(message)
self.messages_model.insertRow(row, message_item)
self.main_window.insert_message_widget(

View File

@@ -17,7 +17,11 @@ class Ui_Dialog(object):
self.gridLayout.setObjectName("gridLayout")
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Apply|QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
self.buttonBox.setStandardButtons(
QtWidgets.QDialogButtonBox.StandardButton.Apply
| QtWidgets.QDialogButtonBox.StandardButton.Cancel
| QtWidgets.QDialogButtonBox.StandardButton.Ok
)
self.buttonBox.setObjectName("buttonBox")
self.gridLayout.addWidget(self.buttonBox, 1, 0, 1, 1)
self.tabWidget = QtWidgets.QTabWidget(Dialog)
@@ -30,29 +34,37 @@ class Ui_Dialog(object):
self.groupBox_5.setObjectName("groupBox_5")
self.gridLayout_4 = QtWidgets.QGridLayout(self.groupBox_5)
self.gridLayout_4.setObjectName("gridLayout_4")
spacerItem = QtWidgets.QSpacerItem(
40,
20,
QtWidgets.QSizePolicy.Policy.Expanding,
QtWidgets.QSizePolicy.Policy.Minimum,
)
self.gridLayout_4.addItem(spacerItem, 0, 2, 1, 1)
self.label_6 = QtWidgets.QLabel(self.groupBox_5)
self.label_6.setObjectName("label_6")
self.gridLayout_4.addWidget(self.label_6, 1, 2, 1, 1)
self.label_4 = QtWidgets.QLabel(self.groupBox_5)
self.label_4.setObjectName("label_4")
self.gridLayout_4.addWidget(self.label_4, 0, 0, 1, 1)
self.label_5 = QtWidgets.QLabel(self.groupBox_5)
self.label_5.setObjectName("label_5")
self.gridLayout_4.addWidget(self.label_5, 1, 0, 1, 1)
self.spin_duration = QtWidgets.QSpinBox(self.groupBox_5)
self.spin_duration.setMinimum(500)
self.spin_duration.setMaximum(30000)
self.spin_duration.setSingleStep(100)
self.spin_duration.setObjectName("spin_duration")
self.gridLayout_4.addWidget(self.spin_duration, 1, 1, 1, 1)
self.label_6 = QtWidgets.QLabel(self.groupBox_5)
self.label_6.setObjectName("label_6")
self.gridLayout_4.addWidget(self.label_6, 1, 2, 1, 1)
self.label_5 = QtWidgets.QLabel(self.groupBox_5)
self.label_5.setObjectName("label_5")
self.gridLayout_4.addWidget(self.label_5, 1, 0, 1, 1)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
self.gridLayout_4.addItem(spacerItem, 0, 2, 1, 1)
self.label_4 = QtWidgets.QLabel(self.groupBox_5)
self.label_4.setObjectName("label_4")
self.gridLayout_4.addWidget(self.label_4, 0, 0, 1, 1)
self.spin_priority = QtWidgets.QSpinBox(self.groupBox_5)
self.spin_priority.setMinimum(1)
self.spin_priority.setMaximum(10)
self.spin_priority.setProperty("value", 5)
self.spin_priority.setObjectName("spin_priority")
self.gridLayout_4.addWidget(self.spin_priority, 0, 1, 1, 1)
self.cb_notify = QtWidgets.QCheckBox(self.groupBox_5)
self.cb_notify.setObjectName("cb_notify")
self.gridLayout_4.addWidget(self.cb_notify, 2, 0, 1, 3)
self.verticalLayout_4.addWidget(self.groupBox_5)
self.groupBox_4 = QtWidgets.QGroupBox(self.tab_general)
self.groupBox_4.setObjectName("groupBox_4")
@@ -61,7 +73,12 @@ class Ui_Dialog(object):
self.pb_change_server_info = QtWidgets.QPushButton(self.groupBox_4)
self.pb_change_server_info.setObjectName("pb_change_server_info")
self.gridLayout_3.addWidget(self.pb_change_server_info, 0, 0, 1, 1)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
spacerItem1 = QtWidgets.QSpacerItem(
40,
20,
QtWidgets.QSizePolicy.Policy.Expanding,
QtWidgets.QSizePolicy.Policy.Minimum,
)
self.gridLayout_3.addItem(spacerItem1, 0, 1, 1, 1)
self.verticalLayout_4.addWidget(self.groupBox_4)
self.groupBox_7 = QtWidgets.QGroupBox(self.tab_general)
@@ -78,10 +95,20 @@ class Ui_Dialog(object):
self.pb_open_log.setMaximumSize(QtCore.QSize(30, 16777215))
self.pb_open_log.setObjectName("pb_open_log")
self.gridLayout_6.addWidget(self.pb_open_log, 0, 2, 1, 1)
spacerItem2 = QtWidgets.QSpacerItem(190, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
spacerItem2 = QtWidgets.QSpacerItem(
190,
20,
QtWidgets.QSizePolicy.Policy.Expanding,
QtWidgets.QSizePolicy.Policy.Minimum,
)
self.gridLayout_6.addItem(spacerItem2, 0, 3, 1, 1)
self.verticalLayout_4.addWidget(self.groupBox_7)
spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
spacerItem3 = QtWidgets.QSpacerItem(
20,
40,
QtWidgets.QSizePolicy.Policy.Minimum,
QtWidgets.QSizePolicy.Policy.Expanding,
)
self.verticalLayout_4.addItem(spacerItem3)
self.tabWidget.addTab(self.tab_general, "")
self.tab_fonts = QtWidgets.QWidget()
@@ -107,7 +134,12 @@ class Ui_Dialog(object):
self.horizontalLayout.addWidget(self.pb_font_message_content)
self.layout_fonts_message.addLayout(self.horizontalLayout)
self.verticalLayout_5.addWidget(self.groupBox_2)
spacerItem4 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
spacerItem4 = QtWidgets.QSpacerItem(
20,
40,
QtWidgets.QSizePolicy.Policy.Minimum,
QtWidgets.QSizePolicy.Policy.Expanding,
)
self.verticalLayout_5.addItem(spacerItem4)
self.tabWidget.addTab(self.tab_fonts, "")
self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1)
@@ -119,7 +151,8 @@ class Ui_Dialog(object):
QtCore.QMetaObject.connectSlotsByName(Dialog)
Dialog.setTabOrder(self.tabWidget, self.spin_priority)
Dialog.setTabOrder(self.spin_priority, self.spin_duration)
Dialog.setTabOrder(self.spin_duration, self.pb_change_server_info)
Dialog.setTabOrder(self.spin_duration, self.cb_notify)
Dialog.setTabOrder(self.cb_notify, self.pb_change_server_info)
Dialog.setTabOrder(self.pb_change_server_info, self.combo_logging)
Dialog.setTabOrder(self.combo_logging, self.pb_open_log)
Dialog.setTabOrder(self.pb_open_log, self.pb_font_message_title)
@@ -131,24 +164,37 @@ class Ui_Dialog(object):
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.groupBox_5.setTitle(_translate("Dialog", "Notifications"))
self.label_6.setText(_translate("Dialog", "ms"))
self.label_5.setText(_translate("Dialog", "Notification duration"))
self.label_4.setText(_translate("Dialog", "Minimum priority to show notifications:"))
self.label_4.setText(
_translate("Dialog", "Minimum priority to show notifications:")
)
self.label_5.setText(_translate("Dialog", "Notification duration:"))
self.cb_notify.setText(
_translate(
"Dialog",
"Show a notification for missed messages after reconnecting",
)
)
self.groupBox_4.setTitle(_translate("Dialog", "Server info"))
self.pb_change_server_info.setText(_translate("Dialog", "Change server info"))
self.groupBox_7.setTitle(_translate("Dialog", "Logging"))
self.label_7.setText(_translate("Dialog", "Level"))
self.pb_open_log.setToolTip(_translate("Dialog", "Open logfile"))
self.pb_open_log.setText(_translate("Dialog", "..."))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_general), _translate("Dialog", "General"))
self.tabWidget.setTabText(
self.tabWidget.indexOf(self.tab_general), _translate("Dialog", "General")
)
self.groupBox_2.setTitle(_translate("Dialog", "Message"))
self.pb_font_message_title.setText(_translate("Dialog", "Title"))
self.pb_font_message_date.setText(_translate("Dialog", "Date"))
self.pb_font_message_content.setText(_translate("Dialog", "Message"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_fonts), _translate("Dialog", "Fonts"))
self.tabWidget.setTabText(
self.tabWidget.indexOf(self.tab_fonts), _translate("Dialog", "Fonts")
)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()

View File

@@ -40,33 +40,6 @@
<string>Notifications</string>
</property>
<layout class="QGridLayout" name="gridLayout_4">
<item row="1" column="1">
<widget class="QSpinBox" name="spin_duration">
<property name="minimum">
<number>500</number>
</property>
<property name="maximum">
<number>30000</number>
</property>
<property name="singleStep">
<number>100</number>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_6">
<property name="text">
<string>ms</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Notification duration</string>
</property>
</widget>
</item>
<item row="0" column="2">
<spacer name="horizontalSpacer_3">
<property name="orientation">
@@ -80,6 +53,13 @@
</property>
</spacer>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_6">
<property name="text">
<string>ms</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
@@ -87,6 +67,26 @@
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Notification duration:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="spin_duration">
<property name="minimum">
<number>500</number>
</property>
<property name="maximum">
<number>30000</number>
</property>
<property name="singleStep">
<number>100</number>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="spin_priority">
<property name="minimum">
@@ -100,6 +100,13 @@
</property>
</widget>
</item>
<item row="2" column="0" colspan="3">
<widget class="QCheckBox" name="cb_notify">
<property name="text">
<string>Show a notification for missed messages after reconnecting</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
@@ -272,6 +279,7 @@
<tabstop>tabWidget</tabstop>
<tabstop>spin_priority</tabstop>
<tabstop>spin_duration</tabstop>
<tabstop>cb_notify</tabstop>
<tabstop>pb_change_server_info</tabstop>
<tabstop>combo_logging</tabstop>
<tabstop>pb_open_log</tabstop>

View File

@@ -43,6 +43,10 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog):
settings.value("tray/notifications/duration_ms", type=int)
)
self.cb_notify.setChecked(
settings.value("message/check_missed/notify", type=bool)
)
# Logging
self.combo_logging.addItems(
[
@@ -97,6 +101,7 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog):
# Notifications
self.spin_priority.valueChanged.connect(self.settings_changed_callback)
self.spin_duration.valueChanged.connect(self.settings_changed_callback)
self.cb_notify.stateChanged.connect(self.settings_changed_callback)
# Server info
self.pb_change_server_info.clicked.connect(self.change_server_info_callback)
@@ -122,6 +127,7 @@ class SettingsDialog(QtWidgets.QDialog, Ui_Dialog):
# Priority
settings.setValue("tray/notifications/priority", self.spin_priority.value())
settings.setValue("tray/notifications/duration_ms", self.spin_duration.value())
settings.setValue("message/check_missed/notify", self.cb_notify.isChecked())
# Logging
selected_level = self.combo_logging.currentText()