From 633e0c14fab69f7dc594039388ac997bc192d0ec Mon Sep 17 00:00:00 2001 From: Sacha Chua Date: Tue, 17 Oct 2023 11:56:22 -0400 Subject: mail backstage and upload --- emacsconf-mail.el | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 90 insertions(+), 2 deletions(-) (limited to 'emacsconf-mail.el') diff --git a/emacsconf-mail.el b/emacsconf-mail.el index cd4fa21..8e43549 100644 --- a/emacsconf-mail.el +++ b/emacsconf-mail.el @@ -124,7 +124,9 @@ Behavior is modified by `emacsconf-mail-prepare-behavior'." ;; prepare to send the mail (if (and (derived-mode-p 'message-mode) (string-match "unsent mail" (buffer-name)) - (not (eq emacsconf-mail-prepare-behavior 'new-message))) + (not (eq emacsconf-mail-prepare-behavior 'new-message)) + ;; is the current message a reply to this e-mail? + (string-match (regexp-quote email) (message-field-value "To"))) ;; add to headers (emacsconf-mail-update-reply-headers template email attrs fields) ;; compose a new message @@ -911,6 +913,77 @@ ${signature}") :captions (mapconcat (lambda (sub) (concat (emacsconf-surround "\n" (elt sub 4) "" "") (elt sub 3))) (subed-parse-file captions) "\n"))) (mml-attach-file captions "text/vtt" "Subtitles" "attachment"))) +(defun emacsconf-mail-upload-and-backstage-info (group) + "E-mail upload and backstage access information to GROUP." + (interactive (list (emacsconf-mail-complete-email-group))) + (emacsconf-mail-prepare + (list + :subject "${conf-name} ${year}: Upload instructions, backstage info" + :reply-to "emacsconf-submit@gnu.org, ${email}, ${user-email}" + :mail-followup-to "emacsconf-submit@gnu.org, ${email}, ${user-email}" + :log-note "sent backstage and upload information" + :body + "${email-notes}Hi ${name}! + +Hope things are going well for you! I got the upload service up +and running so you can upload your video${plural} and other talk +resources (ex: speaker notes, Org files, slides, etc.). You can +access it at ${upload-url} with the password +\"${upload-password}\". Please let me know if you run into technical issues.${fill} + +If you can get your file(s) uploaded by ${video-target-date}, +that would give us plenty of time to reencode it, edit captions, +and so on. If life has gotten a bit busier than expected, that's +okay. You can upload it when you can or we can plan to do your +presentation live. +(Late submissions and live presentations are a bit more stressful, but +it'll probably work out.)${fill} + +We've also set up ${backstage} as the backstage area where you +can view the videos and resources uploaded so far. You can access +it with the username \"${backstage-user}\" and the password +\"${backstage-password}\". Please keep the backstage password +and other speakers' talk resources secret. This is a manual +process, so your talk won't immediately show up there once you've +upload it. Once we've processed your talk, you can use the +backstage area to check if your talk has been correctly reencoded +and see the progress on captions. You can also check out other +people's talks. Enjoy!${fill} + +Thank you so much for contributing to ${conf-name} ${year}! + +${signature}") + (car group) + (list + :email-notes (emacsconf-surround "ZZZ: " (plist-get (cadr group) :email-notes) "\n\n" "") + :backstage (emacsconf-replace-plist-in-string + (list :year emacsconf-year) + "https://media.emacsconf.org/${year}/backstage/") + :plural (if (= 1 (length (cdr group))) "" "s") + :backstage-user emacsconf-backstage-user + :backstage-password emacsconf-backstage-password + :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 + :video-target-date emacsconf-video-target-date + :name (plist-get (cadr group) :speakers-short) + :email (car group) + :user-email user-mail-address + :signature user-full-name + :conf-name emacsconf-name + :year emacsconf-year))) + +(defun emacsconf-mail-upload-and-backstage-info-to-waiting-for-prerecs () + "Mail upload and backstage information to all speakers who will submit files." + (interactive) + (let ((groups (emacsconf-mail-groups (seq-filter (lambda (o) (string= (plist-get o :status) "WAITING_FOR_PREREC")) + (emacsconf-get-talk-info))))) + (dolist (group groups) + (emacsconf-mail-upload-and-backstage-info group)))) + (defun emacsconf-mail-backstage-info (group) "E-mail backstage access information to GROUP." (interactive (list (emacsconf-mail-complete-email-group))) @@ -945,7 +1018,7 @@ ${signature}") :backstage-use (cond ((string= (plist-get (cadr group) :role) "volunteer") - "If you see a talk that you'd like to caption, please let us know and we can reserve it for you.") + "If you see a talk that you'd like to caption, please let us know and we can reserve it for you. I'll also let people periodically know when more talks come in.") ((string= (plist-get (cadr group) :status) "WAITING_FOR_PREREC") "As we add more talks, you can skim through any relevant ones to see if there are any points you'd like to build on in your talk. @@ -969,6 +1042,21 @@ people's talks too.")) :conf-name emacsconf-name :year emacsconf-year))) +(defun emacsconf-mail-backstage-info-to-captioning-volunteers () + "E-mail backstage info to captioning volunteers." + (interactive) + (dolist (volunteer (seq-filter + (lambda (o) + (string-match ":captions:" (assoc-default "ALLTAGS" o 'string= ""))) + (emacsconf-get-volunteer-info))) + (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-speakers-and-captioners () (interactive) (let ((template (emacsconf-mail-merge-get-template "backstage")) -- cgit v1.2.3