''
]
+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."""
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
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),
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):
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."""
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."""
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):
"""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."""
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
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')
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)
self.network_status.setText(
'<img src="%s"> %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: