check for missed messages on reconnect
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
DEFAULT_SETTINGS = {
|
||||
"message/check_missed/notify": False,
|
||||
"message/last_id": 0,
|
||||
"logging/level": "Disabled",
|
||||
"tray/notifications/priority": 5,
|
||||
"tray/notifications/duration_ms": 5000,
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user