From c13dfbe5f66dc0c0ac1289f986d8584a9d12554b Mon Sep 17 00:00:00 2001 From: Jody Klymak Date: Sat, 18 Apr 2020 15:31:00 -0700 Subject: [PATCH] ENH/WIP: add a free command --- gcalcli/argparsers.py | 8 ++++++++ gcalcli/cli.py | 5 +++++ gcalcli/gcal.py | 41 +++++++++++++++++++++++++++++++++++++++-- 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/gcalcli/argparsers.py b/gcalcli/argparsers.py index 6a76554e..3faedf9d 100644 --- a/gcalcli/argparsers.py +++ b/gcalcli/argparsers.py @@ -329,11 +329,19 @@ def get_argument_parser(): description='Get a week-based agenda in calendar format.') calw.add_argument('weeks', type=int, default=1, nargs='?') + free = sub.add_parser( + 'free', parents=[details_parser, output_parser, cal_query_parser], + help='get free', + description='Get free timeslots in week.') + free.add_argument('weeks', type=int, default=1, nargs='?') + sub.add_parser( 'calm', parents=[details_parser, output_parser, cal_query_parser], help='get a month agenda in calendar format', description='Get a month agenda in calendar format.') + + quick = sub.add_parser( 'quick', parents=[details_parser, remind_parser], help='quick-add an event to a calendar', diff --git a/gcalcli/cli.py b/gcalcli/cli.py index d9934124..04c45b5a 100755 --- a/gcalcli/cli.py +++ b/gcalcli/cli.py @@ -172,6 +172,11 @@ def main(): start_text=parsed_args.start ) + elif parsed_args.command == 'free': + print(parsed_args) + gcal.FreeQuery(start=parsed_args.start) + + elif parsed_args.command == 'calm': gcal.CalQuery(parsed_args.command, start_text=parsed_args.start) diff --git a/gcalcli/gcal.py b/gcalcli/gcal.py index eab41efe..2e7aaeb6 100644 --- a/gcalcli/gcal.py +++ b/gcalcli/gcal.py @@ -1010,7 +1010,6 @@ def _iterate_events(self, start_datetime, event_list, year_date=False, work=None): selected = 0 - if len(event_list) == 0: self.printer.msg('\nNo Events Found...\n', 'yellow') return selected @@ -1155,6 +1154,37 @@ def ListAllCalendars(self): self._calendar_color(cal) ) + def _display_free(self, start, end, search=None, + year_date=False): + event_list = self._search_for_events(start, end, search) + day = start.replace(hour=0, minute=0, second=0, microsecond=0) + dayst = start.replace(hour=9, minute=0, second=0, microsecond=0) + nextst = dayst + dayend = nextst.replace(hour=17) + prefix = dayst.strftime('%a %b %d') + + self.printer.msg(f'\nAvailability {dayst.strftime("%b %d")} - {end.strftime("%b %d")} \n', 'yellow') + self.printer.msg('---------------------------- \n\n', 'yellow') + for event in event_list: + + while event['s'] > dayend: + self.printer.msg(prefix, 'green') + self.printer.msg(f" {nextst.strftime('%H:%M')} to {dayend.strftime('%H:%M')}\n", ) + dayst = dayst + timedelta(days=1) + dayend = dayend + timedelta(days=1) + nextst = dayst + print_prefix = True + prefix = dayst.strftime('\n%a %b %d') + if event['s'] >= nextst: + self.printer.msg(prefix, 'green') + self.printer.msg(f" {nextst.strftime('%H:%M')} to {event['s'].strftime('%H:%M')}\n") + nextst = event['e'] + prefix = ' ' + if event['e'] < dayend: + print(prefix + f" {nextst.strftime('%H:%M')} to {dayend.strftime('%H:%M')}") + + + def _display_queried_events(self, start, end, search=None, year_date=False): event_list = self._search_for_events(start, end, search) @@ -1215,6 +1245,14 @@ def AgendaQuery(self, start=None, end=None): return self._display_queried_events(start, end) + def FreeQuery(self, start=None, count=1): + if not start: + start = self.now.replace(hour=0, minute=0, second=0, microsecond=0) + + end = (start + timedelta(days=(count * 8))) + + return self._display_free(start, end) + def CalQuery(self, cmd, start_text='', count=1): if not start_text: # convert now to midnight this morning and use for default @@ -1256,7 +1294,6 @@ def CalQuery(self, cmd, start_text='', count=1): count += 1 event_list = self._search_for_events(start, end, None) - self._GraphEvents(cmd, start, count, event_list) def QuickAddEvent(self, event_text, reminders=None):