Daniel Brötzmann pushed to branch master at gajim / gajim

Commits:

6 changed files:

Changes:

  • gajim/common/storage/archive.py
    ... ... @@ -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,
    

  • gajim/gtk/const.py
    ... ... @@ -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),
    

  • gajim/gtk/control.py
    ... ... @@ -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
     
    

  • gajim/gtk/conversation/view.py
    ... ... @@ -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()):
    

  • gajim/gtk/main.py
    ... ... @@ -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
    

  • gajim/gtk/menus.py
    ... ... @@ -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