diff --git a/005.ui b/005.ui index 5ee381a..a658ebc 100644 --- a/005.ui +++ b/005.ui @@ -7,7 +7,7 @@ 0 0 461 - 227 + 259 @@ -94,7 +94,13 @@ selection-background-color: rgb(161, 75, 0); 220 - 21 + 22 + + + + + 16777215 + 22 @@ -117,7 +123,13 @@ selection-background-color: rgb(255, 119, 0); 0 - 21 + 22 + + + + + 16777215 + 22 @@ -141,7 +153,13 @@ selection-background-color: rgb(255, 119, 0); 220 - 21 + 22 + + + + + 16777215 + 22 @@ -155,6 +173,18 @@ selection-background-color: rgb(255, 119, 0); + + + 0 + 22 + + + + + 16777215 + 22 + + Подсветка сообщений @@ -162,6 +192,29 @@ selection-background-color: rgb(255, 119, 0); + + + + + + + 0 + 22 + + + + + 16777215 + 22 + + + + Отладчик парсинга (выводить в консоли RAW-строки) + + + + + diff --git a/chat_widget.py b/chat_widget.py index 59ae1c2..62fcebf 100644 --- a/chat_widget.py +++ b/chat_widget.py @@ -18,6 +18,7 @@ def setupUi(self, Form): Form.setStyleSheet("background-color: rgb(43, 43, 43);\n" "color: rgb(255, 255, 255);") self.verticalLayout = QtWidgets.QVBoxLayout(Form) + self.verticalLayout.setSpacing(4) self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout_4 = QtWidgets.QHBoxLayout() self.horizontalLayout_4.setObjectName("horizontalLayout_4") @@ -135,6 +136,34 @@ def setupUi(self, Form): self.members_list.header().setVisible(False) self.members_list.header().setStretchLastSection(True) self.horizontalLayout_4.addWidget(self.members_list) + self.list_frame = QtWidgets.QWidget(Form) + self.list_frame.setMinimumSize(QtCore.QSize(144, 0)) + self.list_frame.setObjectName("list_frame") + self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.list_frame) + self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) + self.verticalLayout_2.setSpacing(0) + self.verticalLayout_2.setObjectName("verticalLayout_2") + spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout_2.addItem(spacerItem) + self.error_getting_member_list = QtWidgets.QLabel(self.list_frame) + self.error_getting_member_list.setMinimumSize(QtCore.QSize(144, 200)) + self.error_getting_member_list.setMaximumSize(QtCore.QSize(144, 200)) + self.error_getting_member_list.setTextFormat(QtCore.Qt.RichText) + self.error_getting_member_list.setAlignment(QtCore.Qt.AlignCenter) + self.error_getting_member_list.setWordWrap(True) + self.error_getting_member_list.setObjectName("error_getting_member_list") + self.verticalLayout_2.addWidget(self.error_getting_member_list) + self.horizontalLayout = QtWidgets.QHBoxLayout() + self.horizontalLayout.setSpacing(0) + self.horizontalLayout.setObjectName("horizontalLayout") + self.close_panel_btn = QtWidgets.QPushButton(self.list_frame) + self.close_panel_btn.setMaximumSize(QtCore.QSize(60, 24)) + self.close_panel_btn.setObjectName("close_panel_btn") + self.horizontalLayout.addWidget(self.close_panel_btn) + self.verticalLayout_2.addLayout(self.horizontalLayout) + spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.verticalLayout_2.addItem(spacerItem1) + self.horizontalLayout_4.addWidget(self.list_frame) self.verticalLayout.addLayout(self.horizontalLayout_4) self.verticalLayout_3 = QtWidgets.QVBoxLayout() self.verticalLayout_3.setContentsMargins(-1, 0, 0, -1) @@ -164,6 +193,8 @@ def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Чат")) self.members_list.headerItem().setText(0, _translate("Form", "Members")) + self.error_getting_member_list.setText(_translate("Form", "

Нам пока не удалось получить список участников.

Попробуйте включить отладчик строк в настройках и сообщить разработчикам об этой проблеме.

Строка в консоли должна быть в таком формате:
<сервер> <код> <ваш_ник> <ник1> <ник2>

")) + self.close_panel_btn.setText(_translate("Form", "Закрыть")) self.message_text.setText(_translate("Form", "На данный момент отправить сообщение нельзя")) self.send_msg_btn.setText(_translate("Form", "Отправить")) import resources_rc diff --git a/chat_widget.ui b/chat_widget.ui index 2d7b465..e797102 100644 --- a/chat_widget.ui +++ b/chat_widget.ui @@ -18,6 +18,9 @@ color: rgb(255, 255, 255);
+ + 4 + @@ -193,6 +196,107 @@ background-color: rgb(43, 43, 43); + + + + + 144 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + 144 + 200 + + + + + 144 + 200 + + + + <html><head/><body><p><span style=" font-weight:600;">Нам пока не удалось получить список участников.</span></p><p>Попробуйте включить отладчик строк в настройках и сообщить <a href="https://github.com/tinelix/irc-client/issues"><span style=" text-decoration: underline; color:#1d99f3;">разработчикам</span></a> об этой проблеме.</p><p>Строка в консоли должна быть в таком формате:<br/><span style=" font-size:7pt;">&lt;сервер&gt; &lt;код&gt; &lt;ваш_ник&gt; &lt;ник1&gt; &lt;ник2&gt;</span></p></body></html> + + + Qt::RichText + + + Qt::AlignCenter + + + true + + + + + + + 0 + + + + + + 60 + 24 + + + + Закрыть + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + diff --git a/dlg005.py b/dlg005.py index 2a33b2b..90cf8d2 100644 --- a/dlg005.py +++ b/dlg005.py @@ -14,7 +14,7 @@ class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") - Dialog.resize(461, 227) + Dialog.resize(461, 259) Dialog.setStyleSheet("background-color: rgb(43, 43, 43);\n" "color: rgb(255, 255, 255);") self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) @@ -48,7 +48,8 @@ def setupUi(self, Dialog): self.gridLayout_2.setObjectName("gridLayout_2") self.dark_theme_cb = QtWidgets.QCheckBox(Dialog) self.dark_theme_cb.setEnabled(True) - self.dark_theme_cb.setMinimumSize(QtCore.QSize(220, 21)) + self.dark_theme_cb.setMinimumSize(QtCore.QSize(220, 22)) + self.dark_theme_cb.setMaximumSize(QtCore.QSize(16777215, 22)) self.dark_theme_cb.setStyleSheet("border-color: rgb(255, 119, 0);\n" "selection-background-color: rgb(255, 119, 0);") self.dark_theme_cb.setChecked(True) @@ -56,7 +57,8 @@ def setupUi(self, Dialog): self.dark_theme_cb.setObjectName("dark_theme_cb") self.gridLayout_2.addWidget(self.dark_theme_cb, 0, 0, 1, 1) self.save_msghistory_cb = QtWidgets.QCheckBox(Dialog) - self.save_msghistory_cb.setMinimumSize(QtCore.QSize(0, 21)) + self.save_msghistory_cb.setMinimumSize(QtCore.QSize(0, 22)) + self.save_msghistory_cb.setMaximumSize(QtCore.QSize(16777215, 22)) self.save_msghistory_cb.setStyleSheet("border-color: rgb(255, 119, 0);\n" "selection-background-color: rgb(255, 119, 0);") self.save_msghistory_cb.setObjectName("save_msghistory_cb") @@ -66,15 +68,26 @@ def setupUi(self, Dialog): self.horizontalLayout.setObjectName("horizontalLayout") self.msgs_hint = QtWidgets.QCheckBox(Dialog) self.msgs_hint.setEnabled(True) - self.msgs_hint.setMinimumSize(QtCore.QSize(220, 21)) + self.msgs_hint.setMinimumSize(QtCore.QSize(220, 22)) + self.msgs_hint.setMaximumSize(QtCore.QSize(16777215, 22)) self.msgs_hint.setStyleSheet("border-color: rgb(255, 119, 0);\n" "selection-background-color: rgb(255, 119, 0);") self.msgs_hint.setObjectName("msgs_hint") self.horizontalLayout.addWidget(self.msgs_hint) self.backlight_cb = QtWidgets.QCheckBox(Dialog) + self.backlight_cb.setMinimumSize(QtCore.QSize(0, 22)) + self.backlight_cb.setMaximumSize(QtCore.QSize(16777215, 22)) self.backlight_cb.setObjectName("backlight_cb") self.horizontalLayout.addWidget(self.backlight_cb) self.verticalLayout.addLayout(self.horizontalLayout) + self.horizontalLayout_2 = QtWidgets.QHBoxLayout() + self.horizontalLayout_2.setObjectName("horizontalLayout_2") + self.parsing_debugger_cb = QtWidgets.QCheckBox(Dialog) + self.parsing_debugger_cb.setMinimumSize(QtCore.QSize(0, 22)) + self.parsing_debugger_cb.setMaximumSize(QtCore.QSize(16777215, 22)) + self.parsing_debugger_cb.setObjectName("parsing_debugger_cb") + self.horizontalLayout_2.addWidget(self.parsing_debugger_cb) + self.verticalLayout.addLayout(self.horizontalLayout_2) self.gridLayout_3 = QtWidgets.QGridLayout() self.gridLayout_3.setObjectName("gridLayout_3") self.font_label = QtWidgets.QLabel(Dialog) @@ -126,4 +139,5 @@ def retranslateUi(self, Dialog): self.save_msghistory_cb.setText(_translate("Dialog", "Сохранять историю сообщений")) self.msgs_hint.setText(_translate("Dialog", "Подсказки при вводе текста")) self.backlight_cb.setText(_translate("Dialog", "Подсветка сообщений")) + self.parsing_debugger_cb.setText(_translate("Dialog", "Отладчик парсинга (выводить в консоли RAW-строки)")) self.font_label.setText(_translate("Dialog", "Шрифт сообщений:")) diff --git a/flight.py b/flight.py index 47e6c43..b15e620 100644 --- a/flight.py +++ b/flight.py @@ -23,8 +23,8 @@ settings = configparser.ConfigParser() profiles = configparser.ConfigParser() -version = '0.5.1 Beta' -date = '2021-09-27' +version = '0.5.2 Beta' +date = '2021-10-16' init_required = 1 @@ -182,7 +182,7 @@ def __init__(self, parent=None): profiles.read('profiles') print('Tinelix codename Flight {0} ({1})\nDone!'.format(version, date)) if settings.sections() == []: - settings['Main'] = {'Language': 'Russian', 'ColorScheme': 'Orange', 'DarkTheme': 'Enabled', 'MsgHistory': 'Enabled', 'MessagesHint': 'Disabled', 'MsgBacklight': 'Enabled', 'MsgFont': 'Consolas, 10'} + settings['Main'] = {'Language': 'Russian', 'ColorScheme': 'Orange', 'DarkTheme': 'Enabled', 'MsgHistory': 'Enabled', 'MessagesHint': 'Disabled', 'MsgBacklight': 'Enabled', 'MsgFont': 'Consolas, 10', 'ParsingDebugger': 'Disabled'} with open('settings', 'w') as configfile: settings.write(configfile) settings.read('settings') @@ -200,6 +200,7 @@ def __init__(self, parent=None): self.child_widget.chat_text.setVerticalScrollBar(self.child_widget.verticalScrollBar) self.child_widget.members_list.setVerticalScrollBar(self.child_widget.verticalScrollBar_2) self.child_widget.members_list.setVisible(False) + self.child_widget.list_frame.setVisible(False); try: font = QFont(settings['Main']['MsgFont'].split(', ')[0]) try: @@ -212,7 +213,7 @@ def __init__(self, parent=None): pass if settings.sections() == []: - settings['Main'] = {'Language': 'Russian', 'ColorScheme': 'Orange', 'DarkTheme': 'Enabled', 'MsgHistory': 'Enabled', 'MessagesHint': 'Disabled', 'MsgBacklight': 'Enabled', 'MsgFont': 'Consolas, 10'} + settings['Main'] = {'Language': 'Russian', 'ColorScheme': 'Orange', 'DarkTheme': 'Enabled', 'MsgHistory': 'Enabled', 'MessagesHint': 'Disabled', 'MsgBacklight': 'Enabled', 'MsgFont': 'Consolas, 10', 'ParsingDebugger': 'Disabled'} with open('settings', 'w') as configfile: settings.write(configfile) else: @@ -316,7 +317,7 @@ def settings_window(self): self.child_5.ui.language_combo.addItem('English') self.version = version if settings.sections() == []: - settings['Main'] = {'Language': 'Russian', 'ColorScheme': 'Orange', 'DarkTheme': 'Enabled', 'MsgHistory': 'True', 'MessagesHint': 'Disabled', 'MsgBacklight': 'False', 'MsgFont': 'Consolas'} + settings['Main'] = {'Language': 'Russian', 'ColorScheme': 'Orange', 'DarkTheme': 'Enabled', 'MsgHistory': 'True', 'MessagesHint': 'Disabled', 'MsgBacklight': 'False', 'MsgFont': 'Consolas', 'ParsingDebugger': 'Disabled'} with open('settings', 'w') as configfile: settings.write(configfile) settings.read('settings') @@ -346,6 +347,10 @@ def settings_window(self): self.child_5.ui.backlight_cb.setCheckState(0) else: self.child_5.ui.backlight_cb.setCheckState(2) + if settings['Main']['ParsingDebugger'] == 'Disabled': + self.child_5.ui.parsing_debugger_cb.setCheckState(0) + else: + self.child_5.ui.backlight_cb.setCheckState(2) self.child_5.ui.msgfont_combo.setCurrentFont(QFont(settings['Main']['MsgFont'].split(', ')[0])) self.child_5.ui.font_size_sb.setValue(int(settings['Main']['MsgFont'].split(', ')[1])) except Exception as e: @@ -440,6 +445,10 @@ def save_settings(self): settings['Main']['MsgBacklight'] = 'Enabled' font = '{0}, {1}'.format(QFont(self.child_5.ui.msgfont_combo.currentFont()).family(), self.child_5.ui.font_size_sb.value()) settings['Main']['MsgFont'] = font + if self.child_5.ui.parsing_debugger_cb.checkState() == 0: + settings['Main']['ParsingDebugger'] = 'Disabled' + else: + settings['Main']['ParsingDebugger'] = 'Enabled' with open('settings', 'w+') as configfile: settings.write(configfile) translator.translate_001(self, self.child.ui, settings['Main']['Language'], en_US, ru_RU) @@ -972,7 +981,11 @@ def started(self, status, server, port, nickname, encoding, quiting_msg, ping, s text = '{}'.format(status) msg_list = status.splitlines() for msg_line in msg_list: - # print(msg_line) for parser debug + try: + if settings.sections() != [] and settings['Main']['ParsingDebugger'] == 'Enabled': + print(msg_line) + except: + pass if msg_line.startswith('PING'): self.ping = time.time() elif msg_line.startswith('PONG'): @@ -1003,7 +1016,7 @@ def started(self, status, server, port, nickname, encoding, quiting_msg, ping, s else: tab.chat_text.setHtml('{0}{1}: Pong! ({2})'.format(tab.chat_text.toHtml(), decoded_text[3].splitlines()[0], datetime.datetime.now().strftime("%H:%M:%S"))) self.parent.ui.tabs.widget(self.parent.ui.tabs.currentIndex()).chat_text.moveCursor(QTextCursor.End) - elif msg_line.startswith('{0} {1}'.format(self.server, 353)): + elif ' '.join(msg_line.split(' ')[0:2]).find(' 353') != -1: try: self.names_raw = msg_line.split(' ')[5:] for nick in self.names_raw: @@ -1017,7 +1030,7 @@ def started(self, status, server, port, nickname, encoding, quiting_msg, ping, s exc_type, exc_value, exc_tb = sys.exc_info() ex = traceback.format_exception(exc_type, exc_value, exc_tb) print("\n".join(ex)) - elif msg_line.startswith('{0} {1} {2} {3}'.format(self.server, 366, self.nickname, self.channel)): + elif ' '.join(msg_line.split(' ')[0:2]).find(' 366') != -1: decoded_text = status.split(' ') try: if settings['Main']['Language'] == 'English': @@ -1048,6 +1061,8 @@ def started(self, status, server, port, nickname, encoding, quiting_msg, ping, s tab = self.parent.ui.tabs.widget(i) tab.members_list.clear() tab.members_list.addTopLevelItems([owners_list, operators_list, members_list]) + tab.members_list.setVisible(True); + tab.list_frame.setVisible(False); operators_list.setIcon(0, QIcon(':/icons/operator_icon.png')) operators_list.setExpanded(True) members_list.setIcon(0, QIcon(':/icons/member_icon.png')) @@ -1061,9 +1076,9 @@ def started(self, status, server, port, nickname, encoding, quiting_msg, ping, s exc_type, exc_value, exc_tb = sys.exc_info() ex = traceback.format_exception(exc_type, exc_value, exc_tb) print("\n".join(ex)) - elif ' '.join(msg_line.split(' ')[0:2]).find('366') != -1: - pass - elif ' '.join(msg_line.split(' ')[0:2]).find('372') != -1: + self.parent.child_widget.members_list.setVisible(False); + self.parent.child_widget.list_frame.setVisible(True); + elif ' '.join(msg_line.split(' ')[0:2]).find(' 372') != -1: tab = self.parent.ui.tabs.widget(self.parent.ui.tabs.currentIndex()) try: if settings['Main']['MsgBacklight'] == 'Disabled': @@ -1073,7 +1088,7 @@ def started(self, status, server, port, nickname, encoding, quiting_msg, ping, s except: tab.chat_text.setHtml('{0}\nMOTD: {1}'.format(tab.chat_text.toHtml(), "".join(" ".join(msg_line.split(' ')[3:]).splitlines()[0]).replace('<', '<').replace('>', '>'))) tab.chat_text.moveCursor(QTextCursor.End) - elif ' '.join(msg_line.split(' ')[0:2]).find('371') != -1: + elif ' '.join(msg_line.split(' ')[0:2]).find(' 371') != -1: tab = self.parent.ui.tabs.widget(self.parent.ui.tabs.currentIndex()) try: if settings['Main']['MsgBacklight'] == 'Disabled': @@ -1083,7 +1098,7 @@ def started(self, status, server, port, nickname, encoding, quiting_msg, ping, s except: tab.chat_text.setHtml('{0}\nInfo: {1}'.format(tab.chat_text.toHtml(), "".join(" ".join(msg_line.split(' ')[3:]).splitlines()[0]))) tab.chat_text.moveCursor(QTextCursor.End) - elif ' '.join(msg_line.split(' ')[0:2]).find('671') != -1: + elif ' '.join(msg_line.split(' ')[0:2]).find(' 671') != -1: tab = self.parent.ui.tabs.widget(self.parent.ui.tabs.currentIndex()) try: if settings['Main']['MsgBacklight'] == 'Disabled': @@ -1093,13 +1108,13 @@ def started(self, status, server, port, nickname, encoding, quiting_msg, ping, s except: tab.chat_text.setHtml('{0}\n{1} using a TLS/SSL connection.'.format(tab.chat_text.toHtml(), " ".join(msg_line.split(' ')[3]))) tab.chat_text.moveCursor(QTextCursor.End) - elif ' '.join(msg_line.split(' ')[0:2]).find('318') != -1: + elif ' '.join(msg_line.split(' ')[0:2]).find(' 318') != -1: pass - elif ' '.join(msg_line.split(' ')[0:2]).find('321') != -1: + elif ' '.join(msg_line.split(' ')[0:2]).find(' 321') != -1: pass - elif ' '.join(msg_line.split(' ')[0:2]).find('374') != -1: + elif ' '.join(msg_line.split(' ')[0:2]).find(' 374') != -1: pass - elif ' '.join(msg_line.split(' ')[0:2]).find('322') != -1: + elif ' '.join(msg_line.split(' ')[0:2]).find(' 322') != -1 or ' '.join(msg_line.split(' ')[0:2]).find(' 353') != -1: try: tab = self.parent.ui.tabs.widget(self.parent.ui.tabs.currentIndex()) if settings['Main']['DarkTheme'] == 'Disabled': @@ -1124,7 +1139,7 @@ def started(self, status, server, port, nickname, encoding, quiting_msg, ping, s self.channels.update({msg_line.split(' ')[3]: {'name': msg_line.split(' ')[3], 'topic': " ".join(msg_line.split(' ')[5:]), 'members': int(msg_line.split(' ')[4])}}) except Exception as e: pass - elif ' '.join(msg_line.split(' ')[0:2]).find('323') != -1: + elif ' '.join(msg_line.split(' ')[0:2]).find(' 323') != -1: try: self.progr.close() except: @@ -1140,11 +1155,11 @@ def started(self, status, server, port, nickname, encoding, quiting_msg, ping, s tab.chat_text.setHtml('{0}{1}
Topic: {2}
Members: {3}
------------------------------------'.format(tab.chat_text.toHtml(), self.channels[channel]['name'].replace('<', '<').replace('>', '>'), self.channels[channel]['topic'].replace('<', '<').replace('>', '>'), self.channels[channel]['members'])) self.channels = {} self.parent.ui.tabs.widget(self.parent.ui.tabs.currentIndex()).chat_text.moveCursor(QTextCursor.End) - elif ' '.join(msg_line.split(' ')[0:2]).find('376') != -1: + elif ' '.join(msg_line.split(' ')[0:2]).find(' 376') != -1: pass - elif ' '.join(msg_line.split(' ')[0:2]).find('378') != -1: + elif ' '.join(msg_line.split(' ')[0:2]).find(' 378') != -1: pass - elif ' '.join(msg_line.split(' ')[0:2]).find('312') != -1: + elif ' '.join(msg_line.split(' ')[0:2]).find(' 312') != -1: tab = self.parent.ui.tabs.widget(self.parent.ui.tabs.currentIndex()) try: if settings['Main']['MsgBacklight'] == 'Disabled': @@ -1154,7 +1169,7 @@ def started(self, status, server, port, nickname, encoding, quiting_msg, ping, s except: tab.chat_text.setHtml('{0}{1}'.format(tab.chat_text.toHtml(), " ".join(msg_line.split(' ')[4:]))) self.parent.ui.tabs.widget(self.parent.ui.tabs.currentIndex()).chat_text.moveCursor(QTextCursor.End) - elif ' '.join(msg_line.split(' ')[0:2]).find('311') != -1: + elif ' '.join(msg_line.split(' ')[0:2]).find(' 311') != -1: tab = self.parent.ui.tabs.widget(self.parent.ui.tabs.currentIndex()) try: if settings['Main']['MsgBacklight'] == 'Disabled': @@ -1165,7 +1180,7 @@ def started(self, status, server, port, nickname, encoding, quiting_msg, ping, s except: tab.chat_text.setHtml('{0}{1} ({2}@{3})
Real name: {4}
------------------------------------'.format(tab.chat_text.toHtml(), msg_line.split(' ')[3], msg_line.split(' ')[4], msg_line.split(' ')[5], ' '.join(msg_line.split(' ')[7:]).splitlines()[0])) tab.chat_text.moveCursor(QTextCursor.End) - elif ' '.join(msg_line.split(' ')[0:2]).find('332') != -1: + elif ' '.join(msg_line.split(' ')[0:2]).find(' 332') != -1: tab = self.parent.ui.tabs.widget(self.parent.ui.tabs.currentIndex()) try: if settings['Main']['MsgBacklight'] == 'Disabled': @@ -1178,7 +1193,7 @@ def started(self, status, server, port, nickname, encoding, quiting_msg, ping, s print("\n".join(ex)) tab.chat_text.setHtml('{0}\nTopic: {1}'.format(tab.chat_text.toHtml(), " ".join(msg_line.split(' ')[3:]).replace('http//', 'http://').replace('https//', 'https://'))) tab.chat_text.moveCursor(QTextCursor.End) - elif ' '.join(msg_line.split(' ')[0:2]).find('333') != -1: + elif ' '.join(msg_line.split(' ')[0:2]).find(' 333') != -1: tab = self.parent.ui.tabs.widget(self.parent.ui.tabs.currentIndex()) try: if settings['Main']['MsgBacklight'] == 'Disabled': @@ -1191,7 +1206,7 @@ def started(self, status, server, port, nickname, encoding, quiting_msg, ping, s print("\n".join(ex)) tab.chat_text.setHtml('{0}\nTopic set by {1} ({2})'.format(tab.chat_text.toHtml(), msg_line.split(' ')[4], datetime.datetime.fromtimestamp(int(msg_line.split(' ')[5])).strftime('%Y-%m-%d %H:%M:%S'))) tab.chat_text.moveCursor(QTextCursor.End) - elif ' '.join(msg_line.split(' ')[0:2]).find('319') != -1: + elif ' '.join(msg_line.split(' ')[0:2]).find(' 319') != -1: tab = self.parent.ui.tabs.widget(self.parent.ui.tabs.currentIndex()) try: if settings['Main']['MsgBacklight'] == 'Disabled': @@ -1204,7 +1219,7 @@ def started(self, status, server, port, nickname, encoding, quiting_msg, ping, s print("\n".join(ex)) tab.chat_text.setHtml('{0}\nMutual channels: {1}'.format(tab.chat_text.toHtml(), " ".join(msg_line.split(' ')[4:]).replace('@', '').replace('~', '').replace('&', ''))) tab.chat_text.moveCursor(QTextCursor.End) - elif ' '.join(msg_line.split(' ')[0:2]).find('317') != -1: + elif ' '.join(msg_line.split(' ')[0:2]).find(' 317') != -1: tab = self.parent.ui.tabs.widget(self.parent.ui.tabs.currentIndex()) try: if settings['Main']['MsgBacklight'] == 'Disabled': @@ -1217,7 +1232,7 @@ def started(self, status, server, port, nickname, encoding, quiting_msg, ping, s print("\n".join(ex)) tab.chat_text.setHtml('{0}\n{1} idle, last logon time - {2}'.format(tab.chat_text.toHtml(), datetime.datetime.fromtimestamp(int(msg_line.split(' ')[4])).strftime('%H:%M:%S'), datetime.datetime.fromtimestamp(int(msg_line.split(' ')[5])).strftime('%Y-%m-%d %H:%M:%S'))) tab.chat_text.moveCursor(QTextCursor.End) - elif msg_line.find('PRIVMSG') != -1: + elif ' '.join(msg_line.split(' ')[0:2]).find('PRIVMSG') != -1: try: decoded_text = status.replace('!', ' ').split(' ') if decoded_text[2] == 'PRIVMSG': @@ -1256,7 +1271,7 @@ def started(self, status, server, port, nickname, encoding, quiting_msg, ping, s print("\n".join(ex)) self.parent.child_widget.chat_text.setHtml('{0}
{1}'.format(self.parent.child_widget.chat_text.toHtml(), msg_line)) self.parent.child_widget.chat_text.moveCursor(QTextCursor.End) - elif msg_line.find('MODE') != -1: + elif ' '.join(msg_line.split(' ')[0:2]).find('MODE') != -1: tab = self.parent.ui.tabs.widget(self.parent.ui.tabs.currentIndex()) try: decoded_text = status.replace('!', ' ').split(' ') @@ -1269,7 +1284,7 @@ def started(self, status, server, port, nickname, encoding, quiting_msg, ping, s print("\n".join(ex)) self.parent.child_widget.chat_text.setHtml('{0}\n{1}'.format(self.parent.child_widget.chat_text.toHtml(), msg_line)) self.parent.child_widget.chat_text.moveCursor(QTextCursor.End) - elif msg_line.find('JOIN') != -1: + elif ' '.join(msg_line.split(' ')[0:2]).find(' JOIN') != -1: try: decoded_text = status.replace('!', ' ').split(' ') if decoded_text[2] == 'JOIN': @@ -1300,7 +1315,7 @@ def started(self, status, server, port, nickname, encoding, quiting_msg, ping, s exc_type, exc_value, exc_tb = sys.exc_info() ex = traceback.format_exception(exc_type, exc_value, exc_tb) print("\n".join(ex)) - elif msg_line.find('PART') != -1: + elif ' '.join(msg_line.split(' ')[0:2]).find(' PART') != -1: try: decoded_text = status.replace('!', ' ').split(' ') if decoded_text[0] == self.nickname: @@ -1339,7 +1354,7 @@ def started(self, status, server, port, nickname, encoding, quiting_msg, ping, s print("\n".join(ex)) self.parent.child_widget.chat_text.setHtml('{0}
{1}'.format(self.parent.child_widget.chat_text.toHtml(), msg_line)) self.parent.child_widget.chat_text.moveCursor(QTextCursor.End) - elif msg_line.find('QUIT') != -1: + elif msg_line.find(' QUIT') != -1: try: decoded_text = status.replace('!', ' ').split(' ') if decoded_text[2] == 'QUIT': @@ -1374,7 +1389,7 @@ def started(self, status, server, port, nickname, encoding, quiting_msg, ping, s print(e) self.parent.child_widget.chat_text.setHtml('{0}\n{1}'.format(self.parent.child_widget.chat_text.toHtml(), msg_line)) self.parent.child_widget.chat_text.moveCursor(QTextCursor.End) - elif msg_line.find('NICK') != -1: + elif msg_line.find(' NICK') != -1: try: decoded_text = status.replace('!', ' ').split(' ') if decoded_text[2] == 'NICK': @@ -1494,12 +1509,23 @@ def send_msg(self): self.tab.members_list.setStyleSheet('selection-background-color: #a14b00;') self.tab.verticalScrollBar.setStyleSheet('QScrollBar:vertical {border: 0px solid;\nbackground: rgb(43, 43, 43);\nwidth: 15px;\nmargin: 16px 0 16px 0;\n}\nQScrollBar::handle:vertical {\nbackground: rgb(161, 75, 0);\nborder-width: 2px;\nborder-radius: 10px;\n}\n\nQScrollBar::add-line:vertical {\nborder: 0px solid;\nbackground-color: rgb(43, 43, 43);\nheight: 16px;\nsubcontrol-position: bottom;\nsubcontrol-origin: margin;\nimage: url(:/arrows/up_arrow_dark.png);\n}\n\nQScrollBar::sub-line:vertical {\nborder: 0px solid;\nbackground: rgb(43, 43, 43);\nheight: 16px;\nsubcontrol-position: top;\nsubcontrol-origin: margin;\nimage: url(:/arrows/down_arrow_dark.png);\n}\n\nQScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {\nbackground: none;\n}') self.tab.verticalScrollBar_2.setStyleSheet('QScrollBar:vertical {border: 0px solid;\nbackground: rgb(43, 43, 43);\nwidth: 15px;\nmargin: 16px 0 16px 0;\n}\nQScrollBar::handle:vertical {\nbackground: rgb(161, 75, 0);\nborder-width: 2px;\nborder-radius: 10px;\n}\n\nQScrollBar::add-line:vertical {\nborder: 0px solid;\nbackground-color: rgb(43, 43, 43);\nheight: 16px;\nsubcontrol-position: bottom;\nsubcontrol-origin: margin;\nimage: url(:/arrows/up_arrow_dark.png);\n}\n\nQScrollBar::sub-line:vertical {\nborder: 0px solid;\nbackground: rgb(43, 43, 43);\nheight: 16px;\nsubcontrol-position: top;\nsubcontrol-origin: margin;\nimage: url(:/arrows/down_arrow_dark.png);\n}\n\nQScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {\nbackground: none;\n}') + + if settings.sections != [] and settings['Main']['Language'] == 'Russian': + self.tab.error_getting_member_list.setText(ru_RU.get()['mbgt_err']) + self.tab.close_panel_btn.setText(ru_RU.get()['mbget_cl']) + else: + self.tab.error_getting_member_list.setText(en_US.get()['mbgt_err']) + self.tab.close_panel_btn.setText(en_US.get()['mbget_cl']) + self.tab.members_list.setContextMenuPolicy(Qt.CustomContextMenu) self.tab.members_list.customContextMenuRequested.connect(self.call_member_cm) + self.tab.members_list.setVisible(False); + self.tab.list_frame.setVisible(True); self.member_context_menu = QMenu(self) self.parent.ui.tabs.addTab(self.tab, self.channel) self.tab.chat_text.setVerticalScrollBar(self.tab.verticalScrollBar) self.tab.members_list.setVerticalScrollBar(self.tab.verticalScrollBar_2) + self.tab.close_panel_btn.clicked.connect(self.close_member_error_panel) self.tab.message_text.setEnabled(True) self.tab.send_msg_btn.setEnabled(False) self.tab.send_msg_btn.clicked.connect(self.send_msg) @@ -1711,6 +1737,9 @@ def call_member_cm(self, pos): except: pass + def close_member_error_panel(self): + self.tab.list_frame.setVisible(False) + def edit_item(self): swiz003 = SettingsWizard003() swiz003.ui.title_label.setText(str(self.ui.tableWidget.item(self.ui.tableWidget.currentRow(), 0).text())) diff --git a/languages/en_US.py b/languages/en_US.py index 034e63e..346b961 100644 --- a/languages/en_US.py +++ b/languages/en_US.py @@ -72,10 +72,13 @@ def get(): 'channelp': 'Channel:', 'addit_bt': 'More', 'prgrwait': 'Waiting', + 'mbgt_err': '

We have not yet able to get the members list.

Try turning on the parsing debugger and letting the developers about this issue.

String in the console should be in this format:
<server> <code> <your_nick> <nick1> <nick2>

', + 'mbget_cl': 'Close', 'about_tt': 'About Tinelix IRC Client', 'prog_ver': '

Tinelix IRC Client (codename Flight, {0})

', 'free_sft': 'Written on Python, using Qt {0} with PyQt5 {1}', 'gpl_info': '

This is free software with open source, distributed under the terms of the GNU General Public License 3.0 (read license).

WITHOUT ANY WARRANTY, NOT EVEN FOR MERCHANTABILITY.', 'repo_btn': 'Repository', 'profman': '

Profile managing

', + 'parsdbg': 'Parsing debugger (RAW strings to console)', } diff --git a/languages/ru_RU.py b/languages/ru_RU.py index d31156a..ee85ae4 100644 --- a/languages/ru_RU.py +++ b/languages/ru_RU.py @@ -72,10 +72,13 @@ def get(): 'channelp': 'Канал:', 'addit_bt': 'Подробнее', 'prgrwait': 'Ожидание', + 'mbgt_err': '

Нам пока не удалось получить список участников.

Попробуйте включить отладчик парсинга в настройках и сообщить разработчикам об этой проблеме.

Строка в консоли должна быть в таком формате:
<сервер> <код> <ваш_ник> <ник1> <ник2>

', + 'mbget_cl': 'Закрыть', 'about_tt': 'О клиенте Tinelix IRC', 'prog_ver': '

Tinelix IRC Client (codename Flight, {0})

', 'free_sft': 'Написан на языке программирования Python, используется Qt {0} с PyQt5 {1}', 'gpl_info': '

Это свободное программное обеспечение с открытым исходным кодом, распространяемое в соответствии с условиями GNU General Public License 3.0 (прочитать лицензию).

БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ВКЛЮЧАЯ КОММЕРЧЕСКУЮ ЦЕННОСТЬ.', 'repo_btn': 'Репозиторий', 'profman': '

Управление профилями

', + 'parsdbg': 'Отладчик строк (вывод RAW-строк в консоль)', } diff --git a/mainform.py b/mainform.py index 7e0606d..9c6b20c 100644 --- a/mainform.py +++ b/mainform.py @@ -1,195 +1,206 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'mainform.ui' -# -# Created by: PyQt5 UI code generator 5.15.4 -# -# WARNING: Any manual changes made to this file will be lost when pyuic5 is -# run again. Do not edit this file unless you know what you are doing. - - -from PyQt5 import QtCore, QtGui, QtWidgets - - -class Ui_MainWindow(object): - def setupUi(self, MainWindow): - MainWindow.setObjectName("MainWindow") - MainWindow.resize(595, 354) - MainWindow.setMinimumSize(QtCore.QSize(544, 300)) - icon = QtGui.QIcon() - icon.addPixmap(QtGui.QPixmap("icon_48x48.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) - MainWindow.setWindowIcon(icon) - MainWindow.setStyleSheet("background-color: rgb(43, 43, 43);\n" -"color: rgb(255, 255, 255);") - self.centralwidget = QtWidgets.QWidget(MainWindow) - self.centralwidget.setObjectName("centralwidget") - self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget) - self.verticalLayout.setContentsMargins(0, 0, 0, 0) - self.verticalLayout.setSpacing(0) - self.verticalLayout.setObjectName("verticalLayout") - self.horizontalLayout = QtWidgets.QHBoxLayout() - self.horizontalLayout.setSpacing(0) - self.horizontalLayout.setObjectName("horizontalLayout") - self.tabs = QtWidgets.QTabWidget(self.centralwidget) - self.tabs.setStyleSheet("") - self.tabs.setTabsClosable(False) - self.tabs.setObjectName("tabs") - self.horizontalLayout.addWidget(self.tabs) - self.verticalLayout.addLayout(self.horizontalLayout) - self.verticalLayout_2 = QtWidgets.QVBoxLayout() - self.verticalLayout_2.setContentsMargins(-1, -1, 0, 0) - self.verticalLayout_2.setSpacing(0) - self.verticalLayout_2.setObjectName("verticalLayout_2") - self.horizontalLayout_2 = QtWidgets.QHBoxLayout() - self.horizontalLayout_2.setContentsMargins(-1, 0, -1, -1) - self.horizontalLayout_2.setSpacing(4) - self.horizontalLayout_2.setObjectName("horizontalLayout_2") - self.verticalLayout_2.addLayout(self.horizontalLayout_2) - self.horizontalLayout_3 = QtWidgets.QHBoxLayout() - self.horizontalLayout_3.setContentsMargins(-1, -1, -1, 0) - self.horizontalLayout_3.setSpacing(4) - self.horizontalLayout_3.setObjectName("horizontalLayout_3") - self.status_label = QtWidgets.QLabel(self.centralwidget) - self.status_label.setMinimumSize(QtCore.QSize(100, 0)) - self.status_label.setMaximumSize(QtCore.QSize(220, 16777215)) - font = QtGui.QFont() - font.setPointSize(8) - self.status_label.setFont(font) - self.status_label.setText("") - self.status_label.setTextFormat(QtCore.Qt.PlainText) - self.status_label.setObjectName("status_label") - self.horizontalLayout_3.addWidget(self.status_label) - spacerItem = QtWidgets.QSpacerItem(2, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_3.addItem(spacerItem) - self.channel_name = QtWidgets.QLabel(self.centralwidget) - self.channel_name.setMaximumSize(QtCore.QSize(16777215, 40)) - font = QtGui.QFont() - font.setPointSize(8) - self.channel_name.setFont(font) - self.channel_name.setText("") - self.channel_name.setObjectName("channel_name") - self.horizontalLayout_3.addWidget(self.channel_name) - self.line = QtWidgets.QFrame(self.centralwidget) - self.line.setStyleSheet("color: rgb(74, 74, 74)") - self.line.setFrameShadow(QtWidgets.QFrame.Plain) - self.line.setFrameShape(QtWidgets.QFrame.VLine) - self.line.setObjectName("line") - self.horizontalLayout_3.addWidget(self.line) - self.conn_quality_label = QtWidgets.QLabel(self.centralwidget) - font = QtGui.QFont() - font.setPointSize(8) - self.conn_quality_label.setFont(font) - self.conn_quality_label.setObjectName("conn_quality_label") - self.horizontalLayout_3.addWidget(self.conn_quality_label) - self.conn_quality_progr = QtWidgets.QProgressBar(self.centralwidget) - self.conn_quality_progr.setMinimumSize(QtCore.QSize(0, 18)) - self.conn_quality_progr.setMaximumSize(QtCore.QSize(80, 16777215)) - font = QtGui.QFont() - font.setPointSize(8) - font.setBold(False) - font.setWeight(50) - self.conn_quality_progr.setFont(font) - self.conn_quality_progr.setStyleSheet("selection-background-color: rgb(161, 75, 0);") - self.conn_quality_progr.setMaximum(5000) - self.conn_quality_progr.setProperty("value", 4970) - self.conn_quality_progr.setTextVisible(True) - self.conn_quality_progr.setInvertedAppearance(False) - self.conn_quality_progr.setTextDirection(QtWidgets.QProgressBar.TopToBottom) - self.conn_quality_progr.setObjectName("conn_quality_progr") - self.horizontalLayout_3.addWidget(self.conn_quality_progr) - self.latency_label = QtWidgets.QLabel(self.centralwidget) - self.latency_label.setMinimumSize(QtCore.QSize(35, 0)) - font = QtGui.QFont() - font.setPointSize(8) - font.setBold(False) - font.setWeight(50) - self.latency_label.setFont(font) - self.latency_label.setObjectName("latency_label") - self.horizontalLayout_3.addWidget(self.latency_label) - self.verticalLayout_2.addLayout(self.horizontalLayout_3) - self.verticalLayout.addLayout(self.verticalLayout_2) - MainWindow.setCentralWidget(self.centralwidget) - self.menubar = QtWidgets.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 595, 29)) - self.menubar.setStyleSheet("selection-background-color: rgb(161, 75, 0);") - self.menubar.setObjectName("menubar") - self.menu = QtWidgets.QMenu(self.menubar) - self.menu.setObjectName("menu") - self.menu_2 = QtWidgets.QMenu(self.menubar) - self.menu_2.setStyleSheet("") - self.menu_2.setObjectName("menu_2") - self.menu_3 = QtWidgets.QMenu(self.menubar) - self.menu_3.setObjectName("menu_3") - self.menu_4 = QtWidgets.QMenu(self.menubar) - self.menu_4.setObjectName("menu_4") - MainWindow.setMenuBar(self.menubar) - self.about_item = QtWidgets.QAction(MainWindow) - self.about_item.setObjectName("about_item") - self.about_Qt_item = QtWidgets.QAction(MainWindow) - self.about_Qt_item.setObjectName("about_Qt_item") - self.connect_item = QtWidgets.QAction(MainWindow) - self.connect_item.setObjectName("connect_item") - self.quit_item = QtWidgets.QAction(MainWindow) - self.quit_item.setObjectName("quit_item") - self.history_cb_action = QtWidgets.QAction(MainWindow) - self.history_cb_action.setCheckable(True) - self.history_cb_action.setChecked(False) - self.history_cb_action.setObjectName("history_cb_action") - self.action = QtWidgets.QAction(MainWindow) - self.action.setObjectName("action") - self.settings_item = QtWidgets.QAction(MainWindow) - self.settings_item.setObjectName("settings_item") - self.join_item = QtWidgets.QAction(MainWindow) - self.join_item.setEnabled(False) - self.join_item.setObjectName("join_item") - self.leave_item = QtWidgets.QAction(MainWindow) - self.leave_item.setEnabled(False) - self.leave_item.setObjectName("leave_item") - self.members_list_item = QtWidgets.QAction(MainWindow) - self.members_list_item.setCheckable(True) - self.members_list_item.setChecked(True) - self.members_list_item.setObjectName("members_list_item") - self.msg_history = QtWidgets.QAction(MainWindow) - self.msg_history.setEnabled(False) - self.msg_history.setObjectName("msg_history") - self.menu.addAction(self.connect_item) - self.menu.addSeparator() - self.menu.addAction(self.quit_item) - self.menu_2.addAction(self.about_item) - self.menu_3.addSeparator() - self.menu_3.addAction(self.settings_item) - self.menu_4.addAction(self.join_item) - self.menu_4.addAction(self.leave_item) - self.menu_4.addSeparator() - self.menu_4.addAction(self.msg_history) - self.menubar.addAction(self.menu.menuAction()) - self.menubar.addAction(self.menu_4.menuAction()) - self.menubar.addAction(self.menu_3.menuAction()) - self.menubar.addAction(self.menu_2.menuAction()) - - self.retranslateUi(MainWindow) - self.tabs.setCurrentIndex(-1) - QtCore.QMetaObject.connectSlotsByName(MainWindow) - - def retranslateUi(self, MainWindow): - _translate = QtCore.QCoreApplication.translate - MainWindow.setWindowTitle(_translate("MainWindow", "Tinelix IRC Client")) - self.conn_quality_label.setText(_translate("MainWindow", "Качество соединения:")) - self.conn_quality_progr.setFormat(_translate("MainWindow", "%p%")) - self.latency_label.setText(_translate("MainWindow", "(2 ms)")) - self.menu.setTitle(_translate("MainWindow", "Файл")) - self.menu_2.setTitle(_translate("MainWindow", "Справка")) - self.menu_3.setTitle(_translate("MainWindow", "Вид")) - self.menu_4.setTitle(_translate("MainWindow", "Канал")) - self.about_item.setText(_translate("MainWindow", "О программе...")) - self.about_Qt_item.setText(_translate("MainWindow", "О Qt...")) - self.connect_item.setText(_translate("MainWindow", "Подключиться")) - self.quit_item.setText(_translate("MainWindow", "Выход")) - self.history_cb_action.setText(_translate("MainWindow", "Сохранить историю переписок")) - self.action.setText(_translate("MainWindow", "Настройки")) - self.settings_item.setText(_translate("MainWindow", "Настройки")) - self.join_item.setText(_translate("MainWindow", "Присоединиться...")) - self.leave_item.setText(_translate("MainWindow", "Покинуть")) - self.members_list_item.setText(_translate("MainWindow", "Список участников")) - self.msg_history.setText(_translate("MainWindow", "История")) -import resources_rc +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'mainform.ui' +# +# Created by: PyQt5 UI code generator 5.15.4 +# +# WARNING: Any manual changes made to this file will be lost when pyuic5 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt5 import QtCore, QtGui, QtWidgets + + +class Ui_MainWindow(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName("MainWindow") + MainWindow.resize(595, 354) + MainWindow.setMinimumSize(QtCore.QSize(544, 300)) + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap("icon_48x48.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + MainWindow.setWindowIcon(icon) + MainWindow.setStyleSheet("background-color: rgb(43, 43, 43);\n" +"color: rgb(255, 255, 255);") + self.centralwidget = QtWidgets.QWidget(MainWindow) + self.centralwidget.setObjectName("centralwidget") + self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget) + self.verticalLayout.setContentsMargins(0, 0, 0, 0) + self.verticalLayout.setSpacing(0) + self.verticalLayout.setObjectName("verticalLayout") + self.horizontalLayout = QtWidgets.QHBoxLayout() + self.horizontalLayout.setSpacing(0) + self.horizontalLayout.setObjectName("horizontalLayout") + self.tabs = QtWidgets.QTabWidget(self.centralwidget) + self.tabs.setStyleSheet("") + self.tabs.setTabsClosable(False) + self.tabs.setObjectName("tabs") + self.horizontalLayout.addWidget(self.tabs) + self.verticalLayout.addLayout(self.horizontalLayout) + self.verticalLayout_2 = QtWidgets.QVBoxLayout() + self.verticalLayout_2.setContentsMargins(-1, -1, 0, 0) + self.verticalLayout_2.setSpacing(0) + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.horizontalLayout_2 = QtWidgets.QHBoxLayout() + self.horizontalLayout_2.setContentsMargins(-1, 0, -1, -1) + self.horizontalLayout_2.setSpacing(4) + self.horizontalLayout_2.setObjectName("horizontalLayout_2") + self.verticalLayout_2.addLayout(self.horizontalLayout_2) + self.horizontalLayout_3 = QtWidgets.QHBoxLayout() + self.horizontalLayout_3.setContentsMargins(-1, -1, -1, 0) + self.horizontalLayout_3.setSpacing(4) + self.horizontalLayout_3.setObjectName("horizontalLayout_3") + spacerItem = QtWidgets.QSpacerItem(2, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_3.addItem(spacerItem) + self.status_label = QtWidgets.QLabel(self.centralwidget) + self.status_label.setMinimumSize(QtCore.QSize(100, 20)) + self.status_label.setMaximumSize(QtCore.QSize(220, 20)) + font = QtGui.QFont() + font.setPointSize(8) + self.status_label.setFont(font) + self.status_label.setText("") + self.status_label.setTextFormat(QtCore.Qt.PlainText) + self.status_label.setObjectName("status_label") + self.horizontalLayout_3.addWidget(self.status_label) + spacerItem1 = QtWidgets.QSpacerItem(2, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_3.addItem(spacerItem1) + self.channel_name = QtWidgets.QLabel(self.centralwidget) + self.channel_name.setMaximumSize(QtCore.QSize(16777215, 40)) + font = QtGui.QFont() + font.setPointSize(8) + self.channel_name.setFont(font) + self.channel_name.setText("") + self.channel_name.setObjectName("channel_name") + self.horizontalLayout_3.addWidget(self.channel_name) + self.line = QtWidgets.QFrame(self.centralwidget) + self.line.setMinimumSize(QtCore.QSize(0, 20)) + self.line.setMaximumSize(QtCore.QSize(16777215, 20)) + self.line.setStyleSheet("color: rgb(74, 74, 74)") + self.line.setFrameShadow(QtWidgets.QFrame.Plain) + self.line.setFrameShape(QtWidgets.QFrame.VLine) + self.line.setObjectName("line") + self.horizontalLayout_3.addWidget(self.line) + self.conn_quality_label = QtWidgets.QLabel(self.centralwidget) + self.conn_quality_label.setMinimumSize(QtCore.QSize(20, 0)) + self.conn_quality_label.setMaximumSize(QtCore.QSize(16777215, 20)) + font = QtGui.QFont() + font.setPointSize(8) + self.conn_quality_label.setFont(font) + self.conn_quality_label.setObjectName("conn_quality_label") + self.horizontalLayout_3.addWidget(self.conn_quality_label) + self.conn_quality_progr = QtWidgets.QProgressBar(self.centralwidget) + self.conn_quality_progr.setMinimumSize(QtCore.QSize(0, 20)) + self.conn_quality_progr.setMaximumSize(QtCore.QSize(80, 20)) + font = QtGui.QFont() + font.setPointSize(8) + font.setBold(False) + font.setWeight(50) + self.conn_quality_progr.setFont(font) + self.conn_quality_progr.setStyleSheet("selection-background-color: rgb(161, 75, 0);") + self.conn_quality_progr.setMaximum(5000) + self.conn_quality_progr.setProperty("value", 4970) + self.conn_quality_progr.setTextVisible(True) + self.conn_quality_progr.setInvertedAppearance(False) + self.conn_quality_progr.setTextDirection(QtWidgets.QProgressBar.TopToBottom) + self.conn_quality_progr.setObjectName("conn_quality_progr") + self.horizontalLayout_3.addWidget(self.conn_quality_progr) + self.latency_label = QtWidgets.QLabel(self.centralwidget) + self.latency_label.setMinimumSize(QtCore.QSize(35, 20)) + self.latency_label.setMaximumSize(QtCore.QSize(16777215, 20)) + font = QtGui.QFont() + font.setPointSize(8) + font.setBold(False) + font.setWeight(50) + self.latency_label.setFont(font) + self.latency_label.setObjectName("latency_label") + self.horizontalLayout_3.addWidget(self.latency_label) + spacerItem2 = QtWidgets.QSpacerItem(0, 22, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) + self.horizontalLayout_3.addItem(spacerItem2) + spacerItem3 = QtWidgets.QSpacerItem(2, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum) + self.horizontalLayout_3.addItem(spacerItem3) + self.verticalLayout_2.addLayout(self.horizontalLayout_3) + self.verticalLayout.addLayout(self.verticalLayout_2) + MainWindow.setCentralWidget(self.centralwidget) + self.menubar = QtWidgets.QMenuBar(MainWindow) + self.menubar.setGeometry(QtCore.QRect(0, 0, 595, 21)) + self.menubar.setStyleSheet("selection-background-color: rgb(161, 75, 0);") + self.menubar.setObjectName("menubar") + self.menu = QtWidgets.QMenu(self.menubar) + self.menu.setObjectName("menu") + self.menu_2 = QtWidgets.QMenu(self.menubar) + self.menu_2.setStyleSheet("") + self.menu_2.setObjectName("menu_2") + self.menu_3 = QtWidgets.QMenu(self.menubar) + self.menu_3.setObjectName("menu_3") + self.menu_4 = QtWidgets.QMenu(self.menubar) + self.menu_4.setObjectName("menu_4") + MainWindow.setMenuBar(self.menubar) + self.about_item = QtWidgets.QAction(MainWindow) + self.about_item.setObjectName("about_item") + self.about_Qt_item = QtWidgets.QAction(MainWindow) + self.about_Qt_item.setObjectName("about_Qt_item") + self.connect_item = QtWidgets.QAction(MainWindow) + self.connect_item.setObjectName("connect_item") + self.quit_item = QtWidgets.QAction(MainWindow) + self.quit_item.setObjectName("quit_item") + self.history_cb_action = QtWidgets.QAction(MainWindow) + self.history_cb_action.setCheckable(True) + self.history_cb_action.setChecked(False) + self.history_cb_action.setObjectName("history_cb_action") + self.action = QtWidgets.QAction(MainWindow) + self.action.setObjectName("action") + self.settings_item = QtWidgets.QAction(MainWindow) + self.settings_item.setObjectName("settings_item") + self.join_item = QtWidgets.QAction(MainWindow) + self.join_item.setEnabled(False) + self.join_item.setObjectName("join_item") + self.leave_item = QtWidgets.QAction(MainWindow) + self.leave_item.setEnabled(False) + self.leave_item.setObjectName("leave_item") + self.members_list_item = QtWidgets.QAction(MainWindow) + self.members_list_item.setCheckable(True) + self.members_list_item.setChecked(True) + self.members_list_item.setObjectName("members_list_item") + self.msg_history = QtWidgets.QAction(MainWindow) + self.msg_history.setEnabled(False) + self.msg_history.setObjectName("msg_history") + self.menu.addAction(self.connect_item) + self.menu.addSeparator() + self.menu.addAction(self.quit_item) + self.menu_2.addAction(self.about_item) + self.menu_3.addSeparator() + self.menu_3.addAction(self.settings_item) + self.menu_4.addAction(self.join_item) + self.menu_4.addAction(self.leave_item) + self.menu_4.addSeparator() + self.menu_4.addAction(self.msg_history) + self.menubar.addAction(self.menu.menuAction()) + self.menubar.addAction(self.menu_4.menuAction()) + self.menubar.addAction(self.menu_3.menuAction()) + self.menubar.addAction(self.menu_2.menuAction()) + + self.retranslateUi(MainWindow) + self.tabs.setCurrentIndex(-1) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + _translate = QtCore.QCoreApplication.translate + MainWindow.setWindowTitle(_translate("MainWindow", "Tinelix IRC Client")) + self.conn_quality_label.setText(_translate("MainWindow", "Качество соединения:")) + self.conn_quality_progr.setFormat(_translate("MainWindow", "%p%")) + self.latency_label.setText(_translate("MainWindow", "(2 ms)")) + self.menu.setTitle(_translate("MainWindow", "Файл")) + self.menu_2.setTitle(_translate("MainWindow", "Справка")) + self.menu_3.setTitle(_translate("MainWindow", "Вид")) + self.menu_4.setTitle(_translate("MainWindow", "Канал")) + self.about_item.setText(_translate("MainWindow", "О программе...")) + self.about_Qt_item.setText(_translate("MainWindow", "О Qt...")) + self.connect_item.setText(_translate("MainWindow", "Подключиться")) + self.quit_item.setText(_translate("MainWindow", "Выход")) + self.history_cb_action.setText(_translate("MainWindow", "Сохранить историю переписок")) + self.action.setText(_translate("MainWindow", "Настройки")) + self.settings_item.setText(_translate("MainWindow", "Настройки")) + self.join_item.setText(_translate("MainWindow", "Присоединиться...")) + self.leave_item.setText(_translate("MainWindow", "Покинуть")) + self.members_list_item.setText(_translate("MainWindow", "Список участников")) + self.msg_history.setText(_translate("MainWindow", "История")) +import resources_rc diff --git a/mainform.ui b/mainform.ui index 61a2882..4ba8006 100644 --- a/mainform.ui +++ b/mainform.ui @@ -93,18 +93,34 @@ color: rgb(255, 255, 255); 0 + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 2 + 20 + + + + 100 - 0 + 20 220 - 16777215 + 20 @@ -156,6 +172,18 @@ color: rgb(255, 255, 255); + + + 0 + 20 + + + + + 16777215 + 20 + + color: rgb(74, 74, 74) @@ -169,6 +197,18 @@ color: rgb(255, 255, 255); + + + 20 + 0 + + + + + 16777215 + 20 + + 8 @@ -184,13 +224,13 @@ color: rgb(255, 255, 255); 0 - 18 + 20 80 - 16777215 + 20 @@ -228,7 +268,13 @@ color: rgb(255, 255, 255); 35 - 0 + 20 + + + + + 16777215 + 20 @@ -243,6 +289,38 @@ color: rgb(255, 255, 255); + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 22 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 2 + 20 + + + +
@@ -255,7 +333,7 @@ color: rgb(255, 255, 255); 0 0 595 - 29 + 21
diff --git a/translator.py b/translator.py index 63080d0..2752147 100644 --- a/translator.py +++ b/translator.py @@ -31,6 +31,8 @@ def translate_001(mainclass, form, language, en_US, ru_RU): if mainclass.child_widget.message_text.isEnabled() == False: mainclass.child_widget.message_text.setText(ru_RU.get()['cantsmsg']) mainclass.ui.conn_quality_label.setText(ru_RU.get()['connqual']) + mainclass.child_widget.error_getting_member_list.setText(ru_RU.get()['mbgt_err']) + mainclass.child_widget.close_panel_btn.setText(ru_RU.get()['mbget_cl']) except Exception as e: print(e) elif language == 'English': @@ -50,6 +52,8 @@ def translate_001(mainclass, form, language, en_US, ru_RU): if mainclass.child_widget.message_text.isEnabled() == False: mainclass.child_widget.message_text.setText(en_US.get()['cantsmsg']) mainclass.ui.conn_quality_label.setText(en_US.get()['connqual']) + mainclass.child_widget.error_getting_member_list.setText(en_US.get()['mbgt_err']) + mainclass.child_widget.close_panel_btn.setText(en_US.get()['mbget_cl']) except Exception as e: print(e) try: @@ -134,6 +138,7 @@ def translate_005(mainclass, form, language, en_US, ru_RU): form.msgs_hint.setText(ru_RU.get()['msgshtcb']) form.backlight_cb.setText(ru_RU.get()['msgbclcb']) form.font_label.setText(ru_RU.get()['msg_font']) + form.parsing_debugger_cb.setText(ru_RU.get()['parsdbg']) except Exception as e: print(e) elif language == 'English': @@ -145,6 +150,7 @@ def translate_005(mainclass, form, language, en_US, ru_RU): form.msgs_hint.setText(en_US.get()['msgshtcb']) form.backlight_cb.setText(en_US.get()['msgbclcb']) form.font_label.setText(en_US.get()['msg_font']) + form.parsing_debugger_cb.setText(en_US.get()['parsdbg']) except Exception as e: print(e)