diff options
Diffstat (limited to '')
-rw-r--r-- | emacsconf.el | 110 |
1 files changed, 82 insertions, 28 deletions
diff --git a/emacsconf.el b/emacsconf.el index e57e7b3..fe2a30c 100644 --- a/emacsconf.el +++ b/emacsconf.el @@ -70,7 +70,7 @@ (defcustom emacsconf-base-url "https://emacsconf.org/" "Includes trailing slash" :group 'emacsconf :type 'string) -(defcustom emacsconf-publishing-phase 'cfp +(defcustom emacsconf-publishing-phase 'conference "Controls what information to include. 'program - don't include times 'schedule - include times; use this leading up to the conference @@ -450,6 +450,14 @@ FILENAME specifies an extra string to add to the file prefix if needed." (setq value (or value (org-read-property-value prop))) (org-entry-put (point) prop value)))) +(defun emacsconf-copy-property (search prop) + (interactive (list (emacsconf-complete-talk) nil)) + (save-window-excursion + (emacsconf-with-talk-heading search + (setq prop (or prop (org-read-property-name))) + (when (called-interactively-p 'any) + (kill-new (org-entry-get (point) prop))) + (org-entry-get (point) prop)))) (defun emacsconf-complete-slug () (emacsconf-get-slug-from-string (emacsconf-complete-talk))) @@ -571,6 +579,11 @@ If INFO is specified, limit it to that list." (setq list (cons (match-string-no-properties 0) list))) (plist-put o :categories (reverse list)))) +(defun emacsconf-talk-recorded-p (talk) + "Returns non-nil if TALK will start with a recorded video." + (and (not (plist-get talk :live)) + (plist-get talk :video-file))) + (defun emacsconf-get-talk-info-from-properties (o) (let ((heading (org-heading-components)) (field-props '( @@ -602,6 +615,7 @@ If INFO is specified, limit it to that list." (:prerec-info "PREREC_INFO") ;; Prep (:bbb-room "ROOM") + (:bbb-mod-code "BBB_MOD_CODE") ;; Processing (:file-prefix "FILE_PREFIX") (:video-file "VIDEO_FILE") @@ -632,7 +646,7 @@ If INFO is specified, limit it to that list." (:present "PRESENT") (:talk-id "TALK_ID") ; use slug instead (:qa-public "QA_PUBLIC") ; now tracked by the OPEN_Q and UNSTREAMED_Q status - (:uuid "UUID") ; Pentabarf export + (:uuid "UUID") ; Pentabarf export ))) (apply 'append @@ -940,10 +954,7 @@ The subheading should match `emacsconf-abstract-heading-regexp'." (plist-put o :qa-link "none") (plist-put o :qa-backstage-url (plist-get o :pad-url)))) (plist-put o :recorded-intro - (let ((filename - (expand-file-name (concat (plist-get o :slug) ".webm") - (expand-file-name "intros" emacsconf-stream-asset-dir)))) - (and (file-exists-p filename) filename))) + (emacsconf-talk-file o "--intro.webm")) o)) (defun emacsconf-search-talk-info (search &optional info) @@ -1045,6 +1056,12 @@ The subheading should match `emacsconf-abstract-heading-regexp'." "Return the plist for TALK." (if (stringp talk) (emacsconf-find-talk-info talk info) talk)) +(defun emacsconf-resolve-shift (shift) + "Return the plist for SHIFT." + (if (stringp shift) (seq-find (lambda (o) (string= (plist-get o :id) shift)) + emacsconf-shifts) + shift)) + (defun emacsconf-find-talk-info (filter &optional info) (setq info (or info (emacsconf-filter-talks (emacsconf-get-talk-info)))) (when (stringp filter) (setq filter (list filter))) @@ -1187,6 +1204,7 @@ The subheading should match `emacsconf-abstract-heading-regexp'." "c" #'emacsconf-find-captions-from-slug "d" #'emacsconf-find-caption-directives-from-slug "p" #'emacsconf-set-property-from-slug + "P" #'emacsconf-copy-property "w" #'emacsconf-edit-wiki-page "s" #'emacsconf-set-start-time-for-slug "W" #'emacsconf-browse-wiki-page @@ -1429,6 +1447,7 @@ If TIMEZONES is a string, split it by commas." '((emacsconf-pad-api-key . etherpad_api_key) (emacsconf-pad-base . etherpad_url) (emacsconf-backstage-password . emacsconf_backstage_password)))))) +(defvar emacsconf-live-base-url "https://live.emacsconf.org/") ;; (emacsconf-ansible-load-vars (expand-file-name "prod-vars.yml" emacsconf-ansible-directory)) ;;; Tracks (defvar emacsconf-tracks @@ -1446,22 +1465,22 @@ If TIMEZONES is a string, split it by commas." :vnc-display ":5" :vnc-port "5905" :autopilot crontab - :status "online") - (:name "Development" :color "skyblue" :id "dev" :channel "emacsconf-dev" - :watch ,(format "https://live.emacsconf.org/%s/watch/dev/" emacsconf-year) - :webchat-url "https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-gen,emacsconf-dev" - :tramp "/ssh:emacsconf-dev@res.emacsconf.org#46668:" - ;; :toobnix-url "https://toobnix.org/w/w6K77y3bNMo8xsNuqQeCcD" - ;; :youtube-url "https://www.youtube.com/watch?v=PMaoF-xa1b4" - ;; :youtube-studio-url "https://studio.youtube.com/video/PMaoF-xa1b4/livestreaming" - :stream ,(concat emacsconf-stream-base "dev.webm") - :480p ,(concat emacsconf-stream-base "dev-480p.webm") - :uid 2003 - :start "10:00" :end "17:00" - :vnc-display ":6" - :vnc-port "5906" - :autopilot crontab - :status "online"))) + :status "offline") + (:name "Development" :color "skyblue" :id "dev" :channel "emacsconf-dev" + :watch ,(format "https://live.emacsconf.org/%s/watch/dev/" emacsconf-year) + :webchat-url "https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-gen,emacsconf-dev" + :tramp "/ssh:emacsconf-dev@res.emacsconf.org#46668:" + ;; :toobnix-url "https://toobnix.org/w/w6K77y3bNMo8xsNuqQeCcD" + ;; :youtube-url "https://www.youtube.com/watch?v=PMaoF-xa1b4" + ;; :youtube-studio-url "https://studio.youtube.com/video/PMaoF-xa1b4/livestreaming" + :stream ,(concat emacsconf-stream-base "dev.webm") + :480p ,(concat emacsconf-stream-base "dev-480p.webm") + :uid 2003 + :start "10:00" :end "17:00" + :vnc-display ":6" + :vnc-port "5906" + :autopilot crontab + :status "offline"))) (defun emacsconf-get-track (name) "Get the track for NAME. @@ -1526,7 +1545,7 @@ NAME could be a track name, a talk name, or a list." info)) (defvar emacsconf-shifts - (list (list :id "sat-am-gen" :track "General" :start "2023-12-02T08:00:00-0500" :end "2023-12-02T12:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac") (list :id "sat-pm-gen" :track "General" :start "2023-12-02T13:00:00-0500" :end "2023-12-02T18:00:00-0500" :host "zaph" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac") (list :id "sat-am-dev" :track "Development" :start "2023-12-02T08:00:00-0500" :end "2023-12-02T12:00:00-0500" :host "bandali" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac") (list :id "sat-pm-dev" :track "Development" :start "2023-12-02T13:00:00-0500" :end "2023-12-02T18:00:00-0500" :host "bandali" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac") (list :id "sun-am-gen" :track "General" :start "2023-12-03T08:00:00-0500" :end "2023-12-03T12:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac") (list :id "sun-pm-gen" :track "General" :start "2023-12-03T13:00:00-0500" :end "2023-12-03T18:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac") (list :id "sun-am-dev" :track "Development" :start "2023-12-03T08:00:00-0500" :end "2023-12-03T12:00:00-0500" :host "bandali" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac") (list :id "sun-pm-dev" :track "Development" :start "2023-12-03T13:00:00-0500" :end "2023-12-03T18:00:00-0500" :host "bandali" :streamer "sachac" :checkin "FlowyCoder" :coord "sachac"))) + (list (list :id "sat-am-gen" :track "General" :start "2024-12-07T09:00:00-0500" :end "2024-12-07T12:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sat-pm-gen" :track "General" :start "2024-12-07T13:00:00-0500" :end "2024-12-07T17:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sat-am-dev" :track "Development" :start "2024-12-07T10:00:00-0500" :end "2024-12-07T12:00:00-0500" :host "corwin" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sat-pm-dev" :track "Development" :start "2024-12-07T13:00:00-0500" :end "2024-12-07T17:00:00-0500" :host "corwin" :streamer "sachac" :checkin "sachac" :coord "sachac") (list :id "sun-am-gen" :track "General" :start "2024-12-08T09:00:00-0500" :end "2024-12-08T12:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "corwin" :coord "sachac") (list :id "sun-pm-gen" :track "General" :start "2024-12-08T13:00:00-0500" :end "2024-12-08T17:00:00-0500" :host "zaeph" :streamer "sachac" :checkin "corwin" :coord "sachac"))) (defun emacsconf-filter-talks-by-time (start-time end-time info) "Return talks that are between START-TIME and END-TIME (inclusive) in INFO." @@ -1598,6 +1617,39 @@ Filter by TRACK if given. Use INFO as the list of talks." (seq-group-by (lambda (o) (plist-get o :speakers)) (or info (emacsconf-active-talks (emacsconf-filter-talks (emacsconf-get-talk-info)))))))) +(defun emacsconf-load-rooms (string) + "Split STRING and load them as ROOM properties. +STRING should be a list of rooms, one room per line, like this: +friendly-id speaker - slugs +friendly-id speaker - slugs +" + (let ((rooms + (mapcar (lambda (row) (when (string-match "^\\(.+?\\) \\(.+\\)" row) + (list (match-string 1 row) (match-string 2 row)))) + (split-string string "\n")))) + (mapc (lambda (talk) + (emacsconf-go-to-talk talk) + (when (plist-get talk :speakers) + (org-entry-put + (point) + "ROOM" + (concat + emacsconf-bbb-base-url + "rooms/" + (car + (seq-find + (lambda (o) + (string-match + (concat + "^" + (regexp-quote + (plist-get talk :speakers)) + " - ") + (cadr o))) + rooms)) + "/join")))) + (emacsconf-active-talks (emacsconf-get-talk-info))))) + (defun emacsconf-surround (before text after &optional alternative) "Concat BEFORE, TEXT, and AFTER if TEXT is specified, or return ALTERNATIVE." (if (and text (not (string= text ""))) @@ -1709,8 +1761,8 @@ 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 - emacsconf-stream-open-qa-windows-on-change + '(;; 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 @@ -1784,9 +1836,11 @@ tracks with the ID in the cdr of that list." (defun emacsconf-add-to-talk-logbook (talk note) "Add NOTE as a logbook entry for TALK." (interactive (list (emacsconf-complete-talk) (read-string "Note: "))) - (save-excursion - (emacsconf-with-talk-heading talk - (emacsconf-add-to-logbook note)))) + (save-window-excursion + (save-excursion + (emacsconf-with-talk-heading talk + (emacsconf-add-to-logbook note) + (bury-buffer (current-buffer)))))) (defun emacsconf-reload () "Reload the emacsconf-el modules." |