summaryrefslogtreecommitdiffstats
path: root/emacsconf-bbb.el
blob: 4643dc1eb351551ca35c69e45f2aff1106447820 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
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)))