diff --git a/qweechat/data/icons/README b/qweechat/data/icons/README index 9c9e7c6..614a9d9 100644 --- a/qweechat/data/icons/README +++ b/qweechat/data/icons/README @@ -10,8 +10,8 @@ Files: weechat.png, bullet_green_8x8.png, bullet_yellow_8x8.png Files: application-exit.png, dialog-close.png, dialog-ok-apply.png, - document-save.png, edit-find.png, help-about.png, network-connect.png, - network-disconnect.png, preferences-other.png + dialog-warning.png, document-save.png, edit-find.png, help-about.png, + network-connect.png, network-disconnect.png, preferences-other.png Files come from Debian package "oxygen-icon-theme": diff --git a/qweechat/data/icons/dialog-warning.png b/qweechat/data/icons/dialog-warning.png new file mode 100644 index 0000000..43ca31a Binary files /dev/null and b/qweechat/data/icons/dialog-warning.png differ diff --git a/qweechat/network.py b/qweechat/network.py index 36cfb1b..28ef673 100644 --- a/qweechat/network.py +++ b/qweechat/network.py @@ -45,6 +45,27 @@ _PROTO_SYNC_CMDS = [ '' ] +STATUS_DISCONNECTED = 'disconnected' +STATUS_CONNECTING = 'connecting' +STATUS_CONNECTED = 'connected' + +NETWORK_STATUS = { + 'disconnected': { + 'label': 'Disconnected', + 'color': '#aa0000', + 'icon': 'dialog-close.png', + }, + 'connecting': { + 'label': 'Connecting…', + 'color': '#ff7f00', + 'icon': 'dialog-warning.png', + }, + 'connected': { + 'label': 'Connected', + 'color': 'green', + 'icon': 'dialog-ok-apply.png', + }, +} class Network(QtCore.QObject): """I/O with WeeChat/relay.""" @@ -54,9 +75,6 @@ class Network(QtCore.QObject): def __init__(self, *args): super().__init__(*args) - self.status_disconnected = 'disconnected' - self.status_connecting = 'connecting...' - self.status_connected = 'connected' self._server = None self._port = None self._ssl = None @@ -71,7 +89,7 @@ class Network(QtCore.QObject): def _socket_connected(self): """Slot: socket connected.""" - self.statusChanged.emit(self.status_connected, None) + self.statusChanged.emit(STATUS_CONNECTED, None) if self._password: self.send_to_weechat('\n'.join(_PROTO_INIT_CMD + _PROTO_SYNC_CMDS) % {'password': str(self._password), @@ -80,7 +98,7 @@ class Network(QtCore.QObject): def _socket_error(self, error): """Slot: socket error.""" self.statusChanged.emit( - self.status_disconnected, + STATUS_DISCONNECTED, 'Failed, error: %s' % self._socket.errorString()) def _socket_read(self): @@ -111,7 +129,7 @@ class Network(QtCore.QObject): self._port = None self._ssl = None self._password = "" - self.statusChanged.emit(self.status_disconnected, None) + self.statusChanged.emit(STATUS_DISCONNECTED, None) def is_connected(self): """Return True if the socket is connected, False otherwise.""" @@ -143,7 +161,7 @@ class Network(QtCore.QObject): self._socket.connectToHostEncrypted(self._server, self._port) else: self._socket.connectToHost(self._server, self._port) - self.statusChanged.emit(self.status_connecting, "") + self.statusChanged.emit(STATUS_CONNECTING, "") def disconnect_weechat(self): """Disconnect from WeeChat.""" @@ -153,7 +171,7 @@ class Network(QtCore.QObject): self.send_to_weechat('quit\n') self._socket.waitForBytesWritten(1000) else: - self.statusChanged.emit(self.status_disconnected, None) + self.statusChanged.emit(STATUS_DISCONNECTED, None) self._socket.abort() def send_to_weechat(self, message): @@ -168,14 +186,17 @@ class Network(QtCore.QObject): """Synchronize with WeeChat.""" self.send_to_weechat('\n'.join(_PROTO_SYNC_CMDS)) + def status_label(self, status): + """Return the label for a given status.""" + return NETWORK_STATUS.get(status, {}).get('label', '') + + def status_color(self, status): + """Return the color for a given status.""" + return NETWORK_STATUS.get(status, {}).get('color', 'black') + def status_icon(self, status): """Return the name of icon for a given status.""" - icon = { - self.status_disconnected: 'dialog-close.png', - self.status_connecting: 'dialog-close.png', - self.status_connected: 'dialog-ok-apply.png', - } - return icon.get(status, '') + return NETWORK_STATUS.get(status, {}).get('icon', '') def get_options(self): """Get connection options.""" diff --git a/qweechat/qweechat.py b/qweechat/qweechat.py index a7581b6..f8de4ea 100644 --- a/qweechat/qweechat.py +++ b/qweechat/qweechat.py @@ -41,7 +41,7 @@ from PySide6 import QtCore, QtGui, QtWidgets from qweechat import config from qweechat.weechat import protocol -from qweechat.network import Network +from qweechat.network import Network, STATUS_DISCONNECTED, NETWORK_STATUS from qweechat.connection import ConnectionDialog from qweechat.buffer import BufferListWidget, Buffer from qweechat.debug import DebugDialog @@ -154,7 +154,7 @@ class MainWindow(QtWidgets.QMainWindow): if hasattr(self.menu, 'setCornerWidget'): self.menu.setCornerWidget(self.network_status, QtCore.Qt.TopRightCorner) - self.network_status_set(self.network.status_disconnected) + self.network_status_set(STATUS_DISCONNECTED) # toolbar toolbar = self.addToolBar('toolBar') @@ -283,13 +283,9 @@ class MainWindow(QtWidgets.QMainWindow): def network_status_set(self, status): """Set the network status.""" pal = self.network_status.palette() - if status == self.network.status_connected: - pal.setColor(self.network_status.foregroundRole(), - QtGui.QColor('green')) - else: - pal.setColor(self.network_status.foregroundRole(), - QtGui.QColor('#aa0000')) - ssl = ' (SSL)' if status != self.network.status_disconnected \ + pal.setColor(self.network_status.foregroundRole(), + self.network.status_color(status)) + ssl = ' (SSL)' if status != STATUS_DISCONNECTED \ and self.network.is_ssl() else '' self.network_status.setPalette(pal) icon = self.network.status_icon(status) @@ -297,10 +293,10 @@ class MainWindow(QtWidgets.QMainWindow): self.network_status.setText( ' %s' % (resource_filename(__name__, 'data/icons/%s' % icon), - status.capitalize() + ssl)) + self.network.status_label(status) + ssl)) else: self.network_status.setText(status.capitalize()) - if status == self.network.status_disconnected: + if status == STATUS_DISCONNECTED: self.actions['connect'].setEnabled(True) self.actions['disconnect'].setEnabled(False) else: