summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSacha Chua <sacha@sachachua.com>2022-11-03 20:20:11 -0400
committerSacha Chua <sacha@sachachua.com>2022-11-03 20:20:11 -0400
commit322ccd2e6caaf30d1ec5d18bbfb37d0c5649bb94 (patch)
treee61862ebd8c333be537e19be577c585821655061
parentb4e5419e8cf7118b4dc62cf0a37232baa7e0b375 (diff)
downloademacsconf-el-322ccd2e6caaf30d1ec5d18bbfb37d0c5649bb94.tar.xz
emacsconf-el-322ccd2e6caaf30d1ec5d18bbfb37d0c5649bb94.zip
Publish media files on PLAYING, open QA windows on CLOSED_Q
-rw-r--r--emacsconf-publish.el44
-rw-r--r--emacsconf-stream.el49
-rw-r--r--emacsconf.el9
3 files changed, 66 insertions, 36 deletions
diff --git a/emacsconf-publish.el b/emacsconf-publish.el
index 3d87888..d4d8405 100644
--- a/emacsconf-publish.el
+++ b/emacsconf-publish.el
@@ -830,23 +830,6 @@ Entries are sorted chronologically, with different tracks interleaved."
(when (member org-state '("TO_ASSIGN" "TO_CAPTION" "TO_STREAM"))
(emacsconf-publish-backstage-index)))))
-(defun emacsconf-publish-copy-main-files-from-backstage-to-media-root (talk)
- (interactive (list (emacsconf-complete-talk-info)))
- (let ((files (directory-files emacsconf-backstage-dir nil (concat (plist-get talk :video-slug)
- ".*"
- (regexp-opt (append
- emacsconf-main-extensions
- (list "--main.webm"
- "--questions.webm")) t)
- "$"))))
- (mapc
- (lambda (f)
- (copy-file
- (expand-file-name f emacsconf-backstage-dir)
- (expand-file-name f emacsconf-public-media-directory) t t))
- files)
- (message "Copied %s" (string-join files ", "))))
-
(defun emacsconf-publish-backstage-index (&optional filename)
(interactive)
(setq filename (or filename (expand-file-name "index.html" emacsconf-backstage-dir)))
@@ -1671,6 +1654,33 @@ The Q&A room for ${title} has finished. You can find more information about the
There is no live Q&A room for ${title}. You can find more information about the talk at <a href=\"${base-url}${url}\">${base-url}${url}</a>.</body></html>"
)
))))))
+
+(defun emacsconf-publish-media-files-on-change (talk)
+ "Publish the files and update the index."
+ (interactive (list (emacsconf-complete-talk-info)))
+ (when (or (not (boundp 'org-state))
+ (string= org-state "PLAYING")
+ (string= org-state "TO_STREAM"))
+ (if (plist-get talk :public)
+ ;; Copy main extension files from backstage to public
+ (let ((files (directory-files emacsconf-backstage-dir nil
+ (concat "^"
+ (regexp-quote (plist-get talk :video-slug))
+ (regexp-opt emacsconf-main-extensions)))))
+ (mapc (lambda (file)
+ (copy-file (expand-file-name file emacsconf-backstage-dir)
+ (expand-file-name file emacsconf-public-media-directory) t))
+ files))
+ ;; Remove files from public
+ (let ((files (directory-files emacsconf-public-media-directory nil
+ (concat "^"
+ (regexp-quote (plist-get talk :video-slug)
+ )))))
+ (mapc (lambda (file)
+ (delete-file (expand-file-name file emacsconf-public-media-directory)))
+ files)))
+ (emacsconf-publish-public-index)))
+
(defun emacsconf-publish-bbb-redirect-all ()
(interactive)
(unless (file-directory-p emacsconf-publish-current-dir)
diff --git a/emacsconf-stream.el b/emacsconf-stream.el
index 26a4773..1e2df14 100644
--- a/emacsconf-stream.el
+++ b/emacsconf-stream.el
@@ -145,15 +145,26 @@ while OTHER-FILENAME will be displayed at other times."
(plist-get talk :overlay-url)
(plist-get talk :overlay-bottom)))))
+(defun emacsconf-stream-open-qa-windows-on-change (talk)
+ (interactive (list (emacsconf-complete-talk-info)))
+ (when (or (not (boundp 'org-state)) (string= org-state "CLOSED_Q"))
+ (let ((default-directory (emacsconf-stream-track-login talk)))
+ (save-window-excursion
+ (emacsconf-stream-open-pad talk)
+ (emacsconf-stream-join-qa talk)
+ (shell-command "i3-msg 'layout splith'")))))
+
(defun emacsconf-stream-update-talk-info-on-change (talk)
"Update talk info."
(when (string= org-state "PLAYING")
- (emacsconf-stream-set-talk-info talk)))
+ (save-window-excursion
+ (emacsconf-stream-set-talk-info talk))))
(defun emacsconf-stream-play-talk-on-change (talk)
"Play the talk."
(when (string= org-state "PLAYING")
- (emacsconf-stream-play-video talk)))
+ (save-window-excursion
+ (emacsconf-stream-play-video talk))))
(defun emacsconf-stream-get-filename (talk)
"Return the local filename for the video file for TALK.
@@ -165,40 +176,48 @@ Final files should be stored in /data/emacsconf/stream/YEAR/video-slug--main.web
(defun emacsconf-stream-play-video (talk)
(interactive (list (emacsconf-complete-talk-info)))
- (let ((default-directory (emacsconf-stream-track-login talk)))
- (shell-command
- (concat "~/bin/track-mpv "
- (shell-quote-argument (emacsconf-stream-get-filename talk))))))
+ (let ((default-directory (emacsconf-stream-track-login talk))
+ (async-shell-command-buffer 'new-buffer))
+ ;; I tried using start-file-process, but I couldn't figure out how to get MPV to work.
+ ;; We'll just use shell-command then, and manually move to the QA states when we want to.
+ (save-window-excursion
+ (shell-command
+ (concat "nohup ~/bin/track-mpv "
+ (shell-quote-argument (emacsconf-stream-get-filename talk))
+ " > /dev/null 2>&1 & ")))))
(defun emacsconf-stream-open-pad (talk)
(interactive (list (emacsconf-complete-talk-info)))
- (let ((default-directory (emacsconf-stream-track-login talk)))
+ (let ((default-directory (emacsconf-stream-track-login talk))
+ (async-shell-command-buffer 'new-buffer))
(shell-command
- (concat "firefox -new-window "
+ (concat "nohup firefox -new-window "
(shell-quote-argument (plist-get talk :pad-url))
- " & "))))
+ " > /dev/null 2>&1 & "))))
(defun emacsconf-stream-join-qa (talk)
"Join the Q&A for TALK.
This uses the BBB room if available, or the IRC channel if not."
(interactive (list (emacsconf-complete-talk-info)))
- (let ((default-directory (emacsconf-stream-track-login talk)))
+ (let ((default-directory (emacsconf-stream-track-login talk))
+ (async-shell-command-buffer 'new-buffer))
(shell-command
- (concat "firefox -new-window "
+ (concat "nohup firefox -new-window "
(shell-quote-argument
(or (plist-get talk :bbb-room)
(plist-get talk :webchat-url)))
- " & "))))
+ " > /dev/null 2>&1 & "))))
(defun emacsconf-stream-join-chat (talk)
"Join the IRC chat for TALK."
(interactive (list (emacsconf-complete-talk-info)))
- (let ((default-directory (emacsconf-stream-track-login talk)))
+ (let ((default-directory (emacsconf-stream-track-login talk))
+ (async-shell-command-buffer 'new-buffer))
(shell-command
- (concat "firefox -new-window "
+ (concat "nohup firefox -new-window "
(shell-quote-argument
(plist-get talk :webchat-url))
- " & "))))
+ " > /dev/null 2>&1 & "))))
(defun emacsconf-stream-write-talk-overlay-svgs (talk video-filename other-filename)
(setq talk (emacsconf-stream-add-talk-props talk))
diff --git a/emacsconf.el b/emacsconf.el
index c760a3a..4b6b444 100644
--- a/emacsconf.el
+++ b/emacsconf.el
@@ -500,7 +500,7 @@
emacsconf-status-types 'string= "")
(plist-get o :status)))
(if (member (plist-get o :status)
- (split-string "PLAYING CLOSED_Q OPEN_Q UNSTREAMED_Q TO_ARCHIVE TO_EXTRACT TO_FOLLOW_UP"))
+ (split-string "PLAYING CLOSED_Q OPEN_Q UNSTREAMED_Q TO_ARCHIVE TO_EXTRACT TO_FOLLOW_UP DONE"))
(plist-put o :public t))
o)
@@ -1118,12 +1118,13 @@ Filter by TRACK if given. Use INFO as the list of talks."
#'emacsconf-org-after-todo-state-change t)))
(defvar emacsconf-todo-hooks
- '(
- emacsconf-stream-play-talk-on-change ;; play the talk
+ '(emacsconf-stream-play-talk-on-change ;; play the talk
+ emacsconf-stream-open-qa-windows-on-change
;; emacsconf-erc-org-after-todo-state-change ;; announce via ERC
+ emacsconf-publish-media-files-on-change
emacsconf-publish-bbb-redirect
emacsconf-publish-backstage-org-on-state-change ;; update the backstage index
- emacsconf-stream-update-talk-on-change ;; write to the talk text
+ emacsconf-stream-update-talk-info-on-change ;; write to the talk text
)
"Functions to run when the todo state changes.
They will be called with TALK.")