X-Git-Url: https://jfr.im/git/irc/weechat/qweechat.git/blobdiff_plain/3a5ec0c16368a796ebf9211dfe0e3f3f69dd74dd..e836cfb0f6b5e09e4d050d3c2e795d1577c5ea62:/src/qweechat/qweechat.py diff --git a/src/qweechat/qweechat.py b/src/qweechat/qweechat.py index e392b97..61d7fcf 100755 --- a/src/qweechat/qweechat.py +++ b/src/qweechat/qweechat.py @@ -1,7 +1,9 @@ #!/usr/bin/python # -*- coding: utf-8 -*- # -# Copyright (C) 2011 Sebastien Helleu +# qweechat.py - WeeChat remote GUI using Qt toolkit +# +# Copyright (C) 2011-2013 Sebastien Helleu # # This file is part of QWeeChat, a Qt remote GUI for WeeChat. # @@ -20,8 +22,7 @@ # # -# QWeeChat - WeeChat remote GUI using Qt toolkit. -# (this script requires WeeChat 0.3.7 or newer, running on local or remote host) +# This script requires WeeChat 0.3.7 or newer, running on local or remote host. # # History: # @@ -42,7 +43,7 @@ from debug import DebugDialog from about import AboutDialog NAME = 'QWeeChat' -VERSION = '0.1-dev' +VERSION = '0.0.1-dev' AUTHOR = 'Sébastien Helleu' AUTHOR_MAIL= 'flashcode@flashtux.org' WEECHAT_SITE = 'http://www.weechat.org/' @@ -55,7 +56,7 @@ class MainWindow(QtGui.QMainWindow): """Main window.""" def __init__(self, *args): - apply(QtGui.QMainWindow.__init__, (self,) + args) + QtGui.QMainWindow.__init__(*(self,) + args) self.config = config.read() @@ -98,7 +99,7 @@ class MainWindow(QtGui.QMainWindow): 'quit' : ['application-exit.png', 'Quit application', 'Ctrl+Q', self.close], } self.actions = {} - for name, action in actions_def.iteritems(): + for name, action in list(actions_def.items()): self.actions[name] = QtGui.QAction(QtGui.QIcon('data/icons/%s' % action[0]), name.capitalize(), self) self.actions[name].setStatusTip(action[1]) self.actions[name].setShortcut(action[2]) @@ -139,6 +140,7 @@ class MainWindow(QtGui.QMainWindow): if self.config.getboolean('relay', 'autoconnect'): self.network.connect_weechat(self.config.get('relay', 'server'), self.config.get('relay', 'port'), + self.config.get('relay', 'ssl') == 'on', self.config.get('relay', 'password')) self.show() @@ -187,7 +189,9 @@ class MainWindow(QtGui.QMainWindow): def open_about_dialog(self): messages = ['%s %s' % (NAME, VERSION), - '© 2011 %s <%s>' % (AUTHOR, AUTHOR_MAIL, AUTHOR_MAIL), + '© 2011-2013 %s <%s>' % (AUTHOR, AUTHOR_MAIL, AUTHOR_MAIL), + '', + 'Running with %s' % ('PySide' if qt_compat.uses_pyside else 'PyQt4'), '', 'WeeChat site: %s' % (WEECHAT_SITE, WEECHAT_SITE), ''] @@ -195,7 +199,7 @@ class MainWindow(QtGui.QMainWindow): def open_connection_dialog(self): values = {} - for option in ('server', 'port', 'password'): + for option in ('server', 'port', 'ssl', 'password'): values[option] = self.config.get('relay', option) self.connection_dialog = ConnectionDialog(values, self) self.connection_dialog.dialog_buttons.accepted.connect(self.connect_weechat) @@ -203,6 +207,7 @@ class MainWindow(QtGui.QMainWindow): def connect_weechat(self): self.network.connect_weechat(self.connection_dialog.fields['server'].text(), self.connection_dialog.fields['port'].text(), + self.connection_dialog.fields['ssl'].isChecked(), self.connection_dialog.fields['password'].text()) self.connection_dialog.close() @@ -214,14 +219,15 @@ class MainWindow(QtGui.QMainWindow): def network_status_set(self, status, extra): pal = self.network_status.palette() - if self.network.is_connected(): + 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 and self.network.is_ssl() else '' self.network_status.setPalette(pal) icon = self.network.status_icon(status) if icon: - self.network_status.setText(' %s' % (icon, status.capitalize())) + self.network_status.setText(' %s' % (icon, status.capitalize() + ssl)) else: self.network_status.setText(status.capitalize()) if status == self.network.status_disconnected: @@ -236,16 +242,20 @@ class MainWindow(QtGui.QMainWindow): 'message (%d bytes):\n%s' % (len(message), protocol.hex_and_ascii(message, 20)), forcecolor='#008800') - proto = protocol.Protocol() - message = proto.decode(str(message)) - if message.uncompressed: - self.debug_display(0, '==>', - 'message uncompressed (%d bytes):\n%s' - % (message.size_uncompressed, - protocol.hex_and_ascii(message.uncompressed, 20)), - forcecolor='#008800') - self.debug_display(0, '', 'Message: %s' % message) - self.parse_message(message) + try: + proto = protocol.Protocol() + message = proto.decode(str(message)) + if message.uncompressed: + self.debug_display(0, '==>', + 'message uncompressed (%d bytes):\n%s' + % (message.size_uncompressed, + protocol.hex_and_ascii(message.uncompressed, 20)), + forcecolor='#008800') + self.debug_display(0, '', 'Message: %s' % message) + self.parse_message(message) + except: + print("Error while decoding message from WeeChat") + self.network.disconnect_weechat() def parse_message(self, message): if message.msgid.startswith('debug'): @@ -303,7 +313,9 @@ class MainWindow(QtGui.QMainWindow): index = [i for i, b in enumerate(self.buffers) if b.pointer() == item['__path'][0]] if index: index = index[0] - if message.msgid in ('_buffer_moved', '_buffer_merged'): + if message.msgid == '_buffer_type_changed': + self.buffers[index].data['type'] = item['type'] + elif message.msgid in ('_buffer_moved', '_buffer_merged', '_buffer_unmerged'): buf = self.buffers[index] buf.data['number'] = item['number'] self.remove_buffer(index) @@ -320,6 +332,10 @@ class MainWindow(QtGui.QMainWindow): self.buffers[index].update_prompt() elif message.msgid == '_buffer_closing': self.remove_buffer(index) + elif message.msgid == '_upgrade': + self.network.desync_weechat() + elif message.msgid == '_upgrade_ended': + self.network.sync_weechat() def create_buffer(self, item): buf = Buffer(item)