From 63563314083d47a873aa7a8730752a734769c13e Mon Sep 17 00:00:00 2001 From: cage Date: Mon, 18 Jan 2021 20:13:24 +0100 Subject: [PATCH] - [gemini] fixed purging and refreshing posts from subscribed gemlog - changing deleting of posts references to logical deleting (i.e. setting a boolean column to true); - fixed time threshold for purging (must be a negative integer). --- src/db.lisp | 26 +++++++++++++++++++------- src/gemini-subscription-window.lisp | 10 +++++----- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/db.lisp b/src/db.lisp index b5903c1..22ae04a 100644 --- a/src/db.lisp +++ b/src/db.lisp @@ -557,6 +557,7 @@ " snippet TEXT, " ;; boolean " seenp INTEGER DEFAULT 0, " + " deletedp INTEGER DEFAULT 0, " " UNIQUE(url) ON CONFLICT FAIL" +make-close+))) @@ -773,7 +774,7 @@ than `max-id'" (defun threshold-time (days-in-the-past) "Returns a time object `days-in-the-past' days in the past" (local-time:adjust-timestamp (local-time-obj-now) - (offset :day days-in-the-past))) + (offset :day (- (abs days-in-the-past))))) (defun purge-history () "Remove expired entry in history. @@ -2890,6 +2891,8 @@ than `days-in-the-past' days (default: `(swconf:config-purge-cache-days-offset)' (from :gemlog-entries) (where (:and (:= :gemlog-entries.seenp (prepare-for-db nil :to-integer t)) + (:= :gemlog-entries.deletedp + (prepare-for-db nil :to-integer t)) (:= :gemlog-entries.gemlog-id :gemini-subscription.url)))) :unseen-count) @@ -2897,6 +2900,8 @@ than `days-in-the-past' days (default: `(swconf:config-purge-cache-days-offset)' (from :gemlog-entries) (where (:and (:= :gemlog-entries.seenp (prepare-for-db t :to-integer t)) + (:= :gemlog-entries.deletedp + (prepare-for-db nil :to-integer t)) (:= :gemlog-entries.gemlog-id :gemini-subscription.url)))) :seen-count)) @@ -2963,7 +2968,9 @@ than `days-in-the-past' days (default: `(swconf:config-purge-cache-days-offset)' (join :gemini-subscription :on (:= :gemlog-entries.gemlog-id :gemini-subscription.url)) - (where (:= :gemini-subscription.url gemlog-url)))) + (where (:and (:= :gemini-subscription.url gemlog-url) + (:= :gemlog-entries.deletedp + (prepare-for-db nil :to-integer t)))))) (unordered-rows (fetch-all-rows query)) (actual-rows (cond (unseen-only @@ -2992,14 +2999,19 @@ than `days-in-the-past' days (default: `(swconf:config-purge-cache-days-offset)' (row-post-date a))))))) (defun delete-gemlog-entry (gemlog-url) - (query (delete-from +table-gemlog-entries+ (where (:= :url gemlog-url))))) + (query (make-update +table-gemlog-entries+ + (:deletedp) + ((prepare-for-db t :to-integer 1)) + (where (:= :url gemlog-url))))) (defun purge-seen-gemlog-entries () "Remove expired gemlog and (seen) entries. -An entry is expired if older -than (swconf:config-purge-history-days-offset) days in the past" - (let ((treshold (threshold-time 255))) - (query (make-delete +table-gemlog-entries+ +An entry is expired if older than (swconf:config-purge-history-days-offset) +days in the past" + (let ((treshold (threshold-time -255))) + (query (make-update +table-gemlog-entries+ + (:deletedp) + ((prepare-for-db t :to-integer 1)) (:and (:= :seenp (prepare-for-db t :to-integer 1)) (:< :date (prepare-for-db treshold))))))) diff --git a/src/gemini-subscription-window.lisp b/src/gemini-subscription-window.lisp index ff434e5..7d2ec1f 100644 --- a/src/gemini-subscription-window.lisp +++ b/src/gemini-subscription-window.lisp @@ -43,11 +43,11 @@ (tui:text-ellipsis (db:row-title gemlog-db-row) (truncate (/ (win-width window) 3))) - (when (db:row-subtitle gemlog-db-row) - (tui:text-ellipsis (db:row-subtitle gemlog-db-row) - (truncate (/ (win-width window) - 3))) - (_ "No subtitle")) + (if (db:row-subtitle gemlog-db-row) + (tui:text-ellipsis (db:row-subtitle gemlog-db-row) + (truncate (/ (win-width window) + 3))) + (_ "No subtitle")) (db:row-unseen-count gemlog-db-row) (+ (db:row-unseen-count gemlog-db-row) (db:row-seen-count gemlog-db-row))))