From feeb2184242e56e70564a1551adcd856260ddbad Mon Sep 17 00:00:00 2001 From: Sacha Chua Date: Sun, 19 Nov 2023 16:05:03 -0500 Subject: mailing bbb tips and info, captioning info --- emacsconf-mail.el | 228 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 224 insertions(+), 4 deletions(-) diff --git a/emacsconf-mail.el b/emacsconf-mail.el index 8c0fedb..3a15152 100644 --- a/emacsconf-mail.el +++ b/emacsconf-mail.el @@ -913,8 +913,7 @@ ${signature}") (list :subject "${conf-name} ${year}: Captions for ${title}" :to "${email}" - :cc "${captioner-email}, emacsconf-submit@gnu.org" - :reply-to "${email}, ${captioner-email}, emacsconf-submit@gnu.org" + :cc "${captioner-email}" :body "${email-notes}Hi ${speakers-short}! Because you sent in your video before the conference, we were able to @@ -1095,6 +1094,17 @@ people's talks too.")) :conf-name emacsconf-name :year emacsconf-year))) +(defun emacsconf-mail-backstage-info-to-volunteer (volunteer) + "E-mail backstage info to captioning volunteers." + (interactive (list (emacsconf-complete-volunteer))) + (emacsconf-mail-backstage-info + (list + (assoc-default "EMAIL" volunteer) + (list :role "volunteer" + :speakers-short + (or (assoc-default "NAME" volunteer) + (assoc-default "NAME_SHORT" volunteer)))))) + (defun emacsconf-mail-backstage-info-to-captioning-volunteers () "E-mail backstage info to captioning volunteers." (interactive) @@ -1149,6 +1159,215 @@ quality of the reencoded video.")) speaker-groups)) volunteer-groups))))) +(defun emacsconf-mail-bbb-tips-and-intro-to-all (&optional types) + "Draft BBB information for all speakers." + (interactive) + (let* ((log-note "sent bbb-tips-and-intro") + (talk-groups (seq-group-by + (lambda (talk) + (cond + ((string= (plist-get talk :status) "WAITING_FOR_PREREC") + 'waiting-for-prerec) + ((string= (plist-get talk :qa-type) "live") + 'live) + ((or (string= (plist-get talk :qa-type) "irc") + (string= (plist-get talk :qa-type) "pad")) + 'pad-or-irc) + ((string= (plist-get talk :qa-type) "none") + 'after) + (t (error "Exception for %s" (plist-get talk :slug))))) + (seq-filter (lambda (o) (plist-get o :email)) + (emacsconf-filter-talks-by-logbook + log-note + (emacsconf-active-talks (emacsconf-get-talk-info)))))) + (base (list :reply-to "emacsconf-submit@gnu.org, ${email}, ${user-email}" + :log-note log-note + :mail-followup-to "emacsconf-submit@gnu.org, ${email}, ${user-email}"))) + (setq types (or types (mapcar 'car talk-groups))) + (dolist (type types) + (dolist (group (emacsconf-mail-groups (cdr (assoc-default type talk-groups)))) + (emacsconf-mail-prepare + (append + base + (pcase type + ('waiting-for-prerec + (list + :subject "${conf-name} ${year} action needed: Options, BigBlueButton info, intro" + :body + "${email-notes}Hi, ${name}! + +${conf-name} is in two weeks. Aaah! I don't think we have your +presentation yet, but I'm not panicking (much) because we've got plans +and backup plans. + +Option A: You can upload your presentation before the conference + +There's still a little time to squeeze in processing presentations and +possibly even captioning them. If you're getting stuck because you +want your presentation to be totally awesome, it's okay, it doesn't +have to be perfect. If it's too long or too short, that's cool too; we +can manage the time around that. We'll figure things out together. =) + +You can upload your file(s) to ${upload-url} (password +${upload-password}) and we'll get things going.${fill} + +If you're thinking of doing the Q&A in a live web conference, +please also test the BigBlueButton URL described under Option +B. Thanks! + +Option B: You can do it live + +Sometimes it's easier to do a presentation live, or sometimes you're +making last-minute tweaks and want to play the latest copy of your +video from your own computer. We can do the presentation live over +BigBlueButton. Your room URL is ${bbb-url} , and I've put together +some tips at ${bbb-tips} . Please +help reduce the technical risks by trying out the BigBlueButton setup +before November 28 so that there's time to help troubleshoot.${fill} + +Option C: It's okay, you can cancel + +Sometimes an interesting talk idea turns out to be more challenging +than you'd like. Sometimes life happens. If you're stressing out and +you don't think you can make it, no worries, no need to feel +embarrassed or guilty or anything like that. Let me know and I can +update the schedule so that other speakers have extra time for Q&A. We +hope you'll consider proposing a talk for another EmacsConf! + +---------------- +If you're planning to go through with the talk (yay!), could you +please take a minute to check if I pronounce your name correctly in +the intro I recorded? The recording is at ${intro-url} , and you can +also find it under \"--intro.webm\" in your talk's section at +${backstage-url-with-credentials} . If it needs tweaking, you can +upload a recording to ${upload-url} (password ${upload-password}) or +e-mail me the corrections.${fill} + +Best regards, + +${signature}")) + ('live + (list + :subject "${conf-name} ${year} action needed: BigBlueButton info, intro" + :body + "${email-notes}Hi, ${name}! + +Thanks again for uploading your presentation early! + +Since you're planning to do a live Q&A session, I've set up a +BigBlueButton web conference room for you at ${bbb-url} . I've +also put together some tips at ${bbb-tips} . Please help reduce +the technical risks by trying out the BigBlueButton setup before +November 28 so that there's time to help troubleshoot. Sharing +system audio or multi-monitor setups can sometimes be tricky, so +please let us know if you need help figuring things out. ${fill} + +Also, could you please take a minute to check if I pronounce your name +correctly in the intro I recorded? The recording is at ${intro-url} , +and you can also find it under \"--intro.webm\" in your talk's section +at ${backstage-url-with-credentials} . If it needs tweaking, you can +upload a recording to ${upload-url} (password ${upload-password}) or +e-mail me the corrections. + +Best regards, + +${signature}")) + ('pad-or-irc + (list + :subject "${conf-name} ${year} action needed: check intro pronunciation" + :body + "${email-notes}Hi, ${name}! + +Thanks again for uploading your presentation early! + +Could you please take a minute to check if I pronounce your name +correctly in the intro I recorded? The recording is at ${intro-url} , +and you can also find it under \"--intro.webm\" in your talk's section +at ${backstage-url-with-credentials} . If it needs tweaking, you can +upload a recording to ${upload-url} (password ${upload-password}) or +e-mail me the corrections. + +We'll send you check-in instructions a few days before the conference +so that you'll be all set. + +Best regards, + +${signature}")) + ('after + (list + :subject "${conf-name} ${year} action needed: check intro pronunciation" + :body + "${email-notes}Hi, ${name}! + +Thanks again for uploading your presentation early! + +Could you please take a minute to check if I pronounce your name +correctly in the intro I recorded? The recording is at ${intro-url} , +and you can also find it under \"--intro.webm\" in your talk's section +at ${backstage-url-with-credentials} . If it needs tweaking, you can +upload a recording to ${upload-url} (password ${upload-password}) or +e-mail me the corrections. + +You've indicated that you won't be able to attend the conference +itself. That's cool, we'll collect questions during the conference and +e-mail you afterwards. If I got your preferences wrong, please let me +know if you'd like to handle questions during the conference via +Etherpad, IRC, or a live web conference. We'd love to have you join +us! + +Best regards, + +${signature}")) + (_ (error "Unknown type %s" (symbol-name type))))) + (car group) + (list + :email-notes (or (plist-get (car group) :email-notes) "") + :conf-name emacsconf-name + :year emacsconf-year + :name (plist-get (cadr group) :speakers-short) + :email (car group) + :user-email user-mail-address + :signature user-full-name + :backstage-url-with-credentials + (mapconcat (lambda (talk) + (format "https://%s:%s@media.emacsconf.org/%s/backstage/#%s" + emacsconf-backstage-user + emacsconf-backstage-password + emacsconf-year + (plist-get talk :slug))) + (cdr group) + " , ") + :upload-url (concat "https://ftp-upload.emacsconf.org/?sid=" + emacsconf-upload-password + "-" + (mapconcat (lambda (o) (plist-get o :slug)) (cdr group) "-")) + :upload-password emacsconf-upload-password + :bbb-url + (cond + ((null (file-exists-p + (expand-file-name + (format "assets/redirects/open/bbb-%s.html" (plist-get (cadr group) :slug)) + emacsconf-backstage-dir))) + (error "Backstage redirect for %s does not exist" (plist-get (cadr group) :slug))) + ((null (= (length (seq-uniq (mapcar (lambda (o) (plist-get o :bbb-room)) (cdr group)))) 1)) + (error "Number of rooms for %s speaker: %d" + (plist-get (cadr group) :slug) + (length (seq-uniq (mapcar (lambda (o) (plist-get o :bbb-room)) (cdr group)))))) + (t (plist-get (car (cdr group)) :bbb-backstage))) + :bbb-tips (concat emacsconf-base-url emacsconf-year "/bbb-for-speakers/") + :intro-url (mapconcat + (lambda (talk) + (if (file-exists-p (expand-file-name + (concat (plist-get talk :file-prefix) "--intro.webm") + emacsconf-backstage-dir)) + (format "https://%s:%s@media.emacsconf.org/%s/backstage/%s--intro.webm" + emacsconf-backstage-user + emacsconf-backstage-password + emacsconf-year + (plist-get talk :file-prefix)) + (error "No intro file for %s" (plist-get talk :slug)))) + (cdr group)))))))) + (defun emacsconf-mail-checkin-instructions-to-all () "Draft check-in instructions for all speakers." (interactive) @@ -1260,7 +1479,7 @@ as soon as you can and I'll try to shuffle things around. Thank you!") Info and sched: ${base-url}${url} Check-in: ${check-in} Pad: ${pad-url} - ${qa-info-speakers}"))) + ${qa-info-speakers}")) (cdr group) "\n\n"))))) (defun emacsconf-mail-checkin-instructions-for-nonattending-speakers (group) @@ -1344,12 +1563,13 @@ Sacha") " *, *")) (defvar emacsconf-mail-notmuch-tag "emacsconf" "Tag to use when searching the Notmuch database for mail.") + (defun emacsconf-mail-notmuch-last-message-for-talk (talk &optional subject) "Return the most recent message from the speakers for TALK. Limit to SUBJECT if specified." (let ((message (json-parse-string (shell-command-to-string - (format "notmuch search --limit=1 --format=json %s%s\"" + (format "notmuch search --limit=1 --format=json \"%s%s\"" (mapconcat (lambda (email) (concat "from:" (shell-quote-argument email))) (emacsconf-mail-get-all-email-addresses talk) -- cgit v1.2.3