Lewati ke konten

Kalender dan penjadwalan

Control Center terhubung ke Google Calendar agar hari Anda berdampingan dengan armada Anda. Ia menyinkronkan acara Anda, menampilkannya dalam tampilan bulan, minggu, hari dan agenda, memperingatkan Anda sebelum rapat dimulai dan mengubah acara apa pun menjadi rapat yang direkam dan diringkas.

Hampir tidak ada. Integrasi ini menarik acara masuk lalu merendernya. Ia tidak membuat, mengubah, menghapus, atau menanggapi undangan. Setiap koneksi kode perangkat, baik bawaan maupun milik Anda sendiri, meminta calendar.readonly plus openid email.

Acara disinkronkan ke basis data milik ruang kerja itu sendiri di server (<dataDir>/<workspaceId>/workspace.db) dan dirender oleh setiap klien melalui RPC. Tidak ada klien yang memegang kredensial Google.

Akun kalender dibatasi per ruang kerja, seperti semua hal lain di Control Center. Setiap ruang kerja menghubungkan akun Google-nya sendiri (atau beberapa akun) dan acara serta token satu ruang kerja tidak pernah terlihat dari ruang kerja lain. Berpindah ruang kerja berarti berpindah kalender yang Anda lihat.

Sebuah ruang kerja dapat menghubungkan beberapa akun Google, misalnya akun kantor dan akun pribadi, dan acara keduanya digabungkan ke tampilan yang sama.

cc_server headless tidak punya peramban untuk menangkap pengalihan OAuth. Karena itu ia tidak memakainya: ia mengotorisasi dengan hibah kode perangkat (RFC 8628). Server menampilkan kode pengguna yang pendek dan URL Google, Anda menyetujuinya di perangkat mana pun yang memiliki peramban dan server melakukan polling sampai Anda menyetujuinya. Instalasi headless dapat menghubungkan akun justru karena tidak ada endpoint pengalihan yang perlu dihosting.

Konsekuensi yang perlu Anda ketahui sebelum membawa kredensial sendiri: jenis klien harus “TV and Limited Input devices” milik Google. Google hanya memberikan sekumpulan scope yang ada di daftar izin kepada jenis klien itu dan proyek yang tidak mengizinkan Calendar untuknya akan gagal dengan invalid_scope — Anda malah memerlukan klien loopback atau web sebagai gantinya.

Token tidak pernah meninggalkan server. Token ditulis ke secrets.json milik server di direktori datanya, dengan kunci google_google:<workspaceId>:<email>, berdampingan dengan basis data dan di bawah batas kepercayaan sistem berkas host yang sama. Server menyegarkan akses secara otomatis dan, ketika Google membatalkan sebuah akun secara permanen (sesi yang dicabut atau sudah lama kedaluwarsa), ia menerbitkan CalendarAuthExpired dan menampilkan banner hubungkan ulang alih-alih gagal secara diam-diam.

Build dari sumber sama sekali tidak menyertakan kredensial Google — Anda memasok client id dan secret milik Anda sendiri. Build rilis resmi menyematkan klien kode perangkat non-konfidensial agar alur koneksi langsung berfungsi; server hanya menyimpan penanda yang merujuknya, tidak pernah salinannya. GOOGLE_OAUTH_CLIENT_ID (beserta secret-nya) di lingkungan selalu diutamakan di atas pasangan yang disematkan. Sengaja tidak ada flag --google-client-id: flag yang tidak dikenal akan diabaikan, dan secret pada baris perintah dapat dibaca melalui ps.

Untuk menjalankan proyek Google Anda sendiri, lihat Hubungkan Google Calendar.

Server menarik jendela bergulir berisi acara setiap akun yang terhubung — setiap kalender pada akun itu, bukan hanya kalender utama — setiap dua menit, plus saat diminta (mulai, menghubungkan, penyegaran manual). Irama yang singkat ini terjangkau karena penyapuannya bersifat inkremental: setiap kalender membawa token sinkronisasinya sendiri, sehingga kalender yang tidak berubah hanya memerlukan satu respons yang hampir kosong alih-alih mengambil ulang jendela lima bulan.

Acara berulang dijabarkan di sisi server, sehingga tidak ada klien yang mengurai aturan pengulangan. Menavigasi ke bulan di luar jendela saat ini memuat rentang itu hanya saat dibutuhkan. Acara yang dihapus atau dipindahkan ke luar rentang direkonsiliasi pada sinkronisasi berikutnya.

Tampilan Isinya
Bulan Kisi sebulan penuh (ditenagai oleh paket kalender)
Minggu Acara berjadwal seminggu dalam kisi waktu
Hari Acara berjadwal satu hari dalam kisi waktu
Agenda Daftar acara mendatang yang dapat digulir

Buka kalender di /calendar; memilih acara akan membuka detailnya di /calendar/:eventId. Tampilan yang Anda pilih disimpan di preferensi klien itu sendiri, jadi ia tidak mengikuti Anda ke perangkat lain.

Penjadwal per menit memindai acara yang mulai dalam jendela pendahulu yang dapat dikonfigurasi dan memicu notifikasi “rapat segera dimulai” (sebuah peristiwa domain MeetingStartingSoon). Notifikasi membawa URL bergabung bila ada dan mengkliknya akan membuka detail acara. Peringatan dideduplikasi terhadap alertedAt milik acara, sehingga rapat yang sama tidak pernah memberi peringatan dua kali, bahkan setelah mulai ulang, dan acara yang waktu mulainya sudah lewat saat aplikasi ditutup tidak pernah diputar ulang.

Ada dua batas yang mudah membuat Anda keliru. Penjadwal berjalan di sisi klien pada desktop dan hanya untuk ruang kerja yang sedang Anda buka — ruang kerja yang tidak Anda buka tidak memunculkan peringatan. Dan build web sama sekali tidak memiliki pipeline notifikasi OS, jadi ia juga tidak memunculkan peringatan.

Dari acara kalender Anda dapat memulai rekaman rapat yang diisi dengan judul acara. Control Center menyimpan tautan satu-ke-satu antara rekaman dan acara, sehingga catatan rapat dan entri kalender tetap terhubung tanpa salah satu fitur bergantung pada yang lain.

Mulai rekaman & tautkan hanya tersedia di desktop. Pada klien web, tindakan itu melaporkan bahwa perekaman tidak tersedia — padahal alur perekaman di layar rapat sendiri memang berfungsi di peramban.