diff options
| -rw-r--r-- | emacsconf-mail.el | 228 | 
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) | 
