diff --git a/toxygen/app.py b/toxygen/app.py index de15277..20fed55 100644 --- a/toxygen/app.py +++ b/toxygen/app.py @@ -303,12 +303,12 @@ class App: self._contacts_provider = ContactProvider(self._tox, self._friend_factory) self._contacts_manager = ContactsManager(self._tox, self._settings, self._ms, self._profile_manager, self._contacts_provider, db, self._tox_dns) + self._messenger = Messenger(self._tox, self._plugin_loader, self._ms, self._contacts_manager, + self._contacts_provider, items_factory, profile) self._file_transfer_handler = FileTransfersHandler(self._tox, self._settings, self._contacts_provider) widgets_factory = WidgetsFactory(self._settings, profile, self._profile_manager, self._contacts_manager, self._file_transfer_handler, self._smiley_loader, self._plugin_loader, self._toxes, self._version) - self._messenger = Messenger(self._tox, self._plugin_loader, self._ms, self._contacts_manager, - self._contacts_provider, items_factory, profile) self._tray = tray.init_tray(profile, self._settings, self._ms) self._ms.set_dependencies(widgets_factory, self._tray, self._contacts_manager, self._messenger, profile, self._plugin_loader) diff --git a/toxygen/contacts/contacts_manager.py b/toxygen/contacts/contacts_manager.py index 4bdf78b..efe479c 100644 --- a/toxygen/contacts/contacts_manager.py +++ b/toxygen/contacts/contacts_manager.py @@ -43,7 +43,7 @@ class ContactsManager: self._profile_manager.save_profile(data) def is_friend_active(self, friend_number): - if not self._is_active_a_friend(): + if not self.is_active_a_friend(): return False return self.get_curr_contact().number == friend_number @@ -148,6 +148,8 @@ class ContactsManager: util.log('Error in set active: ' + str(ex)) raise + active_friend = property(get_active, set_active) + def set_active_by_number_and_type(self, number, is_friend): for i in range(len(self._contacts)): c = self._contacts[i] @@ -155,12 +157,13 @@ class ContactsManager: self._active_contact = i break - active_friend = property(get_active, set_active) - def update(self): if self._active_contact + 1: self.set_active(self._active_contact) + def is_active_a_friend(self): + return type(self.get_curr_contact()) is Friend + # ----------------------------------------------------------------------------------------------------------------- # Filtration # ----------------------------------------------------------------------------------------------------------------- @@ -174,7 +177,7 @@ class ContactsManager: # TODO: simplify? filter_str = filter_str.lower() number = self.get_active_number() - is_friend = self._is_active_a_friend() + is_friend = self.is_active_a_friend() if sorting > 1: if sorting & 2: self._contacts = sorted(self._contacts, key=lambda x: int(x.status is not None), reverse=True) @@ -424,9 +427,6 @@ class ContactsManager: # Private methods # ----------------------------------------------------------------------------------------------------------------- - def _is_active_a_friend(self): - return type(self.get_curr_contact()) is Friend - def _load_contacts(self): self._load_friends() self._load_groups() diff --git a/toxygen/file_transfers/file_transfers_handler.py b/toxygen/file_transfers/file_transfers_handler.py index 59d94b2..073b8b6 100644 --- a/toxygen/file_transfers/file_transfers_handler.py +++ b/toxygen/file_transfers/file_transfers_handler.py @@ -179,25 +179,23 @@ class FileTransfersHandler: self._get_friend_by_number(friend_number).update_transfer_data(file_number, TOX_FILE_TRANSFER_STATE['RUNNING']) - def send_screenshot(self, data): + def send_screenshot(self, data, friend_number): """ Send screenshot to current active friend :param data: raw data - png """ - self.send_inline(data, 'toxygen_inline.png') + self.send_inline(data, 'toxygen_inline.png', friend_number) - def send_sticker(self, path): + def send_sticker(self, path, friend_number): with open(path, 'rb') as fl: data = fl.read() - self.send_inline(data, 'sticker.png') + self.send_inline(data, 'sticker.png', friend_number) - def send_inline(self, data, file_name, friend_number=None, is_resend=False): - friend_number = friend_number or self.get_active_number() + def send_inline(self, data, file_name, friend_number, is_resend=False): friend = self._get_friend_by_number(friend_number) if friend.status is None and not is_resend: m = UnsentFile(file_name, data, time.time()) friend.append_message(m) - self.update() return elif friend.status is None and is_resend: raise RuntimeError() diff --git a/toxygen/ui/main_screen.py b/toxygen/ui/main_screen.py index b318ccc..f0a1ef5 100644 --- a/toxygen/ui/main_screen.py +++ b/toxygen/ui/main_screen.py @@ -542,7 +542,7 @@ class MainWindow(QtWidgets.QMainWindow): def send_sticker(self): self.menu.hide() if self._contacts_manager.is_active_a_friend(): - self.sticker = self._widget_factory.create_sticker_window(self) + self.sticker = self._widget_factory.create_sticker_window() self.sticker.setGeometry(QtCore.QRect(self.x() if self._settings['mirror_mode'] else 270 + self.x(), self.y() + self.height() - 200, self.sticker.width(), diff --git a/toxygen/ui/main_screen_widgets.py b/toxygen/ui/main_screen_widgets.py index e739167..ecf329a 100644 --- a/toxygen/ui/main_screen_widgets.py +++ b/toxygen/ui/main_screen_widgets.py @@ -81,7 +81,8 @@ class MessageArea(QtWidgets.QPlainTextEdit): else: self.insertPlainText(text) - def parse_file_name(self, file_name): + @staticmethod + def parse_file_name(file_name): if file_name.endswith('\r\n'): file_name = file_name[:-2] file_name = urllib.parse.unquote(file_name) @@ -90,9 +91,10 @@ class MessageArea(QtWidgets.QPlainTextEdit): class ScreenShotWindow(RubberBandWindow): - def __init__(self, file_transfer_handler, *args): + def __init__(self, file_transfer_handler, contacts_manager, *args): super().__init__(*args) self._file_transfer_handler = file_transfer_handler + self._contacts_manager = contacts_manager def closeEvent(self, *args): if self.parent.isHidden(): @@ -113,7 +115,8 @@ class ScreenShotWindow(RubberBandWindow): buffer = QtCore.QBuffer(byte_array) buffer.open(QtCore.QIODevice.WriteOnly) p.save(buffer, 'PNG') - self._file_transfer_handler.send_screenshot(bytes(byte_array.data())) + friend = self._contacts_manager.get_curr_contact() + self._file_transfer_handler.send_screenshot(bytes(byte_array.data(), friend.number)) self.close() @@ -267,9 +270,10 @@ class StickerItem(QtWidgets.QWidget): class StickerWindow(QtWidgets.QWidget): """Sticker selection window""" - def __init__(self, parent, file_transfer_handler): + def __init__(self, file_transfer_handler, contacts_manager): super().__init__() self._file_transfer_handler = file_transfer_handler + self._contacts_manager = contacts_manager self.setWindowFlags(QtCore.Qt.FramelessWindowHint) self.setMaximumSize(250, 200) self.setMinimumSize(250, 200) @@ -285,11 +289,11 @@ class StickerWindow(QtWidgets.QWidget): self.list.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel) self.list.setSpacing(3) self.list.clicked.connect(self.click) - self.parent = parent def click(self, index): num = index.row() - self._file_transfer_handler.send_sticker(self._stickers[num]) + friend = self._contacts_manager.get_curr_contact() + self._file_transfer_handler.send_sticker(self._stickers[num], friend.number) self.close() def leaveEvent(self, event): @@ -465,7 +469,6 @@ class SearchScreen(QtWidgets.QWidget): self.not_found(text) def closeEvent(self, *args): - Profile.get_instance().update() self._messages.setGeometry(0, 0, self._messages.width(), self._messages.height() + 40) super().closeEvent(*args) diff --git a/toxygen/ui/widgets_factory.py b/toxygen/ui/widgets_factory.py index 0c0bcbc..b42e342 100644 --- a/toxygen/ui/widgets_factory.py +++ b/toxygen/ui/widgets_factory.py @@ -17,7 +17,7 @@ class WidgetsFactory: self._version = version def create_screenshot_window(self, *args): - return ScreenShotWindow(self._file_transfer_handler, *args) + return ScreenShotWindow(self._file_transfer_handler, self._contacts_manager, *args) def create_smiley_window(self, parent): return SmileyWindow(parent, self._smiley_loader) @@ -61,5 +61,5 @@ class WidgetsFactory: def create_smiley_window(self, parent): return SmileyWindow(parent, self._smiley_loader) - def create_sticker_window(self, parent): - return StickerWindow(parent, self._file_transfer_handler) + def create_sticker_window(self): + return StickerWindow(self._file_transfer_handler, self._contacts_manager)