From a510f5faf3076f0faa438e8ddb6f67fc4b134a42 Mon Sep 17 00:00:00 2001 From: knotteye Date: Sun, 25 Apr 2021 15:48:15 -0500 Subject: [PATCH] Add sound to notifications, and a silence option Add an optional color icon Compute PFP height from screen height instead of fixing it at 50 --- plchat.py | 68 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 58 insertions(+), 10 deletions(-) diff --git a/plchat.py b/plchat.py index e002c9a..ee17d63 100644 --- a/plchat.py +++ b/plchat.py @@ -37,6 +37,8 @@ APPDATA = appdirs.AppDirs('plchat', 'plchat').user_data_dir THREADS = {} STATIC_PREF = '' ICON_PATH = os.path.join(os.path.dirname(__file__), "fedi.svg") +ICON_PATH_COLOR = os.path.join(os.path.dirname(__file__), "fedi_color.svg") +NOTIF_SOUND = os.path.join(os.path.dirname(__file__), 'notif.wav') class App(QMainWindow): settings = QSettings(APPDATA+"/settings.ini") @@ -51,7 +53,10 @@ class App(QMainWindow): def initUI(self): self.setWindowTitle(self.title) - self.setWindowIcon(QIcon(QPixmap(ICON_PATH))) + if self.settings.value('colorIcon', type=bool): + self.setWindowIcon(QIcon(QPixmap(ICON_PATH_COLOR))) + else: + self.setWindowIcon(QIcon(QPixmap(ICON_PATH))) self.setGeometry(self.settings.value('left', type=int) or 10, self.settings.value('top', type=int) or 10, self.settings.value('width', type=int) or 640, self.settings.value('height', type=int) or 480) self._exit = False @@ -103,9 +108,15 @@ class App(QMainWindow): self.darkModeAction.setChecked(self.settings.value('darkMode', type=bool)) self.darkModeAction.setToolTip("Only affects chat bubbles") + self.colorIconAction = QAction("Use Color Icon", self, checkable=True, triggered=self.useColorIcon) + self.colorIconAction.setChecked(self.settings.value('colorIcon', type=bool)) + self.sendNotificationsAction = QAction("Send Notifications", self, checkable=True) self.sendNotificationsAction.setChecked(self.settings.value('sendNotifications', type=bool)) + self.silenceNotifsAction = QAction("Silence Notifications", self, checkable=True, triggered=self.silenceNotifs) + self.silenceNotifsAction.setChecked(self.settings.value('silenceNotifications', type=bool)) + self.fetchHeadersAction = QAction("Fetch Headers", self, checkable=True) self.fetchHeadersAction.setChecked(self.settings.value('fetchHeaders', type=bool)) @@ -128,10 +139,14 @@ class App(QMainWindow): systraymenu.addAction(showAction) systraymenu.addAction(hideAction) + systraymenu.addAction(self.silenceNotifsAction) systraymenu.addAction(exitAction) self.trayIcon = QSystemTrayIcon() - self.trayIcon.setIcon(QIcon(ICON_PATH)) + if self.settings.value('colorIcon', type=bool): + self.trayIcon.setIcon(QIcon(ICON_PATH_COLOR)) + else: + self.trayIcon.setIcon(QIcon(ICON_PATH)) self.trayIcon.setVisible(True) self.trayIcon.setToolTip("PlChat") self.trayIcon.setContextMenu(systraymenu) @@ -154,7 +169,9 @@ class App(QMainWindow): prefsmenu.addAction(self.openInTrayAction) prefsmenu.addAction(self.animatePicturesAction) prefsmenu.addAction(self.darkModeAction) + prefsmenu.addAction(self.colorIconAction) prefsmenu.addAction(self.sendNotificationsAction) + prefsmenu.addAction(self.silenceNotifsAction) prefsmenu.addAction(self.fetchBackgroundsAction) prefsmenu.addAction(self.fetchHeadersAction) prefsmenu.addAction(self.twoFourTimeAction) @@ -217,6 +234,23 @@ class App(QMainWindow): else: self.show() + def silenceNotifs(self, dothing): + if dothing: + # Definitely not supposed to be poking around in the internals like this lul + Notification._notification_audio = None + else: + Notification.audio = NOTIF_SOUND + + def useColorIcon(self, dothing): + if dothing: + self.setWindowIcon(QIcon(QPixmap(ICON_PATH_COLOR))) + if self.trayIcon: + self.trayIcon.setIcon(QIcon(ICON_PATH_COLOR)) + else: + self.setWindowIcon(QIcon(QPixmap(ICON_PATH))) + if self.trayIcon: + self.trayIcon.setIcon(QIcon(ICON_PATH)) + def eventLoop(self): # Custom event loop to process queue events self.processEvents() @@ -243,6 +277,8 @@ class App(QMainWindow): self.settings.setValue("sendNotifications", self.sendNotificationsAction.isChecked()) self.settings.setValue("fetchHeaders", self.fetchHeadersAction.isChecked()) self.settings.setValue("twoFourTime", self.twoFourTimeAction.isChecked()) + self.settings.setValue('colorIcon', self.colorIconAction.isChecked()) + self.settings.setValue('silenceNotifications', self.silenceNotifsAction.isChecked()) event.accept() self._eventloop.stop() @@ -452,8 +488,14 @@ class App(QMainWindow): flip = False if flip: if self.trayIcon: - self.trayIcon.setIcon(QIcon(QPixmap(ICON_PATH))) - self.setWindowIcon(QIcon(QPixmap(ICON_PATH))) + if self.settings.value('colorIcon', type=bool): + self.trayIcon.setIcon(QIcon(ICON_PATH_COLOR)) + else: + self.trayIcon.setIcon(QIcon(ICON_PATH)) + if self.settings.value('colorIcon', type=bool): + self.setWindowIcon(QIcon(QPixmap(ICON_PATH_COLOR))) + else: + self.setWindowIcon(QIcon(QPixmap(ICON_PATH))) self.tabs.widget(ind).markRead() self.tabs.widget(ind).setFocus(Qt.NoFocusReason) @@ -476,8 +518,14 @@ class App(QMainWindow): flip = False if flip: if self.trayIcon: - self.trayIcon.setIcon(QIcon(QPixmap(ICON_PATH))) - self.setWindowIcon(QIcon(QPixmap(ICON_PATH))) + if self.settings.value('colorIcon', type=bool): + self.trayIcon.setIcon(QIcon(ICON_PATH_COLOR)) + else: + self.trayIcon.setIcon(QIcon(ICON_PATH)) + if self.settings.value('colorIcon', type=bool): + self.setWindowIcon(QIcon(QPixmap(ICON_PATH_COLOR))) + else: + self.setWindowIcon(QIcon(QPixmap(ICON_PATH))) self.tabs.widget(ind).markRead() self.tabs.widget(ind).setFocus(Qt.NoFocusReason) @@ -761,13 +809,13 @@ class SingleMessage(QWidget): p = QPixmap(path) if p.isNull(): p = QPixmap(APPDATA+'/'+ex.getCurrentAcc()[1]+'avi.png') - p = p.scaledToHeight(50, mode=Qt.SmoothTransformation) + p = p.scaledToHeight(round(QDesktopWidget().screenGeometry(-1).height() / 21.6), mode=Qt.SmoothTransformation) self.userPixmap = p def setConvoPixmap(self, path): p = QPixmap(path) if p.isNull(): p = QPixmap(APPDATA+'/'+ex.getCurrentAcc()[1]+'avi.png') - p = p.scaledToHeight(50, mode=Qt.SmoothTransformation) + p = p.scaledToHeight(round(QDesktopWidget().screenGeometry(-1).height() / 21.6), mode=Qt.SmoothTransformation) self.convoPixmap = p class MessageAvatar(QLabel): @@ -1392,8 +1440,8 @@ class IconLabel(QLabel): Notification = Notify( default_notification_title="PlChat", - default_notification_icon=ICON_PATH - #default_notification_audio=NOTIF_SOUND + default_notification_icon=ICON_PATH, + default_notification_audio=NOTIF_SOUND ) def sendNotification(message, title=None, icon=None):