Hoppa till innehåll

Kalender och schemaläggning

Control Center ansluter till Google Calendar så att din dag finns sida vid sida med din flotta. Det synkar dina händelser, visar dem i vyerna månad, vecka, dag och agenda, varnar dig innan ett möte börjar och gör vilken händelse som helst till ett inspelat, sammanfattat möte.

Nästan ingenting. Integrationen hämtar in händelser och renderar dem. Den skapar, redigerar eller tar inte bort något och svarar inte på inbjudningar. Varje device-code-anslutning, inbyggd eller med egna uppgifter, begär calendar.readonly plus openid email.

Händelser synkas till arbetsytans egen databas på servern (<dataDir>/<workspaceId>/workspace.db) och renderas av varje klient över RPC. Ingen klient håller några Google-autentiseringsuppgifter.

Kalenderkonton hör till arbetsytan, precis som allt annat i Control Center. Varje arbetsyta ansluter sitt eget Google-konto (eller flera), och en arbetsytas händelser och tokens är aldrig synliga från en annan. Att byta arbetsyta byter vilka kalendrar du ser.

En arbetsyta kan ansluta flera Google-konton, till exempel ett jobbkonto och ett privat, och deras händelser slås samman i samma vyer.

cc_server körs headless och har ingen webbläsare som kan fånga en OAuth-omdirigering. Därför använder den ingen: den auktoriserar med device-code-bidraget (RFC 8628). Servern visar en kort användarkod och en Google-URL, du godkänner på valfri enhet med webbläsare och servern pollar tills du gör det. En headless installation kan ansluta ett konto just för att det inte finns någon omdirigeringsändpunkt att vara värd för.

Konsekvensen du bör känna till innan du tar med egna autentiseringsuppgifter: klienttypen måste vara Googles “TV and Limited Input devices”. Google beviljar bara en fördefinierad uppsättning tillåtna omfattningar för den klienttypen, och ett projekt där Calendar inte är tillåtet för den klienttypen misslyckas med invalid_scope — du skulle i stället behöva en loopback- eller webbklient.

Token lämnar aldrig servern. De skrivs till serverns secrets.json i dess datakatalog, med nyckeln google_google:<workspaceId>:<email>, tillsammans med databaserna och under samma förtroendegräns som värdfilsystemet. Servern förnyar åtkomsten automatiskt och publicerar CalendarAuthExpired när Google ogiltigförklarar ett konto permanent (en återkallad eller länge sedan utgången session), och visar en Återanslut-banderoll i stället för att misslyckas tyst.

Ett bygge från källkod levereras utan några Google-autentiseringsuppgifter alls — du står själv för klient-ID och hemlighet. Officiella releasebyggen har en inbakad icke-konfidentiell device-code-klient så att anslutningsflödet fungerar direkt; servern lagrar bara en markör som refererar till den, aldrig en kopia. GOOGLE_OAUTH_CLIENT_ID (och dess hemlighet) i miljön har alltid företräde framför det inbakade paret. Det finns medvetet ingen flagga för --google-client-id: okända flaggor ignoreras, och en hemlighet på en kommandorad går att läsa via ps.

För att köra ett eget Google-projekt, se Anslut en Google Calendar.

Servern hämtar ett rullande fönster med händelser från varje anslutet konto — varje kalender på kontot, inte bara den primära — varannan minut, plus vid behov (start, anslutning, manuell uppdatering). Den korta frekvensen är överkomlig eftersom genomsökningen är inkrementell: varje kalender har sin egen synktoken, så en oförändrad kalender kostar ett nästan tomt svar i stället för att hämta om ett fem månader långt fönster.

Återkommande händelser expanderas på serversidan, så ingen klient tolkar någonsin en återkommregel. Att navigera till en månad utanför det aktuella fönstret läser in det intervallet först när det behövs. Borttagna händelser, eller händelser som flyttats utanför intervallet, rensas bort vid nästa synk.

Vy Vad den visar
Månad Ett fullständigt månadsrutnät (drivs av paketet kalender)
Vecka En veckas tidsatta händelser i ett tidsrutnät
Dag En enskild dags tidsatta händelser i ett tidsrutnät
Agenda En rullningsbar lista över kommande händelser

Öppna kalendern på /calendar; om du väljer en händelse öppnas dess detaljer på /calendar/:eventId. Vyn du väljer sparas i just den klientens egna inställningar, så den följer inte med till en annan enhet.

En schemaläggare som körs en gång i minuten letar efter händelser som börjar inom ett konfigurerbart tidsfönster före start och skickar en “Mötet börjar snart”-avisering (en MeetingStartingSoon domänhändelse). Aviseringen innehåller anslutnings-URL:en när en sådan finns, och ett klick på den öppnar händelsens detaljer. Aviseringar avdubbletteras mot händelsens alertedAt, så samma möte aviseras aldrig två gånger, ens över omstarter, och en händelse vars start passerade medan appen var stängd spelas aldrig upp igen.

Det är lätt att snubbla på två begränsningar. Schemaläggaren körs klientsidigt på skrivbordet och bara för arbetsytan du just nu har öppen — en arbetsyta du inte är i skickar ingen avisering. Och webbbygget har ingen pipeline för OS-aviseringar alls, så det skickar inte heller några.

Från en kalenderhändelse kan du starta en mötesinspelning med händelsens titel som utgångspunkt. Control Center lagrar en en-till-en-koppling mellan inspelningen och händelsen, så mötets anteckningar och kalenderposten förblir kopplade utan att någon av funktionerna är beroende av den andra.

Starta inspelning och länka finns bara på skrivbordet. I webbklienten meddelar åtgärden att inspelning inte är tillgänglig — även om mötesskärmens eget inspelningsflöde faktiskt fungerar i webbläsaren.