diff --git a/briar-gtk/briar_gtk/actions/window.py b/briar-gtk/briar_gtk/actions/window.py index f7cda09a6bf7431e57369605d3fbb7defbbfeab7..4d79ee07b56590aa7f9777dccc26d9b21d7b835f 100644 --- a/briar-gtk/briar_gtk/actions/window.py +++ b/briar-gtk/briar_gtk/actions/window.py @@ -23,6 +23,7 @@ class WindowActions(Actions): def _setup_actions(self): self._setup_back_to_sidebar_action() + self._setup_delete_all_messages_action() self._setup_delete_contact_action() self._setup_change_alias_contact_action() self._setup_open_about_page_action() @@ -36,6 +37,10 @@ class WindowActions(Actions): f"{WINDOW_PREFIX}.back-to-sidebar", ["<Ctrl>w"] ) + def _setup_delete_all_messages_action(self): + self._setup_action("delete-all-messages-dialog", None, + self._delete_all_messages_dialog) + def _setup_delete_contact_action(self): self._setup_action("delete-contact-dialog", None, self._delete_contact_dialog) @@ -62,6 +67,10 @@ class WindowActions(Actions): if isinstance(self.widget.current_container, MainWindowContainer): self.widget.current_container.show_sidebar() + # pylint: disable=unused-argument + def _delete_all_messages_dialog(self, action, parameter): + self.widget.current_container.open_delete_all_messages_dialog() + # pylint: disable=unused-argument def _delete_contact_dialog(self, action, parameter): self.widget.current_container.open_delete_contact_dialog() diff --git a/briar-gtk/briar_gtk/containers/main_window.py b/briar-gtk/briar_gtk/containers/main_window.py index b9e0554e2d569ada4e91dc12fae22747429f23fb..d311c1acbb3bf87e21afac383018aec78a8f49c4 100644 --- a/briar-gtk/briar_gtk/containers/main_window.py +++ b/briar-gtk/briar_gtk/containers/main_window.py @@ -9,6 +9,7 @@ from gettext import gettext as _ from gi.repository import Gio, GLib, Gtk from briar_wrapper.models.contacts import Contacts +from briar_wrapper.models.private_chat import PrivateChat from briar_gtk.container import Container from briar_gtk.containers.private_chat import PrivateChatContainer @@ -112,6 +113,24 @@ class MainWindowContainer(Container): self.contact_name_label.set_text(user_alias) self._refresh_contacts() + def open_delete_all_messages_dialog(self): + if self._current_contact_id == 0: + raise Exception("Can't delete all messages with contact ID 0") + + confirmation_dialog = Gtk.MessageDialog( + transient_for=APP().window, + flags=Gtk.DialogFlags.MODAL, + message_type=Gtk.MessageType.WARNING, + buttons=Gtk.ButtonsType.OK_CANCEL, + text=_("Confirm Message Deletion"), + ) + confirmation_dialog.format_secondary_text( + _("Are you sure that you want to delete all messages?") + ) + + confirmation_dialog.connect("response", self._delete_all_messages) + confirmation_dialog.show_all() + def open_delete_contact_dialog(self): if self._current_contact_id == 0: raise Exception("Can't delete contact with ID 0") @@ -131,6 +150,14 @@ class MainWindowContainer(Container): confirmation_dialog.connect("response", self._delete_contact) confirmation_dialog.show_all() + def _delete_all_messages(self, widget, response_id): + if response_id == Gtk.ResponseType.OK: + private_chat = PrivateChat(APP().api, self._current_contact_id) + private_chat.delete_all_messages() + self._refresh_contacts() + self.show_sidebar() + widget.destroy() + def _delete_contact(self, widget, response_id): if response_id == Gtk.ResponseType.OK: Contacts(APP().api).delete(self._current_contact_id) diff --git a/briar-gtk/data/ui/chat_menu.ui b/briar-gtk/data/ui/chat_menu.ui index 471d119a40a05df977b98efa6095aaad8b6ed04b..3e3f789d2554851933c122b08937bddc6b2818b1 100755 --- a/briar-gtk/data/ui/chat_menu.ui +++ b/briar-gtk/data/ui/chat_menu.ui @@ -35,6 +35,20 @@ <property name="position">0</property> </packing> </child> + <child> + <object class="GtkModelButton" id="delete-all-messages-menu-entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="action_name">win.delete-all-messages-dialog</property> + <property name="text" translatable="yes">Delete all messages</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> <child> <object class="GtkModelButton" id="delete-menu-entry"> <property name="visible">True</property> @@ -46,7 +60,7 @@ <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">1</property> + <property name="position">2</property> </packing> </child> </object>