Daniel Brötzmann pushed to branch master at gajim / gajim
Commits: 08f9b39a by wurstsalat at 2023-02-21T20:28:27+01:00 imprv: Add message menu entry for deleting messages locally
- - - - -
6 changed files:
- gajim/common/storage/archive.py - gajim/gtk/const.py - gajim/gtk/control.py - gajim/gtk/conversation/view.py - gajim/gtk/main.py - gajim/gtk/menus.py
Changes:
===================================== gajim/common/storage/archive.py ===================================== @@ -1197,6 +1197,19 @@ def insert_into_logs(self,
return lastrowid
+ @timeit + def delete_message_from_logs(self, log_line_id: int) -> None: + ''' + Delete a message from the `logs` table + + :param log_line_id: The message's log_line_id + ''' + sql = 'DELETE FROM logs WHERE log_line_id = ?' + self._con.execute(sql, (log_line_id, )) + + self._delayed_commit() + log.info('Deleted message with log_line_id %s', log_line_id) + @timeit def set_message_error(self, account_jid: str,
===================================== gajim/gtk/const.py ===================================== @@ -194,6 +194,7 @@ def __str__(self): ('input-clear', None, True), ('show-emoji-chooser', None, True), ('activate-message-selection', 'u', True), + ('delete-message-locally', 'u', True), ('correct-message', None, False), ('copy-message', 's', True), ('retract-message', 'a{sv}', False),
===================================== gajim/gtk/control.py ===================================== @@ -570,6 +570,9 @@ def _add_message(self, else: self._jump_to_end_button.add_unread_count()
+ def remove_message(self, log_line_id: int) -> None: + self._scrolled_view.remove_message(log_line_id) + def reset_view(self) -> None: self._scrolled_view.reset()
===================================== gajim/gtk/conversation/view.py ===================================== @@ -664,6 +664,11 @@ def _reduce_messages_after(self) -> None: row = self._get_row_at_index(len(self._list_box.get_children()) - 1) row.destroy()
+ def remove_message(self, log_line_id: int) -> None: + row = self.get_row_by_log_line_id(log_line_id) + if row is not None: + row.destroy() + def scroll_to_message_and_highlight(self, log_line_id: int) -> None: highlight_row = None for row in cast(list[BaseRow], self._list_box.get_children()):
===================================== gajim/gtk/main.py ===================================== @@ -424,6 +424,7 @@ def _connect_actions(self) -> None: ('preview-open-link', self._on_preview_action), ('copy-message', self._on_copy_message), ('retract-message', self._on_retract_message), + ('delete-message-locally', self._on_delete_message_locally), ('add-workspace', self._add_workspace), ('edit-workspace', self._edit_workspace), ('remove-workspace', self._remove_workspace), @@ -649,6 +650,26 @@ def _on_retract(reason: str) -> None: input_str=_('Spam'), transient_for=app.window).show()
+ def _on_delete_message_locally(self, + _action: Gio.SimpleAction, + param: GLib.Variant + ) -> None: + + def _on_delete() -> None: + log_line_id = param.get_uint32() + app.storage.archive.delete_message_from_logs(log_line_id) + control = self.get_control() + control.remove_message(log_line_id) + + ConfirmationDialog( + _('Delete Message'), + _('Delete message locally?'), + _('This message will be deleted from your local chat history'), + [DialogButton.make('Cancel'), + DialogButton.make('Delete', + callback=_on_delete)], + transient_for=app.window).show() + def _on_window_motion_notify(self, _widget: Gtk.ApplicationWindow, _event: Gdk.EventMotion
===================================== gajim/gtk/menus.py ===================================== @@ -726,6 +726,12 @@ def get_chat_row_menu(contact: types.ChatContactT, 'win.retract-message', param))
+ if log_line_id is not None: + menu_items.append( + (p_('Message row action', 'Delete Message Locally…'), + 'win.delete-message-locally', + GLib.Variant('u', log_line_id or 0))) + return GajimMenu.from_list(menu_items)
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/commit/08f9b39aaf96af1fefeebc443de5149be...