summaryrefslogtreecommitdiffstats
path: root/2022/organizers-notebook
diff options
context:
space:
mode:
authorSacha Chua <sacha@sachachua.com>2022-11-20 12:24:03 -0500
committerSacha Chua <sacha@sachachua.com>2022-11-20 12:24:03 -0500
commit3837f884b091a3be21b19596f53c18cfcc9852ee (patch)
treeace6cfa5c0bd07ec3c374d462ffcf999570cc4d7 /2022/organizers-notebook
parent0c2804a89d1621a047e1ee5c2944d6f7e99ce9bf (diff)
downloademacsconf-wiki-3837f884b091a3be21b19596f53c18cfcc9852ee.tar.xz
emacsconf-wiki-3837f884b091a3be21b19596f53c18cfcc9852ee.zip
update checkin
Diffstat (limited to '2022/organizers-notebook')
-rw-r--r--2022/organizers-notebook/index.org175
1 files changed, 116 insertions, 59 deletions
diff --git a/2022/organizers-notebook/index.org b/2022/organizers-notebook/index.org
index 406b80d2..d267cd17 100644
--- a/2022/organizers-notebook/index.org
+++ b/2022/organizers-notebook/index.org
@@ -198,12 +198,13 @@ list.reduce(async(prev, elem) => {
});
#+end_src
-*** STARTED Update checkin instructions
+*** DONE Update checkin instructions
+CLOSED: [2022-11-20 Sun 10:58]
:PROPERTIES:
:Effort: 0:30
:END:
:LOGBOOK:
-CLOCK: [2022-11-20 Sun 10:12]
+CLOCK: [2022-11-20 Sun 10:12]--[2022-11-20 Sun 10:58] => 0:46
:END:
*** Templates
:PROPERTIES:
@@ -226,80 +227,136 @@ Goals:
Slightly more complex because of the conditionals
#+begin_src emacs-lisp :lexical t
-(defun emacsconf-mail-checkin-instructions ()
- (interactive)
- (seq-map
- (lambda (list)
- (let ((template (with-current-buffer (find-file-noselect emacsconf-org-file)
- (emacsconf-mail-merge-get-template (car list)))))
- (seq-map
- (lambda (email-list)
- (let* ((email (car email-list))
- (talks (cdr email-list))
- (combined-info (emacsconf-combine-plist talks " , "))
- (for-mail
- (list
- :name (or (car (plist-get combined-info :speakers)) "???")
- :url (or (string-join (plist-get combined-info :url) " , ") "???")
- :email (car (plist-get combined-info :email))))
- (body (when (plist-get for-mail :email) (emacsconf-replace-plist-in-string for-mail (plist-get template :body))))
- (subject (when (plist-get for-mail :email) (emacsconf-replace-plist-in-string for-mail (plist-get template :subject)))))
- (when (plist-get for-mail :email)
- (compose-mail
- (plist-get for-mail :email)
- subject
- `(("Reply-To" . ,(plist-get template :reply-to))
- ("Mail-Followup-To" . ,(plist-get template :mail-followup-to))
- ("Cc" . ,(plist-get template :cc))))
- (message-goto-body)
- (save-excursion
- (insert body)))))
- (cdr list))))
- ;; Group by e-mail
- (seq-map
- (lambda (list)
- (cons (car list) (seq-group-by (lambda (o) (plist-get o :email)) (cdr list))))
- ;; Group by q-and-a pref
- (seq-group-by
- (lambda (o)
- (pcase (plist-get o :q-and-a)
- ('nil "checkin-unknown")
- ((pred (string-match "after")) "checkin-after")
- ((pred (string-match "live\\|irc\\|pad")) "checkin-at-conf")
- (_ "checkin-unknown")))
- (emacsconf-filter-talks (emacsconf-get-talk-info))))))
+(defun emacsconf-mail-checkin-instructions (group &optional template)
+ "Send checkin instructions.
+GROUP is (email . (talk talk))"
+ (interactive (list (emacsconf-mail-complete-email-group
+ (seq-filter
+ (lambda (o)
+ (or
+ (string= (plist-get o :status) "CANCELLED")
+ (null (plist-get o :email))
+ (string-match "after" (or (plist-get o :q-and-a) ""))))
+ (emacsconf-get-talk-info)))))
+ (let* ((talks (seq-remove
+ (lambda (o)
+ (or
+ (string= (plist-get o :status) "CANCELLED")
+ (null (plist-get o :email))
+ (string-match "after" (or (plist-get o :q-and-a) ""))
+ (save-window-excursion
+ (emacsconf-with-talk-heading o
+ (re-search-forward "checkin instructions" (save-excursion (org-end-of-subtree)) t)))))
+ (cdr group)))
+ (waiting-talks (seq-find (lambda (o) (string= (plist-get o :status) "WAITING_FOR_PREREC")) talks)))
+ (when talks
+ (emacsconf-mail-prepare
+ (or template (emacsconf-mail-merge-get-template "checkin-at-conf"))
+ (car group)
+ (list
+ :year emacsconf-year
+ :base-url emacsconf-base-url
+ :conf-name emacsconf-name
+ :email (plist-get (car talks) :email)
+ :emergency emacsconf-emergency-contact
+ :plural (if (> (length (cdr group)) 1) "s" "")
+ :speakers-short (plist-get (car talks) :speakers-short)
+ :url (mapconcat (lambda (o) (concat emacsconf-base-url (plist-get o :url)))
+ talks" , ")
+ :waiting
+ (cond
+ ((> (length waiting-talks) 1)
+ " If you can upload your talk videos before the conference, I think that might be much less stressful for everyone than doing it live. =) Please note that we will turn off the web-based upload on Dec 1 to free up memory on the server, so please upload them as early as you can.${wrap}")
+ ((= (length waiting-talks) 1)
+ " If you can upload your talk video before the conference, I think that might be much less stressful for everyone than doing it live. =) Please note that we will turn off the web-based upload on Dec 1 to free up memory on the server, so please upload it as early as you can.${wrap}")
+ (t ""))
+ :checkin-info
+ (mapconcat
+ (lambda (o)
+ (let ((base-checkin (format-time-string "%b %-d %-l:%M %p" (plist-get o :checkin-time) emacsconf-timezone))
+ (speaker-checkin (format-time-string "%b %-d %-l:%M %p" (plist-get o :checkin-time) (plist-get o :timezone))))
+ (emacsconf-replace-plist-in-string
+ (append (list :base-url emacsconf-base-url
+ :check-in
+ (concat
+ "Before "
+ base-checkin " in " emacsconf-timezone
+ (if (string= base-checkin speaker-checkin)
+ ""
+ (concat
+ ", which is the same as " speaker-checkin " in " (plist-get o :timezone))) "\n"
+ " (this is " (plist-get o :checkin-label) ")")
+ :qa-info-speakers
+ (cond
+ ;; aaaaah, no prerec yet
+ ((string= (plist-get o :status) "WAITING_FOR_PREREC")
+ (concat "Talk and Q&A BigBlueButton room: " (plist-get o :bbb-room)))
+ ((null (plist-get o :q-and-a)) "")
+ ((string-match "live" (plist-get o :q-and-a)) (concat "Q&A BigBlueButton room: " (plist-get o :bbb-room)))
+ ((string-match "irc" (plist-get o :q-and-a)) (concat "Q&A: " (plist-get o :channel) " (" (plist-get o :webchat-url) ")"))
+ ((string-match "pad" (plist-get o :q-and-a)) "Q&A: On the pad")
+ (t "Q&A: After the event")))
+ o)
+ "- ${title}
+ Info and sched: ${base-url}${url}
+ Check-in: ${check-in}
+ Pad: ${pad-url}
+ ${qa-info-speakers}")))
+ talks "\n\n")))
+ (mapc (lambda (o)
+ (emacsconf-mail-log-message-when-sent o "Sent checkin instructions"))
+ talks))))
#+end_src
-
**** E-mail for speakers who are planning to be at the conference
:PROPERTIES:
-:EMAIL_ID: checkin-at-conf
-:SUBJECT: EmacsConf ${year}: Check-in instructions
+:EMAIL_ID: checkin-instructions
+:SUBJECT: ${conf-name} ${year}: Check-in instructions
+:REPLY_TO: emacsconf-submit@gnu.org, ${email}
+:MAIL_FOLLOWUP_TO: emacsconf-submit@gnu.org, ${email}
+:CC: emacsconf-submit@gnu.org
+:FUNCTION: emacsconf-mail-checkin-instructions
:END:
-Hello, ${name}!
+Hello, ${speakers-short}!
We're looking forward to having you join us at EmacsConf!
-We'll probably keep updating the schedule even on the day of the
-conference. You can get a rough idea of when your talk is scheduled at
-${url}. You might want to check it some time next week to get a rough
-sense of where it is, and then check it again on the day of your talk.
+We've updated the schedule based on the submissions and cancellations,
+and we'll probably update the schedule even on the day of the
+conference. You can get a rough idea of your schedule at the talk
+pages with the URL${plural} below. You might want to check your talk
+page${plural} some time next week to get a rough sense of where it is,
+and then check it again on the day of your talk${plural}. Please let
+me know if the times don't work for you.
+
+We'll try our best to keep your talk in the same general timeslot (ex:
+Saturday morning, Saturday afternoon, Sunday morning, Sunday
+afternoon). We've done some dry-runs, but just in case it turns out
+that running two tracks at the same time leaves us too frazzled, we
+may drop back to one track with Q&A on an alternate stream, like last
+year. If there are big changes to your schedule on the day of your
+talk${plural}, you'll get an e-mail from us with a subject like
+"URGENT: EmacsConf 2022: ...".${wrap}
+
+Here's your checkin info:
-Please check in at least 30 minutes before the scheduled start of your
-prerecorded talk so that we can deal with small scheduling changes or
+${checkin-info}
+
+Please check in early so that we can deal with scheduling changes or
technical issues. You can find the check-in process at
-https://emacsconf.org/${year}/speakers/ .
+${base-url}${year}/speakers/ .${waiting}
If something comes up, please let us know as soon as you can. Here's
-our emergency contact information:
+my emergency contact information: ${emergency}
-${emergency}
-
-Looking forward to seeing you soon!
+Thank you for sharing your time and energy with the EmacsConf community!
Sacha
+p.s. If you need to cancel, that's okay too, life happens. Let me know
+as soon as you can and I'll try to shuffle things around. Thank you!
+
**** E-mail for speakers who are not planning to be around, but who have sent us their prerecs
:PROPERTIES:
:EMAIL_ID: checkin-after