diff options
author | Tobias Brox <tobias@redpill-linpro.com> | 2016-03-16 12:36:42 +0100 |
---|---|---|
committer | Tobias Brox <tobias@redpill-linpro.com> | 2016-03-16 12:36:42 +0100 |
commit | c25c95c81c635a9ffe25cbf49213f0b80d432dc6 (patch) | |
tree | 3dd0270bce364ba7a0a29a1dca52272a5b849221 | |
parent | da319b6392b11333752b9bc8c6d74482bd2ee395 (diff) | |
parent | e81db9ca419b822bf064021c94ac0616b6db7ddd (diff) | |
download | calendar-cli-c25c95c81c635a9ffe25cbf49213f0b80d432dc6.zip |
Merge branch 'v0.11.0.dev' of github.com:tobixen/calendar-cli into v0.11.0.dev
-rwxr-xr-x | calendar-cli.py | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/calendar-cli.py b/calendar-cli.py index d812366..7f3bb21 100755 --- a/calendar-cli.py +++ b/calendar-cli.py @@ -11,7 +11,7 @@ import time from datetime import datetime, timedelta, date import dateutil.parser from dateutil.rrule import rrulestr -from icalendar import Calendar,Event,Todo,Journal +from icalendar import Calendar,Event,Todo,Journal,Alarm import caldav import uuid import json @@ -82,6 +82,13 @@ def caldav_connect(args): # Create the account return caldav.DAVClient(url=args.caldav_url, username=args.caldav_user, password=args.caldav_pass, ssl_verify_cert=ssl_verify_cert, proxy=args.caldav_proxy) +def parse_time_delta(delta_string): + # TODO: handle bad strings more gracefully + if len(delta_string) < 2 or delta_string[-1].lower() not in time_units: + raise ValueError("Invalid time delta: %s" % delta_string) + num = int(delta_string[:-1]) + return timedelta(0, num*time_units[delta_string[-1].lower()]) + def find_calendar(caldav_conn, args): if args.calendar_url: if '/' in args.calendar_url: @@ -220,6 +227,13 @@ def interactive_config(args, config, remaining_argv): if args.config_section == 'default' and section != 'default': config['default'] = config[section] return config + +def create_alarm(message, relative_timedelta): + alarm = Alarm() + alarm.add('ACTION', 'DISPLAY') + alarm.add('DESCRIPTION', message) + alarm.add('TRIGGER', relative_timedelta, parameters={'VALUE':'DURATION'}) + return alarm def calendar_add(caldav_conn, args): cal = Calendar() @@ -356,6 +370,11 @@ def todo_add(caldav_conn, args): if val: vals = val.split(',') todo.add(attr, vals) + + if args.alarm is not None: + alarm = create_alarm(' '.join(args.summaryline), parse_time_delta(args.alarm)) + todo.add_component(alarm) + cal.add_component(todo) _calendar_addics(caldav_conn, cal.to_ical(), uid, args) print("Added todo item with uid=%s" % uid) @@ -726,6 +745,10 @@ def main(): for attr in vtodo_txt_one + vtodo_txt_many: if attr != 'summary': todo_add_parser.add_argument('--set-'+attr, help="Set "+attr) + # TODO: we probably want to be able to set or delete alarms in other situations, yes? generalize? + todo_add_parser.add_argument('--alarm', metavar='DURATION_BEFORE', + help="specifies a time at which a reminder should be presented for this task, " \ + "relative to the start time of the task (as a timestamp delta)") todo_add_parser.set_defaults(func=todo_add) todo_list_parser = todo_subparsers.add_parser('list') |