2023-10-19 17:49:54 +02:00
|
|
|
;; tinmop: a multiprotocol client
|
2023-10-19 17:46:22 +02:00
|
|
|
;; Copyright © cage
|
2020-09-06 14:42:16 +02:00
|
|
|
|
|
|
|
;; This program is free software: you can redistribute it and/or modify
|
|
|
|
;; it under the terms of the GNU General Public License as published by
|
|
|
|
;; the Free Software Foundation, either version 3 of the License, or
|
|
|
|
;; (at your option) any later version.
|
|
|
|
|
|
|
|
;; This program is distributed in the hope that it will be useful,
|
|
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
;; GNU General Public License for more details.
|
|
|
|
|
|
|
|
;; You should have received a copy of the GNU General Public License
|
|
|
|
;; along with this program.
|
|
|
|
;; If not, see [[http://www.gnu.org/licenses/][http://www.gnu.org/licenses/]].
|
|
|
|
|
|
|
|
(in-package :scheduled-events)
|
|
|
|
|
2024-05-11 12:45:02 +02:00
|
|
|
(define-constant +refresh-all-chats-data-frequency+ 50000 :test #'=)
|
2020-09-06 14:42:16 +02:00
|
|
|
|
2021-01-10 13:01:03 +01:00
|
|
|
(define-constant +refresh-all-chats-messages-frequency+ 50 :test #'=)
|
|
|
|
|
|
|
|
(define-constant +refresh-gemlog-subscriptions-frequency+ 50000 :test #'=)
|
2020-09-06 14:42:16 +02:00
|
|
|
|
2023-09-25 19:03:32 +02:00
|
|
|
(define-constant +purge-gemlog-entries-frequency+ 30000 :test #'=)
|
|
|
|
|
2024-05-11 12:45:02 +02:00
|
|
|
(define-constant +announcements-check-frequency+ 50000 :test #'=)
|
2021-01-11 19:36:43 +01:00
|
|
|
|
2020-09-06 14:42:16 +02:00
|
|
|
(defun triggedp (ticks frequency)
|
|
|
|
(= (rem ticks frequency)
|
|
|
|
0))
|
|
|
|
|
|
|
|
(defmacro gen-scheduler-function ((name frequency) &body body-if-triggered)
|
|
|
|
`(defun ,(format-fn-symbol t "~a" name) (ticks)
|
|
|
|
(when (triggedp ticks ,frequency)
|
|
|
|
,@body-if-triggered)))
|
|
|
|
|
2021-07-31 11:04:18 +02:00
|
|
|
(defmacro gen-at-boot-function (name &body body)
|
|
|
|
`(let ((triggedp nil))
|
|
|
|
(defun ,(format-fn-symbol t "~a" name) ()
|
|
|
|
(when (null triggedp)
|
|
|
|
(setf triggedp t)
|
|
|
|
,@body))))
|
|
|
|
|
2021-01-10 13:01:03 +01:00
|
|
|
(gen-scheduler-function (refresh-all-chats-data
|
2020-09-06 14:42:16 +02:00
|
|
|
+refresh-all-chats-data-frequency+)
|
2023-07-15 14:30:09 +02:00
|
|
|
(ui:notify (_ "Updating all chats"))
|
2020-09-06 14:42:16 +02:00
|
|
|
(ui:update-all-chats-data))
|
|
|
|
|
2021-01-10 13:01:03 +01:00
|
|
|
(gen-scheduler-function (refresh-gemlog-subscriptions
|
|
|
|
+refresh-gemlog-subscriptions-frequency+)
|
|
|
|
(ui:gemlog-refresh-all))
|
|
|
|
|
2023-09-25 19:03:32 +02:00
|
|
|
(gen-scheduler-function (purge-gemlog-entries +purge-gemlog-entries-frequency+)
|
2021-06-17 20:04:08 +02:00
|
|
|
(ui:notify (_ "Removing old gemlog posts…"))
|
2021-01-11 19:36:43 +01:00
|
|
|
(db:purge-seen-gemlog-entries)
|
|
|
|
(ui:notify (_ "Removed")))
|
|
|
|
|
2021-01-10 13:01:03 +01:00
|
|
|
(gen-scheduler-function (refresh-all-chats-messages
|
2020-09-06 14:42:16 +02:00
|
|
|
+refresh-all-chats-messages-frequency+)
|
2020-09-06 17:28:16 +02:00
|
|
|
(when (message-window:display-chat-p *message-window*)
|
2020-12-31 11:54:40 +01:00
|
|
|
(ui:update-all-chats-messages)
|
2020-09-06 17:28:16 +02:00
|
|
|
(let ((show-event (make-instance 'program-events:chat-show-event
|
2020-09-09 21:13:57 +02:00
|
|
|
:chat (message-window:metadata *message-window*))))
|
2020-09-06 17:28:16 +02:00
|
|
|
(program-events:push-event show-event))))
|
2020-09-06 14:42:16 +02:00
|
|
|
|
2023-09-25 19:03:32 +02:00
|
|
|
(gen-scheduler-function (look-for-announcements
|
|
|
|
+announcements-check-frequency+)
|
2024-05-24 14:37:42 +02:00
|
|
|
(%look-for-announcements))
|
2023-09-25 19:03:32 +02:00
|
|
|
|
2021-07-31 11:04:18 +02:00
|
|
|
(gen-at-boot-function purge-history
|
|
|
|
(db:purge-history))
|
|
|
|
|
|
|
|
(gen-at-boot-function refresh-gemlog-posts
|
|
|
|
(when (swconf:gemini-update-gemlog-at-start-p)
|
|
|
|
(ui:gemlog-refresh-all)))
|
|
|
|
|
2021-08-23 18:20:11 +02:00
|
|
|
(gen-at-boot-function sync-gempub-library
|
|
|
|
(gempub:sync-library :notify t))
|
|
|
|
|
2024-05-24 14:37:42 +02:00
|
|
|
(defun %look-for-announcements ()
|
|
|
|
(when *thread-window*
|
|
|
|
(ui:notify (_ "Looking for announcements…"))
|
|
|
|
(program-events:push-event (make-instance 'program-events:check-announcements-event))))
|
|
|
|
|
|
|
|
(gen-at-boot-function look-for-announcement-on-boot
|
|
|
|
(%look-for-announcements))
|
|
|
|
|
2020-09-06 14:42:16 +02:00
|
|
|
(defun run-scheduled-events (ticks)
|
2023-09-24 11:47:30 +02:00
|
|
|
(when (api-pleroma:instance-pleroma-p)
|
|
|
|
(refresh-all-chats-messages ticks)
|
|
|
|
(refresh-all-chats-data ticks))
|
2023-09-25 19:03:32 +02:00
|
|
|
(when (not (api-pleroma:instance-pleroma-p))
|
|
|
|
(look-for-announcements ticks))
|
2021-01-11 19:36:43 +01:00
|
|
|
(refresh-gemlog-subscriptions ticks)
|
2021-07-31 11:04:18 +02:00
|
|
|
(purge-gemlog-entries ticks)
|
|
|
|
(purge-history)
|
2021-08-23 18:20:11 +02:00
|
|
|
(refresh-gemlog-posts)
|
2024-05-24 14:37:42 +02:00
|
|
|
(sync-gempub-library)
|
|
|
|
(look-for-announcement-on-boot))
|