Skip to content

Commit b2bcdf4

Browse files
authored
Merge pull request #15 from vivek-nexus/v2.0.0
v2.0.0
2 parents 96bf546 + f0abf27 commit b2bcdf4

5 files changed

Lines changed: 55 additions & 103 deletions

File tree

extension/background.js

Lines changed: 16 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,79 +1,23 @@
11
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
2-
chrome.storage.local.get(["extensionStatusJSON"], function (result) {
3-
let extensionStatusJSON = result.extensionStatusJSON;
4-
if (extensionStatusJSON.status == 200) {
5-
if (request.message == "New meeting starting") {
6-
console.log("-------------NEW MEETING-------------")
7-
readPreMeetingSlackStatus()
8-
chrome.storage.local.get(["inMeeting", "attendeeUUID"], function (result) {
9-
console.log(`Saved inMeeting: ${result.inMeeting}`)
10-
console.log(`Saved attendee UUID: ${result.attendeeUUID}`)
11-
})
12-
}
13-
if (request.message == "Page unloaded") {
14-
console.log("Successfully intercepted page unload")
15-
chrome.storage.local.set({ inMeeting: false, attendeeUUID: null }, function () {
16-
console.log("inMeeting set to false")
17-
console.log(`Attendee UUID set to null`)
18-
console.log("Clearing slack status")
19-
clearSlackStatus();
20-
})
21-
}
22-
}
23-
else {
24-
console.log("Not doing any page load actions as extension status is 400")
25-
}
26-
})
2+
if (request.message == "New meeting starting") {
3+
console.log("-------------NEW MEETING-------------")
4+
readPreMeetingSlackStatus()
5+
}
6+
if (request.message == "Set status") {
7+
console.log("Setting slack status")
8+
setSlackStatus();
9+
}
10+
if (request.message == "Clear status") {
11+
console.log("Clearing slack status")
12+
clearSlackStatus();
13+
}
14+
if (request.message == "Page unloaded") {
15+
console.log("Successfully intercepted page unload")
16+
clearSlackStatus();
17+
}
2718
return true
2819
})
2920

30-
chrome.webRequest.onBeforeRequest.addListener((details) => {
31-
console.log("Successfully intercepted UpdateMeetingDevice network request")
32-
// https://stackoverflow.com/a/56521708
33-
const extractedBody = extractInfoFromString(decodeURIComponent(String.fromCharCode.apply(null, new Uint8Array(details.requestBody.raw[0].bytes))))
34-
if (extractedBody != null) {
35-
chrome.storage.local.get(["extensionStatusJSON"], function (result) {
36-
let extensionStatusJSON = result.extensionStatusJSON;
37-
if (extensionStatusJSON.status == 200)
38-
webRequestCallback(extractedBody.eventType, extractedBody.uuid)
39-
else
40-
console.log("Not doing any page load actions as extension status is 400")
41-
})
42-
}
43-
},
44-
{ urls: ["https://meet.google.com/$rpc/google.rtc.meetings.v1.MeetingDeviceService/UpdateMeetingDevice"] }, ["requestBody"])
45-
46-
47-
48-
49-
50-
function webRequestCallback(eventType, uuid) {
51-
chrome.storage.local.get(["inMeeting", "attendeeUUID"], function (result) {
52-
console.log(`Saved inMeeting: ${result.inMeeting}`)
53-
console.log(`Saved attendee UUID: ${result.attendeeUUID}`)
54-
55-
if ((eventType == "g") && (result.inMeeting == false) && (result.attendeeUUID == null)) {
56-
chrome.storage.local.set({ inMeeting: true, attendeeUUID: uuid }, function () {
57-
console.log(`Correct event of type "${eventType}", with ${uuid}`)
58-
console.log(`inMeeting set to true. Attendee UUID set to ${uuid}.`)
59-
console.log("Setting slack status")
60-
setSlackStatus();
61-
})
62-
}
63-
else if ((eventType == "D") && (result.inMeeting == true) && (result.attendeeUUID == uuid)) {
64-
chrome.storage.local.set({ inMeeting: false, attendeeUUID: null }, function () {
65-
console.log(`Correct event of type "${eventType}", with ${uuid}`)
66-
console.log(`inMeeting set to false. Attendee UUID set to null.`)
67-
console.log("Clearing slack status")
68-
clearSlackStatus();
69-
})
70-
}
71-
else {
72-
console.log(`False event of type "${eventType}", with ${uuid}`)
73-
}
74-
})
75-
}
76-
7721

7822

7923
function readPreMeetingSlackStatus() {

extension/content.js

Lines changed: 36 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
chrome.storage.local.set({ inMeeting: false, attendeeUUID: null }, function () {
2-
console.log("-------------NEW MEETING-------------")
3-
console.log("inMeeting set to false")
4-
console.log("Attendee UUID set to null")
5-
})
6-
71
checkExtensionStatus().then(() => {
82
// Read the status JSON
93
chrome.storage.local.get(["extensionStatusJSON"], function (result) {
@@ -16,7 +10,8 @@ checkExtensionStatus().then(() => {
1610
});
1711

1812
// disabling camera or microphone
19-
checkElement(".oTVIqe").then((selector) => {
13+
checkElement(".oTVIqe").then(() => {
14+
console.log("Mic and camera visible")
2015
let buttons = document.querySelectorAll(".oTVIqe");
2116
if (buttons) {
2217
setTimeout(() => {
@@ -40,6 +35,20 @@ checkExtensionStatus().then(() => {
4035
console.log(response);
4136
});
4237
})
38+
39+
checkElement(".google-material-icons", "call_end").then(() => {
40+
console.log("Meeting started, setting Slack status")
41+
chrome.runtime.sendMessage({ message: "Set status" }, function (response) {
42+
console.log(response);
43+
});
44+
45+
contains(".google-material-icons", "call_end")[0].parentElement.addEventListener("click", () => {
46+
console.log("Meeting ended, clearing Slack status")
47+
chrome.runtime.sendMessage({ message: "Clear status" }, function (response) {
48+
console.log(response);
49+
});
50+
})
51+
})
4352
}
4453
else {
4554
showNotification(400, extensionStatusJSON);
@@ -68,29 +77,22 @@ chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
6877

6978
function joinKeyBoardShortcutListener() {
7079
document.addEventListener("keydown", function (event) {
71-
if ((event.ctrlKey || event.metaKey) && (event.key.toLowerCase() === "v")) {
72-
chrome.storage.local.get(["extensionStatusJSON"], function (result) {
73-
let extensionStatusJSON = result.extensionStatusJSON;
74-
if (extensionStatusJSON.status == 200) {
75-
let askToJoin = contains("div", "Ask to join")
76-
let joinNow = contains("div", "Join now")
77-
if (askToJoin.length > 0)
78-
askToJoin[askToJoin.length - 1].firstChild.click();
79-
else joinNow[joinNow.length - 1].firstChild.click();
80-
}
81-
});
80+
if ((event.ctrlKey || event.metaKey) && !(event.shiftKey) && (event.key.toLowerCase() === "v")) {
81+
let askToJoin = contains("div", "Ask to join")
82+
let joinNow = contains("div", "Join now")
83+
if (askToJoin.length > 0)
84+
askToJoin[askToJoin.length - 1].firstChild.click();
85+
else if (joinNow.length > 0)
86+
joinNow[joinNow.length - 1].firstChild.click();
8287
}
8388
});
8489
}
8590

8691
function exitKeyBoardShortcutListener() {
8792
document.addEventListener("keydown", function (event) {
8893
if ((event.ctrlKey || event.metaKey) && (event.shiftKey) && (event.key.toLowerCase() === "v")) {
89-
chrome.storage.local.get(["extensionStatusJSON"], function (result) {
90-
let extensionStatusJSON = result.extensionStatusJSON;
91-
if (extensionStatusJSON.status == 200 && contains("i", "call_end")[0])
92-
contains("i", "call_end")[0].parentElement.click();
93-
});
94+
if (contains("i", "call_end")[0])
95+
contains("i", "call_end")[0].parentElement.click();
9496
}
9597
});
9698
}
@@ -102,12 +104,19 @@ function contains(selector, text) {
102104
});
103105
}
104106

105-
const checkElement = async (selector) => {
106-
while (document.querySelector(selector) === null) {
107-
await new Promise((resolve) => requestAnimationFrame(resolve));
107+
const checkElement = async (selector, text) => {
108+
if (text) {
109+
while (!Array.from(document.querySelectorAll(selector)).find(element => element.textContent === text)) {
110+
await new Promise((resolve) => requestAnimationFrame(resolve));
111+
}
112+
}
113+
else {
114+
while (!document.querySelector(selector)) {
115+
await new Promise((resolve) => requestAnimationFrame(resolve));
116+
}
108117
}
109118
return document.querySelector(selector);
110-
};
119+
}
111120

112121
function showNotification(type, extensionStatusJSON) {
113122
// Banner CSS

extension/manifest.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "Google Meet ⇔ Slack integration",
3-
"version": "1.0.2",
3+
"version": "2.0.0",
44
"manifest_version": 3,
55
"description": "Real-time Google Meet status on Slack, just like Slack huddles.",
66
"action": {
@@ -28,8 +28,7 @@
2828
}
2929
],
3030
"permissions": [
31-
"storage",
32-
"webRequest"
31+
"storage"
3332
],
3433
"host_permissions": [
3534
"https://meet.google.com/*",

extension/popup.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ <h1>Google Meet ⇔ Slack</h1>
3737
<div style="display: flex;">
3838
<div style="width: 25%; margin-right: 1rem;">
3939
<div style="position: relative; align-items: center;">
40-
<img src="insert_emoticon_white_24dp.svg" id="emoji-picker" alt="emoji-picker">
40+
<img src="emoji-icon.svg" id="emoji-picker" alt="emoji-picker">
4141
<input id="slack-emoji" type="text" value="📞" />
4242
</div>
4343
</div>

0 commit comments

Comments
 (0)