Μετάβαση στο περιεχόμενο

Ημερολόγιο και προγραμματισμός

Το Control Center συνδέεται με το Google Calendar, ώστε η μέρα σας να βρίσκεται δίπλα στον στόλο σας. Συγχρονίζει τα συμβάντα σας, τα εμφανίζει σε προβολές μήνα, εβδομάδας, ημέρας και ατζέντας, σας προειδοποιεί πριν ξεκινήσει μια σύσκεψη και μετατρέπει κάθε συμβάν σε καταγεγραμμένη, συνοψισμένη σύσκεψη.

Σχεδόν τίποτα. Η ενσωμάτωση αντλεί συμβάντα και τα αποδίδει. Δεν δημιουργεί, δεν επεξεργάζεται, δεν διαγράφει ούτε απαντά σε προσκλήσεις. Κάθε σύνδεση με κωδικό συσκευής, ενσωματωμένη ή δική σας, ζητά τα δικαιώματα calendar.readonly και openid email.

Τα συμβάντα συγχρονίζονται στη βάση δεδομένων του ίδιου του χώρου εργασίας στον διακομιστή (<dataDir>/<workspaceId>/workspace.db) και αποδίδονται από κάθε πελάτη μέσω RPC. Κανένας πελάτης δεν κρατά διαπιστευτήριο Google.

Οι λογαριασμοί ημερολογίου έχουν εμβέλεια χώρου εργασίας, όπως και όλα τα άλλα στο Control Center. Κάθε χώρος εργασίας συνδέει τον δικό του λογαριασμό Google (ή περισσότερους) και τα συμβάντα και τα token ενός χώρου εργασίας δεν είναι ποτέ ορατά από άλλον. Η εναλλαγή χώρου εργασίας αλλάζει και ποια ημερολόγια βλέπετε.

Ένας χώρος εργασίας μπορεί να συνδέσει πολλούς λογαριασμούς Google, όπως έναν επαγγελματικό και έναν προσωπικό, και τα συμβάντα τους συγχωνεύονται στις ίδιες προβολές.

Γιατί η σύνδεση γίνεται με κωδικό συσκευής

Ενότητα με τίτλο «Γιατί η σύνδεση γίνεται με κωδικό συσκευής»

Ο headless cc_server δεν έχει πρόγραμμα περιήγησης για να πιάσει μια ανακατεύθυνση OAuth. Επομένως δεν χρησιμοποιεί καμία: εξουσιοδοτείται με την εκχώρηση κωδικού συσκευής (RFC 8628). Ο διακομιστής εμφανίζει έναν σύντομο κωδικό χρήστη και ένα URL της Google, εσείς εγκρίνετε από οποιαδήποτε συσκευή διαθέτει πρόγραμμα περιήγησης και ο διακομιστής ερωτά επανειλημμένα μέχρι να το κάνετε. Μια εγκατάσταση χωρίς διεπαφή μπορεί να συνδέσει λογαριασμό ακριβώς επειδή δεν υπάρχει τελικό σημείο ανακατεύθυνσης για φιλοξενία.

Η συνέπεια που πρέπει να γνωρίζετε πριν φέρετε τα δικά σας διαπιστευτήρια: ο τύπος πελάτη πρέπει να είναι «TV and Limited Input devices» της Google. Η Google παραχωρεί μόνο έναν κατάλογο επιτρεπόμενων δικαιωμάτων σε αυτόν τον τύπο πελάτη και ένα έργο όπου το Calendar δεν επιτρέπεται για αυτόν αποτυγχάνει με invalid_scope — θα χρειαζόσασταν αντ’ αυτού πελάτη loopback ή web.

Τα token δεν φεύγουν ποτέ από τον διακομιστή. Γράφονται στο secrets.json του διακομιστή, στον κατάλογο δεδομένων του, με κλειδιά google_google:<workspaceId>:<email>, δίπλα στις βάσεις δεδομένων και κάτω από το ίδιο όριο εμπιστοσύνης του συστήματος αρχείων του κεντρικού υπολογιστή. Ο διακομιστής ανανεώνει την πρόσβαση αυτόματα και, όταν η Google ακυρώσει οριστικά έναν λογαριασμό (ανακλημένη ή επί μακρόν ληγμένη συνεδρία), δημοσιεύει το CalendarAuthExpired και εμφανίζει ένα πλαίσιο επανασύνδεσης αντί να αποτυγχάνει σιωπηλά.

Μια έκδοση από τον πηγαίο κώδικα δεν περιλαμβάνει κανένα διαπιστευτήριο Google — τα δικά σας client id και secret τα παρέχετε εσείς. Οι επίσημες εκδόσεις ενσωματώνουν έναν μη εμπιστευτικό πελάτη κωδικού συσκευής, ώστε η ροή σύνδεσης να λειτουργεί αμέσως· ο διακομιστής αποθηκεύει μόνο έναν δείκτη που τον αναφέρει, ποτέ αντίγραφό του. Το GOOGLE_OAUTH_CLIENT_ID (και το secret του) στο περιβάλλον υπερισχύει πάντα του ενσωματωμένου ζεύγους. Σκόπιμα δεν υπάρχει flag --google-client-id: τα άγνωστα flags αγνοούνται και ένα secret σε γραμμή εντολών είναι αναγνώσιμο μέσω ps.

Για να τρέξετε το δικό σας έργο Google, δείτε Σύνδεση Google Calendar.

Ο διακομιστής αντλεί ένα κυλιόμενο παράθυρο συμβάντων κάθε συνδεδεμένου λογαριασμού — κάθε ημερολόγιο του λογαριασμού, όχι μόνο το κύριο — κάθε δύο λεπτά, καθώς και κατ’ απαίτηση (εκκίνηση, σύνδεση, χειροκίνητη ανανέωση). Η σύντομη συχνότητα είναι προσιτή επειδή η σάρωση είναι επαυξητική: κάθε ημερολόγιο φέρει το δικό του token συγχρονισμού, οπότε ένα αμετάβλητο ημερολόγιο κοστίζει μία σχεδόν κενή απάντηση αντί να ανακτά ξανά ένα παράθυρο πέντε μηνών.

Τα επαναλαμβανόμενα συμβάντα επεκτείνονται στον διακομιστή, ώστε κανένας πελάτης να μην αναλύει ποτέ κανόνα επανάληψης. Η μετάβαση σε έναν μήνα εκτός του τρέχοντος παραθύρου φορτώνει αργά αυτό το εύρος. Τα συμβάντα που διαγράφηκαν ή μετακινήθηκαν εκτός εύρους συμβιβάζονται και αφαιρούνται κατά τον επόμενο συγχρονισμό.

Προβολή Τι εμφανίζει
Μήνας Ένα πλήρες πλέγμα μήνα (με το πακέτο kalender)
Εβδομάδα Τα συμβάντα μιας εβδομάδας με ώρα σε πλέγμα χρόνου
Ημέρα Τα συμβάντα μιας ημέρας με ώρα σε πλέγμα χρόνου
Ατζέντα Μια λίστα με δυνατότητα κύλισης για επερχόμενα συμβάντα

Ανοίξτε το ημερολόγιο στο /calendar· η επιλογή ενός συμβάντος ανοίγει τη λεπτομέρειά του στο /calendar/:eventId. Η προβολή που επιλέγετε αποθηκεύεται στις προτιμήσεις του ίδιου του πελάτη, οπότε δεν σας ακολουθεί σε άλλη συσκευή.

Ένας χρονοπρογραμματιστής που τρέχει κάθε λεπτό σαρώνει για συμβάντα που ξεκινούν εντός ενός διαμορφώσιμου παραθύρου προειδοποίησης και εκπέμπει μια ειδοποίηση «Η σύσκεψη ξεκινά σύντομα» (ένα MeetingStartingSoon γεγονός τομέα). Η ειδοποίηση φέρει το URL συμμετοχής όταν υπάρχει και το κλικ σε αυτήν ανοίγει τη λεπτομέρεια του συμβάντος. Οι ειδοποιήσεις αποδιπλοποιούνται με βάση το alertedAt του συμβάντος, οπότε η ίδια σύσκεψη δεν ειδοποιεί ποτέ δύο φορές, ακόμη και μετά από επανεκκινήσεις, και ένα συμβάν του οποίου η έναρξη πέρασε όσο η εφαρμογή ήταν κλειστή δεν αναπαράγεται ποτέ.

Δύο όρια ξεπερνιούνται εύκολα κατά λάθος. Ο χρονοπρογραμματιστής εκτελείται στην πλευρά του πελάτη, στην επιφάνεια εργασίας και μόνο για τον χώρο εργασίας που έχετε ανοιχτό αυτή τη στιγμή — ένας χώρος εργασίας στον οποίο δεν βρίσκεστε δεν εκπέμπει καμία ειδοποίηση. Και η έκδοση για ιστό δεν έχει καθόλου δίοδο ειδοποιήσεων του λειτουργικού συστήματος, οπότε δεν εκπέμπει καμία.

Από ένα συμβάν ημερολογίου μπορείτε να ξεκινήσετε μια καταγραφή σύσκεψης με αρχικό τίτλο αυτόν του συμβάντος. Το Control Center αποθηκεύει μια σχέση ένα προς ένα μεταξύ της καταγραφής και του συμβάντος, ώστε οι σημειώσεις της σύσκεψης και η καταχώριση του ημερολογίου να μένουν συνδεδεμένες χωρίς καμία από τις δύο λειτουργίες να εξαρτάται από την άλλη.

Η Έναρξη εγγραφής και σύνδεση είναι διαθέσιμη μόνο στην επιφάνεια εργασίας. Στον πελάτη ιστού η ενέργεια αναφέρει ότι η καταγραφή δεν είναι διαθέσιμη — ακόμη και αν η δική της ροή καταγραφής στην οθόνη συσκέψεων λειτουργεί στο πρόγραμμα περιήγησης.