reconnection fixes
This commit is contained in:
parent
486c13a3d3
commit
439ce30e6e
4 changed files with 45 additions and 28 deletions
|
@ -43,7 +43,7 @@ class App:
|
||||||
self._tox = self._ms = self._init = self._main_loop = self._av_loop = None
|
self._tox = self._ms = self._init = self._main_loop = self._av_loop = None
|
||||||
self._uri = self._toxes = self._tray = self._file_transfer_handler = self._contacts_provider = None
|
self._uri = self._toxes = self._tray = self._file_transfer_handler = self._contacts_provider = None
|
||||||
self._friend_factory = self._calls_manager = self._contacts_manager = self._smiley_loader = self._tox_dns = None
|
self._friend_factory = self._calls_manager = self._contacts_manager = self._smiley_loader = self._tox_dns = None
|
||||||
self._group_factory = self._groups_service = None
|
self._group_factory = self._groups_service = self._profile = None
|
||||||
if uri is not None and uri.startswith('tox:'):
|
if uri is not None and uri.startswith('tox:'):
|
||||||
self._uri = uri[4:]
|
self._uri = uri[4:]
|
||||||
self._path = path_to_profile
|
self._path = path_to_profile
|
||||||
|
@ -192,7 +192,7 @@ class App:
|
||||||
# Threads
|
# Threads
|
||||||
# -----------------------------------------------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
def _start_threads(self):
|
def _start_threads(self, initial_start=True):
|
||||||
# init thread
|
# init thread
|
||||||
self._init = threads.InitThread(self._tox, self._plugin_loader, self._settings)
|
self._init = threads.InitThread(self._tox, self._plugin_loader, self._settings)
|
||||||
self._init.start()
|
self._init.start()
|
||||||
|
@ -203,14 +203,16 @@ class App:
|
||||||
self._av_loop = threads.ToxAVIterateThread(self._tox.AV)
|
self._av_loop = threads.ToxAVIterateThread(self._tox.AV)
|
||||||
self._av_loop.start()
|
self._av_loop.start()
|
||||||
|
|
||||||
|
if initial_start:
|
||||||
threads.start_file_transfer_thread()
|
threads.start_file_transfer_thread()
|
||||||
|
|
||||||
def _stop_threads(self):
|
def _stop_threads(self, is_app_closing=True):
|
||||||
self._init.stop_thread()
|
self._init.stop_thread()
|
||||||
|
|
||||||
self._av_loop.stop_thread()
|
self._av_loop.stop_thread()
|
||||||
self._main_loop.stop_thread()
|
self._main_loop.stop_thread()
|
||||||
|
|
||||||
|
if is_app_closing:
|
||||||
threads.stop_file_transfer_thread()
|
threads.stop_file_transfer_thread()
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -304,21 +306,24 @@ class App:
|
||||||
Create new tox instance (new network settings)
|
Create new tox instance (new network settings)
|
||||||
:return: tox instance
|
:return: tox instance
|
||||||
"""
|
"""
|
||||||
self._stop_threads()
|
self._stop_threads(False)
|
||||||
data = self._tox.get_savedata()
|
data = self._tox.get_savedata()
|
||||||
self._save_profile(data)
|
self._save_profile(data)
|
||||||
del self._tox
|
del self._tox
|
||||||
# create new tox instance
|
# create new tox instance
|
||||||
self._tox = self._create_tox(data)
|
self._tox = self._create_tox(data)
|
||||||
self._start_threads()
|
self._start_threads(False)
|
||||||
|
|
||||||
tox_savers = [self._friend_factory, self._group_factory, self._plugin_loader, self._contacts_manager,
|
tox_savers = [self._friend_factory, self._group_factory, self._plugin_loader, self._contacts_manager,
|
||||||
self._contacts_provider, self._messenger, self._file_transfer_handler, self._groups_service]
|
self._contacts_provider, self._messenger, self._file_transfer_handler, self._groups_service,
|
||||||
|
self._profile]
|
||||||
for tox_saver in tox_savers:
|
for tox_saver in tox_savers:
|
||||||
tox_saver.set_tox(self._tox)
|
tox_saver.set_tox(self._tox)
|
||||||
self._calls_manager.set_toxav(self._tox.AV)
|
|
||||||
|
|
||||||
return self._tox
|
self._calls_manager.set_toxav(self._tox.AV)
|
||||||
|
self._contacts_manager.update_friends_numbers()
|
||||||
|
|
||||||
|
self._init_callbacks()
|
||||||
|
|
||||||
def _create_dependencies(self):
|
def _create_dependencies(self):
|
||||||
self._smiley_loader = SmileyLoader(self._settings)
|
self._smiley_loader = SmileyLoader(self._settings)
|
||||||
|
@ -331,8 +336,8 @@ class App:
|
||||||
self._tox, db, contact_items_factory)
|
self._tox, db, contact_items_factory)
|
||||||
self._group_factory = GroupFactory(self._profile_manager, self._settings, self._tox, db, contact_items_factory)
|
self._group_factory = GroupFactory(self._profile_manager, self._settings, self._tox, db, contact_items_factory)
|
||||||
self._contacts_provider = ContactProvider(self._tox, self._friend_factory, self._group_factory)
|
self._contacts_provider = ContactProvider(self._tox, self._friend_factory, self._group_factory)
|
||||||
profile = Profile(self._profile_manager, self._tox, self._ms, self._contacts_provider, self._reset)
|
self._profile = Profile(self._profile_manager, self._tox, self._ms, self._contacts_provider, self._reset)
|
||||||
self._plugin_loader = PluginLoader(self._tox, self._toxes, profile, self._settings)
|
self._plugin_loader = PluginLoader(self._tox, self._toxes, self._profile, self._settings)
|
||||||
history = None
|
history = None
|
||||||
messages_items_factory = MessagesItemsFactory(self._settings, self._plugin_loader, self._smiley_loader,
|
messages_items_factory = MessagesItemsFactory(self._settings, self._plugin_loader, self._smiley_loader,
|
||||||
self._ms, lambda m: history.delete_message(m))
|
self._ms, lambda m: history.delete_message(m))
|
||||||
|
@ -343,28 +348,25 @@ class App:
|
||||||
history.set_contacts_manager(self._contacts_manager)
|
history.set_contacts_manager(self._contacts_manager)
|
||||||
self._calls_manager = CallsManager(self._tox.AV, self._settings, self._ms, self._contacts_manager)
|
self._calls_manager = CallsManager(self._tox.AV, self._settings, self._ms, self._contacts_manager)
|
||||||
self._messenger = Messenger(self._tox, self._plugin_loader, self._ms, self._contacts_manager,
|
self._messenger = Messenger(self._tox, self._plugin_loader, self._ms, self._contacts_manager,
|
||||||
self._contacts_provider, messages_items_factory, profile, self._calls_manager)
|
self._contacts_provider, messages_items_factory, self._profile, self._calls_manager)
|
||||||
file_transfers_message_service = FileTransfersMessagesService(self._contacts_manager, messages_items_factory,
|
file_transfers_message_service = FileTransfersMessagesService(self._contacts_manager, messages_items_factory,
|
||||||
profile, self._ms)
|
self._profile, self._ms)
|
||||||
self._file_transfer_handler = FileTransfersHandler(self._tox, self._settings, self._contacts_provider,
|
self._file_transfer_handler = FileTransfersHandler(self._tox, self._settings, self._contacts_provider,
|
||||||
file_transfers_message_service, profile)
|
file_transfers_message_service, self._profile)
|
||||||
messages_items_factory.set_file_transfers_handler(self._file_transfer_handler)
|
messages_items_factory.set_file_transfers_handler(self._file_transfer_handler)
|
||||||
self._groups_service = GroupsService(self._tox, self._contacts_manager, self._contacts_provider, self._ms)
|
self._groups_service = GroupsService(self._tox, self._contacts_manager, self._contacts_provider, self._ms)
|
||||||
widgets_factory = WidgetsFactory(self._settings, profile, self._profile_manager, self._contacts_manager,
|
widgets_factory = WidgetsFactory(self._settings, self._profile, self._profile_manager, self._contacts_manager,
|
||||||
self._file_transfer_handler, self._smiley_loader, self._plugin_loader,
|
self._file_transfer_handler, self._smiley_loader, self._plugin_loader,
|
||||||
self._toxes, self._version, self._groups_service, history)
|
self._toxes, self._version, self._groups_service, history)
|
||||||
self._tray = tray.init_tray(profile, self._settings, self._ms, self._toxes)
|
self._tray = tray.init_tray(self._profile, self._settings, self._ms, self._toxes)
|
||||||
self._ms.set_dependencies(widgets_factory, self._tray, self._contacts_manager, self._messenger, profile,
|
self._ms.set_dependencies(widgets_factory, self._tray, self._contacts_manager, self._messenger, self._profile,
|
||||||
self._plugin_loader, self._file_transfer_handler, history, self._calls_manager,
|
self._plugin_loader, self._file_transfer_handler, history, self._calls_manager,
|
||||||
self._groups_service)
|
self._groups_service)
|
||||||
|
|
||||||
self._tray.show()
|
self._tray.show()
|
||||||
self._ms.show()
|
self._ms.show()
|
||||||
|
|
||||||
# callbacks initialization
|
self._init_callbacks()
|
||||||
callbacks.init_callbacks(self._tox, profile, self._settings, self._plugin_loader, self._contacts_manager,
|
|
||||||
self._calls_manager, self._file_transfer_handler, self._ms, self._tray,
|
|
||||||
self._messenger, self._groups_service, self._contacts_provider)
|
|
||||||
|
|
||||||
def _try_to_update(self):
|
def _try_to_update(self):
|
||||||
updating = updater.start_update_if_needed(self._version, self._settings)
|
updating = updater.start_update_if_needed(self._version, self._settings)
|
||||||
|
@ -376,3 +378,8 @@ class App:
|
||||||
|
|
||||||
def _create_tox(self, data):
|
def _create_tox(self, data):
|
||||||
return tox_factory(data, self._settings)
|
return tox_factory(data, self._settings)
|
||||||
|
|
||||||
|
def _init_callbacks(self):
|
||||||
|
callbacks.init_callbacks(self._tox, self._profile, self._settings, self._plugin_loader, self._contacts_manager,
|
||||||
|
self._calls_manager, self._file_transfer_handler, self._ms, self._tray,
|
||||||
|
self._messenger, self._groups_service, self._contacts_provider)
|
||||||
|
|
|
@ -392,6 +392,15 @@ class ContactsManager(ToxSave):
|
||||||
def can_send_typing_notification(self):
|
def can_send_typing_notification(self):
|
||||||
return self._settings['typing_notifications'] and self._active_contact + 1
|
return self._settings['typing_notifications'] and self._active_contact + 1
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------------------------------------------
|
||||||
|
# Contacts numbers update
|
||||||
|
# -----------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
def update_friends_numbers(self):
|
||||||
|
for friend in self._contact_provider.get_all_friends():
|
||||||
|
friend.number = self._tox.friend_by_public_key(friend.tox_id)
|
||||||
|
self.update_filtration()
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------------------------------------------
|
||||||
# Private methods
|
# Private methods
|
||||||
# -----------------------------------------------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
from contacts import basecontact
|
from contacts import basecontact
|
||||||
import random
|
import random
|
||||||
import threading
|
import threading
|
||||||
|
import common.tox_save as tox_save
|
||||||
|
|
||||||
|
|
||||||
class Profile(basecontact.BaseContact):
|
class Profile(basecontact.BaseContact, tox_save.ToxSave):
|
||||||
"""
|
"""
|
||||||
Profile of current toxygen user. Contains friends list, tox instance
|
Profile of current toxygen user. Contains friends list, tox instance
|
||||||
"""
|
"""
|
||||||
|
@ -18,9 +19,9 @@ class Profile(basecontact.BaseContact):
|
||||||
tox.self_get_status_message(),
|
tox.self_get_status_message(),
|
||||||
screen.user_info,
|
screen.user_info,
|
||||||
tox.self_get_address())
|
tox.self_get_address())
|
||||||
|
tox_save.ToxSave.__init__(self, tox)
|
||||||
self._screen = screen
|
self._screen = screen
|
||||||
self._messages = screen.messages
|
self._messages = screen.messages
|
||||||
self._tox = tox
|
|
||||||
self._contacts_provider = contacts_provider
|
self._contacts_provider = contacts_provider
|
||||||
self._reset_action = reset_action
|
self._reset_action = reset_action
|
||||||
self._waiting_for_reconnection = False
|
self._waiting_for_reconnection = False
|
||||||
|
@ -71,14 +72,13 @@ class Profile(basecontact.BaseContact):
|
||||||
"""
|
"""
|
||||||
Recreate tox instance
|
Recreate tox instance
|
||||||
"""
|
"""
|
||||||
del self._tox
|
|
||||||
self._tox = self._reset_action()
|
|
||||||
self.status = None
|
self.status = None
|
||||||
|
self._reset_action()
|
||||||
|
|
||||||
def _reconnect(self):
|
def _reconnect(self):
|
||||||
self._waiting_for_reconnection = False
|
self._waiting_for_reconnection = False
|
||||||
contacts = self._contacts_provider.get_all()
|
contacts = self._contacts_provider.get_all_friends()
|
||||||
if self.status is None or all(list(map(lambda x: x.status is None, contacts))) and len(contacts):
|
if self.status is None or (all(list(map(lambda x: x.status is None, contacts))) and len(contacts)):
|
||||||
self._waiting_for_reconnection = True
|
self._waiting_for_reconnection = True
|
||||||
self.restart()
|
self.restart()
|
||||||
self._timer = threading.Timer(50, self._reconnect)
|
self._timer = threading.Timer(50, self._reconnect)
|
||||||
|
|
|
@ -212,6 +212,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||||
self.search_label.setPixmap(pixmap)
|
self.search_label.setPixmap(pixmap)
|
||||||
|
|
||||||
self.contact_name = LineEdit(Form)
|
self.contact_name = LineEdit(Form)
|
||||||
|
self.contact_name.setObjectName('contact_name')
|
||||||
self.contact_name.setGeometry(QtCore.QRect(0, 0, 150, 25))
|
self.contact_name.setGeometry(QtCore.QRect(0, 0, 150, 25))
|
||||||
self.contact_name.textChanged.connect(self.filtering)
|
self.contact_name.textChanged.connect(self.filtering)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue