mirror of
https://github.com/arkorty/B.Tech-Project-III.git
synced 2026-04-19 12:41:48 +00:00
110 lines
3.9 KiB
JavaScript
110 lines
3.9 KiB
JavaScript
let currentTab = null;
|
|
let isRecording = false;
|
|
|
|
async function getActiveTab() {
|
|
const tabs = await chrome.tabs.query({ active: true, currentWindow: true });
|
|
return tabs[0] || null;
|
|
}
|
|
|
|
function isMeetTab(tab) {
|
|
return tab && tab.url && tab.url.includes("meet.google.com");
|
|
}
|
|
|
|
async function loadSettings() {
|
|
const stored = await chrome.storage.sync.get(["backendUrl", "ingestSecret", "groupId"]);
|
|
document.getElementById("backend-url").value = stored.backendUrl || "http://localhost:8000";
|
|
document.getElementById("ingest-secret").value = stored.ingestSecret || "";
|
|
document.getElementById("group-id").value = stored.groupId || "meet_sessions";
|
|
}
|
|
|
|
async function saveSettings() {
|
|
const backendUrl = document.getElementById("backend-url").value.trim();
|
|
const ingestSecret = document.getElementById("ingest-secret").value.trim();
|
|
const groupId = document.getElementById("group-id").value.trim();
|
|
await chrome.storage.sync.set({ backendUrl, ingestSecret, groupId });
|
|
const btn = document.getElementById("save-btn");
|
|
btn.textContent = "✓ Saved";
|
|
setTimeout(() => { btn.textContent = "Save Settings"; }, 1500);
|
|
}
|
|
|
|
function setRecordingUI(recording, meetingId, chunks) {
|
|
isRecording = recording;
|
|
const dot = document.getElementById("status-dot");
|
|
const label = document.getElementById("status-label");
|
|
const btn = document.getElementById("main-btn");
|
|
const meetLabel = document.getElementById("meeting-id-label");
|
|
const chunksLabel = document.getElementById("chunks-label");
|
|
|
|
dot.className = "status-dot " + (recording ? "recording" : "idle");
|
|
label.textContent = recording ? "Recording…" : "Idle";
|
|
btn.className = "btn " + (recording ? "btn-stop" : "btn-start");
|
|
btn.textContent = recording ? "■ Stop Recording" : "▶ Start Recording";
|
|
meetLabel.textContent = meetingId ? `Meeting ID: ${meetingId}` : "Meeting ID: —";
|
|
chunksLabel.textContent = `${chunks || 0} chunks sent`;
|
|
}
|
|
|
|
async function getTabStatus() {
|
|
if (!currentTab) return;
|
|
try {
|
|
const status = await chrome.tabs.sendMessage(currentTab.id, { type: "GET_STATUS" });
|
|
setRecordingUI(status.isRecording, status.meetingId, status.chunkCount);
|
|
} catch {
|
|
setRecordingUI(false, null, 0);
|
|
}
|
|
}
|
|
|
|
async function handleMainBtn() {
|
|
if (!currentTab) return;
|
|
const stored = await chrome.storage.sync.get(["backendUrl", "ingestSecret", "groupId"]);
|
|
|
|
if (!isRecording) {
|
|
await chrome.tabs.sendMessage(currentTab.id, {
|
|
type: "START_RECORDING",
|
|
config: {
|
|
backendUrl: stored.backendUrl || "http://localhost:8000",
|
|
ingestSecret: stored.ingestSecret || "thirdeye_meet_secret_change_me",
|
|
groupId: stored.groupId || "meet_sessions",
|
|
},
|
|
});
|
|
} else {
|
|
await chrome.tabs.sendMessage(currentTab.id, { type: "STOP_RECORDING" });
|
|
}
|
|
|
|
// Poll for updated status
|
|
setTimeout(getTabStatus, 500);
|
|
}
|
|
|
|
// Listen for status updates from content script
|
|
chrome.runtime.onMessage.addListener((msg) => {
|
|
if (msg.type === "STATUS") {
|
|
setRecordingUI(msg.status === "recording", msg.meetingId, null);
|
|
}
|
|
if (msg.type === "CHUNK_SENT") {
|
|
document.getElementById("chunks-label").textContent = `${msg.chunkIndex + 1} chunks sent`;
|
|
document.getElementById("meeting-id-label").textContent = `Meeting ID: ${msg.meetingId}`;
|
|
}
|
|
});
|
|
|
|
// Init
|
|
document.addEventListener("DOMContentLoaded", async () => {
|
|
currentTab = await getActiveTab();
|
|
|
|
if (!isMeetTab(currentTab)) {
|
|
document.getElementById("not-meet").style.display = "block";
|
|
document.getElementById("meet-ui").style.display = "none";
|
|
return;
|
|
}
|
|
|
|
document.getElementById("meet-ui").style.display = "block";
|
|
document.getElementById("not-meet").style.display = "none";
|
|
|
|
await loadSettings();
|
|
await getTabStatus();
|
|
|
|
document.getElementById("main-btn").addEventListener("click", handleMainBtn);
|
|
document.getElementById("save-btn").addEventListener("click", saveSettings);
|
|
|
|
// Poll status every 5s while popup is open
|
|
setInterval(getTabStatus, 5000);
|
|
});
|