Bỏ qua để đến nội dung

Lịch và lên lịch

Control Center kết nối với Google Calendar để ngày làm việc của bạn nằm cạnh đội máy của bạn. Nó đồng bộ sự kiện, hiển thị chúng ở chế độ xem tháng, tuần, ngày và lịch trình, cảnh báo bạn trước khi một cuộc họp bắt đầu và biến bất kỳ sự kiện nào thành một cuộc họp đã được ghi lại và tóm tắt.

Gần như không gì cả. Tích hợp này kéo sự kiện về và hiển thị chúng. Nó không tạo, sửa, xóa hay phản hồi lời mời. Mọi kết nối bằng mã thiết bị, dù là loại tích hợp sẵn hay do bạn tự cung cấp, đều yêu cầu calendar.readonly cùng openid email.

Sự kiện được đồng bộ vào cơ sở dữ liệu riêng của không gian làm việc trên máy chủ (<dataDir>/<workspaceId>/workspace.db) và được mọi máy khách hiển thị qua RPC. Không máy khách nào giữ thông tin xác thực Google.

Tài khoản lịch thuộc phạm vi không gian làm việc, giống mọi thứ khác trong Control Center. Mỗi không gian làm việc kết nối tài khoản Google riêng của mình (hoặc nhiều tài khoản), và sự kiện cùng token của một không gian làm việc không bao giờ hiển thị được từ không gian khác. Chuyển không gian làm việc là chuyển những lịch bạn nhìn thấy.

Một không gian làm việc có thể kết nối nhiều tài khoản Google, chẳng hạn một tài khoản công việc và một tài khoản cá nhân, và sự kiện của chúng được gộp vào cùng các chế độ xem.

cc_server không giao diện không có trình duyệt để bắt chuyển hướng OAuth. Nên nó không dùng cách đó: nó ủy quyền bằng cấp quyền mã thiết bị (RFC 8628). Máy chủ hiển thị một mã người dùng ngắn và một URL Google, bạn phê duyệt trên bất kỳ thiết bị nào có trình duyệt và máy chủ sẽ thăm dò cho đến khi bạn làm vậy. Một bản cài không giao diện có thể kết nối tài khoản chính là vì không có endpoint chuyển hướng nào để lưu trữ.

Hệ quả cần biết trước khi bạn tự cung cấp thông tin xác thực: loại máy khách phải là “TV and Limited Input devices” của Google. Google chỉ cấp một tập phạm vi nằm trong danh sách cho phép cho loại máy khách đó, và một dự án không được phép dùng Calendar cho loại máy khách này sẽ thất bại với invalid_scope — khi đó bạn cần dùng máy khách loopback hoặc web.

Token không bao giờ rời khỏi máy chủ. Chúng được ghi vào secrets.json của máy chủ trong thư mục dữ liệu của nó, với khóa google_google:<workspaceId>:<email>, nằm cạnh các cơ sở dữ liệu và trong cùng ranh giới tin cậy của hệ thống tệp máy chủ. Máy chủ tự động làm mới quyền truy cập và, khi Google vô hiệu hóa vĩnh viễn một tài khoản (phiên bị thu hồi hoặc hết hạn từ lâu), nó phát CalendarAuthExpired và hiện banner kết nối lại thay vì thất bại âm thầm.

Bản dựng từ mã nguồn không kèm thông tin xác thực Google nào — bạn tự cung cấp client id và secret của mình. Các bản phát hành chính thức nhúng sẵn một máy khách mã thiết bị không bí mật để luồng kết nối chạy được ngay; máy chủ chỉ lưu một dấu tham chiếu tới nó, không bao giờ lưu bản sao. GOOGLE_OAUTH_CLIENT_ID (và secret của nó) trong môi trường luôn được ưu tiên hơn cặp nhúng sẵn. Cố ý không có cờ --google-client-id: các cờ không rõ bị bỏ qua, và một secret trên dòng lệnh có thể bị đọc qua ps.

Để chạy dự án Google của riêng bạn, xem Kết nối Google Calendar.

Máy chủ kéo một cửa sổ trượt gồm sự kiện của mỗi tài khoản đã kết nối — mọi lịch trên tài khoản, không chỉ lịch chính — hai phút một lần, cùng với khi có yêu cầu (khởi động, kết nối, làm mới thủ công). Nhịp ngắn như vậy vẫn chấp nhận được vì lần quét là tăng dần: mỗi lịch mang token đồng bộ riêng, nên một lịch không thay đổi chỉ tốn một phản hồi gần như rỗng thay vì tải lại cả cửa sổ năm tháng.

Sự kiện lặp lại được mở rộng ở phía máy chủ, nên không máy khách nào phải phân tích quy tắc lặp. Khi bạn chuyển tới một tháng nằm ngoài cửa sổ hiện tại, khoảng đó được tải khi cần. Các sự kiện đã xóa hoặc đã chuyển ra ngoài phạm vi được đối chiếu và loại bỏ ở lần đồng bộ kế tiếp.

Chế độ xem Nội dung hiển thị
Tháng Lưới đầy đủ của một tháng (dùng gói kalender)
Tuần Các sự kiện có giờ trong một tuần, trên lưới thời gian
Ngày Các sự kiện có giờ trong một ngày, trên lưới thời gian
Lịch trình Danh sách cuộn được gồm các sự kiện sắp tới

Mở lịch tại /calendar; chọn một sự kiện sẽ mở trang chi tiết của nó tại /calendar/:eventId. Chế độ xem bạn chọn được lưu trong tùy chọn riêng của máy khách đó, nên nó không đi theo bạn sang thiết bị khác.

Một bộ lập lịch chạy mỗi phút quét các sự kiện bắt đầu trong khoảng báo trước có thể cấu hình và phát thông báo “cuộc họp sắp bắt đầu” (một sự kiện miền MeetingStartingSoon). Thông báo mang theo URL tham gia khi có, và nhấp vào nó sẽ mở trang chi tiết sự kiện. Cảnh báo được chống trùng lặp dựa trên alertedAt của sự kiện, nên cùng một cuộc họp không bao giờ cảnh báo hai lần, kể cả qua các lần khởi động lại, và một sự kiện có giờ bắt đầu trôi qua khi ứng dụng đang đóng cũng không bao giờ phát lại.

Có hai giới hạn dễ bị bỏ qua. Bộ lập lịch chạy ở phía máy khách trên máy tính để bàn và chỉ cho không gian làm việc bạn đang mở — một không gian bạn không ở trong đó sẽ không phát cảnh báo nào. Và bản web hoàn toàn không có luồng thông báo hệ điều hành, nên cũng không phát cảnh báo nào.

Từ một sự kiện lịch, bạn có thể bắt đầu một bản ghi cuộc họp được khởi tạo bằng tiêu đề của sự kiện. Control Center lưu một liên kết một-một giữa bản ghi và sự kiện, nên ghi chú của cuộc họp và mục lịch vẫn gắn với nhau mà không tính năng nào phụ thuộc vào tính năng kia.

Bắt đầu ghi & liên kết chỉ có trên máy tính để bàn. Trên máy khách web, hành động này báo rằng không thể ghi — dù luồng ghi của chính màn hình cuộc họp vẫn hoạt động trong trình duyệt.