diff options
author | Sacha Chua <sacha@sachachua.com> | 2022-11-20 12:24:03 -0500 |
---|---|---|
committer | Sacha Chua <sacha@sachachua.com> | 2022-11-20 12:24:03 -0500 |
commit | 3837f884b091a3be21b19596f53c18cfcc9852ee (patch) | |
tree | ace6cfa5c0bd07ec3c374d462ffcf999570cc4d7 /2022/organizers-notebook | |
parent | 0c2804a89d1621a047e1ee5c2944d6f7e99ce9bf (diff) | |
download | emacsconf-wiki-3837f884b091a3be21b19596f53c18cfcc9852ee.tar.xz emacsconf-wiki-3837f884b091a3be21b19596f53c18cfcc9852ee.zip |
update checkin
Diffstat (limited to '2022/organizers-notebook')
-rw-r--r-- | 2022/organizers-notebook/index.org | 175 |
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 |