diff --git a/src/db.lisp b/src/db.lisp index 7d5299f..4735a61 100644 --- a/src/db.lisp +++ b/src/db.lisp @@ -1976,12 +1976,22 @@ messages are sorted as below: (loop for folder in all-folders do (loop for timeline in all-timelines when (or (statuses-marked-to-delete timeline folder) + (duplicated-message-index-p timeline folder) (find (cons timeline folder) timelines/folders-with-forgotten :test #'equalp)) do (renumber-timeline-message-index timeline folder :account-id nil))))) +(defun duplicated-message-index-p (timeline folder) + (let ((all-indices (mapcar #'second + (fetch-all-rows (select :message-index + (from +table-status+) + (where (:and (:= :folder folder) + (:= :timeline timeline)))))))) + (not (length= (remove-duplicates all-indices :test #'=) + all-indices)))) + (defun all-attachments-to-status (status-id) (fetch-all-rows (select :* (from +table-attachment+) diff --git a/src/package.lisp b/src/package.lisp index 768198f..a39c2ff 100644 --- a/src/package.lisp +++ b/src/package.lisp @@ -891,6 +891,7 @@ :annotated-tree-line->data-plist :renumber-timeline-message-index :renumber-all-timelines + :duplicated-message-index-p :all-attachments-to-status :attachment-to-chat-message :all-attachments-urls-to-status diff --git a/src/ui-goodies.lisp b/src/ui-goodies.lisp index 34a59b8..1a4157d 100644 --- a/src/ui-goodies.lisp +++ b/src/ui-goodies.lisp @@ -58,7 +58,9 @@ (when (boolean-input-accepted-p maybe-accepted) (let ((delete-event (make-instance 'delete-all-status-event))) (push-event delete-event))) - (clean-temporary-files))) + (db-utils:with-ready-database (:connect nil) + (db:renumber-all-timelines '()) + (clean-temporary-files)))) (let ((delete-count (db:count-status-marked-to-delete)) (stop-download-event (make-instance 'gemini-abort-all-downloading-event :priority +maximum-event-priority+))) @@ -70,7 +72,9 @@ "Delete ~a messages? [y/N] " delete-count) delete-count)) - (clean-temporary-files))))) + (progn + (db:renumber-all-timelines '()) + (clean-temporary-files)))))) (defun notify (message &key (life nil) (as-error nil) (priority +standard-event-priority+)) (let ((event (make-instance 'notify-user-event