summaryrefslogtreecommitdiff
path: root/calendar-cli.py
diff options
context:
space:
mode:
authorZachary Palmer <zep_git@bahj.com>2016-02-02 20:04:25 -0500
committerZachary Palmer <zep_git@bahj.com>2016-02-03 08:41:50 -0500
commit23fc24863f9067b75f7c3d43b44eb50f45f3d488 (patch)
treee1bc39a7034eed8cbf9ba0e10d85298bb6161ad9 /calendar-cli.py
parentd282884ff2ea1e5cb3c7160c3193111b39c6219e (diff)
downloadcalendar-cli-23fc24863f9067b75f7c3d43b44eb50f45f3d488.zip
Added first draft of feature for adding alarms to newly-created TODOs.
Diffstat (limited to 'calendar-cli.py')
-rwxr-xr-xcalendar-cli.py25
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')