مواد پر جائیں

کیلنڈر اور شیڈولنگ

Control Center Google Calendar سے جڑتا ہے تاکہ آپ کا دن آپ کے فلیٹ کے ساتھ ساتھ رہے۔ یہ آپ کے ایونٹس سنک کرتا ہے، اُنہیں مہینے، ہفتے، دن اور ایجنڈا ویوز میں دکھاتا ہے، میٹنگ شروع ہونے سے پہلے آپ کو خبردار کرتا ہے اور کسی بھی ایونٹ کو ریکارڈ شدہ اور خلاصہ شدہ میٹنگ میں بدل دیتا ہے۔

تقریباً کچھ بھی نہیں۔ یہ انضمام ایونٹس کھینچ کر لاتا ہے اور اُنہیں پیش کر دیتا ہے۔ یہ دعوت نامے نہ بناتا ہے، نہ اُن میں ترمیم یا حذف کرتا ہے اور نہ اُن کا جواب دیتا ہے۔ ہر ڈیوائس کوڈ کنیکٹ، بلٹ اِن ہو یا اپنا لایا ہوا، calendar.readonly کے ساتھ openid email طلب کرتا ہے۔

ایونٹس سرور پر ورک اسپیس کے اپنے ڈیٹا بیس میں سنک ہوتے ہیں (<dataDir>/<workspaceId>/workspace.db) اور ہر کلائنٹ اُنہیں RPC کے ذریعے پیش کرتا ہے۔ کسی کلائنٹ کے پاس Google کی کوئی کریڈنشل نہیں ہوتی۔

کیلنڈر اکاؤنٹس ورک اسپیس تک محدود ہوتے ہیں، بالکل Control Center کی باقی ہر چیز کی طرح۔ ہر ورک اسپیس اپنا Google اکاؤنٹ (یا کئی اکاؤنٹس) جوڑتی ہے اور ایک ورک اسپیس کے ایونٹس اور ٹوکن کبھی دوسری سے نظر نہیں آتے۔ ورک اسپیس بدلنے پر وہی کیلنڈر بدلتے ہیں جو آپ دیکھتے ہیں۔

ایک ورک اسپیس کئی Google اکاؤنٹس جوڑ سکتی ہے، مثلاً کوئی کام کا اکاؤنٹ اور کوئی ذاتی، اور اُن کے ایونٹس ایک ہی ویوز میں ضم ہو جاتے ہیں۔

ہیڈلیس cc_server کے پاس کوئی براؤزر نہیں جو OAuth ری ڈائریکٹ لے سکے۔ اس لیے یہ اُسے استعمال نہیں کرتا: یہ ڈیوائس کوڈ گرانٹ (RFC 8628) سے اجازت لیتا ہے۔ سرور ایک مختصر یوزر کوڈ اور ایک Google URL دکھاتا ہے، آپ کسی بھی ایسے ڈیوائس پر منظوری دیتے ہیں جس میں براؤزر ہو اور سرور اُس وقت تک پول کرتا رہتا ہے۔ ہیڈلیس انسٹال اسی لیے اکاؤنٹ جوڑ سکتا ہے کہ میزبانی کے لیے کوئی ری ڈائریکٹ اینڈ پوائنٹ نہیں ہوتا۔

اپنی کریڈنشلز لانے سے پہلے جو نتیجہ جاننا ضروری ہے: کلائنٹ کی قسم Google کی “TV and Limited Input devices” ہونی چاہیے۔ Google اُس کلائنٹ قسم کو صرف پہلے سے منظور شدہ مخصوص اسکوپس عطا کرتا ہے اور جس پروجیکٹ میں Calendar اُس کے لیے اجازت یافتہ نہ ہو وہ invalid_scope کے ساتھ ناکام ہوتا ہے — اُس صورت میں آپ کو loopback یا web کلائنٹ درکار ہوگا۔

ٹوکن کبھی سرور سے باہر نہیں جاتے۔ یہ سرور کی ڈیٹا ڈائریکٹری میں secrets.json میں لکھے جاتے ہیں، google_google:<workspaceId>:<email> کلید کے ساتھ، ڈیٹا بیسز کے ساتھ ہی اور اُسی ہوسٹ فائل سسٹم اعتماد کی حد کے اندر۔ سرور رسائی خودکار طور پر ری فریش کرتا ہے اور جب Google کسی اکاؤنٹ کو مستقل طور پر باطل کر دیتا ہے (منسوخ یا بہت عرصے سے میعاد ختم شدہ سیشن)، تو CalendarAuthExpired شائع کرتا ہے اور خاموشی سے ناکام ہونے کے بجائے دوبارہ منسلک کریں بینر دکھاتا ہے۔

سورس سے بنایا گیا بلڈ کوئی Google کریڈنشل ساتھ نہیں لاتا — کلائنٹ id اور secret آپ خود دیتے ہیں۔ سرکاری ریلیز بلڈز میں ایک غیر رازدارانہ ڈیوائس کوڈ کلائنٹ شامل ہوتا ہے تاکہ کنیکٹ فلو فوراً کام کرے؛ سرور صرف اُس کی طرف اشارہ کرنے والا مارکر محفوظ کرتا ہے، اُس کی کاپی کبھی نہیں۔ ماحول میں GOOGLE_OAUTH_CLIENT_ID (اور اُس کا secret) ہمیشہ اندر شامل جوڑی پر فوقیت رکھتا ہے۔ جان بوجھ کر کوئی --google-client-id فلیگ نہیں ہے: نامعلوم فلیگز نظر انداز ہو جاتے ہیں، اور کمانڈ لائن پر موجود secret ps کے ذریعے پڑھا جا سکتا ہے۔

اپنا Google پروجیکٹ چلانے کے لیے Google Calendar جوڑیں دیکھیں۔

سرور ہر منسلک اکاؤنٹ کے ایونٹس کی ایک گھومتی ہوئی ونڈو کھینچتا ہے — اکاؤنٹ کے ہر کیلنڈر کی، صرف بنیادی کی نہیں — ہر دو منٹ بعد، اور ساتھ ہی طلب پر (آغاز، کنیکٹ، دستی ری فریش)۔ یہ مختصر وقفہ اِس لیے قابلِ برداشت ہے کہ یہ اسکین صرف بدلاؤ پر مشتمل ہوتا ہے: ہر کیلنڈر اپنا سنک ٹوکن رکھتا ہے، چنانچہ جو کیلنڈر نہ بدلا ہو اُس کی قیمت پانچ ماہ کی ونڈو دوبارہ لانے کے بجائے ایک تقریباً خالی جواب بنتی ہے۔

بار بار ہونے والے ایونٹس سرور کی طرف سے پھیلا دیے جاتے ہیں، اس لیے کوئی کلائنٹ کبھی recurrence rule پارس نہیں کرتا۔ موجودہ ونڈو سے باہر کے کسی مہینے پر جانے پر وہ رینج ضرورت پڑنے پر لوڈ ہوتی ہے۔ حذف شدہ یا رینج سے باہر منتقل ہو گئے ایونٹس اگلے سنک پر ہٹا دیے جاتے ہیں۔

ویو یہ کیا دکھاتا ہے
مہینہ پورے مہینے کا گرڈ (kalender پیکیج سے چلتا ہے)
ہفتہ ہفتے کے وقت والے ایونٹس ایک ٹائم گرڈ میں
دن ایک دن کے وقت والے ایونٹس ایک ٹائم گرڈ میں
ایجنڈا آنے والے ایونٹس کی اسکرول ہونے والی فہرست

کیلنڈر /calendar پر کھولیں؛ کسی ایونٹ کو منتخب کرنے سے اُس کی تفصیل /calendar/:eventId پر کھلتی ہے۔ آپ جو ویو چنتے ہیں وہ اُسی کلائنٹ کی اپنی ترجیحات میں محفوظ ہوتا ہے، لہٰذا وہ آپ کے ساتھ کسی دوسرے ڈیوائس پر نہیں جاتا۔

ہر منٹ چلنے والا شیڈیولر ایسے ایونٹس کو تلاش کرتا ہے جو قابلِ ترتیب لیڈ ونڈو کے اندر شروع ہونے والے ہوں اور “میٹنگ جلد شروع ہو رہی ہے” کی اطلاع بھیجتا ہے (ایک MeetingStartingSoon ڈومین ایونٹ)۔ اطلاع کے ساتھ جوائن URL بھی جاتا ہے جب وہ موجود ہو اور اُس پر کلک کرنے سے ایونٹ کی تفصیل کھلتی ہے۔ الرٹس ایونٹ کے alertedAt کے حساب سے ایک ہی بار بھیجے جاتے ہیں، اس لیے ایک ہی میٹنگ کبھی دو بار الرٹ نہیں کرتی، حتیٰ کہ ری اسٹارٹس کے دوران بھی، اور جس ایونٹ کا آغاز ایپ بند ہونے کے دوران گزر گیا ہو وہ کبھی دوبارہ نہیں چلتا۔

دو حدیں ایسی ہیں جن سے ٹکرانا آسان ہے۔ شیڈیولر ڈیسک ٹاپ پر کلائنٹ کی طرف چلتا ہے اور صرف اُس ورک اسپیس کے لیے جو اس وقت آپ کے پاس کھلی ہو — جس ورک اسپیس میں آپ نہیں ہیں وہ کوئی الرٹ نہیں دیتی۔ اور ویب بلڈ میں OS اطلاعات کی پائپ لائن بالکل نہیں ہوتی، اس لیے وہ بھی کوئی الرٹ نہیں دیتی۔

کیلنڈر ایونٹ سے آپ ایونٹ کے عنوان سے شروع ہونے والی میٹنگ ریکارڈنگ آغاز کر سکتے ہیں۔ Control Center ریکارڈنگ اور ایونٹ کے درمیان ایک کے ایک لنک محفوظ کرتا ہے، اس لیے میٹنگ کے نوٹس اور کیلنڈر اندراج جڑے رہتے ہیں، بغیر اِس کے کہ کوئی فیچر دوسرے پر منحصر ہو۔

ریکارڈنگ شروع کریں اور لنک کریں صرف ڈیسک ٹاپ پر ہے۔ ویب کلائنٹ پر یہ عمل بتاتا ہے کہ ریکارڈنگ دستیاب نہیں — حالانکہ میٹنگز اسکرین کا اپنا ریکارڈ فلو براؤزر میں کام کرتا ہے۔