diff --git a/src/api-client.lisp b/src/api-client.lisp index 740a1ed..a1f1fe7 100644 --- a/src/api-client.lisp +++ b/src/api-client.lisp @@ -377,14 +377,25 @@ Returns nil if the user did not provided a server in the configuration file" (defun-api-call get-timeline-tag (tag &key min-id (limit 20)) "Gets messages that contains tags identified by parameter `tag'" - (tooter:timeline-tag *client* - tag - :local nil - :only-media nil - :max-id nil - :since-id nil - :min-id min-id - :limit limit)) + (restart-case + (tooter:timeline-tag *client* + tag + :local nil + :only-media nil + :max-id nil + :since-id nil + :min-id min-id + :limit limit) + (retry-ignoring-min-id () + (ignore-errors + (tooter:timeline-tag *client* + tag + :local nil + :only-media nil + :max-id nil + :since-id nil + :min-id nil + :limit limit))))) (defun-api-call update-timeline-tag (tag folder &key (recover-count 0) @@ -395,22 +406,22 @@ Returns nil if the user did not provided a server in the configuration file" reflectings the changes in the timeline (saves messages in the database etc.)" (when tag - (let* ((timeline-statuses (get-timeline-tag tag - :min-id min-id - :limit limit)) - (trees (if command-line:*update-timeline-climb-message-tree* - (flatten (loop - for node-status in timeline-statuses - collect - (expand-status-tree node-status))) - timeline-statuses)) - (save-timeline-in-db-event (make-instance 'program-events:save-timeline-in-db-event - :payload trees - :timeline-type db:+federated-timeline+ - :folder folder - :localp nil - :min-id min-id - :recover-count recover-count))) + (when-let* ((timeline-statuses (get-timeline-tag tag + :min-id min-id + :limit limit)) + (trees (if command-line:*update-timeline-climb-message-tree* + (flatten (loop + for node-status in timeline-statuses + collect + (expand-status-tree node-status))) + timeline-statuses)) + (save-timeline-in-db-event (make-instance 'program-events:save-timeline-in-db-event + :payload trees + :timeline-type db:+federated-timeline+ + :folder folder + :localp nil + :min-id min-id + :recover-count recover-count))) (update-pagination-statuses-so-far timeline-statuses db:+default-tag-timeline+ folder diff --git a/src/num-utils.lisp b/src/num-utils.lisp index f25a682..9934e7b 100644 --- a/src/num-utils.lisp +++ b/src/num-utils.lisp @@ -21,11 +21,11 @@ (defun safe-parse-number (maybe-number &key (fix-fn #'(lambda (e) (declare (ignore e)) nil))) (handler-bind ((error - (lambda(e) + (lambda (e) (return-from safe-parse-number (funcall fix-fn e))))) (if (or (not (stringp maybe-number)) (string= maybe-number "-")) - (error "Paring a non string element") + (error "Parsing a non string element") (parse-number:parse-number maybe-number)))) (defun parse-number-default (maybe-number default) diff --git a/src/ui-goodies.lisp b/src/ui-goodies.lisp index dc6ac00..a1b0373 100644 --- a/src/ui-goodies.lisp +++ b/src/ui-goodies.lisp @@ -473,7 +473,7 @@ Metadata includes: (setf intersect-sorted (remove window intersect-sorted)) (setf intersect-sorted - (remove-if-not (lambda(a) (typep a 'main-window::focus-marked-window)) + (remove-if-not (lambda (a) (typep a 'main-window::focus-marked-window)) intersect-sorted)) (when intersect-sorted (remove-focus-to-all-windows) @@ -1025,7 +1025,13 @@ If some posts was deleted before, download them again." (let* ((all-tags (db:all-subscribed-tags-name)) (all-paginations (db:all-tag-paginations-status all-tags))) (flet ((update () - (client:update-subscribed-tags all-tags all-paginations) + (handler-bind ((tooter:request-failed + (lambda (e) + (notify (format nil + (_ "Error getting the latest unread messages for tag ~a, trying fetching the latest") + (tooter:url e))) + (invoke-restart 'api-client::retry-ignoring-min-id)))) + (client:update-subscribed-tags all-tags all-paginations)) (let ((update-got-message-event (make-instance 'tag-mark-got-messages-event)) (notify-event