summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--emacsconf-erc.el28
-rw-r--r--emacsconf-stream.el106
-rw-r--r--emacsconf.el28
3 files changed, 90 insertions, 72 deletions
diff --git a/emacsconf-erc.el b/emacsconf-erc.el
index 139ae16..bced63d 100644
--- a/emacsconf-erc.el
+++ b/emacsconf-erc.el
@@ -170,27 +170,34 @@ If MESSAGE is not specified, reset the topic to the template."
(plist-get talk :pad-url)
(plist-get talk :qa-info)
(car (assoc-default (concat "#" (plist-get talk :channel)) emacsconf-topic-templates)))))))
+
(defun erc-cmd-NOWPLAYING (talk)
"Set the channel topics to announce TALK."
(interactive (list (emacsconf-complete-talk-info)))
- (when (stringp talk) (setq talk (or (emacsconf-find-talk-info talk) (error "Could not find talk %s" talk))))
+ (when (stringp talk)
+ (setq talk (or (emacsconf-find-talk-info talk) (error "Could not find talk %s" talk))))
;; Announce it in the track's channel
(if (emacsconf-erc-recently-announced (format "---- %s:" (plist-get talk :slug)))
(message "Recently announced, skipping")
(when (plist-get talk :track)
(emacsconf-erc-with-channels (list (concat "#" (plist-get talk :channel)))
- (erc-cmd-TOPIC (format "%s: %s (%s) pad: %s Q&A: %s | %s"
- (plist-get talk :slug)
- (plist-get talk :title)
- (plist-get talk :speakers)
- (plist-get talk :pad-url)
- (plist-get talk :qa-info)
- (car (assoc-default (concat "#" (plist-get talk :channel)) emacsconf-topic-templates))))
+ (erc-cmd-TOPIC
+ (format
+ "%s: %s (%s) pad: %s Q&A: %s | %s"
+ (plist-get talk :slug)
+ (plist-get talk :title)
+ (plist-get talk :speakers)
+ (plist-get talk :pad-url)
+ (plist-get talk :qa-info)
+ (car (assoc-default
+ (concat "#" (plist-get talk :channel))
+ emacsconf-topic-templates))))
(erc-send-message (format "---- %s: %s - %s ----"
(plist-get talk :slug)
(plist-get talk :title)
(plist-get talk :speakers-with-pronouns)))
- (erc-send-message (concat "Add your notes/questions to the pad: " (plist-get talk :pad-url)))
+ (erc-send-message
+ (concat "Add your notes/questions to the pad: " (plist-get talk :pad-url)))
(cond
((string-match "live" (or (plist-get talk :q-and-a) ""))
(erc-send-message (concat "Live Q&A: " (plist-get talk :bbb-redirect))))
@@ -287,7 +294,8 @@ If MESSAGE is not specified, reset the topic to the template."
(defun emacsconf-erc-announce-on-change (talk)
"Announce talk."
- (let ((func
+ (let ((emacsconf-publishing-phase 'conference)
+ (func
(pcase org-state
("PLAYING" #'erc-cmd-NOWPLAYING)
("CLOSED_Q" #'erc-cmd-NOWCLOSEDQ)
diff --git a/emacsconf-stream.el b/emacsconf-stream.el
index da64992..0ac6853 100644
--- a/emacsconf-stream.el
+++ b/emacsconf-stream.el
@@ -162,20 +162,26 @@ while OTHER-FILENAME will be displayed at other times."
(shell-command (concat "firefox " (plist-get talk :qa-slide-url) "&"))))
(defun emacsconf-stream-open-qa-windows-on-change (talk)
+ "Open the QA window(s) for TALK if the track's autopilot is set to 'todo."
(interactive (list (emacsconf-complete-talk-info)))
- (when (or (not (boundp 'org-state)) (string= org-state "CLOSED_Q"))
- (save-window-excursion
- (if (or (null (plist-get talk :q-and-a))
- (string-match "Mumble" (plist-get talk :q-and-a)))
- (emacsconf-stream-open-in-between-slide talk)
- (emacsconf-stream-join-qa talk)
- (shell-command "i3-msg 'layout splith'")))))
+ (let ((track (emacsconf-get-track (plist-get talk :track))))
+ (when (eq (plist-get track :autopilot) 'todo)
+ (when (or (not (boundp 'org-state)) (string= org-state "CLOSED_Q"))
+ (save-window-excursion
+ (if (or (null (plist-get talk :q-and-a))
+ (string-match "Mumble" (plist-get talk :q-and-a)))
+ (emacsconf-stream-open-in-between-slide talk)
+ (emacsconf-stream-join-qa talk)
+ (shell-command "i3-msg 'layout splith'")))))))
(defun emacsconf-stream-update-talk-info-on-change (talk)
- "Update talk info."
+ "Update TALK info if the track's autopilot is set to 'todo."
(when (string= org-state "PLAYING")
- (save-window-excursion
- (emacsconf-stream-set-talk-info talk))))
+ (let* ((talk (emacsconf-resolve-talk talk))
+ (track (emacsconf-get-track (plist-get talk :track))))
+ (when (eq (plist-get track :autopilot) 'todo)
+ (save-window-excursion
+ (emacsconf-stream-set-talk-info talk))))))
(defun emacsconf-stream-track-ssh (track &rest commands)
"SSH to the account for TRACK and run COMMANDS.
@@ -207,49 +213,51 @@ especially when two things need to happen close together."
(emacsconf-stream-track-ssh talk "nohup" "intro" (plist-get talk :slug)))
(defun emacsconf-stream-play-talk-on-change (talk)
- "Play the talk."
+ "Play the talk if the track's autopilot is set to 'todo."
(interactive (list (emacsconf-complete-talk-info)))
(setq talk (emacsconf-resolve-talk talk))
- (when (or (not (boundp 'org-state)) (string= org-state "PLAYING"))
- (if (plist-get talk :stream-files)
- (progn
+ (let ((track (emacsconf-get-track (plist-get talk :track))))
+ (when (eq (plist-get track :autopilot) 'todo)
+ (when (or (not (boundp 'org-state)) (string= org-state "PLAYING"))
+ (if (plist-get talk :stream-files)
+ (progn
+ (emacsconf-stream-track-ssh
+ talk
+ "overlay"
+ (plist-get talk :slug))
+ (emacsconf-stream-track-ssh
+ talk
+ (append
+ (list
+ "nohup"
+ "mpv")
+ (split-string-and-unquote (plist-get talk :stream-files))
+ (list "&"))))
(emacsconf-stream-track-ssh
talk
- "overlay"
- (plist-get talk :slug))
- (emacsconf-stream-track-ssh
- talk
- (append
- (list
- "nohup"
- "mpv")
- (split-string-and-unquote (plist-get talk :stream-files))
- (list "&"))))
- (emacsconf-stream-track-ssh
- talk
- (cons
- "nohup"
- (cond
- ((and
- (plist-get talk :recorded-intro)
- (plist-get talk :video-file)) ;; recorded intro and recorded talk
- (message "should automatically play intro and recording")
- (list "play-with-intro" (plist-get talk :slug))) ;; todo deal with stream files
- ((and
- (plist-get talk :recorded-intro)
- (null (plist-get talk :video-file))) ;; recorded intro and live talk; play the intro and join BBB
- (message "should automatically play intro; join %s" (plist-get talk :bbb-backstage))
- (list "intro" (plist-get talk :slug)))
- ((and
- (null (plist-get talk :recorded-intro))
- (plist-get talk :video-file)) ;; live intro and recorded talk, show slide and use Mumble; manually play talk
- (message "should show intro slide; play %s afterwards" (plist-get talk :slug))
- (list "intro" (plist-get talk :slug)))
- ((and
- (null (plist-get talk :recorded-intro))
- (null (plist-get talk :video-file))) ;; live intro and live talk, join the BBB
- (message "join %s for live intro and talk" (plist-get talk :bbb-backstage))
- (list "bbb" (plist-get talk :slug)))))))))
+ (cons
+ "nohup"
+ (cond
+ ((and
+ (plist-get talk :recorded-intro)
+ (plist-get talk :video-file)) ;; recorded intro and recorded talk
+ (message "should automatically play intro and recording")
+ (list "play-with-intro" (plist-get talk :slug))) ;; todo deal with stream files
+ ((and
+ (plist-get talk :recorded-intro)
+ (null (plist-get talk :video-file))) ;; recorded intro and live talk; play the intro and join BBB
+ (message "should automatically play intro; join %s" (plist-get talk :bbb-backstage))
+ (list "intro" (plist-get talk :slug)))
+ ((and
+ (null (plist-get talk :recorded-intro))
+ (plist-get talk :video-file)) ;; live intro and recorded talk, show slide and use Mumble; manually play talk
+ (message "should show intro slide; play %s afterwards" (plist-get talk :slug))
+ (list "intro" (plist-get talk :slug)))
+ ((and
+ (null (plist-get talk :recorded-intro))
+ (null (plist-get talk :video-file))) ;; live intro and live talk, join the BBB
+ (message "join %s for live intro and talk" (plist-get talk :bbb-backstage))
+ (list "bbb" (plist-get talk :slug)))))))))))
(defun emacsconf-stream-get-filename (talk)
"Return the local filename for the video file for TALK.
diff --git a/emacsconf.el b/emacsconf.el
index 9d70ad1..5497c05 100644
--- a/emacsconf.el
+++ b/emacsconf.el
@@ -640,16 +640,17 @@ The subheading should match `emacsconf-abstract-heading-regexp'."
(defun emacsconf-add-talk-status (o)
+ "Add status label and public info."
(plist-put o :status-label
(or (assoc-default (plist-get o :status)
emacsconf-status-types 'string= "")
(plist-get o :status)))
- (if (or
- (member (plist-get o :status)
- (split-string "PLAYING CLOSED_Q OPEN_Q UNSTREAMED_Q TO_ARCHIVE TO_EXTRACT TO_FOLLOW_UP DONE"))
- (time-less-p (plist-get o :start-time)
- (current-time)))
- (plist-put o :public t))
+ (when (or
+ (member (plist-get o :status)
+ (split-string "PLAYING CLOSED_Q OPEN_Q UNSTREAMED_Q TO_ARCHIVE TO_EXTRACT TO_FOLLOW_UP DONE"))
+ (time-less-p (plist-get o :start-time)
+ (current-time)))
+ (plist-put o :public t))
o)
(defun emacsconf-talk-live-p (talk)
@@ -779,7 +780,9 @@ The subheading should match `emacsconf-abstract-heading-regexp'."
(plist-put o :qa-type "none")
(plist-put o :qa-link ""))
((string-match "live" (plist-get o :q-and-a))
- (plist-put o :bbb-redirect (format "https://emacsconf.org/current/%s/room/" (plist-get o :slug)))
+ (plist-put o :bbb-redirect (format "https://media.emacsconf.org/%s/current/bbb-%s.html"
+ emacsconf-year
+ (plist-get o :slug)))
(plist-put o :qa-info (plist-get o :bbb-redirect))
(plist-put o :qa-url (plist-get o :bbb-redirect))
(plist-put o :qa-backstage-url
@@ -1263,7 +1266,7 @@ The subheading should match `emacsconf-abstract-heading-regexp'."
:uid 2002
:vnc-display ":5"
:vnc-port "5905"
- :autopilot t
+ :autopilot crontab
:status "offline")
(:name "Development" :color "skyblue" :id "dev" :channel "emacsconf-dev"
:watch "https://live.emacsconf.org/2022/watch/dev/"
@@ -1278,7 +1281,7 @@ The subheading should match `emacsconf-abstract-heading-regexp'."
:start "10:00" :end "17:00"
:vnc-display ":6"
:vnc-port "5906"
- :autopilot t
+ :autopilot crontab
:status "offline")))
(defun emacsconf-get-track (name)
@@ -1511,15 +1514,14 @@ 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 "gen" "dev")
- (emacsconf-stream-open-qa-windows-on-change "gen" "dev")
+ '(emacsconf-stream-play-talk-on-change
+ emacsconf-stream-open-qa-windows-on-change
emacsconf-erc-announce-on-change ;; announce via ERC
emacsconf-publish-bbb-redirect
emacsconf-stream-update-talk-info-on-change
emacsconf-publish-media-files-on-change
- ;; emacsconf-publish-update-talk ;; skipping this for now, I'll do this locally
+ emacsconf-publish-update-talk
emacsconf-publish-backstage-org-on-state-change ;; update the backstage index
- ;; write to the talk text
)
"Functions to run when the todo state changes.
They will be called with TALK.")