summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSacha Chua <sacha@sachachua.com>2025-12-20 18:30:28 -0500
committerSacha Chua <sacha@sachachua.com>2025-12-20 18:30:28 -0500
commit884815b264b224b4776096133891c752fd35442b (patch)
tree2d484df7c2accf8d10c886d066cbd390b4b3ef60
parente4660754d0c4e5f2a68cec5b151f857425512171 (diff)
downloademacsconf-el-main.tar.xz
emacsconf-el-main.zip
move to separate fileHEADmain
-rw-r--r--emacsconf-bbb.el126
-rw-r--r--emacsconf.el122
2 files changed, 126 insertions, 122 deletions
diff --git a/emacsconf-bbb.el b/emacsconf-bbb.el
new file mode 100644
index 0000000..4643dc1
--- /dev/null
+++ b/emacsconf-bbb.el
@@ -0,0 +1,126 @@
+;;;###autoload
+(defun emacsconf-bbb-status (talk)
+ (let ((states
+ '((open . "OPEN_Q UNSTREAMED_Q")
+ (before . "TODO TO_REVIEW TO_ACCEPT WAITING_FOR_PREREC TO_PROCESS PROCESSING TO_AUTOCAP TO_ASSIGN TO_CAPTION TO_CHECK TO_STREAM PLAYING CLOSED_Q")
+ (after . "TO_ARCHIVE TO_EXTRACT TO_REVIEW_QA TO_INDEX_QA TO_CAPTION_QA TO_FOLLOW_UP DONE")
+ (cancelled . "CANCELLED"))))
+ (if (string-match "live" (or (plist-get talk :q-and-a) ""))
+ (or (car (seq-find (lambda (state)
+ (member (plist-get talk :status) (split-string (cdr state))))
+ states))
+ (throw 'error "Unknown talk BBB state"))
+ 'irc)))
+
+(defvar emacsconf-bbb-base-url "https://bbb.emacsverse.org/" "Include trailing slash.")
+(defun emacsconf-bbb-room-title-list (&optional info)
+ (delq nil
+ (mapcar
+ (lambda (o)
+ (when (car o)
+ (concat "ec" (substring emacsconf-year 2)
+ "-" (plist-get (emacsconf-get-shift (plist-get (cadr o) :start-time)) :id)
+ "-" (plist-get (emacsconf-get-track (plist-get (cadr o) :track)) :id)
+ " " (car o)
+ " ("
+ (mapconcat (lambda (talk) (plist-get talk :slug)) (cdr o) ", ")
+ ")")))
+ (seq-group-by (lambda (o) (plist-get o :speakers))
+ (or info (emacsconf-active-talks (emacsconf-filter-talks (emacsconf-get-talk-info))))))))
+
+(defun emacsconf-bbb-create-rooms ()
+ "Copy the commands needed to create the rooms.
+docker exec -it greenlight-v3 /bin/bash -c \"bundle exec rails console\"
+user_id = User.find_by_email(\"emacsconf@sachachua.com\").id"
+ (interactive)
+ (kill-new
+ (mapconcat (lambda (group)
+ (format
+ "Room.create(user_id: user_id, name: \"%s - %s\")\n"
+ (plist-get (cadr group) :speakers)
+ (string-join (mapcar (lambda (talk) (plist-get talk :slug))
+ (cdr group))
+ ", ")))
+ (emacsconf-mail-groups (emacsconf-active-talks (emacsconf-get-talk-info)))
+ ""))
+ (message "Copied. Run it inside the greenlight-v3 rails console."))
+
+(defun emacsconf-bbb-load-rooms (string)
+ "Split STRING and load them as ROOM properties.
+STRING should be a list of rooms, one room per line, like this:
+friendly-id speaker - slugs
+friendly-id speaker - slugs
+
+Print out room IDs with:
+Room.all.each { |x| puts x.friendly_id + " " + x.name }; nil
+"
+ (interactive "MInput: ")
+ (let ((rooms
+ (mapcar (lambda (row) (when (string-match "^\\(.+?\\) \\(.+\\)" row)
+ (list (match-string 1 row) (match-string 2 row))))
+ (split-string string "\n"))))
+ (mapc (lambda (talk)
+ (emacsconf-go-to-talk talk)
+ (when (plist-get talk :speakers)
+ (org-entry-put
+ (point)
+ "ROOM"
+ (concat
+ emacsconf-bbb-base-url
+ "rooms/"
+ (car
+ (seq-find
+ (lambda (o)
+ (string-match
+ (concat
+ "^"
+ (regexp-quote
+ (plist-get talk :speakers))
+ " - ")
+ (cadr o)))
+ rooms))
+ "/join"))))
+ (emacsconf-active-talks (emacsconf-get-talk-info)))))
+
+
+
+(defun emacsconf-bbb-spookfox-set-moderator-codes ()
+ (interactive)
+ (dolist (talk (seq-filter (lambda (o)
+ (and (plist-get o :bbb-room)
+ (not (plist-get o :bbb-mod-code))))
+ (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info))))
+ (spookfox-js-injection-eval-in-active-tab
+ (format "window.location.href = \"%s\""
+ (replace-regexp-in-string "/join" "" (plist-get talk :bbb-room)))
+ t)
+ (sleep-for 3)
+ (spookfox-js-injection-eval-in-active-tab
+ "document.querySelector('button[data-rr-ui-event-key=\"settings\"]').click()" t)
+ (spookfox-js-injection-eval-in-active-tab
+ "document.querySelector('input#glAnyoneCanStart').checked = true")
+ (spookfox-js-injection-eval-in-active-tab
+ "document.querySelector('input#muteOnStart').checked = true")
+ (spookfox-js-injection-eval-in-active-tab
+ "document.querySelectorAll('.border-end button')[2].click()" t)
+ (let ((code (spookfox-js-injection-eval-in-active-tab
+ "document.querySelector('.access-code-input input').value" t)))
+ (message "Setting %s to %s" (plist-get talk :slug) code)
+ (emacsconf-set-property-from-slug
+ talk "BBB_MOD_CODE"
+ code)
+ (sit-for 2))))
+
+(defun emacsconf-bbb-spookfox-confirm-settings ()
+ (interactive)
+ (dolist (talk (seq-filter (lambda (o)
+ (plist-get o :bbb-room))
+ (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info))))
+ (spookfox-js-injection-eval-in-active-tab
+ (format "window.location.href = \"%s\""
+ (replace-regexp-in-string "/join" "" (plist-get talk :bbb-room)))
+ t)
+ (sleep-for 3)
+ (spookfox-js-injection-eval-in-active-tab
+ "document.querySelector('button[data-rr-ui-event-key=\"settings\"]').click()" t)
+ (sleep-for 3)))
diff --git a/emacsconf.el b/emacsconf.el
index 057c6cf..d95a26d 100644
--- a/emacsconf.el
+++ b/emacsconf.el
@@ -1613,19 +1613,6 @@ Filter by TRACK if given. Use INFO as the list of talks."
(defun emacsconf-talk-all-done-p (talk)
(member (plist-get talk :status) (split-string "TO_ARCHIVE TO_EXTRACT TO_FOLLOW_UP DONE")))
-(defun emacsconf-bbb-status (talk)
- (let ((states
- '((open . "OPEN_Q UNSTREAMED_Q")
- (before . "TODO TO_REVIEW TO_ACCEPT WAITING_FOR_PREREC TO_PROCESS PROCESSING TO_AUTOCAP TO_ASSIGN TO_CAPTION TO_CHECK TO_STREAM PLAYING CLOSED_Q")
- (after . "TO_ARCHIVE TO_EXTRACT TO_REVIEW_QA TO_INDEX_QA TO_CAPTION_QA TO_FOLLOW_UP DONE")
- (cancelled . "CANCELLED"))))
- (if (string-match "live" (or (plist-get talk :q-and-a) ""))
- (or (car (seq-find (lambda (state)
- (member (plist-get talk :status) (split-string (cdr state))))
- states))
- (throw 'error "Unknown talk BBB state"))
- 'irc)))
-
(defun emacsconf-captions-edited-p (filename)
"Return non-nil if FILENAME has been edited and is okay for inclusion."
(and
@@ -1636,116 +1623,7 @@ Filter by TRACK if given. Use INFO as the list of talks."
(goto-char (point-min))
(re-search-forward "captioned by" (line-end-position) t))))
-(defvar emacsconf-bbb-base-url "https://bbb.emacsverse.org/" "Include trailing slash.")
-(defun emacsconf-bbb-room-title-list (&optional info)
- (delq nil
- (mapcar
- (lambda (o)
- (when (car o)
- (concat "ec" (substring emacsconf-year 2)
- "-" (plist-get (emacsconf-get-shift (plist-get (cadr o) :start-time)) :id)
- "-" (plist-get (emacsconf-get-track (plist-get (cadr o) :track)) :id)
- " " (car o)
- " ("
- (mapconcat (lambda (talk) (plist-get talk :slug)) (cdr o) ", ")
- ")")))
- (seq-group-by (lambda (o) (plist-get o :speakers))
- (or info (emacsconf-active-talks (emacsconf-filter-talks (emacsconf-get-talk-info))))))))
-(defun emacsconf-bbb-create-rooms ()
- "Copy the commands needed to create the rooms.
-docker exec -it greenlight-v3 /bin/bash -c \"bundle exec rails console\"
-user_id = User.find_by_email(\"emacsconf@sachachua.com\").id"
- (interactive)
- (kill-new
- (mapconcat (lambda (group)
- (format
- "Room.create(user_id: user_id, name: \"%s - %s\")\n"
- (plist-get (cadr group) :speakers)
- (string-join (mapcar (lambda (talk) (plist-get talk :slug))
- (cdr group))
- ", ")))
- (emacsconf-mail-groups (emacsconf-active-talks (emacsconf-get-talk-info)))
- ""))
- (message "Copied. Run it inside the greenlight-v3 rails console."))
-
-(defun emacsconf-load-rooms (string)
- "Split STRING and load them as ROOM properties.
-STRING should be a list of rooms, one room per line, like this:
-friendly-id speaker - slugs
-friendly-id speaker - slugs
-
-Print out room IDs with:
-Room.all.each { |x| puts x.friendly_id + " " + x.name }; nil
-"
- (interactive "MInput: ")
- (let ((rooms
- (mapcar (lambda (row) (when (string-match "^\\(.+?\\) \\(.+\\)" row)
- (list (match-string 1 row) (match-string 2 row))))
- (split-string string "\n"))))
- (mapc (lambda (talk)
- (emacsconf-go-to-talk talk)
- (when (plist-get talk :speakers)
- (org-entry-put
- (point)
- "ROOM"
- (concat
- emacsconf-bbb-base-url
- "rooms/"
- (car
- (seq-find
- (lambda (o)
- (string-match
- (concat
- "^"
- (regexp-quote
- (plist-get talk :speakers))
- " - ")
- (cadr o)))
- rooms))
- "/join"))))
- (emacsconf-active-talks (emacsconf-get-talk-info)))))
-
-(defun emacsconf-bbb-spookfox-set-moderator-codes ()
- (interactive)
- (dolist (talk (seq-filter (lambda (o)
- (and (plist-get o :bbb-room)
- (not (plist-get o :bbb-mod-code))))
- (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info))))
- (spookfox-js-injection-eval-in-active-tab
- (format "window.location.href = \"%s\""
- (replace-regexp-in-string "/join" "" (plist-get talk :bbb-room)))
- t)
- (sleep-for 3)
- (spookfox-js-injection-eval-in-active-tab
- "document.querySelector('button[data-rr-ui-event-key=\"settings\"]').click()" t)
- (spookfox-js-injection-eval-in-active-tab
- "document.querySelector('input#glAnyoneCanStart').checked = true")
- (spookfox-js-injection-eval-in-active-tab
- "document.querySelector('input#muteOnStart').checked = true")
- (spookfox-js-injection-eval-in-active-tab
- "document.querySelectorAll('.border-end button')[2].click()" t)
- (let ((code (spookfox-js-injection-eval-in-active-tab
- "document.querySelector('.access-code-input input').value" t)))
- (message "Setting %s to %s" (plist-get talk :slug) code)
- (emacsconf-set-property-from-slug
- talk "BBB_MOD_CODE"
- code)
- (sit-for 2))))
-
-(defun emacsconf-bbb-spookfox-confirm-settings ()
- (interactive)
- (dolist (talk (seq-filter (lambda (o)
- (plist-get o :bbb-room))
- (emacsconf-publish-prepare-for-display (emacsconf-get-talk-info))))
- (spookfox-js-injection-eval-in-active-tab
- (format "window.location.href = \"%s\""
- (replace-regexp-in-string "/join" "" (plist-get talk :bbb-room)))
- t)
- (sleep-for 3)
- (spookfox-js-injection-eval-in-active-tab
- "document.querySelector('button[data-rr-ui-event-key=\"settings\"]').click()" t)
- (sleep-for 3)))
(defun emacsconf-surround (before text after &optional alternative)
"Concat BEFORE, TEXT, and AFTER if TEXT is specified, or return ALTERNATIVE."