diff --git a/.gitignore b/.gitignore index da8f3af..0a8182a 100644 --- a/.gitignore +++ b/.gitignore @@ -26,4 +26,3 @@ Toxygen.egg-info .cache *.db -*.junk diff --git a/README.md b/README.md index 6f0488d..cf8bc46 100644 --- a/README.md +++ b/README.md @@ -55,5 +55,12 @@ is making a dependency. Just download it and copy the two directories See ToDo.md to the current ToDo list. +If you install https://github.com/weechat/qweechat +you can have IRC and jabber in a window too. Start +[weechat](https://github.com/weechat/weechat) and +``` +/relay weechat 9000 password +``` + Work on this project is suspended until the [MultiDevice](https://git.plastiras.org/emdee/tox_profile/wiki/MultiDevice-Announcements-POC) problem is solved. Fork me! diff --git a/toxygen/app.py b/toxygen/app.py index 3b54058..3b8fe61 100644 --- a/toxygen/app.py +++ b/toxygen/app.py @@ -1,19 +1,18 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- import os import sys -import threading import traceback from random import shuffle +import threading from time import sleep +from gevent import monkey; monkey.patch_all(); del monkey # noqa import gevent -from PyQt5 import QtCore, QtGui, QtWidgets + +from PyQt5 import QtWidgets, QtGui, QtCore from qtpy.QtCore import QTimer from qtpy.QtWidgets import QApplication -from gevent import monkey; monkey.patch_all(); del monkey # noqa - - try: import coloredlogs if 'COLOREDLOGS_LEVEL_STYLES' not in os.environ: @@ -22,27 +21,29 @@ try: except ImportError as e: coloredlogs = False -try: - # https://github.com/pyqtconsole/pyqtconsole - from pyqtconsole.console import PythonConsole -except Exception as e: - PythonConsole = None - -try: - import qdarkstylexxx -except ImportError: - qdarkstyle = None - -import wrapper_tests.support_testing as ts +# install https://github.com/weechat/qweechat +# if you want IRC and jabber +from middleware import threads import middleware.callbacks as callbacks -import styles.style # TODO: dynamic loading -import ui.password_screen as password_screen import updater.updater as updater +from middleware.tox_factory import tox_factory +import wrapper.toxencryptsave as tox_encrypt_save import user_data.toxes +from user_data import settings +from user_data.settings import get_user_config_path, merge_args_into_settings +from user_data.settings import Settings +from user_data.profile_manager import ProfileManager + +from plugin_support.plugin_support import PluginLoader + +import ui.password_screen as password_screen +from ui.login_screen import LoginScreen +from ui.main_screen import MainWindow +from ui import tray + import utils.ui as util_ui import utils.util as util -import wrapper.toxencryptsave as tox_encrypt_save from av.calls_manager import CallsManager from common.provider import Provider from contacts.contact_provider import ContactProvider @@ -52,32 +53,23 @@ from contacts.group_factory import GroupFactory from contacts.group_peer_factory import GroupPeerFactory from contacts.profile import Profile from file_transfers.file_transfers_handler import FileTransfersHandler -from file_transfers.file_transfers_messages_service import \ - FileTransfersMessagesService +from file_transfers.file_transfers_messages_service import FileTransfersMessagesService from groups.groups_service import GroupsService from history.database import Database from history.history import History from messenger.messenger import Messenger -from middleware import threads -from middleware.tox_factory import tox_factory from network.tox_dns import ToxDns -from plugin_support.plugin_support import PluginLoader from smileys.smileys import SmileyLoader -from ui import tray from ui.create_profile_screen import CreateProfileScreen -from ui.items_factories import ContactItemsFactory, MessagesItemsFactory -from ui.login_screen import LoginScreen -from ui.main_screen import MainWindow +from ui.items_factories import MessagesItemsFactory, ContactItemsFactory from ui.widgets_factory import WidgetsFactory -from user_data import settings from user_data.backup_service import BackupService -from user_data.profile_manager import ProfileManager -from user_data.settings import (Settings, get_user_config_path, - merge_args_into_settings) +import styles.style # TODO: dynamic loading + +import wrapper_tests.support_testing as ts global LOG import logging - LOG = logging.getLogger('app') IDLE_PERIOD = 0.10 @@ -148,8 +140,6 @@ sSTYLE = """ .QToolBar { font-weight: bold; } """ from copy import deepcopy - - class App: def __init__(self, version, oArgs): @@ -287,7 +277,7 @@ class App: self._app.quit() del self._app.quit del self._app - + sys.stderr.write('quit raising SystemExit' +'\n') # hanging on gevents # Thread 1 "python3.9" received signal SIGSEGV, Segmentation fault. @@ -311,7 +301,7 @@ class App: if hasattr(self, '_tray') and self._tray: self._tray.hide() self._settings.close() - + LOG.debug(f"stop_app: Killing {self._tox}") self._kill_toxav() self._kill_tox() diff --git a/toxygen/av/calls.py b/toxygen/av/calls.py index 39da327..ba34744 100644 --- a/toxygen/av/calls.py +++ b/toxygen/av/calls.py @@ -1,22 +1,22 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- -import itertools -import threading -import time - import pyaudio -import wrapper_tests.support_testing as ts +import time +import threading +import itertools -import common.tox_save +from wrapper.toxav_enums import * from av import screen_sharing from av.call import Call -from main import sleep -from middleware.threads import BaseThread, invoke_in_main_thread +import common.tox_save + from utils import ui as util_ui -from wrapper.toxav_enums import * +import wrapper_tests.support_testing as ts +from middleware.threads import invoke_in_main_thread +from main import sleep +from middleware.threads import BaseThread global LOG import logging - LOG = logging.getLogger('app.'+__name__) # callbacks can be called in any thread so were being careful def LOG_ERROR(l): print('EROR< '+l) @@ -405,7 +405,7 @@ class AV(common.tox_save.ToxAvSave): if self._calls[friend_num].out_audio: try: # app.av.calls ERROR Error send_audio: One of the frame parameters was invalid. E.g. the resolution may be too small or too large, or the audio sampling rate may be unsupported - # app.av.calls ERROR Error send_audio audio_send_frame: This client is currently not in a call with the friend. + # app.av.calls ERROR Error send_audio audio_send_frame: This client is currently not in a call with the friend. self._toxav.audio_send_frame(friend_num, pcm, count, diff --git a/toxygen/av/calls_manager.py b/toxygen/av/calls_manager.py index be2ed33..12923a2 100644 --- a/toxygen/av/calls_manager.py +++ b/toxygen/av/calls_manager.py @@ -4,14 +4,13 @@ import sys import threading import av.calls -import common.event as event -import utils.ui as util_ui from messenger.messages import * from ui import av_widgets +import common.event as event +import utils.ui as util_ui global LOG import logging - LOG = logging.getLogger('app.'+__name__) class CallsManager: diff --git a/toxygen/bootstrap/bootstrap.py b/toxygen/bootstrap/bootstrap.py index 047b6e3..a700e69 100644 --- a/toxygen/bootstrap/bootstrap.py +++ b/toxygen/bootstrap/bootstrap.py @@ -1,34 +1,29 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- import random import urllib.request - -from PyQt5 import QtCore, QtNetwork - from utils.util import * - +from PyQt5 import QtNetwork +from PyQt5 import QtCore try: - from io import BytesIO - import certifi + from io import BytesIO except ImportError: certifi = None -import wrapper_tests.support_testing as ts -from wrapper_tests.support_http import download_url -from wrapper_tests.support_testing import _get_nodes_path - from user_data.settings import get_user_config_path +from wrapper_tests.support_testing import _get_nodes_path +from wrapper_tests.support_http import download_url +import wrapper_tests.support_testing as ts global LOG import logging - LOG = logging.getLogger('app.'+'bootstrap') def download_nodes_list(settings, oArgs): if not settings['download_nodes_list']: return '' if not ts.bAreWeConnected(): - return '' + return '' url = settings['download_nodes_url'] path = _get_nodes_path(oArgs=oArgs) # dont download blindly so we can edit the file and not block on startup diff --git a/toxygen/contacts/basecontact.py b/toxygen/contacts/basecontact.py index bb5412c..ba7daa2 100644 --- a/toxygen/contacts/basecontact.py +++ b/toxygen/contacts/basecontact.py @@ -1,11 +1,10 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- +from user_data.settings import * from PyQt5 import QtCore, QtGui - +from wrapper.toxcore_enums_and_consts import TOX_PUBLIC_KEY_SIZE +import utils.util as util import common.event as event import contacts.common as common -import utils.util as util -from user_data.settings import * -from wrapper.toxcore_enums_and_consts import TOX_PUBLIC_KEY_SIZE class BaseContact: diff --git a/toxygen/contacts/contact.py b/toxygen/contacts/contact.py index 9fc7f46..83ce315 100644 --- a/toxygen/contacts/contact.py +++ b/toxygen/contacts/contact.py @@ -1,16 +1,16 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- -import re +from history.database import TIMEOUT, \ + SAVE_MESSAGES, MESSAGE_AUTHOR from contacts import basecontact, common +from messenger.messages import * from contacts.contact_menu import * from file_transfers import file_transfers as ft -from history.database import MESSAGE_AUTHOR, SAVE_MESSAGES, TIMEOUT -from messenger.messages import * +import re # LOG=util.log global LOG import logging - LOG = logging.getLogger('app.'+__name__) class Contact(basecontact.BaseContact): diff --git a/toxygen/contacts/contact_menu.py b/toxygen/contacts/contact_menu.py index ca3c1e9..0e4922e 100644 --- a/toxygen/contacts/contact_menu.py +++ b/toxygen/contacts/contact_menu.py @@ -6,7 +6,6 @@ from wrapper.toxcore_enums_and_consts import * global LOG import logging - LOG = logging.getLogger('app') # ----------------------------------------------------------------------------------------------------------------- diff --git a/toxygen/contacts/contact_provider.py b/toxygen/contacts/contact_provider.py index fd9585e..37ac7c3 100644 --- a/toxygen/contacts/contact_provider.py +++ b/toxygen/contacts/contact_provider.py @@ -4,7 +4,6 @@ import common.tox_save as tox_save global LOG import logging - LOG = logging.getLogger(__name__) # callbacks can be called in any thread so were being careful diff --git a/toxygen/contacts/contacts_manager.py b/toxygen/contacts/contacts_manager.py index 56994ac..cc8a07e 100644 --- a/toxygen/contacts/contacts_manager.py +++ b/toxygen/contacts/contacts_manager.py @@ -2,17 +2,16 @@ import traceback -from common.tox_save import ToxSave from contacts.friend import Friend from contacts.group_chat import GroupChat +from messenger.messages import * +from common.tox_save import ToxSave from contacts.group_peer_contact import GroupPeerContact from groups.group_peer import GroupChatPeer -from messenger.messages import * # LOG=util.log global LOG import logging - LOG = logging.getLogger('app.'+__name__) def LOG_ERROR(l): print('ERROR_: '+l) diff --git a/toxygen/contacts/friend.py b/toxygen/contacts/friend.py index f5bb7d0..5c8eabb 100644 --- a/toxygen/contacts/friend.py +++ b/toxygen/contacts/friend.py @@ -1,8 +1,7 @@ -import os - -from contacts import common, contact -from contacts.contact_menu import * +from contacts import contact, common from messenger.messages import * +import os +from contacts.contact_menu import * class Friend(contact.Contact): diff --git a/toxygen/contacts/group_chat.py b/toxygen/contacts/group_chat.py index 1561caf..74ac0e4 100644 --- a/toxygen/contacts/group_chat.py +++ b/toxygen/contacts/group_chat.py @@ -1,16 +1,15 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- -import utils.util as util -from common.tox_save import ToxSave from contacts import contact from contacts.contact_menu import GroupMenuGenerator -from groups.group_ban import GroupBan +import utils.util as util from groups.group_peer import GroupChatPeer from wrapper import toxcore_enums_and_consts as constants +from common.tox_save import ToxSave +from groups.group_ban import GroupBan global LOG import logging - LOG = logging.getLogger(__name__) def LOG_ERROR(l): print('ERROR_: '+l) def LOG_WARN(l): print('WARN_: '+l) diff --git a/toxygen/contacts/group_factory.py b/toxygen/contacts/group_factory.py index 8ff9d13..ecbe6b5 100644 --- a/toxygen/contacts/group_factory.py +++ b/toxygen/contacts/group_factory.py @@ -1,12 +1,11 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- -import wrapper.toxcore_enums_and_consts as constants -from common.tox_save import ToxSave from contacts.group_chat import GroupChat +from common.tox_save import ToxSave +import wrapper.toxcore_enums_and_consts as constants global LOG import logging - LOG = logging.getLogger(__name__) class GroupFactory(ToxSave): @@ -20,7 +19,7 @@ class GroupFactory(ToxSave): def create_group_by_chat_id(self, chat_id): return self.create_group_by_public_key(chat_id) - + def create_group_by_public_key(self, public_key): group_number = self._get_group_number_by_chat_id(public_key) return self.create_group_by_number(group_number) diff --git a/toxygen/contacts/profile.py b/toxygen/contacts/profile.py index efe5500..ed816d9 100644 --- a/toxygen/contacts/profile.py +++ b/toxygen/contacts/profile.py @@ -1,16 +1,14 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- +from contacts import basecontact import random import threading - import common.tox_save as tox_save -from contacts import basecontact from middleware.threads import invoke_in_main_thread iUMAXINT = 4294967295 global LOG import logging - LOG = logging.getLogger('app.'+__name__) class Profile(basecontact.BaseContact, tox_save.ToxSave): diff --git a/toxygen/file_transfers/file_transfers_handler.py b/toxygen/file_transfers/file_transfers_handler.py index 9404b7a..673b1fe 100644 --- a/toxygen/file_transfers/file_transfers_handler.py +++ b/toxygen/file_transfers/file_transfers_handler.py @@ -1,17 +1,14 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- -from copy import deepcopy - -from wrapper_tests.support_testing import assert_main_thread - -import utils.util as util -from common.tox_save import ToxSave from messenger.messages import * from ui.contact_items import * +import utils.util as util +from common.tox_save import ToxSave +from wrapper_tests.support_testing import assert_main_thread +from copy import deepcopy # LOG=util.log global LOG import logging - LOG = logging.getLogger('app.'+__name__) log = lambda x: LOG.info(x) diff --git a/toxygen/file_transfers/file_transfers_messages_service.py b/toxygen/file_transfers/file_transfers_messages_service.py index 6dea6a1..d51f748 100644 --- a/toxygen/file_transfers/file_transfers_messages_service.py +++ b/toxygen/file_transfers/file_transfers_messages_service.py @@ -1,10 +1,9 @@ +from messenger.messenger import * import utils.util as util from file_transfers.file_transfers import * -from messenger.messenger import * global LOG import logging - LOG = logging.getLogger('app.'+__name__) def LOG_ERROR(l): print('ERROR_: '+l) diff --git a/toxygen/groups/groups_service.py b/toxygen/groups/groups_service.py index e2f0ebf..d329d6d 100644 --- a/toxygen/groups/groups_service.py +++ b/toxygen/groups/groups_service.py @@ -2,15 +2,14 @@ import common.tox_save as tox_save import utils.ui as util_ui -import wrapper.toxcore_enums_and_consts as constants -from groups.group_invite import GroupInvite from groups.peers_list import PeersListGenerator -from wrapper.tox import UINT32_MAX +from groups.group_invite import GroupInvite +import wrapper.toxcore_enums_and_consts as constants from wrapper.toxcore_enums_and_consts import * +from wrapper.tox import UINT32_MAX global LOG import logging - LOG = logging.getLogger('app.'+'gs') class GroupsService(tox_save.ToxSave): diff --git a/toxygen/groups/peers_list.py b/toxygen/groups/peers_list.py index 4ae653d..17495f5 100644 --- a/toxygen/groups/peers_list.py +++ b/toxygen/groups/peers_list.py @@ -1,6 +1,7 @@ from ui.group_peers_list import PeerItem, PeerTypeItem -from ui.widgets import * from wrapper.toxcore_enums_and_consts import * +from ui.widgets import * + # ----------------------------------------------------------------------------------------------------------------- # Builder diff --git a/toxygen/history/database.py b/toxygen/history/database.py index b679fde..f91e4cc 100644 --- a/toxygen/history/database.py +++ b/toxygen/history/database.py @@ -1,12 +1,10 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- -import os.path from sqlite3 import connect - +import os.path import utils.util as util global LOG import logging - LOG = logging.getLogger('app.db') TIMEOUT = 11 diff --git a/toxygen/history/history.py b/toxygen/history/history.py index 43ecdd1..c141ba7 100644 --- a/toxygen/history/history.py +++ b/toxygen/history/history.py @@ -3,7 +3,6 @@ from history.history_logs_generators import * global LOG import logging - LOG = logging.getLogger('app.db') class History: @@ -67,7 +66,7 @@ class History: with open(file_name, 'wt') as fl: fl.write(history) LOG.info(f"wrote history to {file_name}") - + def delete_message(self, message): contact = self._contacts_manager.get_curr_contact() if message.type in (MESSAGE_TYPE['TEXT'], MESSAGE_TYPE['ACTION']): diff --git a/toxygen/main.py b/toxygen/main.py index 3e95a80..d7b6534 100644 --- a/toxygen/main.py +++ b/toxygen/main.py @@ -1,24 +1,21 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- -import argparse -import faulthandler -import logging -import os -import signal import sys - +import os import app +import argparse +import logging +import signal +import faulthandler faulthandler.enable() import warnings - warnings.filterwarnings('ignore') import wrapper_tests.support_testing as ts - try: - from trepan.api import debug from trepan.interfaces import server as Mserver + from trepan.api import debug except: print('trepan3 TCP server NOT enabled.') else: @@ -28,11 +25,10 @@ else: print('trepan3 TCP server enabled on port 6666.') except: pass -import utils.util as util -from user_data import settings from user_data.settings import * from user_data.settings import Settings - +from user_data import settings +import utils.util as util with ts.ignoreStderr(): import pyaudio @@ -40,7 +36,6 @@ __maintainer__ = 'Ingvar' __version__ = '0.5.0+' import time - sleep = time.sleep def reset(): @@ -358,14 +353,7 @@ def main(lArgs): if getattr(default_ns, key) == getattr(oArgs, key): delattr(oArgs, key) - for key in ts.lBOOLEANS: - if not hasattr(oArgs, key): continue - val = getattr(oArgs, key) - if type(val) == bool: continue - if val in ['False', 'false', '0']: - setattr(oArgs, key, False) - else: - setattr(oArgs, key, True) + ts.clean_booleans(oArgs) aArgs = A() for key in oArgs.__dict__.keys(): diff --git a/toxygen/messenger/messenger.py b/toxygen/messenger/messenger.py index 28893fa..9e6b807 100644 --- a/toxygen/messenger/messenger.py +++ b/toxygen/messenger/messenger.py @@ -1,14 +1,13 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- -from wrapper_tests.support_testing import assert_main_thread - import common.tox_save as tox_save import utils.ui as util_ui + from messenger.messages import * +from wrapper_tests.support_testing import assert_main_thread from wrapper.toxcore_enums_and_consts import TOX_MAX_MESSAGE_LENGTH global LOG import logging - LOG = logging.getLogger('app.'+__name__) log = lambda x: LOG.info(x) @@ -31,7 +30,7 @@ class Messenger(tox_save.ToxSave): def __repr__(self): return "" - + def get_last_message(self): contact = self._contacts_manager.get_curr_contact() if contact is None: @@ -90,7 +89,7 @@ class Messenger(tox_save.ToxSave): text = 'Error: ' + str(e) assert_main_thread() util_ui.message_box(text, title) - + def send_message_to_friend(self, text, message_type, friend_number=None): """ Send message @@ -201,7 +200,7 @@ class Messenger(tox_save.ToxSave): return if peer_id and peer_id < 0: return - + assert_main_thread() # FixMe: peer_id is None? group_peer_contact = self._contacts_manager.get_or_create_group_peer_contact(group_number, peer_id) diff --git a/toxygen/middleware/callbacks.py b/toxygen/middleware/callbacks.py index af4dd91..2aed257 100644 --- a/toxygen/middleware/callbacks.py +++ b/toxygen/middleware/callbacks.py @@ -1,19 +1,17 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- -import os import sys +import os import threading -from datetime import datetime - from PyQt5 import QtGui - +from wrapper.toxcore_enums_and_consts import * +from wrapper.toxav_enums import * +from wrapper.tox import bin_to_string import utils.ui as util_ui import utils.util as util -from middleware.threads import execute, invoke_in_main_thread -from notifications.sound import * +from middleware.threads import invoke_in_main_thread, execute from notifications.tray import tray_notification -from wrapper.tox import bin_to_string -from wrapper.toxav_enums import * -from wrapper.toxcore_enums_and_consts import * +from notifications.sound import * +from datetime import datetime iMAX_INT32 = 4294967295 # callbacks can be called in any thread so were being careful diff --git a/toxygen/middleware/threads.py b/toxygen/middleware/threads.py index 00ec753..7f1232e 100644 --- a/toxygen/middleware/threads.py +++ b/toxygen/middleware/threads.py @@ -1,23 +1,21 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- -import queue import sys import threading -import time - -import wrapper_tests.support_testing as ts +import queue from PyQt5 import QtCore from bootstrap.bootstrap import * from bootstrap.bootstrap import download_nodes_list +from wrapper.toxcore_enums_and_consts import TOX_USER_STATUS, TOX_CONNECTION +import wrapper_tests.support_testing as ts from utils import util -from wrapper.toxcore_enums_and_consts import TOX_CONNECTION, TOX_USER_STATUS +import time sleep = time.sleep # LOG=util.log global LOG import logging - LOG = logging.getLogger('app.'+'threads') # log = lambda x: LOG.info(x) @@ -124,7 +122,7 @@ class ToxIterateThread(BaseQThread): super().__init__() self._tox = tox self._app = app - + def run(self): LOG_DEBUG('ToxIterateThread run: ') while not self._stop_thread: @@ -136,15 +134,14 @@ class ToxIterateThread(BaseQThread): LOG_ERROR(f"ToxIterateThread run: {e}") else: sleep(iMsec / 1000.0) - + global iLAST_CONN if not iLAST_CONN: iLAST_CONN = time.time() # TRAC> TCP_common.c#203:read_TCP_packet recv buffer has 0 bytes, but requested 10 bytes # and segv - if \ - time.time() - iLAST_CONN > iLAST_DELTA and \ + if time.time() - iLAST_CONN > iLAST_DELTA and \ ts.bAreWeConnected() and \ self._tox.self_get_status() == TOX_USER_STATUS['NONE'] and \ self._tox.self_get_connection_status() == TOX_CONNECTION['NONE']: @@ -152,7 +149,7 @@ class ToxIterateThread(BaseQThread): LOG_INFO(f"ToxIterateThread calling test_net") invoke_in_main_thread( self._app.test_net, oThread=self, iMax=2) - + class ToxAVIterateThread(BaseQThread): def __init__(self, toxav): diff --git a/toxygen/middleware/tox_factory.py b/toxygen/middleware/tox_factory.py index 29cf449..a8e1815 100644 --- a/toxygen/middleware/tox_factory.py +++ b/toxygen/middleware/tox_factory.py @@ -1,22 +1,18 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- -import ctypes -import os -import traceback - import user_data.settings import wrapper.tox import wrapper.toxcore_enums_and_consts as enums +import ctypes +import traceback +import os global LOG import logging - LOG = logging.getLogger('app.'+'tox_factory') from ctypes import * - -from utils import ui as util_ui from utils import util - +from utils import ui as util_ui # callbacks can be called in any thread so were being careful # tox.py can be called by callbacks @@ -53,12 +49,12 @@ def tox_log_cb(iTox, level, file, line, func, message, *args): except Exception as e: LOG_ERROR(f"tox_log_cb {e}") -#tox_log_handler (context=0x24763d0, -# level=LOGGER_LEVEL_TRACE, file=0x7fffe599fb99 "TCP_common.c", line=203, -# func=0x7fffe599fc50 <__func__.2> "read_TCP_packet", -# message=0x7fffba7fabd0 "recv buffer has 0 bytes, but requested 10 bytes", +#tox_log_handler (context=0x24763d0, +# level=LOGGER_LEVEL_TRACE, file=0x7fffe599fb99 "TCP_common.c", line=203, +# func=0x7fffe599fc50 <__func__.2> "read_TCP_packet", +# message=0x7fffba7fabd0 "recv buffer has 0 bytes, but requested 10 bytes", # userdata=0x0) at /var/local/src/c-toxcore/toxcore/tox.c:78 - + def tox_factory(data=None, settings=None, args=None, app=None): """ :param data: user data from .tox file. None = no saved data, create new profile diff --git a/toxygen/network/tox_dns.py b/toxygen/network/tox_dns.py index 80756d1..2de374a 100644 --- a/toxygen/network/tox_dns.py +++ b/toxygen/network/tox_dns.py @@ -1,11 +1,8 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- import json import urllib.request - -from PyQt5 import QtCore, QtNetwork - import utils.util as util - +from PyQt5 import QtNetwork, QtCore try: import requests except ImportError: @@ -13,7 +10,6 @@ except ImportError: global LOG import logging - LOG = logging.getLogger('app.'+__name__) class ToxDns: diff --git a/toxygen/notifications/sound.py b/toxygen/notifications/sound.py index 99567f3..a106e80 100644 --- a/toxygen/notifications/sound.py +++ b/toxygen/notifications/sound.py @@ -1,13 +1,10 @@ -import os.path -import wave - -import pyaudio - import utils.util +import wave +import pyaudio +import os.path global LOG import logging - LOG = logging.getLogger('app.'+__name__) SOUND_NOTIFICATION = { diff --git a/toxygen/plugin_support/plugin_support.py b/toxygen/plugin_support/plugin_support.py index 98c4f8f..2bb7f40 100644 --- a/toxygen/plugin_support/plugin_support.py +++ b/toxygen/plugin_support/plugin_support.py @@ -1,16 +1,14 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- +import utils.util as util +import os import importlib import inspect -import os -import sys - import plugins.plugin_super_class as pl -import utils.util as util +import sys # LOG=util.log global LOG import logging - LOG = logging.getLogger('plugin_support') def trace(msg, *args, **kwargs): LOG._log(0, msg, []) LOG.trace = trace diff --git a/toxygen/smileys/smileys.py b/toxygen/smileys/smileys.py index b6a9f50..43ae3fd 100644 --- a/toxygen/smileys/smileys.py +++ b/toxygen/smileys/smileys.py @@ -1,15 +1,12 @@ +from utils import util import json import os from collections import OrderedDict - from PyQt5 import QtCore -from utils import util - # LOG=util.log global LOG import logging - LOG = logging.getLogger('app.'+__name__) log = lambda x: LOG.info(x) diff --git a/toxygen/stickers/stickers.py b/toxygen/stickers/stickers.py index 0e82f62..14142c7 100644 --- a/toxygen/stickers/stickers.py +++ b/toxygen/stickers/stickers.py @@ -1,5 +1,4 @@ import os - import utils.util as util diff --git a/toxygen/ui/av_widgets.py b/toxygen/ui/av_widgets.py index d321911..717b022 100644 --- a/toxygen/ui/av_widgets.py +++ b/toxygen/ui/av_widgets.py @@ -1,16 +1,15 @@ import threading + +from PyQt5 import QtCore, QtGui, QtWidgets +import pyaudio import wave -import pyaudio -import wrapper_tests.support_testing as ts -from PyQt5 import QtCore, QtGui, QtWidgets - -import utils.util as util from ui import widgets +import utils.util as util +import wrapper_tests.support_testing as ts global LOG import logging - LOG = logging.getLogger('app.'+__name__) class IncomingCallWidget(widgets.CenteredWidget): diff --git a/toxygen/ui/contact_items.py b/toxygen/ui/contact_items.py index 99190a5..98a1dcd 100644 --- a/toxygen/ui/contact_items.py +++ b/toxygen/ui/contact_items.py @@ -1,8 +1,7 @@ -from PyQt5 import QtCore, QtGui, QtWidgets - -from ui.widgets import DataLabel -from utils.util import * from wrapper.toxcore_enums_and_consts import * +from PyQt5 import QtCore, QtGui, QtWidgets +from utils.util import * +from ui.widgets import DataLabel class ContactItem(QtWidgets.QWidget): diff --git a/toxygen/ui/create_profile_screen.py b/toxygen/ui/create_profile_screen.py index 4755a04..512c141 100644 --- a/toxygen/ui/create_profile_screen.py +++ b/toxygen/ui/create_profile_screen.py @@ -1,8 +1,7 @@ -from PyQt5 import uic - -import utils.ui as util_ui -import utils.util as util from ui.widgets import * +from PyQt5 import uic +import utils.util as util +import utils.ui as util_ui class CreateProfileScreenResult: diff --git a/toxygen/ui/group_bans_widgets.py b/toxygen/ui/group_bans_widgets.py index 5d32f2e..f1ec3cf 100644 --- a/toxygen/ui/group_bans_widgets.py +++ b/toxygen/ui/group_bans_widgets.py @@ -1,8 +1,7 @@ -from PyQt5 import QtCore, QtWidgets, uic - -import utils.ui as util_ui -import utils.util as util from ui.widgets import CenteredWidget +from PyQt5 import uic, QtWidgets, QtCore +import utils.util as util +import utils.ui as util_ui class GroupBanItem(QtWidgets.QWidget): diff --git a/toxygen/ui/group_invites_widgets.py b/toxygen/ui/group_invites_widgets.py index 360a8fe..ff61370 100644 --- a/toxygen/ui/group_invites_widgets.py +++ b/toxygen/ui/group_invites_widgets.py @@ -1,11 +1,9 @@ -from PyQt5 import QtWidgets, uic - +from PyQt5 import uic, QtWidgets import utils.util as util from ui.widgets import * global LOG import logging - LOG = logging.getLogger('app') class GroupInviteItem(QtWidgets.QWidget): diff --git a/toxygen/ui/group_settings_widgets.py b/toxygen/ui/group_settings_widgets.py index 574dba1..45b0ad6 100644 --- a/toxygen/ui/group_settings_widgets.py +++ b/toxygen/ui/group_settings_widgets.py @@ -1,9 +1,7 @@ -from PyQt5 import uic - -import utils.ui as util_ui -import utils.util as util from ui.widgets import CenteredWidget - +from PyQt5 import uic +import utils.util as util +import utils.ui as util_ui class GroupManagementScreen(CenteredWidget): diff --git a/toxygen/ui/groups_widgets.py b/toxygen/ui/groups_widgets.py index 5470a12..ad4b703 100644 --- a/toxygen/ui/groups_widgets.py +++ b/toxygen/ui/groups_widgets.py @@ -1,5 +1,4 @@ from PyQt5 import uic - import utils.util as util from ui.widgets import * from wrapper.toxcore_enums_and_consts import * diff --git a/toxygen/ui/items_factories.py b/toxygen/ui/items_factories.py index 9daa1b1..02ef31e 100644 --- a/toxygen/ui/items_factories.py +++ b/toxygen/ui/items_factories.py @@ -44,7 +44,7 @@ class MessagesItemsFactory: self._messages.setItemWidget(elem, item) return item - + # File "/var/local/src/toxygen/toxygen/file_transfers/file_transfers_handler.py", line 216, in transfer_finished # self._file_transfers_message_service.add_inline_message(transfer, index) # File "/var/local/src/toxygen/toxygen/file_transfers/file_transfers_messages_service.py", line 47, in add_inline_message diff --git a/toxygen/ui/login_screen.py b/toxygen/ui/login_screen.py index 0cdcf1c..35e33b5 100644 --- a/toxygen/ui/login_screen.py +++ b/toxygen/ui/login_screen.py @@ -1,10 +1,8 @@ -import os.path - -from PyQt5 import uic - -import utils.ui as util_ui -import utils.util as util from ui.widgets import * +from PyQt5 import uic +import utils.util as util +import utils.ui as util_ui +import os.path class LoginScreenResult: diff --git a/toxygen/ui/main_screen.py b/toxygen/ui/main_screen.py index 71489ad..045f2c5 100644 --- a/toxygen/ui/main_screen.py +++ b/toxygen/ui/main_screen.py @@ -1,17 +1,18 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- -import logging import os -from PyQt5 import QtGui, QtWidgets, uic -from qtpy.QtGui import QColor, QFont, QSyntaxHighlighter, QTextCharFormat +from PyQt5 import uic +from PyQt5 import QtWidgets, QtGui +from qtpy.QtGui import (QColor, QTextCharFormat, QFont, QSyntaxHighlighter) -import utils.ui as util_ui -import utils.util as util from ui.contact_items import * -from ui.main_screen_widgets import * from ui.widgets import MultilineEdit +from ui.main_screen_widgets import * +import utils.util as util +import utils.ui as util_ui from user_data.settings import Settings +import logging global LOG LOG = logging.getLogger('app.'+'mains') @@ -19,8 +20,8 @@ iMAX = 70 try: # https://github.com/pyqtconsole/pyqtconsole - import pyqtconsole.highlighter as hl from pyqtconsole.console import PythonConsole + import pyqtconsole.highlighter as hl except Exception as e: LOG.warn(e) PythonConsole = None @@ -62,7 +63,7 @@ else: else: bg = 'black' def hl_format(color, style=''): - + """Return a QTextCharFormat with the given attributes. unused """ @@ -93,7 +94,6 @@ else: 'inprompt': hl_format('lightBlue', 'bold'), 'outprompt': hl_format('lightRed', 'bold'), } - class QTextEditLogger(logging.Handler): def __init__(self, parent, app): @@ -176,6 +176,7 @@ class MainWindow(QtWidgets.QMainWindow): iMAX = settings['width'] * 2/3 / settings['message_font_size'] self._me = LogDialog(self, app) self._pe = None + self._we = None def set_dependencies(self, widget_factory, tray, contacts_manager, messenger, profile, plugins_loader, file_transfer_handler, history_loader, calls_manager, groups_service, toxes, app): @@ -249,6 +250,8 @@ class MainWindow(QtWidgets.QMainWindow): self.actionLog_console.setObjectName("actionLog_console") self.actionPython_console = QtWidgets.QAction(window) self.actionPython_console.setObjectName("actionLog_console") + self.actionWeechat_console = QtWidgets.QAction(window) + self.actionWeechat_console.setObjectName("actionLog_console") self.updateSettings = QtWidgets.QAction(window) self.actionSettings = QtWidgets.QAction(window) self.actionSettings.setObjectName("actionSettings") @@ -289,6 +292,7 @@ class MainWindow(QtWidgets.QMainWindow): self.menuPlugins.addAction(self.reloadToxchat) self.menuPlugins.addAction(self.actionLog_console) self.menuPlugins.addAction(self.actionPython_console) + self.menuPlugins.addAction(self.actionWeechat_console) self.menuAbout.addAction(self.actionAbout_program) @@ -306,6 +310,7 @@ class MainWindow(QtWidgets.QMainWindow): self.actionAbout_program.triggered.connect(self.about_program) self.actionLog_console.triggered.connect(self.log_console) self.actionPython_console.triggered.connect(self.python_console) + self.actionWeechat_console.triggered.connect(self.weechat_console) self.actionNetwork.triggered.connect(self.network_settings) self.actionAdd_friend.triggered.connect(self.add_contact_triggered) self.createGC.triggered.connect(self.create_gc) @@ -360,6 +365,7 @@ class MainWindow(QtWidgets.QMainWindow): self.actionAbout_program.setText(util_ui.tr("About program")) self.actionLog_console.setText(util_ui.tr("Console Log")) self.actionPython_console.setText(util_ui.tr("Python Console")) + self.actionWeechat_console.setText(util_ui.tr("Weechat Console")) self.actionTest_tox.setText(util_ui.tr("Bootstrap")) self.actionTest_nmap.setText(util_ui.tr("Test Nodes")) self.actionTest_main.setText(util_ui.tr("Test Program")) @@ -654,44 +660,103 @@ class MainWindow(QtWidgets.QMainWindow): self._me.show() def python_console(self): - if PythonConsole: - app = self._app - if app and app._settings: - size = app._settings['message_font_size'] - font_name = app._settings['font'] - else: - size = 12 - font_name = "Courier New" + if not PythonConsole: return + app = self._app + if app and app._settings: + size = app._settings['message_font_size'] + font_name = app._settings['font'] + else: + size = 12 + font_name = "Courier New" - size = font_width = 10 - font_name = "DejaVu Sans Mono" + size = font_width = 10 + font_name = "DejaVu Sans Mono" - try: - if not self._pe: - self._pe = PythonConsole(formats=aFORMATS) - self._pe.setWindowTitle('variable: app is the application') + try: + if not self._pe: + self._pe = PythonConsole(formats=aFORMATS) + self._pe.setWindowTitle('variable: app is the application') # self._pe.edit.setStyleSheet('foreground: white; background-color: black;}') - # Fix the pyconsole geometry - - font = self._pe.edit.document().defaultFont() + # Fix the pyconsole geometry + + font = self._pe.edit.document().defaultFont() + font.setFamily(font_name) + font.setBold(True) + if font_width is None: + font_width = QFontMetrics(font).width('M') + self._pe.setFont(font) + geometry = self._pe.geometry() + geometry.setWidth(font_width*80+20) + geometry.setHeight(font_width*40) + self._pe.setGeometry(geometry) + self._pe.resize(font_width*80+20, font_width*40) + + self._pe.show() + self._pe.eval_queued() + # or self._pe.eval_in_thread() + return + except Exception as e: + LOG.debug(e) + + def weechat_console(self): + try: + from qweechat.qweechat import MainWindow as MainWindow + LOG.info("Adding WeechatConsole") + except Exception as e: + LOG.exception(f"ERROR WeechatConsole {e} {sys.path}") + MainWindow = None + return + LOG.debug(f"calling {MainWindow}") + if not MainWindow: return + class WeechatConsole(MainWindow): + def __init__(self, *args): + MainWindow.__init__(self, *args) + + def closeEvent(self, event): + """Called when QWeeChat window is closed.""" + self.network.disconnect_weechat() + if self.network.debug_dialog: + self.network.debug_dialog.close() + config.write(self.config) + app = self._app + if app and app._settings: + size = app._settings['message_font_size'] + font_name = app._settings['font'] + else: + size = 12 + font_name = "Courier New" + + size = font_width = 10 + font_name = "DejaVu Sans Mono" + + try: + if not self._we: + LOG.debug("creating WeechatConsole") + self._we = WeechatConsole() +# self._we.setWindowTitle('variable: app is the application') +# self._we.edit.setStyleSheet('foreground: white; background-color: black;}') + # Fix the pyconsole geometry + try: + font = self._we.buffers[0].widget.chat.defaultFont() font.setFamily(font_name) font.setBold(True) if font_width is None: font_width = QFontMetrics(font).width('M') - self._pe.setFont(font) - geometry = self._pe.geometry() - geometry.setWidth(font_width*80+20) - geometry.setHeight(font_width*40) - self._pe.setGeometry(geometry) - self._pe.resize(font_width*80+20, font_width*40) - - self._pe.show() - self._pe.eval_queued() - # or self._pe.eval_in_thread() - return + self._we.setFont(font) except Exception as e: LOG.debug(e) - self._me.show() + font_width = size + geometry = self._we.geometry() + geometry.setWidth(font_width*80+20) + geometry.setHeight(font_width*40) + self._we.setGeometry(geometry) + self._we.resize(font_width*80+20, font_width*40) + + self._we.show() + # or self._we.eval_in_thread() + return + except Exception as e: + LOG.exception(f"Error creating WeechatConsole {e}") def about_program(self): # TODO: replace with window diff --git a/toxygen/ui/main_screen_widgets.py b/toxygen/ui/main_screen_widgets.py index de124b0..a506864 100644 --- a/toxygen/ui/main_screen_widgets.py +++ b/toxygen/ui/main_screen_widgets.py @@ -1,15 +1,14 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- -import re import urllib +import re from PyQt5 import QtCore, QtGui, QtWidgets -import utils.ui as util_ui +from ui.widgets import RubberBandWindow, create_menu, QRightClickButton, CenteredWidget, LineEdit import utils.util as util +import utils.ui as util_ui from stickers.stickers import load_stickers -from ui.widgets import (CenteredWidget, LineEdit, QRightClickButton, - RubberBandWindow, create_menu) class MessageArea(QtWidgets.QPlainTextEdit): @@ -37,7 +36,7 @@ class MessageArea(QtWidgets.QPlainTextEdit): self.pasteEvent(url.toString()) else: self.pasteEvent() - + elif event.key() in (QtCore.Qt.Key_Return, QtCore.Qt.Key_Enter): modifiers = event.modifiers() if modifiers & QtCore.Qt.ControlModifier or modifiers & QtCore.Qt.ShiftModifier: @@ -52,10 +51,10 @@ class MessageArea(QtWidgets.QPlainTextEdit): LOG.error(f"keyPressEvent ERROR send_message to {self._messenger}") util_ui.message_box(str(e), util_ui.tr(f"keyPressEvent ERROR send_message to {self._messenger}")) - + elif event.key() == QtCore.Qt.Key_Up and not self.toPlainText(): self.appendPlainText(self._messenger.get_last_message()) - + elif event.key() == QtCore.Qt.Key_Tab and self._contacts_manager.is_active_a_group(): text = self.toPlainText() text_cursor = self.textCursor() diff --git a/toxygen/ui/menu.py b/toxygen/ui/menu.py index dd21575..a749ab6 100644 --- a/toxygen/ui/menu.py +++ b/toxygen/ui/menu.py @@ -1,18 +1,17 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- -import pyaudio -import wrapper_tests.support_testing as ts from PyQt5 import QtCore, QtGui, QtWidgets, uic +import pyaudio -import updater.updater as updater -import utils.ui as util_ui -from ui.widgets import CenteredWidget, DataLabel, LineEdit, RubberBandWindow -from user_data import settings from user_data.settings import * from utils.util import * +from ui.widgets import CenteredWidget, DataLabel, LineEdit, RubberBandWindow +import updater.updater as updater +import utils.ui as util_ui +import wrapper_tests.support_testing as ts +from user_data import settings global LOG import logging - LOG = logging.getLogger('app.'+__name__) global oPYA diff --git a/toxygen/ui/messages_widgets.py b/toxygen/ui/messages_widgets.py index bb09132..bf4da13 100644 --- a/toxygen/ui/messages_widgets.py +++ b/toxygen/ui/messages_widgets.py @@ -1,13 +1,12 @@ -import html as h -import re - -import ui.menu as menu +from wrapper.toxcore_enums_and_consts import * import ui.widgets as widgets import utils.util as util -from file_transfers.file_transfers import * -from messenger.messages import MESSAGE_AUTHOR +import ui.menu as menu +import html as h +import re from ui.widgets import * -from wrapper.toxcore_enums_and_consts import * +from messenger.messages import MESSAGE_AUTHOR +from file_transfers.file_transfers import * class MessageBrowser(QtWidgets.QTextBrowser): diff --git a/toxygen/ui/password_screen.py b/toxygen/ui/password_screen.py index 7060a78..1e38964 100644 --- a/toxygen/ui/password_screen.py +++ b/toxygen/ui/password_screen.py @@ -1,11 +1,9 @@ +from ui.widgets import CenteredWidget, LineEdit, DialogWithResult from PyQt5 import QtCore, QtWidgets - import utils.ui as util_ui -from ui.widgets import CenteredWidget, DialogWithResult, LineEdit global LOG import logging - LOG = logging.getLogger('app.'+__name__) class PasswordArea(LineEdit): diff --git a/toxygen/ui/peer_screen.py b/toxygen/ui/peer_screen.py index b26649b..357855c 100644 --- a/toxygen/ui/peer_screen.py +++ b/toxygen/ui/peer_screen.py @@ -1,10 +1,9 @@ -from PyQt5 import uic - -import utils.ui as util_ui -import utils.util as util -import wrapper.toxcore_enums_and_consts as consts -from ui.contact_items import * from ui.widgets import CenteredWidget +from PyQt5 import uic +import utils.util as util +import utils.ui as util_ui +from ui.contact_items import * +import wrapper.toxcore_enums_and_consts as consts class PeerScreen(CenteredWidget): @@ -34,7 +33,7 @@ class PeerScreen(CenteredWidget): self.statusCircle.update(self._peer.status) self.peerNameLabel.setText(self._peer.name) self.ignorePeerCheckBox.setChecked(self._peer.is_muted) - + self.ignorePeerCheckBox.clicked.connect(self._toggle_ignore) self.sendPrivateMessagePushButton.clicked.connect(self._send_private_message) self.copyPublicKeyPushButton.clicked.connect(self._copy_public_key) diff --git a/toxygen/ui/profile_settings_screen.py b/toxygen/ui/profile_settings_screen.py index fd36b0b..8e20211 100644 --- a/toxygen/ui/profile_settings_screen.py +++ b/toxygen/ui/profile_settings_screen.py @@ -1,9 +1,8 @@ -from PyQt5 import QtCore, QtGui, uic - -import utils.ui as util_ui from ui.widgets import CenteredWidget +import utils.ui as util_ui +from utils.util import join_path, get_images_directory, get_views_path from user_data.settings import Settings -from utils.util import get_images_directory, get_views_path, join_path +from PyQt5 import QtGui, QtCore, uic class ProfileSettings(CenteredWidget): diff --git a/toxygen/ui/self_peer_screen.py b/toxygen/ui/self_peer_screen.py index 7f997ea..cf252d3 100644 --- a/toxygen/ui/self_peer_screen.py +++ b/toxygen/ui/self_peer_screen.py @@ -1,9 +1,8 @@ -from PyQt5 import uic - -import utils.ui as util_ui -import utils.util as util -from ui.contact_items import * from ui.widgets import CenteredWidget, LineEdit +from PyQt5 import uic +import utils.util as util +import utils.ui as util_ui +from ui.contact_items import * class SelfPeerScreen(CenteredWidget): diff --git a/toxygen/ui/tray.py b/toxygen/ui/tray.py index 1a2bfce..3bfc7f3 100644 --- a/toxygen/ui/tray.py +++ b/toxygen/ui/tray.py @@ -1,10 +1,8 @@ -import os.path - -from PyQt5 import QtCore, QtGui, QtWidgets - -from ui.password_screen import UnlockAppScreen +from PyQt5 import QtWidgets, QtGui, QtCore from utils.ui import tr from utils.util import * +from ui.password_screen import UnlockAppScreen +import os.path class SystemTrayIcon(QtWidgets.QSystemTrayIcon): diff --git a/toxygen/ui/widgets.py b/toxygen/ui/widgets.py index 43d8021..8789ad1 100644 --- a/toxygen/ui/widgets.py +++ b/toxygen/ui/widgets.py @@ -1,9 +1,7 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- -import logging - from PyQt5 import QtCore, QtGui, QtWidgets - import utils.ui as util_ui +import logging global LOG LOG = logging.getLogger('app') diff --git a/toxygen/ui/widgets_factory.py b/toxygen/ui/widgets_factory.py index c713ea4..0c8fd08 100644 --- a/toxygen/ui/widgets_factory.py +++ b/toxygen/ui/widgets_factory.py @@ -1,14 +1,13 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- -from ui.group_bans_widgets import * -from ui.group_invites_widgets import * -from ui.group_settings_widgets import * -from ui.groups_widgets import * from ui.main_screen_widgets import * from ui.menu import * +from ui.groups_widgets import * from ui.peer_screen import * -from ui.profile_settings_screen import ProfileSettings from ui.self_peer_screen import * - +from ui.group_invites_widgets import * +from ui.group_settings_widgets import * +from ui.group_bans_widgets import * +from ui.profile_settings_screen import ProfileSettings class WidgetsFactory: diff --git a/toxygen/updater/updater.py b/toxygen/updater/updater.py index 85f7dca..2311282 100644 --- a/toxygen/updater/updater.py +++ b/toxygen/updater/updater.py @@ -1,17 +1,14 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- +import utils.util as util +import utils.ui as util_ui import os import platform -import subprocess import urllib - -from PyQt5 import QtCore, QtNetwork - -import utils.ui as util_ui -import utils.util as util +from PyQt5 import QtNetwork, QtCore +import subprocess global LOG import logging - LOG = logging.getLogger('app.'+__name__) log = lambda x: LOG.info(x) diff --git a/toxygen/user_data/backup_service.py b/toxygen/user_data/backup_service.py index a74cf73..bb0cef9 100644 --- a/toxygen/user_data/backup_service.py +++ b/toxygen/user_data/backup_service.py @@ -1,5 +1,4 @@ import os.path - from utils.util import get_profile_name_from_path, join_path diff --git a/toxygen/user_data/profile_manager.py b/toxygen/user_data/profile_manager.py index 8a44a3c..6d7329f 100644 --- a/toxygen/user_data/profile_manager.py +++ b/toxygen/user_data/profile_manager.py @@ -1,13 +1,13 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- +import utils.util as util import os -import utils.util as util +from user_data.settings import Settings from common.event import Event -from user_data.settings import Settings, get_user_config_path +from user_data.settings import get_user_config_path global LOG import logging - LOG = logging.getLogger('app.'+__name__) diff --git a/toxygen/user_data/settings.py b/toxygen/user_data/settings.py index 06f52e2..ca75f8f 100644 --- a/toxygen/user_data/settings.py +++ b/toxygen/user_data/settings.py @@ -1,22 +1,20 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- -import json import os from platform import system +import json from pprint import pprint -import wrapper_tests.support_testing as ts - -import user_data +from utils.util import * +from utils.util import log, join_path +from common.event import Event import utils.ui as util_ui import utils.util as util_utils -from common.event import Event -from utils.util import * -from utils.util import join_path, log +import user_data +import wrapper_tests.support_testing as ts global LOG import logging - LOG = logging.getLogger('settings') def merge_args_into_settings(args, settings): diff --git a/toxygen/utils/ui.py b/toxygen/utils/ui.py index f26cad1..d2d7122 100644 --- a/toxygen/utils/ui.py +++ b/toxygen/utils/ui.py @@ -1,5 +1,4 @@ from PyQt5 import QtWidgets - import utils.util as util