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