|
// ==UserScript== |
|
// @name Accio Google Meet |
|
// @version 0.1.0 |
|
// @author Floyd |
|
// @description Automate adding Meet links and starting notes in Meet (with a host-only option), with a control panel on Google Calendar. |
|
// @match https://calendar.google.com/calendar/* |
|
// @match https://meet.google.com/* |
|
// @grant GM_setValue |
|
// @grant GM_getValue |
|
// @grant GM_addStyle |
|
// @run-at document-idle |
|
// ==/UserScript== |
|
|
|
(function () { |
|
"use strict"; |
|
|
|
// --- SHARED CONFIGURATION --- |
|
const ICON_URL_DEFAULT = |
|
"data:image/png;base64,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"; |
|
const ICON_URL_ACTIVE = |
|
"data:image/png;base64,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"; |
|
const MEET_CLICK_DEBOUNCE_MS = 750; // Time to wait after finding a button to ensure it's the final one. |
|
|
|
let settings = { |
|
enableAccioGoogleMeet: true, |
|
enableAccioGeminiNotes: true, |
|
takeNotesOnlyWhenHost: false, |
|
}; |
|
|
|
// --- GOOGLE MEET SELECTORS --- |
|
const meetPencilButtonSelectors = [ |
|
'button[aria-label="Gemini isn\'t taking notes"]', |
|
'button[aria-label="Gemini がメモを作成していません"]', |
|
]; |
|
const meetStartTakingNotesButtonSelectors = [ |
|
'button[data-progress-announcement="Gemini\'s getting ready to take notes"]', |
|
'button[data-progress-announcement="Gemini がメモの作成の準備をしています"]', |
|
]; |
|
const hostControlButtonSelectors = [ |
|
'button[aria-label="Host controls"]', |
|
'button[aria-label="主催者用ボタン"]', |
|
]; |
|
|
|
// --- GOOGLE CALENDAR TEXT --- |
|
const calendarAddGoogleMeetVideoConferencingButtonTexts = [ |
|
"Add Google Meet video conferencing", |
|
"Google Meet のビデオ会議を追加", |
|
]; |
|
|
|
// ================================================================================= |
|
// SHARED UI & STATE MANAGEMENT |
|
// ================================================================================= |
|
|
|
function setupStyles() { |
|
GM_addStyle(` |
|
#accio-control-icon { |
|
position: fixed; bottom: 50px; right: 5px; width: 46px; height: 46px; |
|
border-radius: 50%; cursor: pointer; z-index: 9999; |
|
transition: transform 0.2s ease, opacity 0.3s ease; |
|
display: flex; align-items: center; justify-content: center; |
|
} |
|
#accio-control-icon.disabled { opacity: 0.4; } |
|
#accio-control-icon img { width: 80%; height: 80%; } |
|
|
|
#accio-menu { |
|
position: fixed; bottom: 85px; right: 20px; width: 280px; |
|
background: #3c4043; color: #e8eaed; border-radius: 12px; |
|
box-shadow: 0 5px 15px rgba(0,0,0,0.4); z-index: 9998; |
|
padding: 16px; font-family: 'Google Sans', Roboto, Arial, sans-serif; |
|
visibility: hidden; opacity: 0; transform: translateY(10px); |
|
transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1); |
|
} |
|
#accio-menu.visible { visibility: visible; opacity: 1; transform: translateY(0); } |
|
#accio-menu h3 { margin: 0 0 8px 0; font-size: 16px; font-weight: 500; text-align: center; color: #fff; } |
|
.accio-menu-row { display: flex; justify-content: space-between; align-items: center; margin-top: 10px; transition: opacity 0.3s ease; } |
|
.accio-menu-row span { max-width: 190px; } |
|
.accio-menu-row.disabled-row { |
|
opacity: 0.5; |
|
pointer-events: none; |
|
} |
|
|
|
.accio-switch { position: relative; display: inline-block; width: 50px; height: 28px; flex-shrink: 0; } |
|
.accio-switch input { opacity: 0; width: 0; height: 0; } |
|
.accio-slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: #5f6368; transition: .3s; border-radius: 28px; } |
|
.accio-slider:before { position: absolute; content: ""; height: 20px; width: 20px; left: 4px; bottom: 4px; background-color: white; transition: .3s; border-radius: 50%; } |
|
input:checked + .accio-slider { background-color: #b68dfc; } |
|
input:checked + .accio-slider:before { transform: translateX(22px); } |
|
`); |
|
} |
|
|
|
function createUI() { |
|
const controlIcon = document.createElement("div"); |
|
controlIcon.id = "accio-control-icon"; |
|
const iconImage = document.createElement("img"); |
|
iconImage.id = "accio-icon-image"; |
|
iconImage.src = ICON_URL_DEFAULT; |
|
iconImage.alt = "Accio Settings"; |
|
controlIcon.appendChild(iconImage); |
|
|
|
const menu = document.createElement("div"); |
|
menu.id = "accio-menu"; |
|
|
|
const menuHeader = document.createElement("h3"); |
|
menuHeader.textContent = "🪄 Accio Settings"; |
|
menu.appendChild(menuHeader); |
|
|
|
const createMenuRow = (id, labelText) => { |
|
const row = document.createElement("div"); |
|
row.className = "accio-menu-row"; |
|
row.id = id + "-row"; |
|
const label = document.createElement("span"); |
|
label.textContent = labelText; |
|
row.appendChild(label); |
|
const switchContainer = document.createElement("label"); |
|
switchContainer.className = "accio-switch"; |
|
const checkbox = document.createElement("input"); |
|
checkbox.type = "checkbox"; |
|
checkbox.id = id; |
|
switchContainer.appendChild(checkbox); |
|
const slider = document.createElement("span"); |
|
slider.className = "accio-slider"; |
|
switchContainer.appendChild(slider); |
|
row.appendChild(switchContainer); |
|
return row; |
|
}; |
|
|
|
const calendarRow = createMenuRow( |
|
"accio-toggle-google-meet", |
|
"Accio Google Meet" |
|
); |
|
const meetRow = createMenuRow( |
|
"accio-toggle-gemini-notes", |
|
"Accio Gemini Notes" |
|
); |
|
const hostRow = createMenuRow( |
|
"accio-toggle-host", |
|
"Only Take Notes When Host" |
|
); |
|
menu.appendChild(calendarRow); |
|
menu.appendChild(meetRow); |
|
menu.appendChild(hostRow); |
|
|
|
document.body.appendChild(controlIcon); |
|
document.body.appendChild(menu); |
|
|
|
const accioGoogleMeetToggle = document.getElementById( |
|
"accio-toggle-google-meet" |
|
); |
|
const accioGeminiNotesToggle = document.getElementById( |
|
"accio-toggle-gemini-notes" |
|
); |
|
const hostToggle = document.getElementById("accio-toggle-host"); |
|
|
|
controlIcon.addEventListener("mouseover", () => { |
|
iconImage.src = ICON_URL_ACTIVE; |
|
}); |
|
controlIcon.addEventListener("mouseout", () => { |
|
if (!menu.classList.contains("visible")) { |
|
iconImage.src = ICON_URL_DEFAULT; |
|
} |
|
}); |
|
controlIcon.addEventListener("click", (e) => { |
|
e.stopPropagation(); |
|
menu.classList.toggle("visible"); |
|
if (menu.classList.contains("visible")) { |
|
iconImage.src = ICON_URL_ACTIVE; |
|
} else { |
|
iconImage.src = ICON_URL_DEFAULT; |
|
} |
|
}); |
|
document.addEventListener("click", () => { |
|
if (menu.classList.contains("visible")) { |
|
menu.classList.remove("visible"); |
|
iconImage.src = ICON_URL_DEFAULT; |
|
} |
|
}); |
|
menu.addEventListener("click", (e) => e.stopPropagation()); |
|
|
|
accioGoogleMeetToggle.addEventListener("change", () => { |
|
settings.enableAccioGoogleMeet = accioGoogleMeetToggle.checked; |
|
updateAndSaveSettings(); |
|
}); |
|
accioGeminiNotesToggle.addEventListener("change", () => { |
|
settings.enableAccioGeminiNotes = accioGeminiNotesToggle.checked; |
|
if (!settings.enableAccioGeminiNotes) { |
|
settings.takeNotesOnlyWhenHost = false; |
|
} |
|
updateAndSaveSettings(); |
|
}); |
|
hostToggle.addEventListener("change", () => { |
|
settings.takeNotesOnlyWhenHost = hostToggle.checked; |
|
updateAndSaveSettings(); |
|
}); |
|
} |
|
|
|
async function updateAndSaveSettings() { |
|
await GM_setValue("accioSettings", settings); |
|
console.log("Accio: Settings updated.", settings); |
|
const controlIcon = document.getElementById("accio-control-icon"); |
|
if (controlIcon) { |
|
const hostRow = document.getElementById("accio-toggle-host-row"); |
|
document.getElementById("accio-toggle-google-meet").checked = |
|
settings.enableAccioGoogleMeet; |
|
document.getElementById("accio-toggle-gemini-notes").checked = |
|
settings.enableAccioGeminiNotes; |
|
document.getElementById("accio-toggle-host").checked = |
|
settings.takeNotesOnlyWhenHost; |
|
if (settings.enableAccioGeminiNotes) { |
|
hostRow.classList.remove("disabled-row"); |
|
} else { |
|
hostRow.classList.add("disabled-row"); |
|
} |
|
controlIcon.classList.toggle( |
|
"disabled", |
|
!settings.enableAccioGoogleMeet && !settings.enableAccioGeminiNotes |
|
); |
|
} |
|
} |
|
|
|
async function loadInitialState() { |
|
const defaultSettings = { |
|
enableAccioGoogleMeet: true, |
|
enableAccioGeminiNotes: true, |
|
takeNotesOnlyWhenHost: false, |
|
}; |
|
const savedSettings = await GM_getValue("accioSettings", defaultSettings); |
|
settings = { ...defaultSettings, ...savedSettings }; |
|
updateAndSaveSettings(); |
|
} |
|
|
|
function findElementBySelectors(selectors) { |
|
for (const selector of selectors) { |
|
const element = document.querySelector(selector); |
|
if (element) return element; |
|
} |
|
return null; |
|
} |
|
|
|
// ================================================================================= |
|
// DOMAIN-SPECIFIC LOGIC |
|
// ================================================================================= |
|
|
|
function runCalendarObserver() { |
|
console.log("Accio: Initializing on Google Calendar..."); |
|
const observer = new MutationObserver((mutations) => { |
|
if (!settings.enableAccioGoogleMeet) return; |
|
for (const mutation of mutations) { |
|
for (const node of mutation.addedNodes) { |
|
if (!(node instanceof HTMLElement)) continue; |
|
const spans = node.querySelectorAll("span"); |
|
for (const span of spans) { |
|
if ( |
|
calendarAddGoogleMeetVideoConferencingButtonTexts.some((text) => |
|
span.innerText.includes(text) |
|
) |
|
) { |
|
const addGoogleMeetVideoConferencingButton = |
|
span.closest("button"); |
|
if (addGoogleMeetVideoConferencingButton) { |
|
console.log( |
|
"Accio: Found and clicked 'Add Google Meet video conferencing' button." |
|
); |
|
addGoogleMeetVideoConferencingButton.click(); |
|
return; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
}); |
|
observer.observe(document.body, { subtree: true, childList: true }); |
|
} |
|
|
|
function runMeetObserver() { |
|
console.log("Accio: Initializing on Google Meet (silent mode)..."); |
|
let clickTimerId = null; // Holds the timer for the debounced click |
|
|
|
const observer = new MutationObserver((mutations, obs) => { |
|
if (!settings.enableAccioGeminiNotes) { |
|
obs.disconnect(); |
|
return; |
|
} |
|
|
|
// --- NEW RESILIENT LOGIC --- |
|
|
|
// Check for the final button first. This is our highest priority. |
|
const startTakingNotesButton = findElementBySelectors( |
|
meetStartTakingNotesButtonSelectors |
|
); |
|
if (startTakingNotesButton) { |
|
// If host is required, perform the check NOW, right before we act. |
|
if (settings.takeNotesOnlyWhenHost) { |
|
const hostControlsButton = findElementBySelectors( |
|
hostControlButtonSelectors |
|
); |
|
if (!hostControlsButton) { |
|
// Button is visible, but host controls aren't yet. Be patient and wait for the next mutation. |
|
return; |
|
} |
|
} |
|
|
|
// Conditions met. Debounce the click. |
|
clearTimeout(clickTimerId); |
|
clickTimerId = setTimeout(() => { |
|
console.log( |
|
`Accio: Debounce timer finished. Clicking the 'Start notes' button.` |
|
); |
|
startTakingNotesButton.click(); |
|
obs.disconnect(); // This is the only place the observer stops. |
|
}, MEET_CLICK_DEBOUNCE_MS); |
|
return; |
|
} |
|
|
|
// If the final button isn't found, check for the pencil button. |
|
const pencilButton = findElementBySelectors(meetPencilButtonSelectors); |
|
if (pencilButton) { |
|
if (clickTimerId) return; // A click is already scheduled, do nothing. |
|
|
|
// If host is required, perform the check NOW, before clicking the pencil. |
|
if (settings.takeNotesOnlyWhenHost) { |
|
const hostControlsButton = findElementBySelectors( |
|
hostControlButtonSelectors |
|
); |
|
if (!hostControlsButton) { |
|
// Pencil is visible, but host controls aren't yet. Wait for the next mutation. |
|
return; |
|
} |
|
} |
|
|
|
// Conditions met. Click the pencil button to reveal the menu. |
|
console.log("Accio: Pencil button found. Clicking to reveal menu."); |
|
pencilButton.click(); |
|
} |
|
}); |
|
observer.observe(document.body, { childList: true, subtree: true }); |
|
} |
|
|
|
// ================================================================================= |
|
// INITIALIZATION ROUTER |
|
// ================================================================================= |
|
|
|
async function initialize() { |
|
await loadInitialState(); |
|
const hostname = window.location.hostname; |
|
if (hostname === "calendar.google.com") { |
|
setupStyles(); |
|
createUI(); |
|
updateAndSaveSettings(); |
|
runCalendarObserver(); |
|
} else if (hostname === "meet.google.com") { |
|
runMeetObserver(); |
|
} |
|
} |
|
|
|
initialize(); |
|
})(); |