diff options
| author | Sacha Chua <sacha@sachachua.com> | 2022-11-28 19:59:34 -0500 | 
|---|---|---|
| committer | Sacha Chua <sacha@sachachua.com> | 2022-11-28 19:59:34 -0500 | 
| commit | 94adfdf2ea92cdb3e711af11017332735ba5e5ff (patch) | |
| tree | a3f78086e3e2939631d5daae1f5292356cd77560 | |
| parent | d78066a7d5f8fdca09a525a8d49eb9cd15bd9074 (diff) | |
| download | emacsconf-el-94adfdf2ea92cdb3e711af11017332735ba5e5ff.tar.xz emacsconf-el-94adfdf2ea92cdb3e711af11017332735ba5e5ff.zip  | |
hyperlist updates
| -rw-r--r-- | emacsconf-erc.el | 2 | ||||
| -rw-r--r-- | emacsconf-mail.el | 29 | ||||
| -rw-r--r-- | emacsconf-pad.el | 11 | ||||
| -rw-r--r-- | emacsconf-publish.el | 152 | ||||
| -rw-r--r-- | emacsconf.el | 12 | 
5 files changed, 132 insertions, 74 deletions
diff --git a/emacsconf-erc.el b/emacsconf-erc.el index 6c9a742..56c6ed7 100644 --- a/emacsconf-erc.el +++ b/emacsconf-erc.el @@ -63,7 +63,7 @@  (defcustom emacsconf-erc-org "#emacsconf-org" "Channel for organizers")  (defcustom emacsconf-topic-templates -  '(("#emacsconf" "${emacsconf-name} ${year} | Subscribe to https://lists.gnu.org/mailman/listinfo/emacsconf-discuss for updates") +  '(("#emacsconf" "EmacsConf 2022 | Subscribe to https://lists.gnu.org/mailman/listinfo/emacsconf-discuss for updates")      ("#emacsconf-gen" "General track | https://emacsconf.org/2022/watch/gen/ | Subscribe to https://lists.gnu.org/mailman/listinfo/emacsconf-discuss for updates")      ("#emacsconf-dev" "Development track | https://emacsconf.org/2022/watch/dev/ | Subscribe to https://lists.gnu.org/mailman/listinfo/emacsconf-discuss for updates")      ("#emacsconf-accessible" "EmacsConf 2022 accessibility - help by describing what's happening | Subscribe to https://lists.gnu.org/mailman/listinfo/emacsconf-discuss for updates") diff --git a/emacsconf-mail.el b/emacsconf-mail.el index 5b93acd..179dcc3 100644 --- a/emacsconf-mail.el +++ b/emacsconf-mail.el @@ -244,5 +244,34 @@ Include some other things, too, such as emacsconf-year, title, name, email, url,                (kill-buffer buffer))))          (buffer-list))) +(defun emacsconf-mail-notmuch-search-for-talk (talk) +  "Search for e-mail related to TALK." +  (interactive (list (emacsconf-complete-talk-info)))  +  (notmuch-search +   (concat +    (mapconcat +     (lambda (o) +       (format "from:%s or to:%s" o o)) +     (split-string (plist-get talk :email) " *, *") +     " or ") +    " or (" emacsconf-id " and " (plist-get talk :slug) ")"))) + +;;; Volunteers + +(defun emacsconf-mail-volunteers (volunteers) +  (interactive +   (list +    (completing-read-multiple +     "Volunteers: " (emacsconf-volunteer-emails-for-completion)))) +  (compose-mail (string-join volunteers ", "))) + +(defun emacsconf-mail-notmuch-search-for-volunteer (volunteer) +  (interactive +   (list +    (completing-read +     "Volunteer: " (emacsconf-volunteer-emails-for-completion)))) +  (let ((email (if (string-match "<\\(.*?\\)>" volunteer) (match-string 1) volunteer))) +    (notmuch-search (format "from:%s or to:%s" email email)))) +  (provide 'emacsconf-mail)  ;;; emacsconf-mail.el ends here diff --git a/emacsconf-pad.el b/emacsconf-pad.el index 756a65e..f9cd655 100644 --- a/emacsconf-pad.el +++ b/emacsconf-pad.el @@ -360,12 +360,14 @@ ${next-talk-list}        (concat         "  <p>Ctrl-5 is the shortcut for striking through on Etherpad.</p> +Don't use this for notes since it gets overwritten.  <strong>Setup</strong>  <ul>  <li>[ ] ${checkin}: Open ${checkin-pad}</li>  <li>[ ] ${irc-volunteer}: Watch the #emacsconf-${track-id} channel and open ${base-url}${year}/talks for links to the pads</li>  <li>[ ] ${pad}: Open ${base-url}${year}/talks for links to the pads</li> +<li>[ ] ${coord}: ssh orga@live0.emacsconf.org and run screen-fallbacks; confirm that the streams are showing fallbacks</li>  <li>[ ] ${stream}: Start recording with OBS  <li>[ ] Copy the password file if you don't already have it: <strong>scp emacsconf-${track-id}@res.emacsconf.org:~/.vnc/passwd vnc-passwd-${track-id} -p ${ssh-port}</strong></li>  <li>[ ] Forward your local ports: <strong>ssh emacsconf-${track-id}@res.emacsconf.org -N -L ${vnc-port}:127.0.0.1:${vnc-port} -p ${ssh-port} &</strong></li> @@ -510,8 +512,8 @@ ${bbb-checklist}</li>")     (t      (let ((pronoun (pcase (plist-get talk :pronouns)                       ((rx "she") "She") +                     ((or 'nil "nil" (rx string-start "he") (rx "him")) "He")                       ((rx "they") "They") -                     ((rx "she") "He")                       (_ (or (plist-get talk :pronouns) "")))))        (format "The next talk is called \"%s\"\", by %s.%s" (plist-get talk :title)                (replace-regexp-in-string ", \\([^,]+\\)$" @@ -577,13 +579,14 @@ ${bbb-checklist}</li>")                      (emacsconf-surround "<li><strong>" (plist-get talk :hyperlist-note) "</strong></li>" "")                      (if (file-exists-p                           (expand-file-name (concat (plist-get talk :slug) ".webm") (expand-file-name "intros" emacsconf-stream-asset-dir))) -                        "<li>This talk has a recorded intro that should automatically play when you mark the talk as playing. If it doesn't play, go to the ~/assets/intros directory and use track-mpv to play the video file.</li>" -                      "<li>[ ] ${stream}: Display the in-between slide: ${ssh-track} and run <em>firefox ${in-between-url} &</em></li> +                        "<li>This talk has a recorded intro that should automatically play when you mark the talk as playing. If it doesn't play, go to the ~/assets/intros directory and use track-mpv to play the video file. If that doesn't work, display the in-between slide: ${ssh-track} and run <em>firefox ~/assets/in-between/${slug}.png</em> . ${host} can join Mumble and say: <strong>${intro-note}</strong></li>" +                      "<li>[ ] ${stream}: Display the in-between slide: ${ssh-track} and run <em>firefox ~/assets/in-between/${slug}.png</em></li>  <li>[ ] ${host}: Connect to the ${mumble} channel in Mumble and introduce the talk: <strong>${intro-note}</strong></li>  ")                      (if (plist-get talk :video-file) -                        "<li>[ ] ${stream}: Mark the talk as playing: ${ssh-playing} and confirm that it plays. If it doesn't play, go to the ~/stream directory and use track-mpv to play the video file.</li>" +                        "<li>[ ] ${stream}: Mark the talk as playing: ${ssh-playing} and confirm that it plays. If it doesn't play, go to the ~/stream directory and use track-mpv to play the video file.</li> +<li>[ ] ${coord}: emacsconf-publish-update-talk ${slug}  and then commit and push the wiki. Confirm that the video is visible"                        "<li>[ ] ${stream}: <strong>LIVE talk:</strong> Mark the talk as playing: ${ssh-playing} and arrange windows (backup URL for BBB if it doesn't open: ${bbb-backstage}). Adjust audio as needed</li>")                      (pcase (or (plist-get talk :q-and-a) "")                        ((rx "live") diff --git a/emacsconf-publish.el b/emacsconf-publish.el index a3371ea..a4b09fe 100644 --- a/emacsconf-publish.el +++ b/emacsconf-publish.el @@ -41,6 +41,13 @@  (defcustom emacsconf-public-media-directory (concat "/ssh:orga@media.emacsconf.org:/var/www/media.emacsconf.org/" emacsconf-year "/")    "Can be over TRAMP" :type 'string :group 'emacsconf) +(defun emacsconf-publish-info-pages-for-talk (talk) +"Publish the before and after pages for this talk." +  (interactive (list (emacsconf-complete-talk-info))) +  (let ((info (emacsconf-get-talk-info))) +    (emacsconf-publish-before-page talk info) +    (emacsconf-publish-after-page talk info))) +  (defun emacsconf-publish-update-talk (talk)    "Publish the schedule page and the page for this talk."    (interactive (list (emacsconf-complete-talk-info))) @@ -1821,7 +1828,7 @@ ${title-info}        (emacsconf-publish-page-nav nav "watch")        " | ${stream-nav}</div> -<video controls><source src=\"${stream}\" type=\"video/webm\" /></video> +<video controls class=\"reload\"><source src=\"${stream}\" type=\"video/webm\" /></video>  <div>Alternatively, load <a href=\"${stream-hires}\">${stream-hires}</a> or <a href=\"${480p}\">${480p}</a> (low-res) in a streaming media player such as MPV.</div>  <hr size=\"1\"><div>" (emacsconf-publish-page-nav nav "links") " | ${stream-nav}</div>"        "<div>${brief}</div> @@ -1843,35 +1850,58 @@ ${title-info}  (defun emacsconf-publish-watch-pages ()    "Update /year/watch pages."    (interactive) -  (let ((tracks -         (mapcar (lambda (track) -                   (append (list -                            :year emacsconf-year           -                            :stream (concat emacsconf-stream-base (plist-get track :id) ".webm")           -                            :stream-hires (concat emacsconf-stream-base (plist-get track :id) ".webm")           -                            :480p (concat emacsconf-stream-base (plist-get track :id) "-480p.webm")) -                           track)) -                 emacsconf-tracks))) -    (let* ((info (emacsconf-prepare-for-display (emacsconf-get-talk-info))) -           (emacsconf-publishing-phase 'schedule) -           (emacsconf-use-absolute-url t)) -      (when emacsconf-directory -        (emacsconf-publish-with-wiki-change -          (make-directory (expand-file-name "watch" (expand-file-name emacsconf-year emacsconf-directory)) t) -          (with-temp-file (expand-file-name "watch/info.md" (expand-file-name emacsconf-year emacsconf-directory)) -            (insert "[[!sidebar content=\"\"]]" (emacsconf-publish-format-watch-index info))) -          (mapc (lambda (track) -                  (with-temp-file (expand-file-name (format "%s/watch/%s.md" emacsconf-year (plist-get track :id)) -                                                    emacsconf-directory) -                    (insert (emacsconf-publish-format-watch-track (append track (list :title "")) info)))) -                tracks))) -      ;; Update live.emacsconf.org -      (when emacsconf-publish-watch-directory -        (make-directory (expand-file-name "watch" (expand-file-name emacsconf-year emacsconf-publish-watch-directory)) t) -        (with-temp-file (expand-file-name "watch/index.html" (expand-file-name emacsconf-year emacsconf-publish-watch-directory)) -          (insert "<html><head><title>Watch EmacsConf</title><link rel=\"stylesheet\" type=\"text/css\" href=\"/style.css\"></link></head><body>" (emacsconf-publish-format-watch-index info) - -                  " <p> +  (let* ((tracks +          (mapcar (lambda (track) +                    (append (list +                             :year emacsconf-year           +                             :stream (concat emacsconf-stream-base (plist-get track :id) ".webm")           +                             :stream-hires (concat emacsconf-stream-base (plist-get track :id) ".webm")           +                             :480p (concat emacsconf-stream-base (plist-get track :id) "-480p.webm")) +                            track)) +                  emacsconf-tracks)) +         (reload-js " +<script> + // @license magnet:?xt=urn:btih:90dc5c0be029de84e523b9b3922520e79e0e6f08&dn=cc0.txt txt CC0-1.0 + // Copyright (c) 2022 Sacha Chua - CC0 Public Domain +var video = document.querySelector('video.reload'); +if (video) { +  var myVar = setInterval(reloadAsNeeded, 1000); +  var oldTime = ''; +  function reloadAsNeeded() { +    if ((video.paused != true && (video.currentTime - oldTime) == 0 && video.currentTime != 0)) { +      var source = video.querySelector('source'); +      var oldVideo = source.src; +      source.src = ''; +      source.src = oldVideo; +      video.load(); +      video.play(); +    } +    oldTime = video.currentTime; +  }; +} +// @license-end +</script> +") +         (info (emacsconf-prepare-for-display (emacsconf-get-talk-info))) +         (emacsconf-publishing-phase 'schedule) +         (emacsconf-use-absolute-url t)) +    (when emacsconf-directory +      (emacsconf-publish-with-wiki-change +        (make-directory (expand-file-name "watch" (expand-file-name emacsconf-year emacsconf-directory)) t) +        (with-temp-file (expand-file-name "watch/info.md" (expand-file-name emacsconf-year emacsconf-directory)) +          (insert "[[!sidebar content=\"\"]]" (emacsconf-publish-format-watch-index info))) +        (mapc (lambda (track) +                (with-temp-file (expand-file-name (format "%s/watch/%s.md" emacsconf-year (plist-get track :id)) +                                                  emacsconf-directory) +                  (insert (emacsconf-publish-format-watch-track (append track (list :title "")) info)))) +              tracks))) +    ;; Update live.emacsconf.org +    (when emacsconf-publish-watch-directory +      (make-directory (expand-file-name "watch" (expand-file-name emacsconf-year emacsconf-publish-watch-directory)) t) +      (with-temp-file (expand-file-name "watch/index.html" (expand-file-name emacsconf-year emacsconf-publish-watch-directory)) +        (insert "<html><head><title>Watch EmacsConf</title><link rel=\"stylesheet\" type=\"text/css\" href=\"/style.css\"></link></head><body>" (emacsconf-publish-format-watch-index info) + +                " <p>          Depending on which media player you use, you may enter the stream address          in a graphical user interface or provide it as an argument to the program          when launching it from the terminal. @@ -1906,36 +1936,38 @@ when the host has opened the Q&A.</p>  " -                  "</body></html>")) -        (mapc (lambda (track) -                (make-directory (expand-file-name (format "%s/watch/%s" emacsconf-year (plist-get track :id)) emacsconf-publish-watch-directory) t) -                (make-directory (expand-file-name (format "%s/watch/%s-480p" emacsconf-year (plist-get track :id)) emacsconf-publish-watch-directory) t) -                (with-temp-file (expand-file-name (format "%s/watch/%s/index.html" emacsconf-year (plist-get track :id)) -                                                  emacsconf-publish-watch-directory) -                  (insert -                   (emacsconf-replace-plist-in-string -                    track -                    "<html><head><title>Watch EmacsConf ${name} track</title><link rel=\"stylesheet\" type=\"text/css\" href=\"/style.css\"></link></head><body>") -                   (emacsconf-publish-format-watch-track (append track -                                                                 (list :title -                                                                       (emacsconf-replace-plist-in-string -                                                                        track -                                                                        "EmacsConf ${year}: ${name} track"))) -                                                         info) -                   "</body></html>")) -                (with-temp-file (expand-file-name (format "%s/watch/%s-480p/index.html" emacsconf-year (plist-get track :id)) -                                                  emacsconf-publish-watch-directory) -                  (insert -                   (emacsconf-replace-plist-in-string -                    track -                    "<html><head><title>Watch EmacsConf ${name} track (low-res)</title><link rel=\"stylesheet\" type=\"text/css\" href=\"/style.css\"></link></head><body>") -                   (emacsconf-publish-format-watch-track -                    (append (list :stream (plist-get track :480p) -                                  :title (emacsconf-replace-plist-in-string track "EmacsConf ${year}: ${name} track (low-res)")) -                            track) -                    info) -                   "</body></html>"))) -              tracks))))) +                "</body></html>")) +      (mapc (lambda (track) +              (make-directory (expand-file-name (format "%s/watch/%s" emacsconf-year (plist-get track :id)) emacsconf-publish-watch-directory) t) +              (make-directory (expand-file-name (format "%s/watch/%s-480p" emacsconf-year (plist-get track :id)) emacsconf-publish-watch-directory) t) +              (with-temp-file (expand-file-name (format "%s/watch/%s/index.html" emacsconf-year (plist-get track :id)) +                                                emacsconf-publish-watch-directory) +                (insert +                 (emacsconf-replace-plist-in-string +                  track +                  "<html><head><title>Watch EmacsConf ${name} track</title><link rel=\"stylesheet\" type=\"text/css\" href=\"/style.css\"></link></head><body>") +                 (emacsconf-publish-format-watch-track (append track +                                                               (list :title +                                                                     (emacsconf-replace-plist-in-string +                                                                      track +                                                                      "EmacsConf ${year}: ${name} track"))) +                                                       info) +                 reload-js +                 "</body></html>")) +              (with-temp-file (expand-file-name (format "%s/watch/%s-480p/index.html" emacsconf-year (plist-get track :id)) +                                                emacsconf-publish-watch-directory) +                (insert +                 (emacsconf-replace-plist-in-string +                  track +                  "<html><head><title>Watch EmacsConf ${name} track (low-res)</title><link rel=\"stylesheet\" type=\"text/css\" href=\"/style.css\"></link></head><body>") +                 (emacsconf-publish-format-watch-track +                  (append (list :stream (plist-get track :480p) +                                :title (emacsconf-replace-plist-in-string track "EmacsConf ${year}: ${name} track (low-res)")) +                          track) +                  info) +                 reload-js +                 "</body></html>"))) +            tracks))))  (defvar emacsconf-publish-current-dir "/ssh:orga@media.emacsconf.org:/var/www/media.emacsconf.org/2022/current" diff --git a/emacsconf.el b/emacsconf.el index 378d722..25964e7 100644 --- a/emacsconf.el +++ b/emacsconf.el @@ -91,6 +91,8 @@  (defvar emacsconf-res-dir (format "/ssh:orga@res.emacsconf.org:/data/emacsconf/%s" emacsconf-year))  (defvar emacsconf-media-extensions '("webm" "mkv" "mp4" "webm" "avi" "ts" "ogv" "wav" "ogg" "mp3"))  (defvar emacsconf-ftp-upload-dir "/ssh:orga@media.emacsconf.org:/srv/ftp/anon/upload-here") +(defvar emacsconf-backstage-user "emacsconf") +(defvar emacsconf-backstage-password nil "Password for backstage area")  (defvar emacsconf-notebook    (expand-file-name     "index.org" @@ -1038,8 +1040,7 @@            :vnc-port "5906"            :status "offline"))) -(defvar emacsconf-shifts (list (list :id "sat-am-gen" :track "General" :start "2022-12-03T08:00:00-0500" :end "2022-12-03T12:00:00-0500" :host "zaeph" :streamer "corwin" :checkin "sachac" :irc "sachac" :pad "publicvoit" :coord "sachac") (list :id "sat-pm-gen" :track "General" :start "2022-12-03T13:00:00-0500" :end "2022-12-03T18:00:00-0500" :host "zaeph" :streamer "corwin" :checkin "FlowyCoder" :irc "dto" :pad "publicvoit" :coord "sachac") (list :id "sat-am-dev" :track "Development" :start "2022-12-03T08:00:00-0500" :end "2022-12-03T12:00:00-0500" :host "bandali" :streamer "bandali" :checkin "sachac" :irc "dto" :coord "sachac") (list :id "sat-pm-dev" :track "Development" :start "2022-12-03T13:00:00-0500" :end "2022-12-03T18:00:00-0500" :host "vetrivln" :streamer "bandali" :checkin "FlowyCoder" :irc "vetrivln" :coord "sachac") (list :id "sun-am-gen" :track "General" :start "2022-12-04T08:00:00-0500" :end "2022-12-04T12:00:00-0500" :host "zaeph" :streamer "corwin" :checkin "sachac" :irc "sachac" :pad "publicvoit" :coord "sachac") (list :id "sun-pm-gen" :track "General" :start "2022-12-04T13:00:00-0500" :end "2022-12-04T18:00:00-0500" :host "zaeph" :streamer "jman" :checkin "FlowyCoder" :irc "dto" :pad "publicvoit" :coord "sachac") (list :id "sun-am-dev" :track "Development" :start "2022-12-04T08:00:00-0500" :end "2022-12-04T12:00:00-0500" :host "bandali" :streamer "bandali" :checkin "sachac" :irc "dto" :coord "sachac") (list :id "sun-pm-dev" :track "Development" :start "2022-12-04T13:00:00-0500" :end "2022-12-04T18:00:00-0500" :host "vetrivln" :streamer "bandali" :checkin "FlowyCoder" :irc "vetrivln" :coord "sachac")) -  "Shift information derived from the organizer's notebook.") +(setq emacsconf-shifts (list (list :id "sat-am-gen" :track "General" :start "2022-12-03T08:00:00-0500" :end "2022-12-03T12:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "corwin" :irc "bandali" :pad "publicvoit" :coord "sachac") (list :id "sat-pm-gen" :track "General" :start "2022-12-03T13:00:00-0500" :end "2022-12-03T18:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "FlowyCoder" :irc "dto" :pad "publicvoit" :coord "sachac") (list :id "sat-am-dev" :track "Development" :start "2022-12-03T08:00:00-0500" :end "2022-12-03T12:00:00-0500" :host "bandali" :streamer "sachac" :checkin "corwin" :irc "dto" :coord "sachac") (list :id "sat-pm-dev" :track "Development" :start "2022-12-03T13:00:00-0500" :end "2022-12-03T18:00:00-0500" :host "vetrivln" :streamer "bandali" :checkin "FlowyCoder" :irc "vetrivln" :coord "sachac") (list :id "sun-am-gen" :track "General" :start "2022-12-04T08:00:00-0500" :end "2022-12-04T12:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "corwin" :irc "bandali" :pad "publicvoit" :coord "sachac") (list :id "sun-pm-gen" :track "General" :start "2022-12-04T13:00:00-0500" :end "2022-12-04T18:00:00-0500" :host "zaeph" :streamer "jman" :checkin "FlowyCoder" :irc "dto" :pad "publicvoit" :coord "sachac") (list :id "sun-am-dev" :track "Development" :start "2022-12-04T08:00:00-0500" :end "2022-12-04T12:00:00-0500" :host "bandali" :streamer "sachac" :checkin "corwin" :irc "dto" :coord "sachac") (list :id "sun-pm-dev" :track "Development" :start "2022-12-04T13:00:00-0500" :end "2022-12-04T18:00:00-0500" :host "vetrivln" :streamer "bandali" :checkin "FlowyCoder" :irc "vetrivln" :coord "sachac")))  (defun emacsconf-get-track (name)    (when (listp name) (setq name (plist-get name :track))) @@ -1191,13 +1192,6 @@ Filter by TRACK if given.  Use INFO as the list of talks."                        (complete-with-action action choices string predicate))))))      (elt info (seq-position choices choice)))) -(defun emacsconf-email-volunteers (volunteers) -  (interactive -   (list -    (completing-read-multiple -     "Volunteers: " (emacsconf-volunteer-emails-for-completion)))) -  (compose-mail (string-join volunteers ", "))) -  ;;; Reflowing  (defun emacsconf-reflow ()    "Help reflow text files."  | 
