diff options
author | Sacha Chua <sacha@sachachua.com> | 2022-12-01 19:24:02 -0500 |
---|---|---|
committer | Sacha Chua <sacha@sachachua.com> | 2022-12-01 19:24:02 -0500 |
commit | fa9dcc010a2d420391eb8fb6488ce16e77706f1e (patch) | |
tree | 46bee8a705dbc058eb9f9ff6779a09bf8506598a | |
parent | 74a63a5aa3bd27bc1c0ac83108ca4017766f541b (diff) | |
download | emacsconf-el-fa9dcc010a2d420391eb8fb6488ce16e77706f1e.tar.xz emacsconf-el-fa9dcc010a2d420391eb8fb6488ce16e77706f1e.zip |
notifications for timers
-rw-r--r-- | emacsconf-hyperlist.el | 2 | ||||
-rw-r--r-- | emacsconf-stream.el | 41 |
2 files changed, 36 insertions, 7 deletions
diff --git a/emacsconf-hyperlist.el b/emacsconf-hyperlist.el index 56114c3..184d814 100644 --- a/emacsconf-hyperlist.el +++ b/emacsconf-hyperlist.el @@ -206,7 +206,7 @@ - [ ] [[elisp:(emacsconf-stream-track-ssh \"${name}\" \"nohup\" \"start-background-music\" \"&\")][start background music]] - [ ] Start recording with OBS (not streaming) - [ ] Check main stream with MPV ${stream} - - [ ] Check 480p ${480p} + - [ ] Check 480p ${480p} - [ ] [[shell:ssh -t orga@live0.emacsconf.org 'screen -S restream-${id}-youtube /home/orga/restream-${id}-youtube.sh'][Start Youtube restream]] and then confirm ${youtube-studio-url} and ${youtube-url} - [ ] [[shell:ssh -t orga@live0.emacsconf.org 'screen -S restream-${id}-toobnix /home/orga/restream-${id}-toobnix.sh'][Start Toobnix restream]] and then confirm ${toobnix-url} - [ ] [[elisp:(emacsconf-stream-update-track-status \"${name}\")][Update emacsconf-tracks :status and update status page]] diff --git a/emacsconf-stream.el b/emacsconf-stream.el index 2f1b160..897236c 100644 --- a/emacsconf-stream.el +++ b/emacsconf-stream.el @@ -788,7 +788,7 @@ ffplay URL (not (timer--triggered (cdr o))))) emacsconf-stream-timers))))) -(defun emacsconf-stream-schedule-talk-status-change (talk time new-status) +(defun emacsconf-stream-schedule-talk-status-change (talk time new-status &optional notification) "Schedule a one-off timer for TALK at TIME to set it to NEW-STATUS." (interactive (list (emacsconf-complete-talk-info) (read-string "Time: ") @@ -813,7 +813,14 @@ ffplay URL (add-to-list 'emacsconf-stream-timers (cons timer-id - (run-at-time time converted #'emacsconf-update-talk-status-with-hooks (plist-get talk :slug) "." new-status))))) + (run-at-time time converted #'emacsconf-stream-update-talk-status-from-timer + talk new-status + notification))))) + +(defun emacsconf-stream-update-talk-status-from-timer (talk new-status &optional notification) + (when notification + (apply #'notifications-notify notification)) + (emacsconf-update-talk-status-with-hooks (plist-get talk :slug) "." new-status)) (defun emacsconf-stream-schedule-timers (&optional info) "Schedule PLAYING for the rest of talks and CLOSED_Q for recorded talks." @@ -823,24 +830,46 @@ ffplay URL (let ((now (current-time))) (mapc (lambda (talk) (when (and (time-less-p now (plist-get talk :start-time))) - (emacsconf-stream-schedule-talk-status-change talk (plist-get talk :start-time) "PLAYING")) + (emacsconf-stream-schedule-talk-status-change talk (plist-get talk :start-time) "PLAYING" + `(:title (concat "Starting " (plist-get talk :qa))))) (when (and (plist-get talk :video-file) (plist-get talk :qa-time) + (null (plist-get talk :stream-files)) ;; can't tell when this is (time-less-p now (plist-get talk :qa-time))) - (emacsconf-stream-schedule-talk-status-change talk (plist-get talk :qa-time) "CLOSED_Q"))) + (emacsconf-stream-schedule-talk-status-change talk (plist-get talk :qa-time) "CLOSED_Q" + `(:title (concat "Q&A for " (plist-get talk :qa) " (" (plist-get talk :q-and-a) ")"))))) info))) +;; (notifications-notify :title "Hello") (defun emacsconf-stream-cancel-all-timers () (interactive) (cancel-function-timers #'emacsconf-update-talk-status-with-hooks) (setq emacsconf-stream-timers nil)) +(defun emacsconf-stream-send-to-mpv (talk-or-track command &optional parse) + (interactive (list (emacsconf-complete-track))) + (setq talk-or-track (emacsconf-get-track talk-or-track)) + (let* ((default-directory (emacsconf-stream-track-login talk-or-track)) + (response (shell-command-to-string + (format + "echo %s | socat - ~/mpv-socket" + (shell-quote-argument (if (listp command) (json-encode command) command)))))) + (if parse (json-parse-string response) response))) + (defun emacsconf-stream-show-playback-info (talk-or-track) (interactive (list (emacsconf-complete-track))) (let* ((default-directory (emacsconf-stream-track-login talk-or-track)) - (playback-position (gethash "data" (json-parse-string (shell-command-to-string "echo '{ \"command\": [\"get_property\", \"playback-time\"] }' | socat - ~/mpv-socket")))) - (duration (gethash "data" (json-parse-string (shell-command-to-string "echo '{ \"command\": [\"get_property\", \"duration\"] }' | socat - ~/mpv-socket"))))) + (playback-position + (gethash "data" + (emacsconf-stream-send-to-mpv + talk-or-track + '(:command ("get_property" "playback-time")) + t))) + (duration (emacsconf-stream-send-to-mpv + talk-or-track + '(:command ("get_property" "duration")) + t))) (message "%s of %s (%s remaining, ending at %s)" (emacsconf-format-seconds playback-position) (emacsconf-format-seconds duration) |