Added qweechat
This commit is contained in:
parent
1e5618060a
commit
f1d8ce105c
56 changed files with 312 additions and 339 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -26,4 +26,3 @@ Toxygen.egg-info
|
|||
.cache
|
||||
*.db
|
||||
|
||||
*.junk
|
||||
|
|
|
@ -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!
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -6,7 +6,6 @@ from wrapper.toxcore_enums_and_consts import *
|
|||
|
||||
global LOG
|
||||
import logging
|
||||
|
||||
LOG = logging.getLogger('app')
|
||||
|
||||
# -----------------------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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']):
|
||||
|
|
|
@ -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():
|
||||
|
|
|
@ -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 "<Messenger>"
|
||||
|
||||
|
||||
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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import os
|
||||
|
||||
import utils.util as util
|
||||
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
from PyQt5 import uic
|
||||
|
||||
import utils.util as util
|
||||
from ui.widgets import *
|
||||
from wrapper.toxcore_enums_and_consts import *
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import os.path
|
||||
|
||||
from utils.util import get_profile_name_from_path, join_path
|
||||
|
||||
|
||||
|
|
|
@ -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__)
|
||||
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
from PyQt5 import QtWidgets
|
||||
|
||||
import utils.util as util
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue