def start(args, service, wh): ongoing_events = find_ongoing_events(service, args) if len(ongoing_events) > 0: print( "There are {} ongoing evnts, consider stopping them before starting new." ) for event in ongoing_events: print(event_utils.format_event(event)) if len(ongoing_events) == 1: if query_yes_no("Stop the ongoing event at this time", default="no"): utc = pytz.timezone("UTC") event = ongoing_events[0] end_time = datetime.datetime.combine(args.date.date(), args.start.time()) utc_end = end_time.astimezone(utc) event["end"]["dateTime"] = utc_end.isoformat() calendar_id = cal.get_calendar_id(service, args.calendar) updated_event = (service.events().update( calendarId=calendar_id, eventId=event["id"], body=event).execute()) print(updated_event["updated"]) else: if not args.force and not query_yes_no("Start event anyway", default="no"): sys.exit(0) start_time = datetime.datetime.combine(args.date.date(), args.start.time()) event = generate_event(start_time, start_time, args.summary, args.description, args.location) create_new_event(service, event, args)
def find_ongoing_events(service, args): calendar_id = cal.get_calendar_id(service, args.calendar) all_events = cal.get_all_events(service, calendar_id) possible_events = [] for event in all_events: if event_utils.event_duration(event).total_seconds() == 0.0: possible_events.append(event) return possible_events
def summary(self): calendar_id = cal.get_calendar_id(self.service, self.args.calendar) all_events = cal.get_all_events(self.service, calendar_id) # The size of each step in days day_delta = datetime.timedelta(days=1) start_date = self.args.start.date() first_date = get_first_date(all_events).date() if start_date < first_date: start_date = first_date end_date = self.args.end.date() acc_time_diff_total = 0.0 acc_time_diff_week = 0.0 acc_time_diff_month = 0.0 for i in range((end_date - start_date).days + 1): date = start_date + i * day_delta if date.weekday() == 0: if self.args.weeks: print(" ** WEEK {} SUMMARY: ".format( (date - day_delta).isocalendar()[1]) + event_utils.format_time_diff(acc_time_diff_week)) acc_time_diff_week = 0.0 if date.day == 1: if self.args.months: print(" **** {} SUMMARY: ".format( (date - day_delta).strftime("%B")) + event_utils.format_time_diff(acc_time_diff_month)) acc_time_diff_month = 0.0 day_events = event_utils.get_events_on_date(all_events, date) worktime = self.total_worktime(day_events) acc_time_diff_total += time_diff(worktime, self.planned(date)) acc_time_diff_week += time_diff(worktime, self.planned(date)) acc_time_diff_month += time_diff(worktime, self.planned(date)) if self.args.days: color = "" if date.weekday() == 5 or date.weekday() == 6: color = bcolors.WEEKEND print( color, date, format_timedelta(worktime), event_utils.format_time_diff( time_diff(worktime, self.planned(date))), event_utils.graph( day_events, start=datetime.time(0, 0, 0), end=datetime.time(23, 59, 59), resolution=datetime.timedelta(minutes=15), ), bcolors.ENDC, event_utils.format_time_diff(acc_time_diff_total), ) print("Total: " + event_utils.format_time_diff(acc_time_diff_total))
def delete(args, service, wh): for id in args.ids: calendar_id = cal.get_calendar_id(service, args.calendar) event = service.events().get(calendarId=calendar_id, eventId=id).execute() print("Delete event") print(event_utils.format_event(event)) if args.force or query_yes_no("Delete the above evetn?", default="no"): service.events().delete(calendarId=calendar_id, eventId=id).execute()
def day_summary(self): today = datetime.datetime.now().date() calendar_id = cal.get_calendar_id(self.service, self.args.calendar) all_events = cal.get_all_events(self.service, calendar_id) events_on_day = event_utils.get_events_on_date(all_events, today) total_worktime = self.total_worktime(events_on_day) print( f"\nTotal time worked today: {total_worktime}/{self.planned(today)}", event_utils.format_time_diff( time_diff(total_worktime, self.planned(today))), )
def update(args, service, wh): calendar_id = cal.get_calendar_id(service, args.calendar) event = service.events().get(calendarId=calendar_id, eventId=args.id).execute() print("Replace event") print(event_utils.format_event(event)) print("with:") new_event = patch_event(event, args) print(new_event) if args.force or query_yes_no("Update the above evetn?", default="no"): update_event(new_event, service, args)
def stop(args, service, wh): calendar_id = cal.get_calendar_id(service, args.calendar) # Find latest event with same start and stop time possible_events = find_ongoing_events(service, args) if len(possible_events) == 1: event = possible_events[0] else: print("None or too many event were found: ", len(possible_events)) sys.exit(1) # Show suggested event print("Event to update:") print(event_utils.format_event(event)) # Confirm update if args.force or query_yes_no("Stop that event", "no"): # Update event new_event = patch_event(event, args) updated_event = (service.events().update(calendarId=calendar_id, eventId=new_event["id"], body=new_event).execute()) print(updated_event["updated"])
def list(args, service, wh): calendar_id = cal.get_calendar_id(service, args.calendar) all_events = cal.get_all_events(service, calendar_id) events = filter_events(all_events, args.start, args.end) event_utils.print_events(events)
def update_event(event, service, args): calendar_id = cal.get_calendar_id(service, args.calendar) updated_event = (service.events().update(calendarId=calendar_id, eventId=event["id"], body=event).execute()) print(updated_event["updated"])
def create_new_event(service, event, args): calendar_id = cal.get_calendar_id(service, args.calendar) event = service.events().insert(calendarId=calendar_id, body=event).execute() print("Event created: %s" % (event.get("htmlLink")))