UNPKG

gcal-commander

Version:

A command-line interface for Google Calendar operations

103 lines (102 loc) 4.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("@oclif/core"); const base_command_1 = require("../../base-command"); const date_formatter_1 = require("../../utils/date-formatter"); const table_formatter_1 = require("../../utils/table-formatter"); class EventsList extends base_command_1.BaseCommand { static args = { calendar: core_1.Args.string({ default: 'primary', description: 'Calendar ID to list events from', }), }; static description = 'List upcoming calendar events'; static examples = [ '<%= config.bin %> <%= command.id %>', '<%= config.bin %> <%= command.id %> my-calendar@gmail.com', '<%= config.bin %> <%= command.id %> --max-results 20', '<%= config.bin %> <%= command.id %> --days 7', ]; static flags = { ...base_command_1.BaseCommand.baseFlags, days: core_1.Flags.integer({ char: 'd', default: 30, description: 'Number of days to look ahead', }), 'max-results': core_1.Flags.integer({ char: 'n', default: 10, description: 'Maximum number of events to return', }), }; async run() { const { args, flags } = await this.parse(EventsList); try { await this.initI18nService(); this.logStatus(this.t('events.list.authenticating')); await this.initCalendarService(); // Get configuration values // Determine calendar to use: explicit CLI arg > config > default 'primary' const defaultCalendar = await this.configService.get('defaultCalendar'); const calendarId = args.calendar === 'primary' ? defaultCalendar || 'primary' : args.calendar; // Apply config defaults for other settings const configMaxResults = (await this.configService.get('events.maxResults')) || 10; const configDays = (await this.configService.get('events.days')) || 30; const configFormat = (await this.configService.get('events.format')) || 'table'; const maxResults = flags['max-results'] || configMaxResults; const days = flags.days || configDays; const format = this.format === 'table' ? configFormat : this.format; const timeMin = new Date().toISOString(); const timeMax = new Date(Date.now() + days * 24 * 60 * 60 * 1000).toISOString(); this.logStatus(this.t('events.list.fetching', { calendarId })); const events = await this.calendarService.listEvents({ calendarId, maxResults, timeMax, timeMin, }); if (events.length === 0) { this.logResult(this.t('events.list.noEventsFound')); return; } if (format === 'json' || format === 'pretty-json') { this.outputJson(events); } else { this.displayEventsTable(events); } } catch (error) { this.logError(this.t('events.list.error', { error: String(error) })); } } displayEventsTable(events) { this.logResult(this.t('events.list.tableHeader', { count: events.length })); const columns = [ { key: 'title', label: this.t('events.list.columns.title'), width: 30 }, { key: 'date', label: this.t('events.list.columns.date'), width: 15 }, { key: 'time', label: this.t('events.list.columns.time'), width: 15 }, { key: 'location', label: this.t('events.list.columns.location'), width: 20 }, { key: 'description', label: this.t('events.list.columns.description'), width: 30 }, ]; const formatter = new table_formatter_1.TableFormatter({ columns, fields: this.fields, }); const tableData = events.map((event) => { const timeInfo = date_formatter_1.DateFormatter.formatListEventTime(event); return { title: event.summary || this.t('events.list.noTitle'), date: timeInfo?.dateStr || '', time: timeInfo?.timeStr || '', location: event.location || '', description: event.description || '', }; }); const table = formatter.format(tableData); this.logResult(table); } } exports.default = EventsList;