]> jfr.im git - irc/weechat/qweechat.git/commitdiff
Add option relay.lines to limit the number of lines received on connection (default...
authorSebastien Helleu <redacted>
Fri, 7 Feb 2014 12:03:15 +0000 (13:03 +0100)
committerSebastien Helleu <redacted>
Fri, 7 Feb 2014 12:03:15 +0000 (13:03 +0100)
src/qweechat/config.py
src/qweechat/connection.py
src/qweechat/network.py
src/qweechat/qweechat.py

index 749597a9e9f063ed484950a917d537d34f569dcc..6c01cc938153d9219c345890d14fba71f95ba9c1 100644 (file)
@@ -27,12 +27,15 @@ import weechat.color as color
 CONFIG_DIR = '%s/.qweechat' % os.getenv('HOME')
 CONFIG_FILENAME = '%s/qweechat.conf' % CONFIG_DIR
 
+CONFIG_DEFAULT_RELAY_LINES = 50
+
 CONFIG_DEFAULT_SECTIONS = ('relay', 'look', 'color')
 CONFIG_DEFAULT_OPTIONS = (('relay.server', ''),
                           ('relay.port', ''),
                           ('relay.ssl', 'off'),
                           ('relay.password', ''),
                           ('relay.autoconnect', 'off'),
+                          ('relay.lines', str(CONFIG_DEFAULT_RELAY_LINES)),
                           ('look.debug', 'off'),
                           ('look.statusbar', 'off'))
 
index a7e0b04e54cfb9a6995583faddf249b040d53090..cdf30c39a5e6a57d364f81860a78f5fe0a8f99f5 100644 (file)
@@ -26,7 +26,7 @@ QtGui = qt_compat.import_module('QtGui')
 
 
 class ConnectionDialog(QtGui.QDialog):
-    """Connection window with server/port/password fields."""
+    """Connection window."""
 
     def __init__(self, values, *args):
         QtGui.QDialog.__init__(*(self,) + args)
@@ -37,12 +37,16 @@ class ConnectionDialog(QtGui.QDialog):
         grid.setSpacing(10)
 
         self.fields = {}
-        for y, field in enumerate(('server', 'port', 'password')):
+        for y, field in enumerate(('server', 'port', 'password', 'lines')):
             grid.addWidget(QtGui.QLabel(field.capitalize()), y, 0)
             lineEdit = QtGui.QLineEdit()
             lineEdit.setFixedWidth(200)
             if field == 'password':
                 lineEdit.setEchoMode(QtGui.QLineEdit.Password)
+            if field == 'lines':
+                validator = QtGui.QIntValidator(0, 2147483647, self)
+                lineEdit.setValidator(validator)
+                lineEdit.setFixedWidth(80)
             lineEdit.insert(self.values[field])
             grid.addWidget(lineEdit, y, 1)
             self.fields[field] = lineEdit
@@ -56,6 +60,6 @@ class ConnectionDialog(QtGui.QDialog):
         self.dialog_buttons.setStandardButtons(QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel)
         self.dialog_buttons.rejected.connect(self.close)
 
-        grid.addWidget(self.dialog_buttons, 3, 0, 1, 2)
+        grid.addWidget(self.dialog_buttons, 4, 0, 1, 2)
         self.setLayout(grid)
         self.show()
index 2c3c180189abd35329407f4b368057a51a534707..8ae1622d2ed11962ef6317e7e7a42984728119d4 100644 (file)
@@ -25,10 +25,11 @@ import struct
 import qt_compat
 QtCore = qt_compat.import_module('QtCore')
 QtNetwork = qt_compat.import_module('QtNetwork')
+import config
 
 _PROTO_INIT_CMD  = ['init password=%(password)s']
 _PROTO_SYNC_CMDS = ['(listbuffers) hdata buffer:gui_buffers(*) number,full_name,short_name,type,nicklist,title,local_variables',
-                    '(listlines) hdata buffer:gui_buffers(*)/own_lines/first_line(*)/data date,displayed,prefix,message',
+                    '(listlines) hdata buffer:gui_buffers(*)/own_lines/last_line(-%(lines)d)/data date,displayed,prefix,message',
                     '(nicklist) nicklist',
                     'sync',
                     '']
@@ -49,6 +50,7 @@ class Network(QtCore.QObject):
         self._port = None
         self._ssl = None
         self._password = None
+        self._lines = config.CONFIG_DEFAULT_RELAY_LINES
         self._buffer = QtCore.QByteArray()
         self._socket = QtNetwork.QSslSocket()
         self._socket.connected.connect(self._socket_connected)
@@ -60,7 +62,9 @@ class Network(QtCore.QObject):
         """Slot: socket connected."""
         self.statusChanged.emit(self.status_connected, None)
         if self._password:
-            self.send_to_weechat('\n'.join(_PROTO_INIT_CMD + _PROTO_SYNC_CMDS) % {'password': str(self._password)})
+            self.send_to_weechat('\n'.join(_PROTO_INIT_CMD + _PROTO_SYNC_CMDS)
+                                 % {'password': str(self._password),
+                                    'lines': self._lines})
 
     def _socket_error(self, error):
         """Slot: socket error."""
@@ -102,7 +106,7 @@ class Network(QtCore.QObject):
     def is_ssl(self):
         return self._ssl
 
-    def connect_weechat(self, server, port, ssl, password):
+    def connect_weechat(self, server, port, ssl, password, lines):
         self._server = server
         try:
             self._port = int(port)
@@ -110,6 +114,10 @@ class Network(QtCore.QObject):
             self._port = 0
         self._ssl = ssl
         self._password = password
+        try:
+            self._lines = int(lines)
+        except:
+            self._lines = config.CONFIG_DEFAULT_RELAY_LINES
         if self._socket.state() == QtNetwork.QAbstractSocket.ConnectedState:
             return
         if self._socket.state() != QtNetwork.QAbstractSocket.UnconnectedState:
@@ -148,4 +156,5 @@ class Network(QtCore.QObject):
         return {'server': self._server,
                 'port': self._port,
                 'ssl': 'on' if self._ssl else 'off',
-                'password': self._password}
+                'password': self._password,
+                'lines': str(self._lines)}
index 5b95528ca074404b06153bf874a445f8cf1ff4af..da491a61354049f875bff7a7dac29f70cd801768 100755 (executable)
@@ -142,7 +142,8 @@ class MainWindow(QtGui.QMainWindow):
             self.network.connect_weechat(self.config.get('relay', 'server'),
                                          self.config.get('relay', 'port'),
                                          self.config.getboolean('relay', 'ssl'),
-                                         self.config.get('relay', 'password'))
+                                         self.config.get('relay', 'password'),
+                                         self.config.get('relay', 'lines'))
 
         self.show()
 
@@ -206,7 +207,7 @@ class MainWindow(QtGui.QMainWindow):
 
     def open_connection_dialog(self):
         values = {}
-        for option in ('server', 'port', 'ssl', 'password'):
+        for option in ('server', 'port', 'ssl', 'password', 'lines'):
             values[option] = self.config.get('relay', option)
         self.connection_dialog = ConnectionDialog(values, self)
         self.connection_dialog.dialog_buttons.accepted.connect(self.connect_weechat)
@@ -215,7 +216,8 @@ class MainWindow(QtGui.QMainWindow):
         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.fields['password'].text(),
+                                     int(self.connection_dialog.fields['lines'].text()))
         self.connection_dialog.close()
 
     def network_status_changed(self, status, extra):
@@ -283,6 +285,7 @@ class MainWindow(QtGui.QMainWindow):
                     self.buffers[0].widget.input.setFocus()
         elif message.msgid in ('listlines', '_buffer_line_added'):
             for obj in message.objects:
+                lines = []
                 if obj.objtype == 'hda' and obj.value['path'][-1] == 'line_data':
                     for item in obj.value['items']:
                         if message.msgid == 'listlines':
@@ -291,9 +294,11 @@ class MainWindow(QtGui.QMainWindow):
                             ptrbuf = item['buffer']
                         index = [i for i, b in enumerate(self.buffers) if b.pointer() == ptrbuf]
                         if index:
-                            self.buffers[index[0]].widget.chat.display(item['date'],
-                                                                       item['prefix'],
-                                                                       item['message'])
+                            lines.append((item['date'], item['prefix'], item['message']))
+                if message.msgid == 'listlines':
+                    lines.reverse()
+                for line in lines:
+                    self.buffers[index[0]].widget.chat.display(*line)
         elif message.msgid in ('_nicklist', 'nicklist'):
             buffer_refresh = {}
             for obj in message.objects: