@bobfrankston/gcal 0.1.20 → 0.1.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/gcal.d.ts +1 -2
- package/gcal.d.ts.map +1 -1
- package/gcal.js +302 -18
- package/gcal.js.map +1 -1
- package/gcal.ts +314 -19
- package/package.json +6 -3
package/gcal.d.ts
CHANGED
package/gcal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gcal.d.ts","sourceRoot":"","sources":["gcal.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"gcal.d.ts","sourceRoot":"","sources":["gcal.ts"],"names":[],"mappings":";AACA;;;;;;GAMG"}
|
package/gcal.js
CHANGED
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* Manage Google Calendar events with ICS import support
|
|
5
5
|
*
|
|
6
6
|
* Can be associated with .ics files for direct import:
|
|
7
|
-
* assoc
|
|
8
|
-
* ftype icsfile=gcal "%1"
|
|
7
|
+
* gcal assoc
|
|
9
8
|
*/
|
|
10
9
|
import fs from 'fs';
|
|
11
10
|
import path from 'path';
|
|
11
|
+
import { execSync } from 'child_process';
|
|
12
12
|
import { authenticateOAuth } from '@bobfrankston/oauthsupport';
|
|
13
13
|
import { CREDENTIALS_FILE, loadConfig, saveConfig, getUserPaths, ensureUserDir, formatDateTime, formatDuration, parseDuration, parseDateTime, ts, normalizeUser } from './glib/gutils.js';
|
|
14
14
|
const CALENDAR_API_BASE = 'https://www.googleapis.com/calendar/v3';
|
|
@@ -68,13 +68,15 @@ async function listCalendars(accessToken) {
|
|
|
68
68
|
const data = await res.json();
|
|
69
69
|
return data.items || [];
|
|
70
70
|
}
|
|
71
|
-
async function listEvents(accessToken, calendarId = 'primary', maxResults = 10, timeMin) {
|
|
71
|
+
async function listEvents(accessToken, calendarId = 'primary', maxResults = 10, timeMin, timeMax) {
|
|
72
72
|
const params = new URLSearchParams({
|
|
73
73
|
maxResults: maxResults.toString(),
|
|
74
74
|
singleEvents: 'true',
|
|
75
75
|
orderBy: 'startTime',
|
|
76
76
|
timeMin: timeMin || new Date().toISOString()
|
|
77
77
|
});
|
|
78
|
+
if (timeMax)
|
|
79
|
+
params.set('timeMax', timeMax);
|
|
78
80
|
const url = `${CALENDAR_API_BASE}/calendars/${encodeURIComponent(calendarId)}/events?${params}`;
|
|
79
81
|
const res = await apiFetch(url, accessToken);
|
|
80
82
|
if (!res.ok) {
|
|
@@ -103,6 +105,18 @@ async function deleteEvent(accessToken, eventId, calendarId = 'primary') {
|
|
|
103
105
|
throw new Error(`Failed to delete event: ${res.status} ${errText}`);
|
|
104
106
|
}
|
|
105
107
|
}
|
|
108
|
+
async function updateEvent(accessToken, eventId, body, calendarId = 'primary') {
|
|
109
|
+
const url = `${CALENDAR_API_BASE}/calendars/${encodeURIComponent(calendarId)}/events/${encodeURIComponent(eventId)}`;
|
|
110
|
+
const res = await apiFetch(url, accessToken, {
|
|
111
|
+
method: 'PATCH',
|
|
112
|
+
body: JSON.stringify(body)
|
|
113
|
+
});
|
|
114
|
+
if (!res.ok) {
|
|
115
|
+
const errText = await res.text();
|
|
116
|
+
throw new Error(`Failed to update event: ${res.status} ${errText}`);
|
|
117
|
+
}
|
|
118
|
+
return await res.json();
|
|
119
|
+
}
|
|
106
120
|
async function importIcsFile(filePath, accessToken, calendarId = 'primary') {
|
|
107
121
|
const ICAL = await import('ical.js');
|
|
108
122
|
const result = { imported: 0, errors: [] };
|
|
@@ -172,6 +186,39 @@ async function importIcsFile(filePath, accessToken, calendarId = 'primary') {
|
|
|
172
186
|
}
|
|
173
187
|
return result;
|
|
174
188
|
}
|
|
189
|
+
function setupFileAssociation() {
|
|
190
|
+
if (process.platform !== 'win32') {
|
|
191
|
+
console.error('File association is only supported on Windows.');
|
|
192
|
+
process.exit(1);
|
|
193
|
+
}
|
|
194
|
+
const classKey = 'HKCU\\Software\\Classes';
|
|
195
|
+
const command = `cmd.exe /c gcal "%1"`;
|
|
196
|
+
try {
|
|
197
|
+
execSync(`reg add "${classKey}\\.ics" /ve /d "gcalFile" /f`, { stdio: 'pipe' });
|
|
198
|
+
execSync(`reg add "${classKey}\\gcalFile\\shell\\open\\command" /ve /d "${command}" /f`, { stdio: 'pipe' });
|
|
199
|
+
console.log('.ics file association set — double-click any .ics to import via gcal');
|
|
200
|
+
}
|
|
201
|
+
catch (e) {
|
|
202
|
+
console.error(`Failed to set file association: ${e.message}`);
|
|
203
|
+
process.exit(1);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/** Clean up URLs — replace https URLs with [sitename] labels */
|
|
207
|
+
function cleanUrls(text) {
|
|
208
|
+
if (!text)
|
|
209
|
+
return text;
|
|
210
|
+
return text.replace(/https?:\/\/([^\/\s]+)\S*/gi, (_match, host) => {
|
|
211
|
+
// Extract meaningful site name from hostname
|
|
212
|
+
const parts = host.split('.');
|
|
213
|
+
// Drop common prefixes (www, us02web, events, etc.) and TLD suffixes
|
|
214
|
+
// Keep the main domain name: "us02web.zoom.us" → "Zoom", "events.vtools.ieee.org" → "ieee"
|
|
215
|
+
if (parts.length >= 2) {
|
|
216
|
+
const domain = parts.length > 2 ? parts[parts.length - 2] : parts[0];
|
|
217
|
+
return `[${domain.charAt(0).toUpperCase() + domain.slice(1)}]`;
|
|
218
|
+
}
|
|
219
|
+
return '[link]';
|
|
220
|
+
});
|
|
221
|
+
}
|
|
175
222
|
function showUsage() {
|
|
176
223
|
console.log(`
|
|
177
224
|
gcal - Google Calendar CLI
|
|
@@ -184,8 +231,10 @@ Commands:
|
|
|
184
231
|
list [n] List upcoming n events (default: 10)
|
|
185
232
|
add <title> <when> [duration] Add event
|
|
186
233
|
del|delete <id> [id2...] Delete event(s) by ID (prefix match)
|
|
234
|
+
update <id> [flags] Update event by ID (prefix match)
|
|
187
235
|
import <file.ics> Import events from ICS file
|
|
188
236
|
calendars List available calendars
|
|
237
|
+
assoc Associate .ics files with gcal (Windows)
|
|
189
238
|
help Show this help
|
|
190
239
|
|
|
191
240
|
Options:
|
|
@@ -193,8 +242,18 @@ Options:
|
|
|
193
242
|
-defaultUser <email> Set default user for future use
|
|
194
243
|
-c, -calendar <id> Calendar ID (default: primary)
|
|
195
244
|
-n <count> Number of events to list
|
|
245
|
+
-limit <span> Time horizon for list: #d, #w, #m, #y (default: 3m)
|
|
196
246
|
-v, -verbose Show event IDs and links
|
|
197
247
|
-b, -birthdays Include birthday events (hidden by default)
|
|
248
|
+
-title <text> New title (update command)
|
|
249
|
+
-loc <text> New location (update command)
|
|
250
|
+
-start <when> New start time (update command)
|
|
251
|
+
-dur <duration> New duration (update command)
|
|
252
|
+
-r <spec> Reminders: #m, #h, #d with optional :email/:popup
|
|
253
|
+
-r 0 No reminders
|
|
254
|
+
-r 30m 30 min popup (default kind)
|
|
255
|
+
-r 1h:email 1 hour email
|
|
256
|
+
-r 15m,1h Multiple: comma-separated
|
|
198
257
|
|
|
199
258
|
Examples:
|
|
200
259
|
gcal meeting.ics Import ICS file
|
|
@@ -203,13 +262,68 @@ Examples:
|
|
|
203
262
|
gcal add "Lunch" "1/14/2026 12:00" "1h"
|
|
204
263
|
gcal add "Meeting" "tomorrow 10:00"
|
|
205
264
|
gcal add "Appointment" "jan 15 2pm"
|
|
265
|
+
gcal add "Call" "tomorrow 3pm" "30m" -r 15m,1h:email
|
|
266
|
+
gcal update abc1 -title "New Title" -loc "Room 5"
|
|
267
|
+
gcal update abc1 -start "friday 3pm" -dur 2h
|
|
268
|
+
gcal update abc1 -r 15m,1h:email
|
|
206
269
|
gcal -defaultUser bob@gmail.com Set default user
|
|
207
270
|
|
|
208
271
|
File Association (Windows):
|
|
209
|
-
assoc .ics
|
|
210
|
-
ftype icsfile=gcal "%1"
|
|
272
|
+
gcal assoc Set up .ics file association
|
|
211
273
|
`);
|
|
212
274
|
}
|
|
275
|
+
/** Parse a reminder spec like "30m", "1h", "2d", "30m:email", "1h:popup" */
|
|
276
|
+
function parseReminder(spec) {
|
|
277
|
+
// Split on colon for method: "30m:email" or just "30m"
|
|
278
|
+
const [timePart, methodPart] = spec.split(':');
|
|
279
|
+
const method = methodPart === 'email' ? 'email' : 'popup';
|
|
280
|
+
const match = timePart.match(/^(\d+)\s*([mhd]?)$/i);
|
|
281
|
+
if (!match) {
|
|
282
|
+
console.error(`Invalid reminder: "${spec}" — use #m, #h, or #d (e.g. 30m, 1h, 2d)`);
|
|
283
|
+
process.exit(1);
|
|
284
|
+
}
|
|
285
|
+
const num = parseInt(match[1]);
|
|
286
|
+
const unit = (match[2] || 'm').toLowerCase();
|
|
287
|
+
let minutes;
|
|
288
|
+
switch (unit) {
|
|
289
|
+
case 'h':
|
|
290
|
+
minutes = num * 60;
|
|
291
|
+
break;
|
|
292
|
+
case 'd':
|
|
293
|
+
minutes = num * 60 * 24;
|
|
294
|
+
break;
|
|
295
|
+
default:
|
|
296
|
+
minutes = num;
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
return { method, minutes };
|
|
300
|
+
}
|
|
301
|
+
/** Parse a time limit spec like "3m", "1y", "2w", "90d" into a future Date */
|
|
302
|
+
function parseTimeLimit(spec) {
|
|
303
|
+
const match = spec.match(/^(\d+)\s*([dwmy]?)$/i);
|
|
304
|
+
if (!match) {
|
|
305
|
+
console.error(`Invalid time limit: "${spec}" — use #d, #w, #m, or #y (e.g. 3m, 90d, 1y)`);
|
|
306
|
+
process.exit(1);
|
|
307
|
+
}
|
|
308
|
+
const num = parseInt(match[1]);
|
|
309
|
+
const unit = (match[2] || 'm').toLowerCase();
|
|
310
|
+
const now = new Date();
|
|
311
|
+
switch (unit) {
|
|
312
|
+
case 'd':
|
|
313
|
+
now.setDate(now.getDate() + num);
|
|
314
|
+
break;
|
|
315
|
+
case 'w':
|
|
316
|
+
now.setDate(now.getDate() + num * 7);
|
|
317
|
+
break;
|
|
318
|
+
case 'y':
|
|
319
|
+
now.setFullYear(now.getFullYear() + num);
|
|
320
|
+
break;
|
|
321
|
+
default:
|
|
322
|
+
now.setMonth(now.getMonth() + num);
|
|
323
|
+
break; // 'm' = months
|
|
324
|
+
}
|
|
325
|
+
return now;
|
|
326
|
+
}
|
|
213
327
|
function parseArgs(argv) {
|
|
214
328
|
const result = {
|
|
215
329
|
command: '',
|
|
@@ -221,7 +335,14 @@ function parseArgs(argv) {
|
|
|
221
335
|
help: false,
|
|
222
336
|
verbose: false,
|
|
223
337
|
icsFile: '',
|
|
224
|
-
birthdays: false
|
|
338
|
+
birthdays: false,
|
|
339
|
+
reminders: [],
|
|
340
|
+
noReminders: false,
|
|
341
|
+
timeLimit: '3m',
|
|
342
|
+
title: '',
|
|
343
|
+
location: '',
|
|
344
|
+
startTime: '',
|
|
345
|
+
duration: ''
|
|
225
346
|
};
|
|
226
347
|
const unknown = [];
|
|
227
348
|
let i = 0;
|
|
@@ -255,6 +376,44 @@ function parseArgs(argv) {
|
|
|
255
376
|
case '--birthdays':
|
|
256
377
|
result.birthdays = true;
|
|
257
378
|
break;
|
|
379
|
+
case '-limit':
|
|
380
|
+
case '--limit':
|
|
381
|
+
result.timeLimit = argv[++i] || '3m';
|
|
382
|
+
break;
|
|
383
|
+
case '-title':
|
|
384
|
+
case '--title':
|
|
385
|
+
result.title = argv[++i] || '';
|
|
386
|
+
break;
|
|
387
|
+
case '-loc':
|
|
388
|
+
case '-location':
|
|
389
|
+
case '--location':
|
|
390
|
+
result.location = argv[++i] || '';
|
|
391
|
+
break;
|
|
392
|
+
case '-start':
|
|
393
|
+
case '--start':
|
|
394
|
+
result.startTime = argv[++i] || '';
|
|
395
|
+
break;
|
|
396
|
+
case '-dur':
|
|
397
|
+
case '-duration':
|
|
398
|
+
case '--duration':
|
|
399
|
+
result.duration = argv[++i] || '';
|
|
400
|
+
break;
|
|
401
|
+
case '-r':
|
|
402
|
+
case '-reminder':
|
|
403
|
+
case '--reminder': {
|
|
404
|
+
const rval = argv[++i] || '';
|
|
405
|
+
if (rval === '0' || rval === 'none') {
|
|
406
|
+
result.noReminders = true;
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
for (const part of rval.split(',')) {
|
|
410
|
+
const reminder = parseReminder(part.trim());
|
|
411
|
+
if (reminder)
|
|
412
|
+
result.reminders.push(reminder);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
break;
|
|
416
|
+
}
|
|
258
417
|
case '-h':
|
|
259
418
|
case '-help':
|
|
260
419
|
case '--help':
|
|
@@ -282,7 +441,8 @@ function parseArgs(argv) {
|
|
|
282
441
|
i++;
|
|
283
442
|
}
|
|
284
443
|
if (unknown.length > 0) {
|
|
285
|
-
console.error(`Unknown options: ${unknown.join(', ')}`);
|
|
444
|
+
console.error(`Unknown options: ${unknown.join(', ')}\n`);
|
|
445
|
+
showUsage();
|
|
286
446
|
process.exit(1);
|
|
287
447
|
}
|
|
288
448
|
return result;
|
|
@@ -326,6 +486,11 @@ async function main() {
|
|
|
326
486
|
showUsage();
|
|
327
487
|
process.exit(1);
|
|
328
488
|
}
|
|
489
|
+
// Commands that don't need a user
|
|
490
|
+
if (parsed.command === 'assoc') {
|
|
491
|
+
setupFileAssociation();
|
|
492
|
+
process.exit(0);
|
|
493
|
+
}
|
|
329
494
|
// Resolve user
|
|
330
495
|
const user = resolveUser(parsed.user, false);
|
|
331
496
|
if (!user) {
|
|
@@ -358,8 +523,9 @@ async function main() {
|
|
|
358
523
|
}
|
|
359
524
|
case 'list': {
|
|
360
525
|
const count = parsed.args[0] ? parseInt(parsed.args[0]) : parsed.count;
|
|
526
|
+
const timeMax = parseTimeLimit(parsed.timeLimit).toISOString();
|
|
361
527
|
const token = await getAccessToken(user, false);
|
|
362
|
-
let events = await listEvents(token, parsed.calendar, count);
|
|
528
|
+
let events = await listEvents(token, parsed.calendar, count, undefined, timeMax);
|
|
363
529
|
const birthdayCount = events.filter(e => e.eventType === 'birthday').length;
|
|
364
530
|
if (!parsed.birthdays) {
|
|
365
531
|
events = events.filter(e => e.eventType !== 'birthday');
|
|
@@ -375,8 +541,8 @@ async function main() {
|
|
|
375
541
|
const shortId = (event.id || '').slice(0, 8);
|
|
376
542
|
const start = event.start ? formatDateTime(event.start) : '?';
|
|
377
543
|
const duration = (event.start && event.end) ? formatDuration(event.start, event.end) : '';
|
|
378
|
-
const summary = (event.summary || '(no title)') + (event.eventType === 'birthday' ? ' [from contact]' : '');
|
|
379
|
-
const loc = event.location || '';
|
|
544
|
+
const summary = cleanUrls(event.summary || '(no title)') + (event.eventType === 'birthday' ? ' [from contact]' : '');
|
|
545
|
+
const loc = cleanUrls(event.location || '');
|
|
380
546
|
if (parsed.verbose) {
|
|
381
547
|
rows.push([shortId, start, duration, summary, loc, event.htmlLink || '']);
|
|
382
548
|
}
|
|
@@ -390,12 +556,13 @@ async function main() {
|
|
|
390
556
|
: ['ID', 'When', 'Dur', 'Event', 'Location'];
|
|
391
557
|
const colWidths = headers.map((h, i) => Math.max(h.length, ...rows.map(r => (r[i] || '').length)));
|
|
392
558
|
// Print header
|
|
393
|
-
const headerLine = headers.map((h, i) => h.padEnd(colWidths[i])).join('
|
|
559
|
+
const headerLine = headers.map((h, i) => h.padEnd(colWidths[i])).join(' ');
|
|
394
560
|
console.log(headerLine);
|
|
395
|
-
console.log(colWidths.map(w => '-'.repeat(w)).join('
|
|
396
|
-
// Print rows
|
|
561
|
+
console.log(colWidths.map(w => '-'.repeat(w)).join(' '));
|
|
562
|
+
// Print rows — last column not padded to avoid trailing whitespace
|
|
397
563
|
for (const row of rows) {
|
|
398
|
-
const
|
|
564
|
+
const lastIdx = row.length - 1;
|
|
565
|
+
const line = row.map((cell, i) => i < lastIdx ? (cell || '').padEnd(colWidths[i]) : (cell || '')).join(' ');
|
|
399
566
|
console.log(line);
|
|
400
567
|
}
|
|
401
568
|
}
|
|
@@ -425,10 +592,27 @@ async function main() {
|
|
|
425
592
|
timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone
|
|
426
593
|
}
|
|
427
594
|
};
|
|
595
|
+
if (parsed.noReminders) {
|
|
596
|
+
event.reminders = { useDefault: false, overrides: [] };
|
|
597
|
+
}
|
|
598
|
+
else if (parsed.reminders.length > 0) {
|
|
599
|
+
event.reminders = { useDefault: false, overrides: parsed.reminders };
|
|
600
|
+
}
|
|
428
601
|
const token = await getAccessToken(user, true);
|
|
429
602
|
const created = await createEvent(token, event, parsed.calendar);
|
|
430
603
|
console.log(`\nEvent created: ${created.summary}`);
|
|
431
604
|
console.log(` When: ${formatDateTime(created.start)} - ${formatDateTime(created.end)}`);
|
|
605
|
+
if (parsed.noReminders) {
|
|
606
|
+
console.log(` Reminders: none`);
|
|
607
|
+
}
|
|
608
|
+
else if (parsed.reminders.length > 0) {
|
|
609
|
+
const rlist = parsed.reminders.map(r => {
|
|
610
|
+
const mins = r.minutes;
|
|
611
|
+
const label = mins >= 1440 ? `${mins / 1440}d` : mins >= 60 ? `${mins / 60}h` : `${mins}m`;
|
|
612
|
+
return `${label}${r.method === 'email' ? ':email' : ''}`;
|
|
613
|
+
}).join(', ');
|
|
614
|
+
console.log(` Reminders: ${rlist}`);
|
|
615
|
+
}
|
|
432
616
|
if (created.htmlLink) {
|
|
433
617
|
console.log(` Link: ${created.htmlLink}`);
|
|
434
618
|
}
|
|
@@ -452,7 +636,12 @@ async function main() {
|
|
|
452
636
|
if (matches.length > 1) {
|
|
453
637
|
console.error(`${idPrefix}: ambiguous (${matches.length} matches)`);
|
|
454
638
|
for (const e of matches) {
|
|
455
|
-
|
|
639
|
+
// Show enough ID to distinguish recurring instances (base_date)
|
|
640
|
+
const displayId = (e.id || '').length > 12 ? e.id.slice(0, 16) : e.id?.slice(0, 8);
|
|
641
|
+
const cleaned = cleanUrls(e.summary || '');
|
|
642
|
+
const summary = cleaned.length > 60 ? cleaned.slice(0, 57) + '...' : cleaned;
|
|
643
|
+
const when = e.start ? formatDateTime(e.start) : '';
|
|
644
|
+
console.error(` ${displayId} ${when} ${summary}`);
|
|
456
645
|
}
|
|
457
646
|
continue;
|
|
458
647
|
}
|
|
@@ -462,7 +651,7 @@ async function main() {
|
|
|
462
651
|
continue;
|
|
463
652
|
}
|
|
464
653
|
await deleteEvent(token, event.id, parsed.calendar);
|
|
465
|
-
console.log(`Deleted: ${event.summary}`);
|
|
654
|
+
console.log(`Deleted: ${cleanUrls(event.summary || '')}`);
|
|
466
655
|
}
|
|
467
656
|
break;
|
|
468
657
|
}
|
|
@@ -478,6 +667,99 @@ async function main() {
|
|
|
478
667
|
}
|
|
479
668
|
break;
|
|
480
669
|
}
|
|
670
|
+
case 'update': {
|
|
671
|
+
if (parsed.args.length === 0) {
|
|
672
|
+
console.error('Usage: gcal update <id> [-title "..."] [-loc "..."] [-start "..."] [-dur "..."] [-r ...]');
|
|
673
|
+
console.error('Use "gcal list -v" to see event IDs');
|
|
674
|
+
process.exit(1);
|
|
675
|
+
}
|
|
676
|
+
const idPrefix = parsed.args[0];
|
|
677
|
+
const token = await getAccessToken(user, true);
|
|
678
|
+
const events = await listEvents(token, parsed.calendar, 50);
|
|
679
|
+
const matches = events.filter(e => e.id?.startsWith(idPrefix));
|
|
680
|
+
if (matches.length === 0) {
|
|
681
|
+
console.error(`${idPrefix}: not found`);
|
|
682
|
+
process.exit(1);
|
|
683
|
+
}
|
|
684
|
+
if (matches.length > 1) {
|
|
685
|
+
console.error(`${idPrefix}: ambiguous (${matches.length} matches)`);
|
|
686
|
+
for (const e of matches) {
|
|
687
|
+
const displayId = (e.id || '').length > 12 ? e.id.slice(0, 16) : e.id?.slice(0, 8);
|
|
688
|
+
const cleaned = cleanUrls(e.summary || '');
|
|
689
|
+
const summary = cleaned.length > 60 ? cleaned.slice(0, 57) + '...' : cleaned;
|
|
690
|
+
const when = e.start ? formatDateTime(e.start) : '';
|
|
691
|
+
console.error(` ${displayId} ${when} ${summary}`);
|
|
692
|
+
}
|
|
693
|
+
process.exit(1);
|
|
694
|
+
}
|
|
695
|
+
const target = matches[0];
|
|
696
|
+
const body = {};
|
|
697
|
+
const changes = [];
|
|
698
|
+
if (parsed.title) {
|
|
699
|
+
body.summary = parsed.title;
|
|
700
|
+
changes.push(`title → "${parsed.title}"`);
|
|
701
|
+
}
|
|
702
|
+
if (parsed.location) {
|
|
703
|
+
body.location = parsed.location;
|
|
704
|
+
changes.push(`location → "${parsed.location}"`);
|
|
705
|
+
}
|
|
706
|
+
if (parsed.startTime) {
|
|
707
|
+
const newStart = parseDateTime(parsed.startTime);
|
|
708
|
+
const durationMs = parsed.duration
|
|
709
|
+
? parseDuration(parsed.duration) * 60 * 1000
|
|
710
|
+
: (target.end?.dateTime && target.start?.dateTime)
|
|
711
|
+
? new Date(target.end.dateTime).getTime() - new Date(target.start.dateTime).getTime()
|
|
712
|
+
: 60 * 60 * 1000;
|
|
713
|
+
const newEnd = new Date(newStart.getTime() + durationMs);
|
|
714
|
+
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
715
|
+
body.start = { dateTime: newStart.toISOString(), timeZone: tz };
|
|
716
|
+
body.end = { dateTime: newEnd.toISOString(), timeZone: tz };
|
|
717
|
+
changes.push(`start → ${formatDateTime(body.start)}`);
|
|
718
|
+
if (parsed.duration)
|
|
719
|
+
changes.push(`duration → ${parsed.duration}`);
|
|
720
|
+
}
|
|
721
|
+
else if (parsed.duration) {
|
|
722
|
+
// Duration change without start change — shift end time
|
|
723
|
+
if (target.start?.dateTime) {
|
|
724
|
+
const startMs = new Date(target.start.dateTime).getTime();
|
|
725
|
+
const newEnd = new Date(startMs + parseDuration(parsed.duration) * 60 * 1000);
|
|
726
|
+
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
727
|
+
body.end = { dateTime: newEnd.toISOString(), timeZone: tz };
|
|
728
|
+
changes.push(`duration → ${parsed.duration}`);
|
|
729
|
+
}
|
|
730
|
+
else {
|
|
731
|
+
console.error('Cannot change duration of all-day event');
|
|
732
|
+
process.exit(1);
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
if (parsed.noReminders) {
|
|
736
|
+
body.reminders = { useDefault: false, overrides: [] };
|
|
737
|
+
changes.push('reminders → none');
|
|
738
|
+
}
|
|
739
|
+
else if (parsed.reminders.length > 0) {
|
|
740
|
+
body.reminders = { useDefault: false, overrides: parsed.reminders };
|
|
741
|
+
const rlist = parsed.reminders.map(r => {
|
|
742
|
+
const mins = r.minutes;
|
|
743
|
+
const label = mins >= 1440 ? `${mins / 1440}d` : mins >= 60 ? `${mins / 60}h` : `${mins}m`;
|
|
744
|
+
return `${label}${r.method === 'email' ? ':email' : ''}`;
|
|
745
|
+
}).join(', ');
|
|
746
|
+
changes.push(`reminders → ${rlist}`);
|
|
747
|
+
}
|
|
748
|
+
if (changes.length === 0) {
|
|
749
|
+
console.error('No update flags provided. Use -title, -loc, -start, -dur, or -r');
|
|
750
|
+
process.exit(1);
|
|
751
|
+
}
|
|
752
|
+
const updated = await updateEvent(token, target.id, body, parsed.calendar);
|
|
753
|
+
console.log(`\nUpdated: ${cleanUrls(updated.summary || '')}`);
|
|
754
|
+
for (const c of changes) {
|
|
755
|
+
console.log(` ${c}`);
|
|
756
|
+
}
|
|
757
|
+
break;
|
|
758
|
+
}
|
|
759
|
+
case 'assoc': {
|
|
760
|
+
setupFileAssociation();
|
|
761
|
+
break;
|
|
762
|
+
}
|
|
481
763
|
default:
|
|
482
764
|
console.error(`Unknown command: ${parsed.command}`);
|
|
483
765
|
showUsage();
|
|
@@ -485,9 +767,11 @@ async function main() {
|
|
|
485
767
|
}
|
|
486
768
|
}
|
|
487
769
|
if (import.meta.main) {
|
|
488
|
-
main().
|
|
770
|
+
main().then(() => {
|
|
771
|
+
process.exitCode = 0;
|
|
772
|
+
}).catch(e => {
|
|
489
773
|
console.error(`Error: ${e.message}`);
|
|
490
|
-
process.
|
|
774
|
+
process.exitCode = 1;
|
|
491
775
|
});
|
|
492
776
|
}
|
|
493
777
|
//# sourceMappingURL=gcal.js.map
|
package/gcal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gcal.js","sourceRoot":"","sources":["gcal.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gcal.js","sourceRoot":"","sources":["gcal.ts"],"names":[],"mappings":"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"}
|
package/gcal.ts
CHANGED
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
* Manage Google Calendar events with ICS import support
|
|
5
5
|
*
|
|
6
6
|
* Can be associated with .ics files for direct import:
|
|
7
|
-
* assoc
|
|
8
|
-
* ftype icsfile=gcal "%1"
|
|
7
|
+
* gcal assoc
|
|
9
8
|
*/
|
|
10
9
|
|
|
11
10
|
import fs from 'fs';
|
|
12
11
|
import path from 'path';
|
|
12
|
+
import { execSync } from 'child_process';
|
|
13
13
|
import { authenticateOAuth } from '@bobfrankston/oauthsupport';
|
|
14
|
-
import type { GoogleEvent, EventsListResponse, CalendarListEntry, CalendarListResponse } from './glib/types.ts';
|
|
14
|
+
import type { GoogleEvent, EventReminder, EventsListResponse, CalendarListEntry, CalendarListResponse } from './glib/types.ts';
|
|
15
15
|
import {
|
|
16
16
|
CREDENTIALS_FILE, loadConfig, saveConfig, getUserPaths,
|
|
17
17
|
ensureUserDir, formatDateTime, formatDuration, parseDuration, parseDateTime, ts, normalizeUser
|
|
@@ -90,7 +90,8 @@ async function listEvents(
|
|
|
90
90
|
accessToken: string,
|
|
91
91
|
calendarId = 'primary',
|
|
92
92
|
maxResults = 10,
|
|
93
|
-
timeMin?: string
|
|
93
|
+
timeMin?: string,
|
|
94
|
+
timeMax?: string
|
|
94
95
|
): Promise<GoogleEvent[]> {
|
|
95
96
|
const params = new URLSearchParams({
|
|
96
97
|
maxResults: maxResults.toString(),
|
|
@@ -98,6 +99,8 @@ async function listEvents(
|
|
|
98
99
|
orderBy: 'startTime',
|
|
99
100
|
timeMin: timeMin || new Date().toISOString()
|
|
100
101
|
});
|
|
102
|
+
if (timeMax)
|
|
103
|
+
params.set('timeMax', timeMax);
|
|
101
104
|
|
|
102
105
|
const url = `${CALENDAR_API_BASE}/calendars/${encodeURIComponent(calendarId)}/events?${params}`;
|
|
103
106
|
const res = await apiFetch(url, accessToken);
|
|
@@ -138,6 +141,24 @@ async function deleteEvent(
|
|
|
138
141
|
}
|
|
139
142
|
}
|
|
140
143
|
|
|
144
|
+
async function updateEvent(
|
|
145
|
+
accessToken: string,
|
|
146
|
+
eventId: string,
|
|
147
|
+
body: Partial<GoogleEvent>,
|
|
148
|
+
calendarId = 'primary'
|
|
149
|
+
): Promise<GoogleEvent> {
|
|
150
|
+
const url = `${CALENDAR_API_BASE}/calendars/${encodeURIComponent(calendarId)}/events/${encodeURIComponent(eventId)}`;
|
|
151
|
+
const res = await apiFetch(url, accessToken, {
|
|
152
|
+
method: 'PATCH',
|
|
153
|
+
body: JSON.stringify(body)
|
|
154
|
+
});
|
|
155
|
+
if (!res.ok) {
|
|
156
|
+
const errText = await res.text();
|
|
157
|
+
throw new Error(`Failed to update event: ${res.status} ${errText}`);
|
|
158
|
+
}
|
|
159
|
+
return await res.json() as GoogleEvent;
|
|
160
|
+
}
|
|
161
|
+
|
|
141
162
|
async function importIcsFile(
|
|
142
163
|
filePath: string,
|
|
143
164
|
accessToken: string,
|
|
@@ -218,6 +239,41 @@ async function importIcsFile(
|
|
|
218
239
|
return result;
|
|
219
240
|
}
|
|
220
241
|
|
|
242
|
+
function setupFileAssociation(): void {
|
|
243
|
+
if (process.platform !== 'win32') {
|
|
244
|
+
console.error('File association is only supported on Windows.');
|
|
245
|
+
process.exit(1);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
const classKey = 'HKCU\\Software\\Classes';
|
|
249
|
+
const command = `cmd.exe /c gcal "%1"`;
|
|
250
|
+
|
|
251
|
+
try {
|
|
252
|
+
execSync(`reg add "${classKey}\\.ics" /ve /d "gcalFile" /f`, { stdio: 'pipe' });
|
|
253
|
+
execSync(`reg add "${classKey}\\gcalFile\\shell\\open\\command" /ve /d "${command}" /f`, { stdio: 'pipe' });
|
|
254
|
+
console.log('.ics file association set — double-click any .ics to import via gcal');
|
|
255
|
+
} catch (e: any) {
|
|
256
|
+
console.error(`Failed to set file association: ${e.message}`);
|
|
257
|
+
process.exit(1);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/** Clean up URLs — replace https URLs with [sitename] labels */
|
|
262
|
+
function cleanUrls(text: string): string {
|
|
263
|
+
if (!text) return text;
|
|
264
|
+
return text.replace(/https?:\/\/([^\/\s]+)\S*/gi, (_match, host: string) => {
|
|
265
|
+
// Extract meaningful site name from hostname
|
|
266
|
+
const parts = host.split('.');
|
|
267
|
+
// Drop common prefixes (www, us02web, events, etc.) and TLD suffixes
|
|
268
|
+
// Keep the main domain name: "us02web.zoom.us" → "Zoom", "events.vtools.ieee.org" → "ieee"
|
|
269
|
+
if (parts.length >= 2) {
|
|
270
|
+
const domain = parts.length > 2 ? parts[parts.length - 2] : parts[0];
|
|
271
|
+
return `[${domain.charAt(0).toUpperCase() + domain.slice(1)}]`;
|
|
272
|
+
}
|
|
273
|
+
return '[link]';
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
|
|
221
277
|
function showUsage(): void {
|
|
222
278
|
console.log(`
|
|
223
279
|
gcal - Google Calendar CLI
|
|
@@ -230,8 +286,10 @@ Commands:
|
|
|
230
286
|
list [n] List upcoming n events (default: 10)
|
|
231
287
|
add <title> <when> [duration] Add event
|
|
232
288
|
del|delete <id> [id2...] Delete event(s) by ID (prefix match)
|
|
289
|
+
update <id> [flags] Update event by ID (prefix match)
|
|
233
290
|
import <file.ics> Import events from ICS file
|
|
234
291
|
calendars List available calendars
|
|
292
|
+
assoc Associate .ics files with gcal (Windows)
|
|
235
293
|
help Show this help
|
|
236
294
|
|
|
237
295
|
Options:
|
|
@@ -239,8 +297,18 @@ Options:
|
|
|
239
297
|
-defaultUser <email> Set default user for future use
|
|
240
298
|
-c, -calendar <id> Calendar ID (default: primary)
|
|
241
299
|
-n <count> Number of events to list
|
|
300
|
+
-limit <span> Time horizon for list: #d, #w, #m, #y (default: 3m)
|
|
242
301
|
-v, -verbose Show event IDs and links
|
|
243
302
|
-b, -birthdays Include birthday events (hidden by default)
|
|
303
|
+
-title <text> New title (update command)
|
|
304
|
+
-loc <text> New location (update command)
|
|
305
|
+
-start <when> New start time (update command)
|
|
306
|
+
-dur <duration> New duration (update command)
|
|
307
|
+
-r <spec> Reminders: #m, #h, #d with optional :email/:popup
|
|
308
|
+
-r 0 No reminders
|
|
309
|
+
-r 30m 30 min popup (default kind)
|
|
310
|
+
-r 1h:email 1 hour email
|
|
311
|
+
-r 15m,1h Multiple: comma-separated
|
|
244
312
|
|
|
245
313
|
Examples:
|
|
246
314
|
gcal meeting.ics Import ICS file
|
|
@@ -249,11 +317,14 @@ Examples:
|
|
|
249
317
|
gcal add "Lunch" "1/14/2026 12:00" "1h"
|
|
250
318
|
gcal add "Meeting" "tomorrow 10:00"
|
|
251
319
|
gcal add "Appointment" "jan 15 2pm"
|
|
320
|
+
gcal add "Call" "tomorrow 3pm" "30m" -r 15m,1h:email
|
|
321
|
+
gcal update abc1 -title "New Title" -loc "Room 5"
|
|
322
|
+
gcal update abc1 -start "friday 3pm" -dur 2h
|
|
323
|
+
gcal update abc1 -r 15m,1h:email
|
|
252
324
|
gcal -defaultUser bob@gmail.com Set default user
|
|
253
325
|
|
|
254
326
|
File Association (Windows):
|
|
255
|
-
assoc .ics
|
|
256
|
-
ftype icsfile=gcal "%1"
|
|
327
|
+
gcal assoc Set up .ics file association
|
|
257
328
|
`);
|
|
258
329
|
}
|
|
259
330
|
|
|
@@ -268,6 +339,56 @@ interface ParsedArgs {
|
|
|
268
339
|
verbose: boolean;
|
|
269
340
|
icsFile: string; /** Direct .ics file path */
|
|
270
341
|
birthdays: boolean;
|
|
342
|
+
reminders: EventReminder[]; /** Reminder overrides, empty = use defaults, null entry = no reminders */
|
|
343
|
+
noReminders: boolean; /** -r 0 means no reminders at all */
|
|
344
|
+
timeLimit: string; /** Max time horizon for list, e.g. "3m", "1y", "2w" — default "3m" */
|
|
345
|
+
title: string; /** New title for update command */
|
|
346
|
+
location: string; /** New location for update command */
|
|
347
|
+
startTime: string; /** New start time for update command */
|
|
348
|
+
duration: string; /** New duration for update command */
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/** Parse a reminder spec like "30m", "1h", "2d", "30m:email", "1h:popup" */
|
|
352
|
+
function parseReminder(spec: string): EventReminder {
|
|
353
|
+
// Split on colon for method: "30m:email" or just "30m"
|
|
354
|
+
const [timePart, methodPart] = spec.split(':');
|
|
355
|
+
const method: 'email' | 'popup' = methodPart === 'email' ? 'email' : 'popup';
|
|
356
|
+
|
|
357
|
+
const match = timePart.match(/^(\d+)\s*([mhd]?)$/i);
|
|
358
|
+
if (!match) {
|
|
359
|
+
console.error(`Invalid reminder: "${spec}" — use #m, #h, or #d (e.g. 30m, 1h, 2d)`);
|
|
360
|
+
process.exit(1);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
const num = parseInt(match[1]);
|
|
364
|
+
const unit = (match[2] || 'm').toLowerCase();
|
|
365
|
+
let minutes: number;
|
|
366
|
+
switch (unit) {
|
|
367
|
+
case 'h': minutes = num * 60; break;
|
|
368
|
+
case 'd': minutes = num * 60 * 24; break;
|
|
369
|
+
default: minutes = num; break;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
return { method, minutes };
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/** Parse a time limit spec like "3m", "1y", "2w", "90d" into a future Date */
|
|
376
|
+
function parseTimeLimit(spec: string): Date {
|
|
377
|
+
const match = spec.match(/^(\d+)\s*([dwmy]?)$/i);
|
|
378
|
+
if (!match) {
|
|
379
|
+
console.error(`Invalid time limit: "${spec}" — use #d, #w, #m, or #y (e.g. 3m, 90d, 1y)`);
|
|
380
|
+
process.exit(1);
|
|
381
|
+
}
|
|
382
|
+
const num = parseInt(match[1]);
|
|
383
|
+
const unit = (match[2] || 'm').toLowerCase();
|
|
384
|
+
const now = new Date();
|
|
385
|
+
switch (unit) {
|
|
386
|
+
case 'd': now.setDate(now.getDate() + num); break;
|
|
387
|
+
case 'w': now.setDate(now.getDate() + num * 7); break;
|
|
388
|
+
case 'y': now.setFullYear(now.getFullYear() + num); break;
|
|
389
|
+
default: now.setMonth(now.getMonth() + num); break; // 'm' = months
|
|
390
|
+
}
|
|
391
|
+
return now;
|
|
271
392
|
}
|
|
272
393
|
|
|
273
394
|
function parseArgs(argv: string[]): ParsedArgs {
|
|
@@ -281,7 +402,14 @@ function parseArgs(argv: string[]): ParsedArgs {
|
|
|
281
402
|
help: false,
|
|
282
403
|
verbose: false,
|
|
283
404
|
icsFile: '',
|
|
284
|
-
birthdays: false
|
|
405
|
+
birthdays: false,
|
|
406
|
+
reminders: [],
|
|
407
|
+
noReminders: false,
|
|
408
|
+
timeLimit: '3m',
|
|
409
|
+
title: '',
|
|
410
|
+
location: '',
|
|
411
|
+
startTime: '',
|
|
412
|
+
duration: ''
|
|
285
413
|
};
|
|
286
414
|
|
|
287
415
|
const unknown: string[] = [];
|
|
@@ -316,6 +444,43 @@ function parseArgs(argv: string[]): ParsedArgs {
|
|
|
316
444
|
case '--birthdays':
|
|
317
445
|
result.birthdays = true;
|
|
318
446
|
break;
|
|
447
|
+
case '-limit':
|
|
448
|
+
case '--limit':
|
|
449
|
+
result.timeLimit = argv[++i] || '3m';
|
|
450
|
+
break;
|
|
451
|
+
case '-title':
|
|
452
|
+
case '--title':
|
|
453
|
+
result.title = argv[++i] || '';
|
|
454
|
+
break;
|
|
455
|
+
case '-loc':
|
|
456
|
+
case '-location':
|
|
457
|
+
case '--location':
|
|
458
|
+
result.location = argv[++i] || '';
|
|
459
|
+
break;
|
|
460
|
+
case '-start':
|
|
461
|
+
case '--start':
|
|
462
|
+
result.startTime = argv[++i] || '';
|
|
463
|
+
break;
|
|
464
|
+
case '-dur':
|
|
465
|
+
case '-duration':
|
|
466
|
+
case '--duration':
|
|
467
|
+
result.duration = argv[++i] || '';
|
|
468
|
+
break;
|
|
469
|
+
case '-r':
|
|
470
|
+
case '-reminder':
|
|
471
|
+
case '--reminder': {
|
|
472
|
+
const rval = argv[++i] || '';
|
|
473
|
+
if (rval === '0' || rval === 'none') {
|
|
474
|
+
result.noReminders = true;
|
|
475
|
+
} else {
|
|
476
|
+
for (const part of rval.split(',')) {
|
|
477
|
+
const reminder = parseReminder(part.trim());
|
|
478
|
+
if (reminder)
|
|
479
|
+
result.reminders.push(reminder);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
break;
|
|
483
|
+
}
|
|
319
484
|
case '-h':
|
|
320
485
|
case '-help':
|
|
321
486
|
case '--help':
|
|
@@ -341,7 +506,8 @@ function parseArgs(argv: string[]): ParsedArgs {
|
|
|
341
506
|
}
|
|
342
507
|
|
|
343
508
|
if (unknown.length > 0) {
|
|
344
|
-
console.error(`Unknown options: ${unknown.join(', ')}`);
|
|
509
|
+
console.error(`Unknown options: ${unknown.join(', ')}\n`);
|
|
510
|
+
showUsage();
|
|
345
511
|
process.exit(1);
|
|
346
512
|
}
|
|
347
513
|
|
|
@@ -396,6 +562,12 @@ async function main(): Promise<void> {
|
|
|
396
562
|
process.exit(1);
|
|
397
563
|
}
|
|
398
564
|
|
|
565
|
+
// Commands that don't need a user
|
|
566
|
+
if (parsed.command === 'assoc') {
|
|
567
|
+
setupFileAssociation();
|
|
568
|
+
process.exit(0);
|
|
569
|
+
}
|
|
570
|
+
|
|
399
571
|
// Resolve user
|
|
400
572
|
const user = resolveUser(parsed.user, false);
|
|
401
573
|
if (!user) {
|
|
@@ -435,8 +607,9 @@ async function main(): Promise<void> {
|
|
|
435
607
|
|
|
436
608
|
case 'list': {
|
|
437
609
|
const count = parsed.args[0] ? parseInt(parsed.args[0]) : parsed.count;
|
|
610
|
+
const timeMax = parseTimeLimit(parsed.timeLimit).toISOString();
|
|
438
611
|
const token = await getAccessToken(user, false);
|
|
439
|
-
let events = await listEvents(token, parsed.calendar, count);
|
|
612
|
+
let events = await listEvents(token, parsed.calendar, count, undefined, timeMax);
|
|
440
613
|
const birthdayCount = events.filter(e => e.eventType === 'birthday').length;
|
|
441
614
|
if (!parsed.birthdays) {
|
|
442
615
|
events = events.filter(e => e.eventType !== 'birthday');
|
|
@@ -453,8 +626,8 @@ async function main(): Promise<void> {
|
|
|
453
626
|
const shortId = (event.id || '').slice(0, 8);
|
|
454
627
|
const start = event.start ? formatDateTime(event.start) : '?';
|
|
455
628
|
const duration = (event.start && event.end) ? formatDuration(event.start, event.end) : '';
|
|
456
|
-
const summary = (event.summary || '(no title)') + (event.eventType === 'birthday' ? ' [from contact]' : '');
|
|
457
|
-
const loc = event.location || '';
|
|
629
|
+
const summary = cleanUrls(event.summary || '(no title)') + (event.eventType === 'birthday' ? ' [from contact]' : '');
|
|
630
|
+
const loc = cleanUrls(event.location || '');
|
|
458
631
|
if (parsed.verbose) {
|
|
459
632
|
rows.push([shortId, start, duration, summary, loc, event.htmlLink || '']);
|
|
460
633
|
} else {
|
|
@@ -471,13 +644,14 @@ async function main(): Promise<void> {
|
|
|
471
644
|
);
|
|
472
645
|
|
|
473
646
|
// Print header
|
|
474
|
-
const headerLine = headers.map((h, i) => h.padEnd(colWidths[i])).join('
|
|
647
|
+
const headerLine = headers.map((h, i) => h.padEnd(colWidths[i])).join(' ');
|
|
475
648
|
console.log(headerLine);
|
|
476
|
-
console.log(colWidths.map(w => '-'.repeat(w)).join('
|
|
649
|
+
console.log(colWidths.map(w => '-'.repeat(w)).join(' '));
|
|
477
650
|
|
|
478
|
-
// Print rows
|
|
651
|
+
// Print rows — last column not padded to avoid trailing whitespace
|
|
479
652
|
for (const row of rows) {
|
|
480
|
-
const
|
|
653
|
+
const lastIdx = row.length - 1;
|
|
654
|
+
const line = row.map((cell, i) => i < lastIdx ? (cell || '').padEnd(colWidths[i]) : (cell || '')).join(' ');
|
|
481
655
|
console.log(line);
|
|
482
656
|
}
|
|
483
657
|
}
|
|
@@ -511,10 +685,26 @@ async function main(): Promise<void> {
|
|
|
511
685
|
}
|
|
512
686
|
};
|
|
513
687
|
|
|
688
|
+
if (parsed.noReminders) {
|
|
689
|
+
event.reminders = { useDefault: false, overrides: [] };
|
|
690
|
+
} else if (parsed.reminders.length > 0) {
|
|
691
|
+
event.reminders = { useDefault: false, overrides: parsed.reminders };
|
|
692
|
+
}
|
|
693
|
+
|
|
514
694
|
const token = await getAccessToken(user, true);
|
|
515
695
|
const created = await createEvent(token, event, parsed.calendar);
|
|
516
696
|
console.log(`\nEvent created: ${created.summary}`);
|
|
517
697
|
console.log(` When: ${formatDateTime(created.start)} - ${formatDateTime(created.end)}`);
|
|
698
|
+
if (parsed.noReminders) {
|
|
699
|
+
console.log(` Reminders: none`);
|
|
700
|
+
} else if (parsed.reminders.length > 0) {
|
|
701
|
+
const rlist = parsed.reminders.map(r => {
|
|
702
|
+
const mins = r.minutes;
|
|
703
|
+
const label = mins >= 1440 ? `${mins / 1440}d` : mins >= 60 ? `${mins / 60}h` : `${mins}m`;
|
|
704
|
+
return `${label}${r.method === 'email' ? ':email' : ''}`;
|
|
705
|
+
}).join(', ');
|
|
706
|
+
console.log(` Reminders: ${rlist}`);
|
|
707
|
+
}
|
|
518
708
|
if (created.htmlLink) {
|
|
519
709
|
console.log(` Link: ${created.htmlLink}`);
|
|
520
710
|
}
|
|
@@ -542,7 +732,12 @@ async function main(): Promise<void> {
|
|
|
542
732
|
if (matches.length > 1) {
|
|
543
733
|
console.error(`${idPrefix}: ambiguous (${matches.length} matches)`);
|
|
544
734
|
for (const e of matches) {
|
|
545
|
-
|
|
735
|
+
// Show enough ID to distinguish recurring instances (base_date)
|
|
736
|
+
const displayId = (e.id || '').length > 12 ? e.id!.slice(0, 16) : e.id?.slice(0, 8);
|
|
737
|
+
const cleaned = cleanUrls(e.summary || '');
|
|
738
|
+
const summary = cleaned.length > 60 ? cleaned.slice(0, 57) + '...' : cleaned;
|
|
739
|
+
const when = e.start ? formatDateTime(e.start) : '';
|
|
740
|
+
console.error(` ${displayId} ${when} ${summary}`);
|
|
546
741
|
}
|
|
547
742
|
continue;
|
|
548
743
|
}
|
|
@@ -553,7 +748,7 @@ async function main(): Promise<void> {
|
|
|
553
748
|
continue;
|
|
554
749
|
}
|
|
555
750
|
await deleteEvent(token, event.id!, parsed.calendar);
|
|
556
|
-
console.log(`Deleted: ${event.summary}`);
|
|
751
|
+
console.log(`Deleted: ${cleanUrls(event.summary || '')}`);
|
|
557
752
|
}
|
|
558
753
|
break;
|
|
559
754
|
}
|
|
@@ -572,6 +767,104 @@ async function main(): Promise<void> {
|
|
|
572
767
|
break;
|
|
573
768
|
}
|
|
574
769
|
|
|
770
|
+
case 'update': {
|
|
771
|
+
if (parsed.args.length === 0) {
|
|
772
|
+
console.error('Usage: gcal update <id> [-title "..."] [-loc "..."] [-start "..."] [-dur "..."] [-r ...]');
|
|
773
|
+
console.error('Use "gcal list -v" to see event IDs');
|
|
774
|
+
process.exit(1);
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
const idPrefix = parsed.args[0];
|
|
778
|
+
const token = await getAccessToken(user, true);
|
|
779
|
+
const events = await listEvents(token, parsed.calendar, 50);
|
|
780
|
+
const matches = events.filter(e => e.id?.startsWith(idPrefix));
|
|
781
|
+
|
|
782
|
+
if (matches.length === 0) {
|
|
783
|
+
console.error(`${idPrefix}: not found`);
|
|
784
|
+
process.exit(1);
|
|
785
|
+
}
|
|
786
|
+
if (matches.length > 1) {
|
|
787
|
+
console.error(`${idPrefix}: ambiguous (${matches.length} matches)`);
|
|
788
|
+
for (const e of matches) {
|
|
789
|
+
const displayId = (e.id || '').length > 12 ? e.id.slice(0, 16) : e.id?.slice(0, 8);
|
|
790
|
+
const cleaned = cleanUrls(e.summary || '');
|
|
791
|
+
const summary = cleaned.length > 60 ? cleaned.slice(0, 57) + '...' : cleaned;
|
|
792
|
+
const when = e.start ? formatDateTime(e.start) : '';
|
|
793
|
+
console.error(` ${displayId} ${when} ${summary}`);
|
|
794
|
+
}
|
|
795
|
+
process.exit(1);
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
const target = matches[0];
|
|
799
|
+
const body: Partial<GoogleEvent> = {};
|
|
800
|
+
const changes: string[] = [];
|
|
801
|
+
|
|
802
|
+
if (parsed.title) {
|
|
803
|
+
body.summary = parsed.title;
|
|
804
|
+
changes.push(`title → "${parsed.title}"`);
|
|
805
|
+
}
|
|
806
|
+
if (parsed.location) {
|
|
807
|
+
body.location = parsed.location;
|
|
808
|
+
changes.push(`location → "${parsed.location}"`);
|
|
809
|
+
}
|
|
810
|
+
if (parsed.startTime) {
|
|
811
|
+
const newStart = parseDateTime(parsed.startTime);
|
|
812
|
+
const durationMs = parsed.duration
|
|
813
|
+
? parseDuration(parsed.duration) * 60 * 1000
|
|
814
|
+
: (target.end?.dateTime && target.start?.dateTime)
|
|
815
|
+
? new Date(target.end.dateTime).getTime() - new Date(target.start.dateTime).getTime()
|
|
816
|
+
: 60 * 60 * 1000;
|
|
817
|
+
const newEnd = new Date(newStart.getTime() + durationMs);
|
|
818
|
+
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
819
|
+
body.start = { dateTime: newStart.toISOString(), timeZone: tz };
|
|
820
|
+
body.end = { dateTime: newEnd.toISOString(), timeZone: tz };
|
|
821
|
+
changes.push(`start → ${formatDateTime(body.start)}`);
|
|
822
|
+
if (parsed.duration) changes.push(`duration → ${parsed.duration}`);
|
|
823
|
+
} else if (parsed.duration) {
|
|
824
|
+
// Duration change without start change — shift end time
|
|
825
|
+
if (target.start?.dateTime) {
|
|
826
|
+
const startMs = new Date(target.start.dateTime).getTime();
|
|
827
|
+
const newEnd = new Date(startMs + parseDuration(parsed.duration) * 60 * 1000);
|
|
828
|
+
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
829
|
+
body.end = { dateTime: newEnd.toISOString(), timeZone: tz };
|
|
830
|
+
changes.push(`duration → ${parsed.duration}`);
|
|
831
|
+
} else {
|
|
832
|
+
console.error('Cannot change duration of all-day event');
|
|
833
|
+
process.exit(1);
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
if (parsed.noReminders) {
|
|
838
|
+
body.reminders = { useDefault: false, overrides: [] };
|
|
839
|
+
changes.push('reminders → none');
|
|
840
|
+
} else if (parsed.reminders.length > 0) {
|
|
841
|
+
body.reminders = { useDefault: false, overrides: parsed.reminders };
|
|
842
|
+
const rlist = parsed.reminders.map(r => {
|
|
843
|
+
const mins = r.minutes;
|
|
844
|
+
const label = mins >= 1440 ? `${mins / 1440}d` : mins >= 60 ? `${mins / 60}h` : `${mins}m`;
|
|
845
|
+
return `${label}${r.method === 'email' ? ':email' : ''}`;
|
|
846
|
+
}).join(', ');
|
|
847
|
+
changes.push(`reminders → ${rlist}`);
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
if (changes.length === 0) {
|
|
851
|
+
console.error('No update flags provided. Use -title, -loc, -start, -dur, or -r');
|
|
852
|
+
process.exit(1);
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
const updated = await updateEvent(token, target.id, body, parsed.calendar);
|
|
856
|
+
console.log(`\nUpdated: ${cleanUrls(updated.summary || '')}`);
|
|
857
|
+
for (const c of changes) {
|
|
858
|
+
console.log(` ${c}`);
|
|
859
|
+
}
|
|
860
|
+
break;
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
case 'assoc': {
|
|
864
|
+
setupFileAssociation();
|
|
865
|
+
break;
|
|
866
|
+
}
|
|
867
|
+
|
|
575
868
|
default:
|
|
576
869
|
console.error(`Unknown command: ${parsed.command}`);
|
|
577
870
|
showUsage();
|
|
@@ -580,8 +873,10 @@ async function main(): Promise<void> {
|
|
|
580
873
|
}
|
|
581
874
|
|
|
582
875
|
if (import.meta.main) {
|
|
583
|
-
main().
|
|
876
|
+
main().then(() => {
|
|
877
|
+
process.exitCode = 0;
|
|
878
|
+
}).catch(e => {
|
|
584
879
|
console.error(`Error: ${e.message}`);
|
|
585
|
-
process.
|
|
880
|
+
process.exitCode = 1;
|
|
586
881
|
});
|
|
587
882
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bobfrankston/gcal",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.23",
|
|
4
4
|
"description": "Google Calendar CLI tool with ICS import support",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "gcal.js",
|
|
@@ -26,14 +26,17 @@
|
|
|
26
26
|
"url": "git+https://github.com/BobFrankston/gcal.git"
|
|
27
27
|
},
|
|
28
28
|
"scripts": {
|
|
29
|
+
"postinstall": "node -e \"if(process.platform==='win32')console.log('\\nTip: run \\\"gcal assoc\\\" to associate .ics files with gcal')\"",
|
|
29
30
|
"build": "tsc",
|
|
30
31
|
"check": "tsc --noEmit",
|
|
31
32
|
"prerelease:local": "git add -A && (git diff-index --quiet HEAD || git commit -m \"Pre-release commit\")",
|
|
32
33
|
"preversion": "npm run build && git add -A",
|
|
33
34
|
"postversion": "git push && git push --tags",
|
|
34
|
-
"release": "
|
|
35
|
+
"release": "npmglobalize",
|
|
35
36
|
"release:local": "npm run prerelease:local && npm version patch && npm publish --access public --ignore-scripts",
|
|
36
|
-
"installer": "npm run release && npm install -g ."
|
|
37
|
+
"installer": "npm run release && npm install -g .",
|
|
38
|
+
"old-release": "npm run prerelease:local && npm version patch && npm publish --access public",
|
|
39
|
+
"old-installer": "npm run release && npm install -g ."
|
|
37
40
|
},
|
|
38
41
|
"keywords": [
|
|
39
42
|
"google",
|