summaryrefslogtreecommitdiffstats
path: root/emacsconf.el
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--emacsconf.el110
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."