@bobfrankston/gcal 0.1.25 → 0.1.30
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 +2 -1
- package/gcal.d.ts.map +1 -1
- package/gcal.js +35 -306
- package/gcal.js.map +1 -1
- package/gcal.ts +36 -318
- package/glib/gutils.d.ts +1 -1
- package/glib/gutils.d.ts.map +1 -1
- package/glib/gutils.js +7 -11
- package/glib/gutils.js.map +1 -1
- package/glib/gutils.ts +7 -11
- package/package.json +4 -4
- package/tsconfig.json +1 -0
package/gcal.ts
CHANGED
|
@@ -4,19 +4,21 @@
|
|
|
4
4
|
* Manage Google Calendar events with ICS import support
|
|
5
5
|
*
|
|
6
6
|
* Can be associated with .ics files for direct import:
|
|
7
|
-
*
|
|
7
|
+
* assoc .ics=icsfile
|
|
8
|
+
* ftype icsfile=gcal "%1"
|
|
8
9
|
*/
|
|
9
10
|
|
|
10
11
|
import fs from 'fs';
|
|
11
12
|
import path from 'path';
|
|
12
|
-
import { execSync } from 'child_process';
|
|
13
13
|
import { authenticateOAuth } from '@bobfrankston/oauthsupport';
|
|
14
|
-
import type { GoogleEvent,
|
|
14
|
+
import type { GoogleEvent, 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
|
|
18
18
|
} from './glib/gutils.js';
|
|
19
19
|
|
|
20
|
+
import pkg from './package.json' with { type: 'json' };
|
|
21
|
+
const VERSION: string = pkg.version;
|
|
20
22
|
const CALENDAR_API_BASE = 'https://www.googleapis.com/calendar/v3';
|
|
21
23
|
const CALENDAR_SCOPE_READ = 'https://www.googleapis.com/auth/calendar.readonly';
|
|
22
24
|
const CALENDAR_SCOPE_WRITE = 'https://www.googleapis.com/auth/calendar';
|
|
@@ -25,9 +27,15 @@ let abortController: AbortController = null;
|
|
|
25
27
|
|
|
26
28
|
function setupAbortHandler(): void {
|
|
27
29
|
abortController = new AbortController();
|
|
30
|
+
let ctrlCCount = 0;
|
|
28
31
|
process.on('SIGINT', () => {
|
|
32
|
+
ctrlCCount++;
|
|
29
33
|
abortController?.abort();
|
|
30
|
-
|
|
34
|
+
if (ctrlCCount >= 2) {
|
|
35
|
+
console.log('\n\nForce exit.');
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
console.log('\n\nCtrl+C pressed - aborting... (press again to force exit)');
|
|
31
39
|
});
|
|
32
40
|
}
|
|
33
41
|
|
|
@@ -56,7 +64,7 @@ async function getAccessToken(user: string, writeAccess = false, forceRefresh =
|
|
|
56
64
|
scope,
|
|
57
65
|
tokenDirectory: paths.userDir,
|
|
58
66
|
tokenFileName,
|
|
59
|
-
credentialsKey: '
|
|
67
|
+
credentialsKey: 'installed',
|
|
60
68
|
signal: abortController?.signal
|
|
61
69
|
});
|
|
62
70
|
|
|
@@ -90,8 +98,7 @@ async function listEvents(
|
|
|
90
98
|
accessToken: string,
|
|
91
99
|
calendarId = 'primary',
|
|
92
100
|
maxResults = 10,
|
|
93
|
-
timeMin?: string
|
|
94
|
-
timeMax?: string
|
|
101
|
+
timeMin?: string
|
|
95
102
|
): Promise<GoogleEvent[]> {
|
|
96
103
|
const params = new URLSearchParams({
|
|
97
104
|
maxResults: maxResults.toString(),
|
|
@@ -99,8 +106,6 @@ async function listEvents(
|
|
|
99
106
|
orderBy: 'startTime',
|
|
100
107
|
timeMin: timeMin || new Date().toISOString()
|
|
101
108
|
});
|
|
102
|
-
if (timeMax)
|
|
103
|
-
params.set('timeMax', timeMax);
|
|
104
109
|
|
|
105
110
|
const url = `${CALENDAR_API_BASE}/calendars/${encodeURIComponent(calendarId)}/events?${params}`;
|
|
106
111
|
const res = await apiFetch(url, accessToken);
|
|
@@ -141,24 +146,6 @@ async function deleteEvent(
|
|
|
141
146
|
}
|
|
142
147
|
}
|
|
143
148
|
|
|
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
|
-
|
|
162
149
|
async function importIcsFile(
|
|
163
150
|
filePath: string,
|
|
164
151
|
accessToken: string,
|
|
@@ -239,44 +226,9 @@ async function importIcsFile(
|
|
|
239
226
|
return result;
|
|
240
227
|
}
|
|
241
228
|
|
|
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
|
-
|
|
277
229
|
function showUsage(): void {
|
|
278
230
|
console.log(`
|
|
279
|
-
gcal - Google Calendar CLI
|
|
231
|
+
gcal v${VERSION} - Google Calendar CLI
|
|
280
232
|
|
|
281
233
|
Usage:
|
|
282
234
|
gcal <file.ics> Import ICS file (file association)
|
|
@@ -286,10 +238,8 @@ Commands:
|
|
|
286
238
|
list [n] List upcoming n events (default: 10)
|
|
287
239
|
add <title> <when> [duration] Add event
|
|
288
240
|
del|delete <id> [id2...] Delete event(s) by ID (prefix match)
|
|
289
|
-
update <id> [flags] Update event by ID (prefix match)
|
|
290
241
|
import <file.ics> Import events from ICS file
|
|
291
242
|
calendars List available calendars
|
|
292
|
-
assoc Associate .ics files with gcal (Windows)
|
|
293
243
|
help Show this help
|
|
294
244
|
|
|
295
245
|
Options:
|
|
@@ -297,34 +247,21 @@ Options:
|
|
|
297
247
|
-defaultUser <email> Set default user for future use
|
|
298
248
|
-c, -calendar <id> Calendar ID (default: primary)
|
|
299
249
|
-n <count> Number of events to list
|
|
300
|
-
-limit <span> Time horizon for list: #d, #w, #m, #y (default: 3m)
|
|
301
250
|
-v, -verbose Show event IDs and links
|
|
302
251
|
-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
|
|
312
252
|
|
|
313
253
|
Examples:
|
|
314
254
|
gcal meeting.ics Import ICS file
|
|
315
255
|
gcal list List next 10 events
|
|
316
|
-
gcal add "Dentist" "
|
|
256
|
+
gcal add "Dentist" "Friday 3pm" "1h"
|
|
317
257
|
gcal add "Lunch" "1/14/2026 12:00" "1h"
|
|
318
258
|
gcal add "Meeting" "tomorrow 10:00"
|
|
319
259
|
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
|
|
324
260
|
gcal -defaultUser bob@gmail.com Set default user
|
|
325
261
|
|
|
326
262
|
File Association (Windows):
|
|
327
|
-
|
|
263
|
+
assoc .ics=icsfile
|
|
264
|
+
ftype icsfile=gcal "%1"
|
|
328
265
|
`);
|
|
329
266
|
}
|
|
330
267
|
|
|
@@ -339,56 +276,6 @@ interface ParsedArgs {
|
|
|
339
276
|
verbose: boolean;
|
|
340
277
|
icsFile: string; /** Direct .ics file path */
|
|
341
278
|
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;
|
|
392
279
|
}
|
|
393
280
|
|
|
394
281
|
function parseArgs(argv: string[]): ParsedArgs {
|
|
@@ -402,14 +289,7 @@ function parseArgs(argv: string[]): ParsedArgs {
|
|
|
402
289
|
help: false,
|
|
403
290
|
verbose: false,
|
|
404
291
|
icsFile: '',
|
|
405
|
-
birthdays: false
|
|
406
|
-
reminders: [],
|
|
407
|
-
noReminders: false,
|
|
408
|
-
timeLimit: '3m',
|
|
409
|
-
title: '',
|
|
410
|
-
location: '',
|
|
411
|
-
startTime: '',
|
|
412
|
-
duration: ''
|
|
292
|
+
birthdays: false
|
|
413
293
|
};
|
|
414
294
|
|
|
415
295
|
const unknown: string[] = [];
|
|
@@ -444,49 +324,17 @@ function parseArgs(argv: string[]): ParsedArgs {
|
|
|
444
324
|
case '--birthdays':
|
|
445
325
|
result.birthdays = true;
|
|
446
326
|
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
|
-
}
|
|
484
327
|
case '-h':
|
|
485
328
|
case '-help':
|
|
486
329
|
case '--help':
|
|
487
330
|
case 'help':
|
|
488
331
|
result.help = true;
|
|
489
332
|
break;
|
|
333
|
+
case '-V':
|
|
334
|
+
case '-version':
|
|
335
|
+
case '--version':
|
|
336
|
+
console.log(`gcal v${VERSION}`);
|
|
337
|
+
process.exit(0);
|
|
490
338
|
default:
|
|
491
339
|
if (arg.startsWith('-')) {
|
|
492
340
|
unknown.push(arg);
|
|
@@ -506,8 +354,7 @@ function parseArgs(argv: string[]): ParsedArgs {
|
|
|
506
354
|
}
|
|
507
355
|
|
|
508
356
|
if (unknown.length > 0) {
|
|
509
|
-
console.error(`Unknown options: ${unknown.join(', ')}
|
|
510
|
-
showUsage();
|
|
357
|
+
console.error(`Unknown options: ${unknown.join(', ')}`);
|
|
511
358
|
process.exit(1);
|
|
512
359
|
}
|
|
513
360
|
|
|
@@ -562,12 +409,6 @@ async function main(): Promise<void> {
|
|
|
562
409
|
process.exit(1);
|
|
563
410
|
}
|
|
564
411
|
|
|
565
|
-
// Commands that don't need a user
|
|
566
|
-
if (parsed.command === 'assoc') {
|
|
567
|
-
setupFileAssociation();
|
|
568
|
-
process.exit(0);
|
|
569
|
-
}
|
|
570
|
-
|
|
571
412
|
// Resolve user
|
|
572
413
|
const user = resolveUser(parsed.user, false);
|
|
573
414
|
if (!user) {
|
|
@@ -607,9 +448,8 @@ async function main(): Promise<void> {
|
|
|
607
448
|
|
|
608
449
|
case 'list': {
|
|
609
450
|
const count = parsed.args[0] ? parseInt(parsed.args[0]) : parsed.count;
|
|
610
|
-
const timeMax = parseTimeLimit(parsed.timeLimit).toISOString();
|
|
611
451
|
const token = await getAccessToken(user, false);
|
|
612
|
-
let events = await listEvents(token, parsed.calendar, count
|
|
452
|
+
let events = await listEvents(token, parsed.calendar, count);
|
|
613
453
|
const birthdayCount = events.filter(e => e.eventType === 'birthday').length;
|
|
614
454
|
if (!parsed.birthdays) {
|
|
615
455
|
events = events.filter(e => e.eventType !== 'birthday');
|
|
@@ -626,8 +466,8 @@ async function main(): Promise<void> {
|
|
|
626
466
|
const shortId = (event.id || '').slice(0, 8);
|
|
627
467
|
const start = event.start ? formatDateTime(event.start) : '?';
|
|
628
468
|
const duration = (event.start && event.end) ? formatDuration(event.start, event.end) : '';
|
|
629
|
-
const summary =
|
|
630
|
-
const loc =
|
|
469
|
+
const summary = (event.summary || '(no title)') + (event.eventType === 'birthday' ? ' [from contact]' : '');
|
|
470
|
+
const loc = event.location || '';
|
|
631
471
|
if (parsed.verbose) {
|
|
632
472
|
rows.push([shortId, start, duration, summary, loc, event.htmlLink || '']);
|
|
633
473
|
} else {
|
|
@@ -644,14 +484,13 @@ async function main(): Promise<void> {
|
|
|
644
484
|
);
|
|
645
485
|
|
|
646
486
|
// Print header
|
|
647
|
-
const headerLine = headers.map((h, i) => h.padEnd(colWidths[i])).join('
|
|
487
|
+
const headerLine = headers.map((h, i) => h.padEnd(colWidths[i])).join(' ');
|
|
648
488
|
console.log(headerLine);
|
|
649
|
-
console.log(colWidths.map(w => '-'.repeat(w)).join('
|
|
489
|
+
console.log(colWidths.map(w => '-'.repeat(w)).join(' '));
|
|
650
490
|
|
|
651
|
-
// Print rows
|
|
491
|
+
// Print rows
|
|
652
492
|
for (const row of rows) {
|
|
653
|
-
const
|
|
654
|
-
const line = row.map((cell, i) => i < lastIdx ? (cell || '').padEnd(colWidths[i]) : (cell || '')).join(' ');
|
|
493
|
+
const line = row.map((cell, i) => (cell || '').padEnd(colWidths[i])).join(' ');
|
|
655
494
|
console.log(line);
|
|
656
495
|
}
|
|
657
496
|
}
|
|
@@ -685,26 +524,10 @@ async function main(): Promise<void> {
|
|
|
685
524
|
}
|
|
686
525
|
};
|
|
687
526
|
|
|
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
|
-
|
|
694
527
|
const token = await getAccessToken(user, true);
|
|
695
528
|
const created = await createEvent(token, event, parsed.calendar);
|
|
696
529
|
console.log(`\nEvent created: ${created.summary}`);
|
|
697
530
|
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
|
-
}
|
|
708
531
|
if (created.htmlLink) {
|
|
709
532
|
console.log(` Link: ${created.htmlLink}`);
|
|
710
533
|
}
|
|
@@ -732,12 +555,7 @@ async function main(): Promise<void> {
|
|
|
732
555
|
if (matches.length > 1) {
|
|
733
556
|
console.error(`${idPrefix}: ambiguous (${matches.length} matches)`);
|
|
734
557
|
for (const e of matches) {
|
|
735
|
-
|
|
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}`);
|
|
558
|
+
console.error(` ${e.id?.slice(0, 8)} - ${e.summary}`);
|
|
741
559
|
}
|
|
742
560
|
continue;
|
|
743
561
|
}
|
|
@@ -748,7 +566,7 @@ async function main(): Promise<void> {
|
|
|
748
566
|
continue;
|
|
749
567
|
}
|
|
750
568
|
await deleteEvent(token, event.id!, parsed.calendar);
|
|
751
|
-
console.log(`Deleted: ${
|
|
569
|
+
console.log(`Deleted: ${event.summary}`);
|
|
752
570
|
}
|
|
753
571
|
break;
|
|
754
572
|
}
|
|
@@ -767,104 +585,6 @@ async function main(): Promise<void> {
|
|
|
767
585
|
break;
|
|
768
586
|
}
|
|
769
587
|
|
|
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
|
-
|
|
868
588
|
default:
|
|
869
589
|
console.error(`Unknown command: ${parsed.command}`);
|
|
870
590
|
showUsage();
|
|
@@ -873,10 +593,8 @@ async function main(): Promise<void> {
|
|
|
873
593
|
}
|
|
874
594
|
|
|
875
595
|
if (import.meta.main) {
|
|
876
|
-
main().
|
|
877
|
-
process.exitCode = 0;
|
|
878
|
-
}).catch(e => {
|
|
596
|
+
main().catch(e => {
|
|
879
597
|
console.error(`Error: ${e.message}`);
|
|
880
|
-
process.
|
|
598
|
+
process.exit(1);
|
|
881
599
|
});
|
|
882
600
|
}
|
package/glib/gutils.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ export declare function getAppDir(): string;
|
|
|
20
20
|
export declare function getDataDir(): string;
|
|
21
21
|
export declare const DATA_DIR: string;
|
|
22
22
|
export declare const CONFIG_FILE: string;
|
|
23
|
-
/**
|
|
23
|
+
/** OAuth credentials shipped with the package */
|
|
24
24
|
export declare const CREDENTIALS_FILE: string;
|
|
25
25
|
export declare function loadConfig(): GcalConfig;
|
|
26
26
|
export declare function saveConfig(config: GcalConfig): void;
|
package/glib/gutils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gutils.d.ts","sourceRoot":"","sources":["gutils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,SAAS;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,OAAO,QAAoC,CAAC;AAEzD,+DAA+D;AAC/D,wBAAgB,SAAS,IAAI,MAAM,CAKlC;AAED,kFAAkF;AAClF,wBAAgB,UAAU,IAAI,MAAM,CAMnC;AAED,eAAO,MAAM,QAAQ,QAAe,CAAC;AACrC,eAAO,MAAM,WAAW,QAAwC,CAAC;AAEjE,
|
|
1
|
+
{"version":3,"file":"gutils.d.ts","sourceRoot":"","sources":["gutils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,SAAS;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,OAAO,QAAoC,CAAC;AAEzD,+DAA+D;AAC/D,wBAAgB,SAAS,IAAI,MAAM,CAKlC;AAED,kFAAkF;AAClF,wBAAgB,UAAU,IAAI,MAAM,CAMnC;AAED,eAAO,MAAM,QAAQ,QAAe,CAAC;AACrC,eAAO,MAAM,WAAW,QAAwC,CAAC;AAEjE,iDAAiD;AACjD,eAAO,MAAM,gBAAgB,QAA8C,CAAC;AAE5E,wBAAgB,UAAU,IAAI,UAAU,CASvC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAMnD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAUpD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAQhD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAStC;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAIpD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG,MAAM,CAsDzE;AAED,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAclG;AAED,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAkB7H;AAED,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUtD;AAED,sCAAsC;AACtC,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CA+GjD;AAED,4BAA4B;AAC5B,wBAAgB,EAAE,IAAI,MAAM,CAG3B"}
|
package/glib/gutils.js
CHANGED
|
@@ -22,8 +22,8 @@ export function getDataDir() {
|
|
|
22
22
|
}
|
|
23
23
|
export const DATA_DIR = getDataDir();
|
|
24
24
|
export const CONFIG_FILE = path.join(getAppDir(), 'config.json');
|
|
25
|
-
/**
|
|
26
|
-
export const CREDENTIALS_FILE = path.join(
|
|
25
|
+
/** OAuth credentials shipped with the package */
|
|
26
|
+
export const CREDENTIALS_FILE = path.join(APP_DIR, 'gcal-credentials.json');
|
|
27
27
|
export function loadConfig() {
|
|
28
28
|
if (fs.existsSync(CONFIG_FILE)) {
|
|
29
29
|
try {
|
|
@@ -209,16 +209,12 @@ export function parseDateTime(input) {
|
|
|
209
209
|
d.setHours(h, parseInt(min || '0'), 0, 0);
|
|
210
210
|
return d;
|
|
211
211
|
}
|
|
212
|
-
// Handle weekday names
|
|
213
|
-
const
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
sat: 6, saturday: 6
|
|
217
|
-
};
|
|
218
|
-
const dayMatch = lower.match(/^(next\s+)?([a-z]+)\s+(?:at\s+)?(\d{1,2})(?::(\d{2}))?\s*(am|pm)?$/i);
|
|
219
|
-
if (dayMatch && weekdayMap[dayMatch[2].toLowerCase()] !== undefined) {
|
|
212
|
+
// Handle weekday names
|
|
213
|
+
const weekdays = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
|
|
214
|
+
const dayMatch = lower.match(/^(next\s+)?(sunday|monday|tuesday|wednesday|thursday|friday|saturday)\s+(?:at\s+)?(\d{1,2})(?::(\d{2}))?\s*(am|pm)?$/i);
|
|
215
|
+
if (dayMatch) {
|
|
220
216
|
const [, next, day, hour, min, ampm] = dayMatch;
|
|
221
|
-
const targetDay =
|
|
217
|
+
const targetDay = weekdays.indexOf(day.toLowerCase());
|
|
222
218
|
const d = new Date(now);
|
|
223
219
|
let daysUntil = targetDay - d.getDay();
|
|
224
220
|
if (daysUntil <= 0 || next)
|
package/glib/gutils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gutils.js","sourceRoot":"","sources":["gutils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gutils.js","sourceRoot":"","sources":["gutils.ts"],"names":[],"mappings":"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"}
|