]> jfr.im git - irc/weechat/qweechat.git/blobdiff - qweechat/qweechat.py
Migration to Qt6 using PySide6 and Python 3.
[irc/weechat/qweechat.git] / qweechat / qweechat.py
index 49e6b91ab1972c3987ee120f95fdbe02e027d87f..33e210abcab4712e6beb3a137083867cd856ca3b 100644 (file)
@@ -36,7 +36,7 @@ It requires requires WeeChat 0.3.7 or newer, running on local or remote host.
 import sys
 import traceback
 from pkg_resources import resource_filename
-import qt_compat
+import qt_compat
 import config
 import weechat.protocol as protocol
 from network import Network
@@ -46,8 +46,14 @@ from debug import DebugDialog
 from about import AboutDialog
 from version import qweechat_version
 
-QtCore = qt_compat.import_module('QtCore')
-QtGui = qt_compat.import_module('QtGui')
+from PySide6.QtWidgets import (
+    QApplication, QLabel, QPushButton, QVBoxLayout, QWidget)
+from PySide6.QtCore import Qt, Slot
+from PySide6 import QtGui, QtWidgets, QtCore
+
+
+# QtCore = qt_compat.import_module('QtCore')
+# QtGui = qt_compat.import_module('QtGui')
 
 NAME = 'QWeeChat'
 AUTHOR = 'Sébastien Helleu'
@@ -58,11 +64,11 @@ WEECHAT_SITE = 'https://weechat.org/'
 DEBUG_NUM_LINES = 50
 
 
-class MainWindow(QtGui.QMainWindow):
+class MainWindow(QtWidgets.QMainWindow):
     """Main window."""
 
     def __init__(self, *args):
-        QtGui.QMainWindow.__init__(*(self,) + args)
+        super().__init__()
 
         self.config = config.read()
 
@@ -87,11 +93,11 @@ class MainWindow(QtGui.QMainWindow):
 
         # default buffer
         self.buffers = [Buffer()]
-        self.stacked_buffers = QtGui.QStackedWidget()
+        self.stacked_buffers = QtWidgets.QStackedWidget()
         self.stacked_buffers.addWidget(self.buffers[0].widget)
 
         # splitter with buffers + chat/input
-        splitter = QtGui.QSplitter()
+        splitter = QtWidgets.QSplitter()
         splitter.addWidget(self.list_buffers)
         splitter.addWidget(self.stacked_buffers)
 
@@ -146,7 +152,7 @@ class MainWindow(QtGui.QMainWindow):
         menu_window.addAction(self.actions['debug'])
         menu_help = self.menu.addMenu('&Help')
         menu_help.addAction(self.actions['about'])
-        self.network_status = QtGui.QLabel()
+        self.network_status = QtWidgets.QLabel()
         self.network_status.setFixedHeight(20)
         self.network_status.setFixedWidth(200)
         self.network_status.setContentsMargins(0, 0, 10, 0)
@@ -312,24 +318,24 @@ class MainWindow(QtGui.QMainWindow):
 
     def _network_weechat_msg(self, message):
         """Called when a message is received from WeeChat."""
-        self.debug_display(0, '==>',
-                           'message (%d bytes):\n%s'
-                           % (len(message),
-                              protocol.hex_and_ascii(message, 20)),
-                           forcecolor='#008800')
+        self.debug_display(0, '==>',
+                           'message (%d bytes):\n%s'
+                           % (len(message),
+                              protocol.hex_and_ascii(message, 20)),
+                           forcecolor='#008800')
         try:
             proto = protocol.Protocol()
-            message = proto.decode(str(message))
+            message = proto.decode(message.data())
             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')
+                                forcecolor='#008800')
             self.debug_display(0, '', 'Message: %s' % message)
             self.parse_message(message)
-        except:  # noqa: E722
+        except Exception:  # noqa: E722
             print('Error while decoding message from WeeChat:\n%s'
                   % traceback.format_exc())
             self.network.disconnect_weechat()
@@ -339,6 +345,7 @@ class MainWindow(QtGui.QMainWindow):
         for obj in message.objects:
             if obj.objtype != 'hda' or obj.value['path'][-1] != 'buffer':
                 continue
+            print('listbuffers object', obj.objtype, obj.value['path'])
             self.list_buffers.clear()
             while self.stacked_buffers.count() > 0:
                 buf = self.stacked_buffers.widget(0)
@@ -346,6 +353,7 @@ class MainWindow(QtGui.QMainWindow):
             self.buffers = []
             for item in obj.value['items']:
                 buf = self.create_buffer(item)
+                print(f'Creating buffer for {item}')
                 self.insert_buffer(len(self.buffers), buf)
             self.list_buffers.setCurrentRow(0)
             self.buffers[0].widget.input.setFocus()
@@ -477,6 +485,7 @@ class MainWindow(QtGui.QMainWindow):
 
     def parse_message(self, message):
         """Parse a WeeChat message."""
+        print(f'message.msgid = {message.msgid}')
         if message.msgid.startswith('debug'):
             self.debug_display(0, '', '(debug message, ignored)')
         elif message.msgid == 'listbuffers':
@@ -495,6 +504,8 @@ class MainWindow(QtGui.QMainWindow):
             self.network.desync_weechat()
         elif message.msgid == '_upgrade_ended':
             self.network.sync_weechat()
+        else:
+            print(f"Unknown message with id {message.msgid}")
 
     def create_buffer(self, item):
         """Create a new buffer."""
@@ -511,7 +522,7 @@ class MainWindow(QtGui.QMainWindow):
         self.buffers.insert(index, buf)
         self.list_buffers.insertItem(index, '%d. %s'
                                      % (buf.data['number'],
-                                        buf.data['full_name'].decode('utf-8')))
+                                        buf.data['full_name']))
         self.stacked_buffers.insertWidget(index, buf.widget)
 
     def remove_buffer(self, index):
@@ -544,12 +555,13 @@ class MainWindow(QtGui.QMainWindow):
         if self.debug_dialog:
             self.debug_dialog.close()
         config.write(self.config)
-        QtGui.QMainWindow.closeEvent(self, event)
+        QtWidgets.QMainWindow.closeEvent(self, event)
 
 
-app = QtGui.QApplication(sys.argv)
-app.setStyle(QtGui.QStyleFactory.create('Cleanlooks'))
+app = QApplication(sys.argv)
+app.setStyle(QtWidgets.QStyleFactory.create('Cleanlooks'))
 app.setWindowIcon(QtGui.QIcon(
-    resource_filename(__name__, 'data/icons/weechat.png')))
+     resource_filename(__name__, 'data/icons/weechat.png')))
 main = MainWindow()
+main.show()
 sys.exit(app.exec_())