-
Notifications
You must be signed in to change notification settings - Fork 0
/
yeelight.user.js
111 lines (87 loc) · 3.16 KB
/
yeelight.user.js
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
// ==UserScript==
// @name YeeLight Meets Controller
// @namespace http://tampermonkey.net/
// @version 1
// @description try to take over the world!
// @author Alice Fernandes
// @match https://meet.google.com/**
// @grant none
// ==/UserScript==
(function() {
//TODO: Handle disconnects
let selector = "[role='button'][data-is-muted]";
let target = document.querySelector(selector);
let mutationObserver = null;
let writer = null;
let port = null;
let allowLoop = true;
let streamWriter = null;
let requesting = false;
let lastValue = "";
//Check if target is avaliable
function waitForMeets() {
target = document.querySelector(selector);
if (target == null) {
window.setTimeout(waitForMeets, 1000);
} else {
let event = new CustomEvent("targetAquired");
document.dispatchEvent(event);
}
//Update when changing the page;
var observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
if(mutation.addedNodes.length > 0){
target = document.querySelector(selector);
if(mutationObserver != null){
mutationObserver.disconnect();
observeMutations();
}
}
});
}
);
var config = {
childList:true,
attributes: true,
attributeFilter: ['data-is-muted'],
};
observer.observe(document.querySelector("body"), config);
}
waitForMeets();
function observeMutations(){
let selector = "[role='button'][data-is-muted]";
var target = document.querySelector(selector);
var observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
if (mutation.attributeName == "data-is-muted" && requesting === false) {
//Compare the values
if(lastValue === target.dataset.isMuted){
return;
}
if(target.dataset.isMuted == "true"){
requesting = true;
fetch('https://localhost:3000/color/255000000', {method:"POST"}).finally(() => {
requesting = false;
})
}else{
requesting = true;
fetch('https://localhost:3000/ct/4780', {method:"POST"}).finally(() => {
requesting = false;
})
}
lastValue = target.dataset.isMuted;
}
});
}
);
var config = {
attributes: true,
attributeFilter: ['data-is-muted'],
};
observer.observe(target, config);
mutationObserver = observer;
}
document.addEventListener("targetAquired", function () {
observeMutations();
})
})();