More fixes.

- Cleanup some un-used comments.
- Use QtWidgets instead of renaming it to QtGui
- Remove print statements.
- Fix the debug print of data from weechat.
- Delete the backup file added by mistake.
This commit is contained in:
Abhilash Raj 2021-06-05 10:09:48 -07:00
parent e7b0dbced5
commit 8e15c19fb2
No known key found for this signature in database
GPG Key ID: 9D9B2BA061D0A67C
6 changed files with 24 additions and 286 deletions

View File

@ -20,9 +20,6 @@
# along with QWeeChat. If not, see <http://www.gnu.org/licenses/>. # along with QWeeChat. If not, see <http://www.gnu.org/licenses/>.
# #
# import qt_compat
# QtGui = qt_compat.import_module('QtGui')
from PySide6 import QtGui, QtWidgets from PySide6 import QtGui, QtWidgets

View File

@ -23,21 +23,21 @@
from qweechat.chat import ChatTextEdit from qweechat.chat import ChatTextEdit
from qweechat.input import InputLineEdit 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.""" """Debug dialog."""
def __init__(self, *args): def __init__(self, *args):
QtGui.QDialog.__init__(*(self,) + args) QtWidgets.QDialog.__init__(*(self,) + args)
self.resize(640, 480) self.resize(640, 480)
self.setWindowTitle('Debug console') self.setWindowTitle('Debug console')
self.chat = ChatTextEdit(debug=True) self.chat = ChatTextEdit(debug=True)
self.input = InputLineEdit(self.chat) self.input = InputLineEdit(self.chat)
vbox = QtGui.QVBoxLayout() vbox = QtWidgets.QVBoxLayout()
vbox.addWidget(self.chat) vbox.addWidget(self.chat)
vbox.addWidget(self.input) vbox.addWidget(self.input)

View File

@ -21,10 +21,10 @@
# #
from PySide6 import QtCore from PySide6 import QtCore
from PySide6 import QtWidgets as QtGui from PySide6 import QtWidgets
class InputLineEdit(QtGui.QLineEdit): class InputLineEdit(QtWidgets.QLineEdit):
"""Input line.""" """Input line."""
bufferSwitchPrev = QtCore.Signal() bufferSwitchPrev = QtCore.Signal()
@ -48,7 +48,7 @@ class InputLineEdit(QtGui.QLineEdit):
elif key == QtCore.Qt.Key_PageDown: elif key == QtCore.Qt.Key_PageDown:
self.bufferSwitchNext.emit() self.bufferSwitchNext.emit()
else: else:
QtGui.QLineEdit.keyPressEvent(self, event) QtWidgets.QLineEdit.keyPressEvent(self, event)
elif modifiers == QtCore.Qt.AltModifier: elif modifiers == QtCore.Qt.AltModifier:
if key in (QtCore.Qt.Key_Left, QtCore.Qt.Key_Up): if key in (QtCore.Qt.Key_Left, QtCore.Qt.Key_Up):
self.bufferSwitchPrev.emit() self.bufferSwitchPrev.emit()
@ -63,7 +63,7 @@ class InputLineEdit(QtGui.QLineEdit):
elif key == QtCore.Qt.Key_End: elif key == QtCore.Qt.Key_End:
bar.setValue(bar.maximum()) bar.setValue(bar.maximum())
else: else:
QtGui.QLineEdit.keyPressEvent(self, event) QtWidgets.QLineEdit.keyPressEvent(self, event)
elif key == QtCore.Qt.Key_PageUp: elif key == QtCore.Qt.Key_PageUp:
bar.setValue(bar.value() - bar.pageStep()) bar.setValue(bar.value() - bar.pageStep())
elif key == QtCore.Qt.Key_PageDown: elif key == QtCore.Qt.Key_PageDown:
@ -73,7 +73,7 @@ class InputLineEdit(QtGui.QLineEdit):
elif key == QtCore.Qt.Key_Down: elif key == QtCore.Qt.Key_Down:
self._history_navigate(1) self._history_navigate(1)
else: else:
QtGui.QLineEdit.keyPressEvent(self, event) QtWidgets.QLineEdit.keyPressEvent(self, event)
def _input_return_pressed(self): def _input_return_pressed(self):
self._history.append(self.text()) self._history.append(self.text())

View File

@ -21,9 +21,11 @@
# #
import struct import struct
from qweechat import config
from PySide6 import QtCore, QtNetwork from PySide6 import QtCore, QtNetwork
from PySide6.QtCore import Signal
from qweechat import config
_PROTO_INIT_CMD = ['init password=%(password)s'] _PROTO_INIT_CMD = ['init password=%(password)s']
@ -46,8 +48,8 @@ _PROTO_SYNC_CMDS = [
class Network(QtCore.QObject): class Network(QtCore.QObject):
"""I/O with WeeChat/relay.""" """I/O with WeeChat/relay."""
statusChanged = Signal(str, str) statusChanged = QtCore.Signal(str, str)
messageFromWeechat = Signal(QtCore.QByteArray) messageFromWeechat = QtCore.Signal(QtCore.QByteArray)
def __init__(self, *args): def __init__(self, *args):
super().__init__(*args) super().__init__(*args)
@ -69,7 +71,6 @@ class Network(QtCore.QObject):
def _socket_connected(self): def _socket_connected(self):
"""Slot: socket connected.""" """Slot: socket connected."""
self.statusChanged.emit(self.status_connected, None) self.statusChanged.emit(self.status_connected, None)
print('Connected, now sending password.')
if self._password: if self._password:
self.send_to_weechat('\n'.join(_PROTO_INIT_CMD + _PROTO_SYNC_CMDS) self.send_to_weechat('\n'.join(_PROTO_INIT_CMD + _PROTO_SYNC_CMDS)
% {'password': str(self._password), % {'password': str(self._password),
@ -122,7 +123,6 @@ class Network(QtCore.QObject):
def connect_weechat(self, server, port, ssl, password, lines): def connect_weechat(self, server, port, ssl, password, lines):
"""Connect to WeeChat.""" """Connect to WeeChat."""
self._server = server self._server = server
print(f'Connecting to server {self._server}')
try: try:
self._port = int(port) self._port = int(port)
except ValueError: except ValueError:
@ -142,7 +142,6 @@ class Network(QtCore.QObject):
self._socket.connectToHostEncrypted(self._server, self._port) self._socket.connectToHostEncrypted(self._server, self._port)
else: else:
self._socket.connectToHost(self._server, self._port) self._socket.connectToHost(self._server, self._port)
print('Got SSL connection')
self.statusChanged.emit(self.status_connecting, "") self.statusChanged.emit(self.status_connecting, "")
def disconnect_weechat(self): def disconnect_weechat(self):

View File

@ -36,7 +36,10 @@ It requires requires WeeChat 0.3.7 or newer, running on local or remote host.
import sys import sys
import traceback import traceback
from pkg_resources import resource_filename 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 import config
from qweechat.weechat import protocol from qweechat.weechat import protocol
from qweechat.network import Network from qweechat.network import Network
@ -46,9 +49,6 @@ from qweechat.debug import DebugDialog
from qweechat.about import AboutDialog from qweechat.about import AboutDialog
from qweechat.version import qweechat_version from qweechat.version import qweechat_version
from PySide6.QtWidgets import QApplication
from PySide6 import QtGui, QtWidgets, QtCore
# QtCore = qt_compat.import_module('QtCore') # QtCore = qt_compat.import_module('QtCore')
# QtGui = qt_compat.import_module('QtGui') # QtGui = qt_compat.import_module('QtGui')
@ -315,11 +315,11 @@ class MainWindow(QtWidgets.QMainWindow):
def _network_weechat_msg(self, message): def _network_weechat_msg(self, message):
"""Called when a message is received from WeeChat.""" """Called when a message is received from WeeChat."""
# self.debug_display(0, '==>', self.debug_display(0, '==>',
# 'message (%d bytes):\n%s' 'message (%d bytes):\n%s'
# % (len(message), % (len(message),
# protocol.hex_and_ascii(message, 20)), protocol.hex_and_ascii(message.data(), 20)),
# forcecolor='#008800') forcecolor='#008800')
try: try:
proto = protocol.Protocol() proto = protocol.Protocol()
message = proto.decode(message.data()) message = proto.decode(message.data())
@ -517,11 +517,6 @@ class MainWindow(QtWidgets.QMainWindow):
self.list_buffers.insertItem(index, '%s' self.list_buffers.insertItem(index, '%s'
% (buf.data['local_variables']['name'])) % (buf.data['local_variables']['name']))
self.stacked_buffers.insertWidget(index, buf.widget) self.stacked_buffers.insertWidget(index, buf.widget)
self._reorder_buffers()
def _reorder_buffers(self):
"""Order buffers by server."""
pass
def remove_buffer(self, index): def remove_buffer(self, index):
"""Remove a buffer.""" """Remove a buffer."""

View File

@ -1,253 +0,0 @@
# -*- coding: utf-8 -*-
#
# testproto.py - command-line program for testing WeeChat/relay protocol
#
# Copyright (C) 2013-2021 Sébastien Helleu <flashcode@flashtux.org>
#
# 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 <http://www.gnu.org/licenses/>.
#
"""
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()