diff --git a/toxygen/mainscreen.py b/toxygen/mainscreen.py index 3643b39..ac753d5 100644 --- a/toxygen/mainscreen.py +++ b/toxygen/mainscreen.py @@ -590,7 +590,9 @@ class MainWindow(QtWidgets.QMainWindow, Singleton): auto = QtWidgets.QApplication.translate("MainWindow", 'Disallow auto accept') if allowed else QtWidgets.QApplication.translate("MainWindow", 'Allow auto accept') if item is not None: self.listMenu = QtWidgets.QMenu() - set_alias_item = self.listMenu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Set alias')) + is_friend = type(friend) is Friend + if is_friend: + set_alias_item = self.listMenu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Set alias')) history_menu = self.listMenu.addMenu(QtWidgets.QApplication.translate("MainWindow", 'Chat history')) clear_history_item = history_menu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Clear history')) @@ -600,26 +602,32 @@ class MainWindow(QtWidgets.QMainWindow, Singleton): copy_menu = self.listMenu.addMenu(QtWidgets.QApplication.translate("MainWindow", 'Copy')) copy_name_item = copy_menu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Name')) copy_status_item = copy_menu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Status message')) - copy_key_item = copy_menu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Public key')) + if is_friend: + copy_key_item = copy_menu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Public key')) - auto_accept_item = self.listMenu.addAction(auto) - remove_item = self.listMenu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Remove friend')) - block_item = self.listMenu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Block friend')) - notes_item = self.listMenu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Notes')) + auto_accept_item = self.listMenu.addAction(auto) + remove_item = self.listMenu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Remove friend')) + block_item = self.listMenu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Block friend')) + notes_item = self.listMenu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Notes')) - plugins_loader = plugin_support.PluginLoader.get_instance() - if plugins_loader is not None: - submenu = plugins_loader.get_menu(self.listMenu, num) - if len(submenu): - plug = self.listMenu.addMenu(QtWidgets.QApplication.translate("MainWindow", 'Plugins')) - plug.addActions(submenu) - set_alias_item.triggered.connect(lambda: self.set_alias(num)) - remove_item.triggered.connect(lambda: self.remove_friend(num)) - block_item.triggered.connect(lambda: self.block_friend(num)) - copy_key_item.triggered.connect(lambda: self.copy_friend_key(num)) + plugins_loader = plugin_support.PluginLoader.get_instance() + if plugins_loader is not None: + submenu = plugins_loader.get_menu(self.listMenu, num) + if len(submenu): + plug = self.listMenu.addMenu(QtWidgets.QApplication.translate("MainWindow", 'Plugins')) + plug.addActions(submenu) + set_alias_item.triggered.connect(lambda: self.set_alias(num)) + copy_key_item.triggered.connect(lambda: self.copy_friend_key(num)) + remove_item.triggered.connect(lambda: self.remove_friend(num)) + block_item.triggered.connect(lambda: self.block_friend(num)) + auto_accept_item.triggered.connect(lambda: self.auto_accept(num, not allowed)) + notes_item.triggered.connect(lambda: self.show_note(friend)) + else: + leave_item = self.listMenu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Leave chat')) + set_title_item = self.listMenu.addAction(QtWidgets.QApplication.translate("MainWindow", 'Set title')) + leave_item.triggered.connect(lambda: self.leave_gc(num)) + set_title_item.triggered.connect(lambda: self.set_title(num)) clear_history_item.triggered.connect(lambda: self.clear_history(num)) - auto_accept_item.triggered.connect(lambda: self.auto_accept(num, not allowed)) - notes_item.triggered.connect(lambda: self.show_note(friend)) copy_name_item.triggered.connect(lambda: self.copy_name(friend)) copy_status_item.triggered.connect(lambda: self.copy_status(friend)) export_to_text_item.triggered.connect(lambda: self.export_history(num)) @@ -682,6 +690,12 @@ class MainWindow(QtWidgets.QMainWindow, Singleton): def clear_history(self, num): self.profile.clear_history(num) + def leave_gc(self, num): + self.profile.leave_gc(num) + + def set_title(self, num): + self.profile.set_title(num) + def auto_accept(self, num, value): settings = Settings.get_instance() tox_id = self.profile.friend_public_key(num) diff --git a/toxygen/profile.py b/toxygen/profile.py index 49139c6..09627a8 100644 --- a/toxygen/profile.py +++ b/toxygen/profile.py @@ -883,7 +883,7 @@ class Profile(basecontact.BaseContact, Singleton): QtCore.QTimer.singleShot(50000, self.reconnect) def close(self): - for friend in self._contacts: + for friend in map(lambda x: type(x) is Friend, self._contacts): self.friend_exit(friend.number) for i in range(len(self._contacts)): del self._contacts[0] @@ -1305,6 +1305,17 @@ class Profile(basecontact.BaseContact, Singleton): number = self._tox.add_av_groupchat() self.add_gc(number) + def leave_gc(self, num): + gc = self._contacts[num] + self._tox.del_groupchat(gc.number) + del self._contacts[num] + self._screen.friends_list.takeItem(num) + if num == self._active_friend: # active friend was deleted + if not len(self._contacts): # last friend was deleted + self.set_active(-1) + else: + self.set_active(0) + def group_invite(self, friend_number, gc_type, data): text = QtWidgets.QApplication.translate('MainWindow', 'User {} invites you to group chat. Accept?') title = QtWidgets.QApplication.translate('MainWindow', 'Group chat invite') @@ -1353,6 +1364,29 @@ class Profile(basecontact.BaseContact, Singleton): self._tox.group_message_send(group_number, text.encode('utf-8')) self._screen.messageEdit.clear() + def set_title(self, num): + """ + Set new title for gc + """ + gc = self._contacts[num] + name = gc.name + dialog = QtWidgets.QApplication.translate('MainWindow', + "Enter new title for group {}:") + dialog = dialog.format(name) + title = QtWidgets.QApplication.translate('MainWindow', + 'Set title') + text, ok = QtWidgets.QInputDialog.getText(None, + title, + dialog, + QtWidgets.QLineEdit.Normal, + name) + if ok: + text = text.encode('utf-8') + self._tox.group_set_title(gc.number, text) + self.new_gc_title(gc.number, text) + if num == self.get_active_number() and not self.is_active_a_friend(): + self.update() + def tox_factory(data=None, settings=None): """