diff options
| -rw-r--r-- | emacsconf-pad.el | 152 | 
1 files changed, 152 insertions, 0 deletions
diff --git a/emacsconf-pad.el b/emacsconf-pad.el index 9137d98..d11f067 100644 --- a/emacsconf-pad.el +++ b/emacsconf-pad.el @@ -296,5 +296,157 @@ ${next-talk-list}            (not (string= cached-last-modified                          (number-to-string .data.lastEdited)))))))) +(defun emacsconf-pad-export-initial-content-for-hyperlists (dir &optional info) +  (interactive (list (read-file-name "Output directory: " nil nil nil nil 'file-directory-p))) +  (setq info (emacsconf-prepare-for-display (emacsconf-get-talk-info))) +  (unless (file-directory-p dir) +    (make-directory dir)) +  (mapc +   (lambda (shift) +     (with-temp-file (expand-file-name (concat (plist-get shift :id) ".html") dir) +       (insert (emacsconf-pad-format-shift-hyperlist +                (append +                 (list +                  :year +                  emacsconf-year +                  :track-id +                  (plist-get +                   (emacsconf-get-track (plist-get shift :track)) +                   :id))) +                shift info)))) +   emacsconf-shifts)) +;; (emacsconf-pad-export-initial-content-for-hyperlists "/ssh:media:~/backstage/hyperlists") + +(defun emacsconf-pad-format-shift-hyperlist (shift info) +  (concat +   "<h1>" (plist-get shift :id) "</h1>" +   (emacsconf-replace-plist-in-string +    shift +    "<p>Host: ${host}, Streamer: ${streamer}, IRC: ${irc}, Pad: ${pad}, Check-in: ${checkin}</p>") +   (emacsconf-replace-plist-in-string +    shift +    " +<strong>Setup</strong> +<ul><li>[ ] ${checkin}: Open the index: https://media.emacsconf.org/${year}/backstage/index-${track-id}.html</li> +<li>[ ] ${host}: Open the intro pad and the index: https://media.emacsconf.org/${year}/backstage/index-${track-id}.html</li> +<li>[ ] ${irc}: Watch the #emacsconf-${track-id} channel</li> +<li>[ ] ${pad}: Open the index: https://media.emacsconf.org/${year}/backstage/index-${track-id}.html</li> +<li>[ ] ${streamer}: Start streaming with OBS +<ul><li>[ ] Set up the local environment +<ul><li>[? gen] export TRACK=gen; export TRACK_PORT=5905; export SSH_PORT=46668</li> +<li>[? dev] export TRACK=dev; export TRACK_PORT=5906; export SSH_PORT=46668</li></ul></li> +<li>[ ] Copy the password file: scp emacsconf-$TRACK@res.emacsconf.org:~/.vnc/passwd vnc-passwd-$TRACK -p $SSH_PORT</li> +<li>[ ] Forward your local ports: ssh emacsconf-$TRACK@res.emacsconf.org -N -L $TRACK_PORT:127.0.0.1:$TRACK_PORT -p $SSH_PORT &</li> +<li>[ ] Connect via VNC: xvncviewer 127.0.0.1:$TRACK_PORT -shared -geometry 1280x720 -passwd vnc-passwd-$TRACK & +<ul> +<li>[? Can't connect to VNC]: ssh emacsconf-$TRACK@res.emacsconf.org -p $SSH_PORT /home/emacsconf-$TRACK/bin/track-vnc</li> +<li>[? Can't find OBS]: track-obs</li></ul></li> +<li>[ ] Start recording (not streaming). (Alt-2, switch to workspace 2; Alt-Shift-2, move something to workspace 2).</li> +<li>[ ] Watch the stream with MPV on your local system: mpv https://live0.emacsconf.org/emacsconf/$TRACK.webm &</li> +<li>[ ] Check 480p: mpv https://live0.emacsconf.org/emacsconf/$TRACK-480p.webm &</li> +<li>[ ] Test with a sample video or Q&A session: ssh emacsconf-$TRACK@res.emacsconf.org -p 46668 \"~/bin/track-mpv meetups &\"</li> +</ul></li></ul> +") +   "<ul>" +   (emacsconf-pad-shift-hyperlist +    (list +     :start (plist-get shift :start) +     :end (plist-get shift :end) +     :host (emacsconf-surround "HOST-" (plist-get shift :host) "" "HOST") +     :stream (emacsconf-surround "STREAM-" (plist-get shift :streamer) "" "STREAM") +     :irc-volunteer (emacsconf-surround "IRC-" (plist-get shift :irc) "" "IRC") +     :checkin (emacsconf-surround "CHECKIN-" (plist-get shift :checkin) "" "CHECKIN") +     :pad (emacsconf-surround "PAD-" (plist-get shift :pad) "" "PAD")) +    (seq-filter +     (lambda (talk) (string= (plist-get talk :track) (plist-get shift :track))) +     (emacsconf-filter-talks-by-time (plist-get shift :start) (plist-get shift :end) info))) +   "</ul>")) + +(defun emacsconf-pad-prepopulate-hyperlists () +  (interactive) +  (let ((info (emacsconf-prepare-for-display (emacsconf-get-talk-info)))) +    (mapc (lambda (shift) +            (let ((pad-id (format "private_%s" (plist-get shift :id)))) +              (emacsconf-pad-create-pad pad-id) +              (emacsconf-pad-set-html +               pad-id +               (emacsconf-pad-format-shift-hyperlist shift info)))) +          emacsconf-shifts))) + +;; Related: emacsconf-talk-hyperlist +(defun emacsconf-pad-talk-hyperlist (talk &optional do-insert) +  (interactive (list (emacsconf-complete-talk-info) t)) +  (let* ((track-id (plist-get (emacsconf-get-track talk) :id)) +         (modified-talk +          (apply +           #'append +           (list +            :track-id track-id +            :ssh  "ssh orga@res.emacsconf.org -p 46668 " +            :ssh-audio (format "ex: ssh emacsconf-%s@res.emacsconf.org -p 46668 \"%s-vol 85%%\" (or %s-louder, %s-quieter)" track-id track-id track-id track-id)) +           talk +           (mapcar (lambda (status) +                     (list (intern (concat ":ssh-" (replace-regexp-in-string "_" "" (downcase status)))) +                           (format "ssh orga@res.emacsconf.org -p 46668 \"~/scripts/update-task-status.sh %s . %s\"" +                                   (plist-get talk :slug) +                                   status))) +                   '("PLAYING" "OPEN_Q" "CLOSED_Q")))) +         (result +          (emacsconf-replace-plist-in-string +           modified-talk +           (format "<li><strong>%s %s %s %s <a href=\"%s%s\">%s%s</a></strong>\n%s</li>" +                   (format-time-string "%H:%M" (plist-get talk :start-time) emacsconf-timezone) +                   (plist-get talk :track) +                   (plist-get talk :slug) +                   (plist-get talk :title) +                   emacsconf-base-url +                   (plist-get talk :url) +                   emacsconf-base-url +                   (plist-get talk :url) +                   (pcase (or (plist-get talk :q-and-a) "") +                     ((rx "live") +                      "<ul> +<li>[ ] ${checkin}: Check ${speakers-with-pronouns} (${irc}) into ${bbb-room} sometime beforehand and make them a moderator</li> +<li>[ ] ${stream}: Display the in-between slide <a href=\"https://media.emacsconf.org/${year}/in-between/${slug}.png\">https://media.emacsconf.org/${year}/in-between/${slug}.png</a></li> +<li>[ ] ${host}: Connect to the ${track} channel in Mumble and introduce the talk</li> +<li>[ ] ${stream}: Start playing the talk: ${ssh-playing}</li> +<li>[ ] ${host}: Join the Q&A room at <a href=\"${bbb-room}\">${bbb-room}</a> and open the pad at <a href=\"${pad-url}\">${pad-url}</a>; optionally open IRC for ${channel} (<a href=\"${webchat-url}\">${webchat-url}</a>)</li> +<li>[ ] [? speaker missing?] ${host}: Let #emacsconf-org know so that we can text or call the speaker</li> +<li>[ ] ${stream}: After the talk, open the Q&A window and the pad: ${ssh-closedq} </li> +<li>[ ] ${stream}: Give the host the go-ahead via Mumble or #emacsconf-org</li> +<li>[ ] ${host}: Start recording and read questions</li> +<li>[ ] ${stream}: Adjust the audio levels as needed: ${ssh-audio}</li> +<li>[ ] ${host}: Decide when to open the Q&A and let the streamer know</li> +<li>[ ] ${stream}: Mark the Q&A as open: ${ssh-openq}</li> +<li>[ ] ${host}: Announce that people can join using the URL on the talk page</li> +<li>[? Open Q&A is still going on and it's about five minutes before the next talk] +  <ul><li>[ ] ${host}: Let the speaker know about the time and that the Q&A can continue off-stream if people want to join</li></ul></li> +<li>[? Open Q&A is still going on and it's about two minutes before the next talk] +  <ul><li>[ ] ${host}: Announce that the Q&A will continue if people want to join the BBB room from the talk page, and the stream will now move to the next talk</li></ul></li> +<li>[? Q&A is done early] +  <ul> +  <li>[ ] ${stream}: Mark the talk as archived: ${ssh} \"~/current/scripts/update-task-status.sh ${slug} . TO_ARCHIVE\"</li> +</ul> +<li>[ ] ${stream}: Close the Q&A windows and move on to the next talk</li></ul> +") +                     ((rx "irc") +                      " +<ul><li>[ ] ${stream}: Display the in-between slide <a href=\"https://media.emacsconf.org/${year}/in-between/${slug}.png\">https://media.emacsconf.org/${year}/in-between/${slug}.png</a></li> +<li>[ ] ${host}: Connect to the ${track} channel in Mumble and introduce the talk</li> +<li>[ ] ${stream}: ${ssh-playing}</li> +<li>[ ] ${stream}: Open the IRC channel (${channel}) and the pad, and arrange the windows: ${ssh-closedq}</li> +<li>[ ] ${stream}: When it's time for the next talk, close the Q&A windows and move on to the next talk</li></ul> +") +                     (_ +                      "<ul><li>[ ] ${stream}: Display the in-between slide <a href=\"https://media.emacsconf.org/${year}/in-between/${slug}.png\">https://media.emacsconf.org/${year}/in-between/${slug}.png</a></li> +<li>[ ] ${host}: Connect to the ${track} channel in Mumble and introduce the talk</li> +<li>[ ] ${stream}: Start the talk: ${ssh-playing}</li> +<li>[ ] ${stream}: Open the IRC channel (${channel}) and the pad, and arrange the windows: ${ssh-closedq}</li> +<li>[ ] ${stream}: When it's time for the next talk, close the Q&A windows and move on to the next talk</li> +</ul> +")) +                   nil nil 1)))) +    (if do-insert (insert result)) +    result))  (provide 'emacsconf-pad)  ;;; emacsconf-pad.el ends here  | 
