diff --git a/qweechat/connection.py b/qweechat/connection.py
index 4529ae5..c1107f2 100644
--- a/qweechat/connection.py
+++ b/qweechat/connection.py
@@ -20,9 +20,6 @@
# along with QWeeChat. If not, see .
#
-# import qt_compat
-
-# QtGui = qt_compat.import_module('QtGui')
from PySide6 import QtGui, QtWidgets
diff --git a/qweechat/debug.py b/qweechat/debug.py
index d00c46b..b5f4d85 100644
--- a/qweechat/debug.py
+++ b/qweechat/debug.py
@@ -23,21 +23,21 @@
from qweechat.chat import ChatTextEdit
from qweechat.input import InputLineEdit
-from PySide6 import QtWidgets as QtGui
+from PySide6 import QtWidgets
-class DebugDialog(QtGui.QDialog):
+class DebugDialog(QtWidgets.QDialog):
"""Debug dialog."""
def __init__(self, *args):
- QtGui.QDialog.__init__(*(self,) + args)
+ QtWidgets.QDialog.__init__(*(self,) + args)
self.resize(640, 480)
self.setWindowTitle('Debug console')
self.chat = ChatTextEdit(debug=True)
self.input = InputLineEdit(self.chat)
- vbox = QtGui.QVBoxLayout()
+ vbox = QtWidgets.QVBoxLayout()
vbox.addWidget(self.chat)
vbox.addWidget(self.input)
diff --git a/qweechat/input.py b/qweechat/input.py
index 192e5d4..1ee7bd9 100644
--- a/qweechat/input.py
+++ b/qweechat/input.py
@@ -21,10 +21,10 @@
#
from PySide6 import QtCore
-from PySide6 import QtWidgets as QtGui
+from PySide6 import QtWidgets
-class InputLineEdit(QtGui.QLineEdit):
+class InputLineEdit(QtWidgets.QLineEdit):
"""Input line."""
bufferSwitchPrev = QtCore.Signal()
@@ -48,7 +48,7 @@ class InputLineEdit(QtGui.QLineEdit):
elif key == QtCore.Qt.Key_PageDown:
self.bufferSwitchNext.emit()
else:
- QtGui.QLineEdit.keyPressEvent(self, event)
+ QtWidgets.QLineEdit.keyPressEvent(self, event)
elif modifiers == QtCore.Qt.AltModifier:
if key in (QtCore.Qt.Key_Left, QtCore.Qt.Key_Up):
self.bufferSwitchPrev.emit()
@@ -63,7 +63,7 @@ class InputLineEdit(QtGui.QLineEdit):
elif key == QtCore.Qt.Key_End:
bar.setValue(bar.maximum())
else:
- QtGui.QLineEdit.keyPressEvent(self, event)
+ QtWidgets.QLineEdit.keyPressEvent(self, event)
elif key == QtCore.Qt.Key_PageUp:
bar.setValue(bar.value() - bar.pageStep())
elif key == QtCore.Qt.Key_PageDown:
@@ -73,7 +73,7 @@ class InputLineEdit(QtGui.QLineEdit):
elif key == QtCore.Qt.Key_Down:
self._history_navigate(1)
else:
- QtGui.QLineEdit.keyPressEvent(self, event)
+ QtWidgets.QLineEdit.keyPressEvent(self, event)
def _input_return_pressed(self):
self._history.append(self.text())
diff --git a/qweechat/network.py b/qweechat/network.py
index fe64d0f..952c02a 100644
--- a/qweechat/network.py
+++ b/qweechat/network.py
@@ -21,9 +21,11 @@
#
import struct
-from qweechat import config
+
from PySide6 import QtCore, QtNetwork
-from PySide6.QtCore import Signal
+
+from qweechat import config
+
_PROTO_INIT_CMD = ['init password=%(password)s']
@@ -46,8 +48,8 @@ _PROTO_SYNC_CMDS = [
class Network(QtCore.QObject):
"""I/O with WeeChat/relay."""
- statusChanged = Signal(str, str)
- messageFromWeechat = Signal(QtCore.QByteArray)
+ statusChanged = QtCore.Signal(str, str)
+ messageFromWeechat = QtCore.Signal(QtCore.QByteArray)
def __init__(self, *args):
super().__init__(*args)
@@ -69,7 +71,6 @@ class Network(QtCore.QObject):
def _socket_connected(self):
"""Slot: socket connected."""
self.statusChanged.emit(self.status_connected, None)
- print('Connected, now sending password.')
if self._password:
self.send_to_weechat('\n'.join(_PROTO_INIT_CMD + _PROTO_SYNC_CMDS)
% {'password': str(self._password),
@@ -122,7 +123,6 @@ class Network(QtCore.QObject):
def connect_weechat(self, server, port, ssl, password, lines):
"""Connect to WeeChat."""
self._server = server
- print(f'Connecting to server {self._server}')
try:
self._port = int(port)
except ValueError:
@@ -142,7 +142,6 @@ class Network(QtCore.QObject):
self._socket.connectToHostEncrypted(self._server, self._port)
else:
self._socket.connectToHost(self._server, self._port)
- print('Got SSL connection')
self.statusChanged.emit(self.status_connecting, "")
def disconnect_weechat(self):
diff --git a/qweechat/qweechat.py b/qweechat/qweechat.py
index 76db5a4..89d43c5 100644
--- a/qweechat/qweechat.py
+++ b/qweechat/qweechat.py
@@ -36,7 +36,10 @@ 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
+
+from PySide6.QtWidgets import QApplication
+from PySide6 import QtGui, QtWidgets, QtCore
+
from qweechat import config
from qweechat.weechat import protocol
from qweechat.network import Network
@@ -46,9 +49,6 @@ from qweechat.debug import DebugDialog
from qweechat.about import AboutDialog
from qweechat.version import qweechat_version
-from PySide6.QtWidgets import QApplication
-from PySide6 import QtGui, QtWidgets, QtCore
-
# QtCore = qt_compat.import_module('QtCore')
# QtGui = qt_compat.import_module('QtGui')
@@ -315,11 +315,11 @@ class MainWindow(QtWidgets.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.data(), 20)),
+ forcecolor='#008800')
try:
proto = protocol.Protocol()
message = proto.decode(message.data())
@@ -517,11 +517,6 @@ class MainWindow(QtWidgets.QMainWindow):
self.list_buffers.insertItem(index, '%s'
% (buf.data['local_variables']['name']))
self.stacked_buffers.insertWidget(index, buf.widget)
- self._reorder_buffers()
-
- def _reorder_buffers(self):
- """Order buffers by server."""
- pass
def remove_buffer(self, index):
"""Remove a buffer."""
diff --git a/qweechat/weechat/testproto.py.bak b/qweechat/weechat/testproto.py.bak
deleted file mode 100644
index af8a396..0000000
--- a/qweechat/weechat/testproto.py.bak
+++ /dev/null
@@ -1,253 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# testproto.py - command-line program for testing WeeChat/relay protocol
-#
-# Copyright (C) 2013-2021 Sébastien Helleu
-#
-# This file is part of QWeeChat, a Qt remote GUI for WeeChat.
-#
-# QWeeChat is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# QWeeChat is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with QWeeChat. If not, see .
-#
-
-"""
-Command-line program for testing WeeChat/relay protocol.
-"""
-
-from __future__ import print_function
-
-import argparse
-import os
-import select
-import shlex
-import socket
-import struct
-import sys
-import time
-import traceback
-
-import protocol # WeeChat/relay protocol
-# from .. version import qweechat_version
-qweechat_version = '1.1'
-
-NAME = 'qweechat-testproto'
-
-
-class TestProto(object):
- """Test of WeeChat/relay protocol."""
-
- def __init__(self, args):
- self.args = args
- self.sock = None
- self.has_quit = False
- self.address = '{self.args.hostname}/{self.args.port} ' \
- '(IPv{0})'.format(6 if self.args.ipv6 else 4, self=self)
-
- def connect(self):
- """
- Connect to WeeChat/relay.
- Return True if OK, False if error.
- """
- inet = socket.AF_INET6 if self.args.ipv6 else socket.AF_INET
- try:
- self.sock = socket.socket(inet, socket.SOCK_STREAM)
- self.sock.connect((self.args.hostname, self.args.port))
- except: # noqa: E722
- if self.sock:
- self.sock.close()
- print('Failed to connect to', self.address)
- return False
- print('Connected to', self.address)
- return True
-
- def send(self, messages):
- """
- Send a text message to WeeChat/relay.
- Return True if OK, False if error.
- """
- try:
- for msg in messages.split('\n'):
- if msg == 'quit':
- self.has_quit = True
- self.sock.sendall(msg + '\n')
- print('\x1b[33m<-- ' + msg + '\x1b[0m')
- except: # noqa: E722
- traceback.print_exc()
- print('Failed to send message')
- return False
- return True
-
- def decode(self, message):
- """
- Decode a binary message received from WeeChat/relay.
- Return True if OK, False if error.
- """
- try:
- proto = protocol.Protocol()
- msgd = proto.decode(message,
- separator='\n' if self.args.debug > 0
- else ', ')
- print('')
- if self.args.debug >= 2 and msgd.uncompressed:
- # display raw message
- print('\x1b[32m--> message uncompressed ({0} bytes):\n'
- '{1}\x1b[0m'
- ''.format(msgd.size_uncompressed,
- protocol.hex_and_ascii(msgd.uncompressed, 20)))
- # display decoded message
- print('\x1b[32m--> {0}\x1b[0m'.format(msgd))
- except: # noqa: E722
- traceback.print_exc()
- print('Error while decoding message from WeeChat')
- return False
- return True
-
- def send_stdin(self):
- """
- Send commands from standard input if some data is available.
- Return True if OK (it's OK if stdin has no commands),
- False if error.
- """
- inr = select.select([sys.stdin], [], [], 0)[0]
- if inr:
- data = os.read(sys.stdin.fileno(), 4096)
- if data:
- if not self.send(data.strip()):
- # self.sock.close()
- return False
- # open stdin to read user commands
- sys.stdin = open('/dev/tty')
- return True
-
- def mainloop(self):
- """
- Main loop: read keyboard, send commands, read socket,
- decode/display binary messages received from WeeChat/relay.
- Return 0 if OK, 4 if send error, 5 if decode error.
- """
- if self.has_quit:
- return 0
- message = ''
- recvbuf = ''
- prompt = '\x1b[36mrelay> \x1b[0m'
- sys.stdout.write(prompt)
- sys.stdout.flush()
- try:
- while not self.has_quit:
- inr = select.select([sys.stdin, self.sock], [], [], 1)[0]
- for _file in inr:
- if _file == sys.stdin:
- buf = os.read(_file.fileno(), 4096)
- if buf:
- message += buf
- if '\n' in message:
- messages = message.split('\n')
- msgsent = '\n'.join(messages[:-1])
- if msgsent and not self.send(msgsent):
- return 4
- message = messages[-1]
- sys.stdout.write(prompt + message)
- sys.stdout.flush()
- else:
- buf = _file.recv(4096)
- if buf:
- recvbuf += buf
- while len(recvbuf) >= 4:
- remainder = None
- length = struct.unpack('>i', recvbuf[0:4])[0]
- if len(recvbuf) < length:
- # partial message, just wait for the
- # end of message
- break
- # more than one message?
- if length < len(recvbuf):
- # save beginning of another message
- remainder = recvbuf[length:]
- recvbuf = recvbuf[0:length]
- if not self.decode(recvbuf):
- return 5
- if remainder:
- recvbuf = remainder
- else:
- recvbuf = ''
- sys.stdout.write(prompt + message)
- sys.stdout.flush()
- except: # noqa: E722
- traceback.print_exc()
- self.send('quit')
- return 0
-
- def __del__(self):
- print('Closing connection with', self.address)
- time.sleep(0.5)
- self.sock.close()
-
-
-def main():
- """Main function."""
- # parse command line arguments
- parser = argparse.ArgumentParser(
- formatter_class=argparse.RawDescriptionHelpFormatter,
- fromfile_prefix_chars='@',
- description='Command-line program for testing WeeChat/relay protocol.',
- epilog='''
-Environment variable "QWEECHAT_PROTO_OPTIONS" can be set with default options.
-Argument "@file.txt" can be used to read default options in a file.
-
-Some commands can be piped to the script, for example:
- echo "init password=xxxx" | {name} localhost 5000
- {name} localhost 5000 < commands.txt
-
-The script returns:
- 0: OK
- 2: wrong arguments (command line)
- 3: connection error
- 4: send error (message sent to WeeChat)
- 5: decode error (message received from WeeChat)
-'''.format(name=NAME))
- parser.add_argument('-6', '--ipv6', action='store_true',
- help='connect using IPv6')
- parser.add_argument('-d', '--debug', action='count', default=0,
- help='debug mode: long objects view '
- '(-dd: display raw messages)')
- parser.add_argument('-v', '--version', action='version',
- version=qweechat_version)
- parser.add_argument('hostname',
- help='hostname (or IP address) of machine running '
- 'WeeChat/relay')
- parser.add_argument('port', type=int,
- help='port of machine running WeeChat/relay')
- if len(sys.argv) == 1:
- parser.print_help()
- sys.exit(0)
- _args = parser.parse_args(
- shlex.split(os.getenv('QWEECHAT_PROTO_OPTIONS') or '') + sys.argv[1:])
-
- test = TestProto(_args)
-
- # connect to WeeChat/relay
- if not test.connect():
- sys.exit(3)
-
- # send commands from standard input if some data is available
- if not test.send_stdin():
- sys.exit(4)
-
- # main loop (wait commands, display messages received)
- returncode = test.mainloop()
- del test
- sys.exit(returncode)
-
-
-if __name__ == "__main__":
- main()