summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--emacsconf.el92
1 files changed, 70 insertions, 22 deletions
diff --git a/emacsconf.el b/emacsconf.el
index c9df7f9..722a300 100644
--- a/emacsconf.el
+++ b/emacsconf.el
@@ -41,7 +41,7 @@
(defcustom emacsconf-cfp-deadline "2023-09-14" "Deadline for proposals."
:group 'emacsconf
:type 'string)
-(defcustom emacsconf-date "2023-12-03" "Starting date of EmacsConf."
+(defcustom emacsconf-date "2023-12-02" "Starting date of EmacsConf."
:group 'emacsconf
:type 'string)
(defcustom emacsconf-video-target-date "2023-11-04" "Target date for receiving talk videos from the speakers."
@@ -73,7 +73,8 @@
(defcustom emacsconf-publishing-phase 'program
"Controls what information to include.
'program - don't include times
-'schedule - include times; use this leading up to the emacsconference
+'schedule - include times; use this leading up to the conference
+'conference - show IRC and watching info
'resources - after EmacsConf, don't need status"
:group 'emacsconf
:type '(choice
@@ -109,7 +110,15 @@
(defcustom emacsconf-review-days 7 "Number of days for review for early acceptance."
:type 'natnum
:group 'emacsconf)
-
+(defcustom emacsconf-qa-start-open t "Non-nil means start Q&A as open, skipping CLOSED_QA phase."
+ :type 'boolean
+ :group 'emacsconf)
+(defcustom emacsconf-restream-youtube nil "Non-nil means include instructions for restreaming to YouTube."
+ :type 'boolean
+ :group 'emacsconf)
+(defcustom emacsconf-restream-toobnix nil "Non-nil means include instructions for restreaming to Toobnix."
+ :type 'boolean
+ :group 'emacsconf)
(defvar emacsconf-stream-base "https://live0.emacsconf.org/")
(defvar emacsconf-chat-base "https://chat.emacsconf.org/")
(defvar emacsconf-backstage-dir "/ssh:orga@media.emacsconf.org:/var/www/media.emacsconf.org/2022/backstage")
@@ -484,6 +493,7 @@ If INFO is specified, limit it to that list."
("TO_AUTOCAP" . "Processing uploaded video")
("TO_ASSIGN" . "Waiting for a caption volunteer")
("TO_CAPTION" . "Being captioned")
+ ("TO_CHECK" . "Quality check")
("TO_STREAM" . "Ready to stream")
("PLAYING" . "Now playing on the conference livestream")
("CLOSED_Q" . "Q&A starting (not yet open for joining)")
@@ -759,10 +769,10 @@ The subheading should match `emacsconf-abstract-heading-regexp'."
(plist-put o :qa-time (plist-get o :live-time))
(plist-put
o :checkin-label
- "1 hour before the scheduled start of your talk, since you don't have a pre-recorded video")
+ "30 minutes before the scheduled start of your talk, since you don't have a pre-recorded video")
(plist-put
o :checkin-time
- (seconds-to-time (time-subtract (plist-get o :start-time) (seconds-to-time 3600)))))
+ (seconds-to-time (time-subtract (plist-get o :start-time) (seconds-to-time (/ 3600 2))))))
(plist-put o :live-time
(seconds-to-time
(+
@@ -1057,6 +1067,25 @@ The subheading should match `emacsconf-abstract-heading-regexp'."
(interactive (list (emacsconf-complete-talk)))
(insert (plist-get (emacsconf-search-talk-info search) :title)))
+(defun emacsconf-insert-talk-email (search)
+ "Insert the talk email matching SEARCH."
+ (interactive (list (emacsconf-complete-talk)))
+ (insert (plist-get (emacsconf-search-talk-info search) :email)))
+
+(defun emacsconf-backstage-url (&optional base-url)
+ "Return or insert backstage URL with credentials."
+ (setq base-url (or base-url (concat emacsconf-media-base-url emacsconf-year "/backstage/")))
+ (interactive)
+ (let ((url (format
+ "https://%s:%s@%s"
+ emacsconf-backstage-user
+ emacsconf-backstage-password
+ (replace-regexp-in-string "https://" "" base-url)
+ emacsconf-year)))
+ (when (called-interactively-p 'any)
+ (insert url))
+ url))
+
(defun emacsconf-message-talk-info (talk prop)
"Briefly display info for TALK"
(interactive
@@ -1069,6 +1098,8 @@ The subheading should match `emacsconf-abstract-heading-regexp'."
(defvar-keymap embark-emacsconf-actions
:doc "Keymap for emacsconf-related things"
"a" #'emacsconf-announce
+ "i e" #'emacsconf-insert-talk-email
+ "i t" #'emacsconf-insert-talk-title
"I" #'emacsconf-message-talk-info
"c" #'emacsconf-find-captions-from-slug
"d" #'emacsconf-find-caption-directives-from-slug
@@ -1104,31 +1135,36 @@ The subheading should match `emacsconf-abstract-heading-regexp'."
(format-time-string "%z" (date-to-time emacsconf-date) emacsconf-timezone)
"Timezone offset for `emacsconf-timezone' on `emacsconf-date'.")
-(defun emacsconf-timezone-string (o tz)
- (let* ((start (org-timestamp-to-time (org-timestamp-split-range (org-timestamp-from-string (plist-get o :scheduled)))))
- (end (org-timestamp-to-time (org-timestamp-split-range (org-timestamp-from-string (plist-get o :scheduled)) t))))
+(defun emacsconf-timezone-string (o tz &optional format)
+ (when (and (listp o) (plist-get o :scheduled)) (setq o (plist-get o :scheduled)))
+ (let* ((start (org-timestamp-to-time (org-timestamp-split-range (org-timestamp-from-string o))))
+ (end (org-timestamp-to-time (org-timestamp-split-range (org-timestamp-from-string o) t))))
(if (string= tz "UTC")
(format "%s - %s "
- (format-time-string "%A, %b %-e %Y, ~%-l:%M %p"
+ (format-time-string (or format "%A, %b %-e %Y, ~%-l:%M %p")
start tz)
(format-time-string "%-l:%M %p %Z"
end tz))
(format "%s - %s (%s)"
- (format-time-string "%A, %b %-e %Y, ~%-l:%M %p"
+ (format-time-string (or format "%A, %b %-e %Y, ~%-l:%M %p")
start tz)
(format-time-string "%-l:%M %p %Z"
end tz)
tz))))
-(defun emacsconf-timezone-strings (o &optional timezones)
- (mapcar (lambda (tz) (emacsconf-timezone-string o tz)) (or timezones emacsconf-timezones)))
+(defun emacsconf-timezone-strings (o &optional timezones format)
+ (mapcar (lambda (tz) (emacsconf-timezone-string o tz format)) (or timezones emacsconf-timezones)))
(defun emacsconf-timezone-strings-combined (time timezones &optional format)
"Show TIME in TIMEZONES.
If TIMEZONES is a string, split it by commas."
(let* ((format (or format "%b %-d %-l:%M %p"))
(base-time (format-time-string format time emacsconf-timezone))
- (timezones (if (stringp timezones) (split-string timezones " *, *" t))))
+ (timezones
+ (seq-remove (lambda (s) (string= emacsconf-timezone s))
+ (if (stringp timezones)
+ (split-string timezones " *, *" t)
+ timezones))))
(concat base-time " in " (emacsconf-schedule-rename-etc-timezone emacsconf-timezone)
(if timezones
(concat
@@ -1314,14 +1350,14 @@ If TIMEZONES is a string, split it by commas."
;;; Tracks
(defvar emacsconf-tracks
`((:name "General" :color "peachpuff" :id "gen" :channel "emacsconf-gen"
- :watch "https://live.emacsconf.org/2022/watch/gen/"
+ :watch ,(format "https://live.emacsconf.org/%s/watch/gen/" emacsconf-year)
:tramp "/ssh:emacsconf-gen@res.emacsconf.org#46668:"
:webchat-url "https://chat.emacsconf.org/?join=emacsconf,emacsconf-org,emacsconf-accessible,emacsconf-dev,emacsconf-gen"
:stream ,(concat emacsconf-stream-base "gen.webm")
:480p ,(concat emacsconf-stream-base "gen-480p.webm")
- :youtube-url "https://www.youtube.com/watch?v=UEJ88c7MJq0"
- :youtube-studio-url "https://studio.youtube.com/video/UEJ88c7MJq0/livestreaming"
- :toobnix-url "https://toobnix.org/w/7t9X8eXuSby8YpyEKTb4aj"
+ ;; :youtube-url "https://www.youtube.com/watch?v=UEJ88c7MJq0"
+ ;; :youtube-studio-url "https://studio.youtube.com/video/UEJ88c7MJq0/livestreaming"
+ ;; :toobnix-url "https://toobnix.org/w/7t9X8eXuSby8YpyEKTb4aj"
:start "09:00" :end "17:00"
:uid 2002
:vnc-display ":5"
@@ -1329,12 +1365,12 @@ If TIMEZONES is a string, split it by commas."
:autopilot crontab
:status "offline")
(:name "Development" :color "skyblue" :id "dev" :channel "emacsconf-dev"
- :watch "https://live.emacsconf.org/2022/watch/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"
+ ;; :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
@@ -1443,7 +1479,7 @@ Filter by TRACK if given. Use INFO as the list of talks."
(defun emacsconf-bbb-status (talk)
(let ((states
'((open . "OPEN_Q UNSTREAMED_Q")
- (before . "TODO TO_REVIEW TO_ACCEPT WAITING_FOR_PREREC TO_PROCESS PROCESSING TO_AUTOCAP TO_ASSIGN TO_CAPTION TO_STREAM PLAYING CLOSED_Q")
+ (before . "TODO TO_REVIEW TO_ACCEPT WAITING_FOR_PREREC TO_PROCESS PROCESSING TO_AUTOCAP TO_ASSIGN TO_CAPTION TO_CHECK TO_STREAM PLAYING CLOSED_Q")
(after . "TO_ARCHIVE TO_EXTRACT TO_REVIEW_QA TO_INDEX_QA TO_CAPTION_QA TO_FOLLOW_UP DONE")
(cancelled . "CANCELLED"))))
(if (string-match "live" (or (plist-get talk :q-and-a) ""))
@@ -1501,6 +1537,18 @@ Filter by TRACK if given. Use INFO as the list of talks."
">" ""))
(or info (emacsconf-get-volunteer-info))))
+(defun emacsconf-volunteer-insert-email (&optional info)
+ (interactive)
+ (insert (completing-read
+ (mapcar
+ (lambda (o)
+ (emacsconf-surround
+ (if (assoc-default "ITEM" o)
+ (concat (assoc-default "ITEM" o) " <")
+ "<")
+ (assoc-default "EMAIL" o)
+ ">" ""))
+ (or info (emacsconf-get-volunteer-info))))))
(defun emacsconf-complete-volunteer (&optional info)
(setq info (or info (emacsconf-get-volunteer-info)))
(let* ((choices