Daniel Brötzmann pushed to branch master at gajim / gajim
Commits:
-
08f9b39a
by wurstsalat at 2023-02-21T20:28:27+01:00
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:
| ... | ... | @@ -1197,6 +1197,19 @@ def insert_into_logs(self, |
| 1197 | 1197 | |
| 1198 | 1198 | return lastrowid
|
| 1199 | 1199 | |
| 1200 | + @timeit
|
|
| 1201 | + def delete_message_from_logs(self, log_line_id: int) -> None:
|
|
| 1202 | + '''
|
|
| 1203 | + Delete a message from the `logs` table
|
|
| 1204 | + |
|
| 1205 | + :param log_line_id: The message's log_line_id
|
|
| 1206 | + '''
|
|
| 1207 | + sql = 'DELETE FROM logs WHERE log_line_id = ?'
|
|
| 1208 | + self._con.execute(sql, (log_line_id, ))
|
|
| 1209 | + |
|
| 1210 | + self._delayed_commit()
|
|
| 1211 | + log.info('Deleted message with log_line_id %s', log_line_id)
|
|
| 1212 | + |
|
| 1200 | 1213 | @timeit
|
| 1201 | 1214 | def set_message_error(self,
|
| 1202 | 1215 | account_jid: str,
|
| ... | ... | @@ -194,6 +194,7 @@ def __str__(self): |
| 194 | 194 | ('input-clear', None, True),
|
| 195 | 195 | ('show-emoji-chooser', None, True),
|
| 196 | 196 | ('activate-message-selection', 'u', True),
|
| 197 | + ('delete-message-locally', 'u', True),
|
|
| 197 | 198 | ('correct-message', None, False),
|
| 198 | 199 | ('copy-message', 's', True),
|
| 199 | 200 | ('retract-message', 'a{sv}', False),
|
| ... | ... | @@ -570,6 +570,9 @@ def _add_message(self, |
| 570 | 570 | else:
|
| 571 | 571 | self._jump_to_end_button.add_unread_count()
|
| 572 | 572 | |
| 573 | + def remove_message(self, log_line_id: int) -> None:
|
|
| 574 | + self._scrolled_view.remove_message(log_line_id)
|
|
| 575 | + |
|
| 573 | 576 | def reset_view(self) -> None:
|
| 574 | 577 | self._scrolled_view.reset()
|
| 575 | 578 |
| ... | ... | @@ -664,6 +664,11 @@ def _reduce_messages_after(self) -> None: |
| 664 | 664 | row = self._get_row_at_index(len(self._list_box.get_children()) - 1)
|
| 665 | 665 | row.destroy()
|
| 666 | 666 | |
| 667 | + def remove_message(self, log_line_id: int) -> None:
|
|
| 668 | + row = self.get_row_by_log_line_id(log_line_id)
|
|
| 669 | + if row is not None:
|
|
| 670 | + row.destroy()
|
|
| 671 | + |
|
| 667 | 672 | def scroll_to_message_and_highlight(self, log_line_id: int) -> None:
|
| 668 | 673 | highlight_row = None
|
| 669 | 674 | for row in cast(list[BaseRow], self._list_box.get_children()):
|
| ... | ... | @@ -424,6 +424,7 @@ def _connect_actions(self) -> None: |
| 424 | 424 | ('preview-open-link', self._on_preview_action),
|
| 425 | 425 | ('copy-message', self._on_copy_message),
|
| 426 | 426 | ('retract-message', self._on_retract_message),
|
| 427 | + ('delete-message-locally', self._on_delete_message_locally),
|
|
| 427 | 428 | ('add-workspace', self._add_workspace),
|
| 428 | 429 | ('edit-workspace', self._edit_workspace),
|
| 429 | 430 | ('remove-workspace', self._remove_workspace),
|
| ... | ... | @@ -649,6 +650,26 @@ def _on_retract(reason: str) -> None: |
| 649 | 650 | input_str=_('Spam'),
|
| 650 | 651 | transient_for=app.window).show()
|
| 651 | 652 | |
| 653 | + def _on_delete_message_locally(self,
|
|
| 654 | + _action: Gio.SimpleAction,
|
|
| 655 | + param: GLib.Variant
|
|
| 656 | + ) -> None:
|
|
| 657 | + |
|
| 658 | + def _on_delete() -> None:
|
|
| 659 | + log_line_id = param.get_uint32()
|
|
| 660 | + app.storage.archive.delete_message_from_logs(log_line_id)
|
|
| 661 | + control = self.get_control()
|
|
| 662 | + control.remove_message(log_line_id)
|
|
| 663 | + |
|
| 664 | + ConfirmationDialog(
|
|
| 665 | + _('Delete Message'),
|
|
| 666 | + _('Delete message locally?'),
|
|
| 667 | + _('This message will be deleted from your local chat history'),
|
|
| 668 | + [DialogButton.make('Cancel'),
|
|
| 669 | + DialogButton.make('Delete',
|
|
| 670 | + callback=_on_delete)],
|
|
| 671 | + transient_for=app.window).show()
|
|
| 672 | + |
|
| 652 | 673 | def _on_window_motion_notify(self,
|
| 653 | 674 | _widget: Gtk.ApplicationWindow,
|
| 654 | 675 | _event: Gdk.EventMotion
|
| ... | ... | @@ -726,6 +726,12 @@ def get_chat_row_menu(contact: types.ChatContactT, |
| 726 | 726 | 'win.retract-message',
|
| 727 | 727 | param))
|
| 728 | 728 | |
| 729 | + if log_line_id is not None:
|
|
| 730 | + menu_items.append(
|
|
| 731 | + (p_('Message row action', 'Delete Message Locally…'),
|
|
| 732 | + 'win.delete-message-locally',
|
|
| 733 | + GLib.Variant('u', log_line_id or 0)))
|
|
| 734 | + |
|
| 729 | 735 | return GajimMenu.from_list(menu_items)
|
| 730 | 736 | |
| 731 | 737 |