跳到內容

日曆與排程

Control Center 會連線至 Google Calendar,讓你的行程與機群並列呈現。它會同步 你的活動,以月、週、日與議程檢視顯示,在會議開始前提醒你,並將任何活動變成 已錄製、已摘要的會議。

幾乎不做任何變更。這項整合只會拉入活動並顯示。它不會建立、編輯、刪除或回覆 邀請。每一次裝置代碼連線,無論是內建或自備,都會要求 calendar.readonly 加上 openid email。

活動會同步到工作區自己的資料庫——在伺服器上 (<dataDir>/<workspaceId>/workspace.db)——並由每個用戶端透過 RPC 顯示。 沒有任何用戶端會保存 Google 憑證。

日曆帳戶與 Control Center 中的其他一切一樣,都以工作區為範圍。每個 工作區會連接自己的 Google 帳戶(或數個),而某個 工作區的活動與權杖永遠不會從另一個工作區看到。切換工作區就會切換你看到的 日曆。

一個工作區可以連接多個 Google 帳戶,例如工作帳戶與個人帳戶,它們的活動 會合併到相同的檢視中。

無介面的 cc_server 沒有瀏覽器可以接收 OAuth 重新導向。因此它不使用重新 導向:它採用裝置代碼授權(RFC 8628)。伺服器會顯示一組簡短的使用者代碼 與一個 Google 網址,你在任何有瀏覽器的裝置上核准,伺服器會持續輪詢直到你 完成為止。無介面安裝之所以能連接帳戶,正是因為它不必架設重新導向端點。

在你自備憑證之前必須知道的後果:用戶端類型必須是 Google 的 「TV and Limited Input devices」。Google 只會把允許清單中的範圍授予該用戶端 類型,若某個專案不允許日曆使用該類型,就會以 invalid_scope 失敗——這時你 需要改用回送或網頁用戶端。

權杖永遠不會離開伺服器。它們會寫入伺服器資料目錄中的 secrets.json,鍵值 為 google_google:<workspaceId>:<email>,與資料庫放在一起,並處於相同的 主機檔案系統信任邊界內。伺服器會自動重新整理存取權,而當 Google 永久使某個 帳戶失效時(工作階段遭撤銷或長期過期),會發佈 CalendarAuthExpired 並顯示 重新連線橫幅,而不是默默失敗。

從原始碼建置的版本完全不會隨附 Google 憑證——你要提供自己的用戶端 ID 與密鑰。官方發行版本會內建一個非機密的裝置代碼用戶端,讓連線流程開箱即用; 伺服器只會儲存指向它的標記,絕不儲存副本。環境中的 GOOGLE_OAUTH_CLIENT_ID(及其密鑰)一律優先於內建的組合。這裡刻意不提供 --google-client-id 旗標:未知的旗標會被忽略,而命令列上的密鑰可透過 ps 讀取。

若要執行你自己的 Google 專案,請參閱 連接 Google Calendar。

伺服器會以滾動視窗拉取每個已連接帳戶的活動——帳戶上的每個日曆,而不只是 主要日曆——每兩分鐘一次,另外也會視需要拉取(啟動、連接、手動重新 整理)。這麼短的週期仍可負擔,是因為掃描是增量進行的:每個日曆都有自己的 同步權杖,因此未變更的日曆只需一次幾乎空白的回應,而不必重新擷取五個月的 視窗。

週期性活動會在伺服器端展開,因此沒有任何用戶端需要解析週期規則。瀏覽到目前 視窗以外的月份時,會延遲載入該範圍。已刪除或移出範圍的活動會在下次同步時 對帳清除。

檢視 顯示內容
月 完整的月份格狀檢視(由 kalender 套件提供)
週 一週的計時活動,以時間格狀顯示
日 單一日的計時活動,以時間格狀顯示
議程 可捲動的即將到來活動清單

在 /calendar 開啟日曆;選取活動會在其詳細資料頁 /calendar/:eventId 開啟。 你選擇的檢視會儲存在該用戶端自己的偏好設定中,因此不會跟著你到其他裝置。

每分鐘執行一次的排程器會掃描在可設定的提前時間範圍內即將開始的活動,並發出 「會議即將開始」 通知(一個 MeetingStartingSoon 領域事件)。若有加入網址,通知會帶著它,點一下 即可開啟活動詳細資料。提醒會依活動的 alertedAt 去除重複,因此同一場會議 永遠不會提醒兩次——即使經過重新啟動亦然;而在應用程式關閉期間已開始的活動 也永遠不會補發提醒。

有兩項限制很容易踩到。排程器在桌面版的用戶端執行,而且只針對你目前 已開啟的工作區——你不在其中的工作區不會發出任何提醒。而網頁版完全沒有作業 系統通知的管道,因此也不會發出任何提醒。

你可以從日曆活動開始一場會議錄製,並以該活動的 標題作為初始標題。Control Center 會在錄製與活動之間儲存一對一的連結,因此 會議筆記與日曆項目會保持關聯,而兩個功能都不必依賴對方。

開始錄製並連結僅限桌面版。在網頁用戶端上,此動作會回報無法錄製——即使 會議畫面本身的錄製流程在瀏覽器中確實可用。