From 5fc2a32b3e853200f519f097e8f36bfe08dde662 Mon Sep 17 00:00:00 2001 From: Sascha Ludwig Date: Sat, 21 Sep 2024 22:24:35 +0200 Subject: [PATCH] fix crash when UDP/HTTP ports are empty, update copyright strings, add show settings path and distribution in about dialog --- CHANGELOG.md | 7 +++++++ LICENSE | 2 +- clockplugin.py | 2 +- clockwidget.py | 2 +- settings.ui | 46 +++++++++++++++++++++++++++++++++---------- settings_functions.py | 26 +++++++++++++++++------- start.py | 26 +++++++++++++++++------- utils.py | 2 +- utils/keypress.py | 2 +- utils/oas_send.py | 2 +- weatherwidget.py | 2 +- 11 files changed, 88 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 03891e3..401dac9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # Changelog All notable changes to this project will be documented in this file. +## [TBA] +### Added +- Show version, distribution and settings path in about dialog +### Changed +- fixed crash when UDP/HTTP ports are empty +- update copyright strings + ## [0.9.6 beta2] ### Added - options to change icons on all 4 timers diff --git a/LICENSE b/LICENSE index d3f0ced..ab24046 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,7 @@ ############################################################################# # # OnAirScreen -# Copyright (c) 2012-2023 Sascha Ludwig, astrastudio.de +# Copyright (c) 2012-2024 Sascha Ludwig, astrastudio.de # All rights reserved. # # You may use this file under the terms of the BSD license as follows: diff --git a/clockplugin.py b/clockplugin.py index 227f598..88b461c 100644 --- a/clockplugin.py +++ b/clockplugin.py @@ -3,7 +3,7 @@ ############################################################################# # # OnAirScreen Analog Clock QtDesigner Plugin -# Copyright (c) 2012-2022 Sascha Ludwig, astrastudio.de +# Copyright (c) 2012-2024 Sascha Ludwig, astrastudio.de # All rights reserved. # diff --git a/clockwidget.py b/clockwidget.py index 7d02a68..d57482e 100644 --- a/clockwidget.py +++ b/clockwidget.py @@ -3,7 +3,7 @@ ############################################################################# # # OnAirScreen Analog / Digital Clock implementation -# Copyright (c) 2012-2023 Sascha Ludwig, astrastudio.de +# Copyright (c) 2012-2024 Sascha Ludwig, astrastudio.de # All rights reserved. # # start.py diff --git a/settings.ui b/settings.ui index 7c3d3d5..245dcb6 100644 --- a/settings.ui +++ b/settings.ui @@ -2521,7 +2521,7 @@ p, li { white-space: pre-wrap; } 0 - + Qt::Vertical @@ -2534,7 +2534,7 @@ p, li { white-space: pre-wrap; } - + Qt::Vertical @@ -2567,14 +2567,17 @@ p, li { white-space: pre-wrap; } - Version ??? + Version: ??? Qt::AlignCenter + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + - + @@ -2587,7 +2590,7 @@ p, li { white-space: pre-wrap; } - + @@ -2764,7 +2767,7 @@ p, li { white-space: pre-wrap; } - © 2012-2022 Sascha Ludwig + © 2012-2024 Sascha Ludwig Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -2775,7 +2778,7 @@ p, li { white-space: pre-wrap; } - + false @@ -2785,13 +2788,36 @@ p, li { white-space: pre-wrap; } - + Enable Reset all settings button + + + + Distribution: ??? + + + Qt::AlignCenter + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + Settings Path: ??? + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + @@ -2817,7 +2843,7 @@ p, li { white-space: pre-wrap; } ################################################################## # # OnAirScreen -# Copyright (c) 2012-2022 Sascha Ludwig, astrastudio.de +# Copyright (c) 2012-2024 Sascha Ludwig, astrastudio.de # All rights reserved. # # You may use this file under the terms of the BSD license as follows: @@ -4981,8 +5007,8 @@ Parts of analog clockwidget: - + diff --git a/settings_functions.py b/settings_functions.py index 7ff7816..0041b85 100644 --- a/settings_functions.py +++ b/settings_functions.py @@ -3,7 +3,7 @@ ############################################################################# # # OnAirScreen -# Copyright (c) 2012-2023 Sascha Ludwig, astrastudio.de +# Copyright (c) 2012-2024 Sascha Ludwig, astrastudio.de # All rights reserved. # # settings_functions.py @@ -80,6 +80,9 @@ def value(self, name, default=None): except KeyError: return QVariant(default) + def fileName(self): + return "OAC Mode" + class Settings(QWidget, Ui_Settings): sigConfigChanged = pyqtSignal(int, str) @@ -94,6 +97,7 @@ class Settings(QWidget, Ui_Settings): sigCheckForUpdate = pyqtSignal() def __init__(self, oacmode=False): + self.settingsPath = None self.row = -1 QWidget.__init__(self) Ui_Settings.__init__(self) @@ -123,12 +127,18 @@ def __init__(self, oacmode=False): self.sigConfigFinished.emit() # set version string - self.versionLabel.setText("Version %s" % versionString) + self.versionLabel.setText("Version: %s" % versionString) + # set distribution string + self.distributionLabel.setText("Distribution: %s" % distributionString) + # set settings path + self.settingspathLabel.setText("Settings Path: %s" % self.settingsPath ) # set update check mode self.manual_update_check = False self.sigCheckForUpdate.connect(self.check_for_updates) - def showsettings(self): + def show_settings(self): + self.restoreSettingsFromConfig() + self.sigConfigFinished.emit() self.show() def closeEvent(self, event): @@ -136,7 +146,7 @@ def closeEvent(self, event): self.sigConfigFinished.emit() self.sigConfigClosed.emit() - def exitOnAirScreen(self): + def exit_on_air_screen(self): if not self.oacmode: # emit app close signal self.sigExitOAS.emit() @@ -166,7 +176,7 @@ def resetSettings(self): def _connectSlots(self): self.ApplyButton.clicked.connect(self.applySettings) self.CloseButton.clicked.connect(self.closeSettings) - self.ExitButton.clicked.connect(self.exitOnAirScreen) + self.ExitButton.clicked.connect(self.exit_on_air_screen) self.RebootButton.clicked.connect(self.rebootHost) self.ShutdownButton.clicked.connect(self.shutdownHost) self.LEDInactiveBGColor.clicked.connect(self.setLEDInactiveBGColor) @@ -246,6 +256,8 @@ def restoreSettingsFromConfig(self): settings = self.settings else: settings = QSettings(QSettings.UserScope, "astrastudio", "OnAirScreen") + + self.settingsPath = settings.fileName() # populate text clock languages self.textClockLanguage.clear() @@ -349,8 +361,8 @@ def restoreSettingsFromConfig(self): settings.endGroup() settings.beginGroup("Network") - self.udpport.setText(settings.value('udpport', '3310')) - self.httpport.setText(settings.value('httpport', '8010')) + self.udpport.setText(str(settings.value('udpport', '3310'))) + self.httpport.setText(str(settings.value('httpport', '8010'))) self.multicast_group.setText(settings.value('multicast_address', "239.194.0.1")) settings.endGroup() diff --git a/start.py b/start.py index 3a205be..02f984e 100755 --- a/start.py +++ b/start.py @@ -3,7 +3,7 @@ ############################################################################# # # OnAirScreen -# Copyright (c) 2012-2023 Sascha Ludwig, astrastudio.de +# Copyright (c) 2012-2024 Sascha Ludwig, astrastudio.de # All rights reserved. # # start.py @@ -48,7 +48,7 @@ from PyQt5.QtCore import Qt, QSettings, QCoreApplication, QTimer, QDate, QLocale, QThread from PyQt5.QtGui import QCursor, QPalette, QKeySequence, QIcon, QPixmap, QFont from PyQt5.QtNetwork import QUdpSocket, QNetworkInterface, QHostAddress -from PyQt5.QtWidgets import QApplication, QWidget, QShortcut, QDialog, QLineEdit, QVBoxLayout, QLabel +from PyQt5.QtWidgets import QApplication, QWidget, QShortcut, QDialog, QLineEdit, QVBoxLayout, QLabel, QMessageBox from mainscreen import Ui_MainScreen from settings_functions import Settings, versionString @@ -189,10 +189,18 @@ def __init__(self): self.udpsock = QUdpSocket() settings = QSettings(QSettings.UserScope, "astrastudio", "OnAirScreen") settings.beginGroup("Network") - port = int(settings.value('udpport', 3310)) + try: + port = int(settings.value('udpport', "3310")) + except ValueError: + port = "3310" + settings.setValue('udpport', "3310") multicast_address = settings.value('multicast_address', "239.194.0.1") + if not QHostAddress(multicast_address).isMulticast(): + multicast_address = "239.194.0.1" + settings.setValue('multicast_address', "239.194.0.1") settings.endGroup() - self.udpsock.bind(QHostAddress.AnyIPv4, port, QUdpSocket.ShareAddress) + + self.udpsock.bind(QHostAddress.AnyIPv4, int(port), QUdpSocket.ShareAddress) if QHostAddress(multicast_address).isMulticast(): print(multicast_address, "is Multicast, joining multicast group") self.udpsock.joinMulticastGroup(QHostAddress(multicast_address)) @@ -285,7 +293,7 @@ def show_settings(self): global app # un-hide mouse cursor app.setOverrideCursor(QCursor(Qt.ArrowCursor)) - self.settings.showsettings() + self.settings.show_settings() def display_all_hostaddresses(self): v4addrs = list() @@ -1448,7 +1456,11 @@ class HttpDaemon(QThread): def run(self): settings = QSettings(QSettings.UserScope, "astrastudio", "OnAirScreen") settings.beginGroup("Network") - port = int(settings.value('httpport', 8010)) + try: + port = int(settings.value('httpport', "8010")) + except ValueError: + port = 8010 + settings.setValue("httpport", "8010") settings.endGroup() try: @@ -1492,7 +1504,7 @@ def do_GET(self): settings = QSettings(QSettings.UserScope, "astrastudio", "OnAirScreen") settings.beginGroup("Network") - port = int(settings.value('udpport', 3310)) + port = int(settings.value('udpport', "3310")) settings.endGroup() sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) diff --git a/utils.py b/utils.py index 812e21c..7339ac1 100644 --- a/utils.py +++ b/utils.py @@ -3,7 +3,7 @@ ############################################################################# # # OnAirScreen -# Copyright (c) 2012-2023 Sascha Ludwig, astrastudio.de +# Copyright (c) 2012-2024 Sascha Ludwig, astrastudio.de # All rights reserved. # # utils.py diff --git a/utils/keypress.py b/utils/keypress.py index a841b2e..a69e9d0 100755 --- a/utils/keypress.py +++ b/utils/keypress.py @@ -4,7 +4,7 @@ # # OnAirScreen Keypress Tool # tool to display keyboard keycodes -# Copyright (c) 2012-2023 Sascha Ludwig, astrastudio.de +# Copyright (c) 2012-2024 Sascha Ludwig, astrastudio.de # All rights reserved. # # keypress.py diff --git a/utils/oas_send.py b/utils/oas_send.py index 74d5673..2b9f46e 100755 --- a/utils/oas_send.py +++ b/utils/oas_send.py @@ -3,7 +3,7 @@ ############################################################################# # # OnAirScreen -# Copyright (c) 2012-2023 Sascha Ludwig, astrastudio.de +# Copyright (c) 2012-2024 Sascha Ludwig, astrastudio.de # All rights reserved. # # oas_send.py diff --git a/weatherwidget.py b/weatherwidget.py index fa4b110..5f05a3c 100644 --- a/weatherwidget.py +++ b/weatherwidget.py @@ -3,7 +3,7 @@ ############################################################################# # # OnAirScreen -# Copyright (c) 2012-2023 Sascha Ludwig, astrastudio.de +# Copyright (c) 2012-2024 Sascha Ludwig, astrastudio.de # All rights reserved. # # start.py