From b96e175192f8711f07beca6e27f8d9fb42b12227 Mon Sep 17 00:00:00 2001 From: Satvik Sharma Date: Wed, 25 Oct 2017 11:52:22 +1100 Subject: calcurse-caldav: Add SyncFilter config option The SyncFilter option filters the types of items synced from/to a CalDAV server by making use of the --filter-type command line argument. Signed-off-by: Satvik Sharma Signed-off-by: Lukas Fleischer --- contrib/caldav/README.md | 2 ++ contrib/caldav/calcurse-caldav.py | 53 ++++++++++++++++++++++++++++++--------- contrib/caldav/config.sample | 10 ++++++++ 3 files changed, 53 insertions(+), 12 deletions(-) (limited to 'contrib/caldav') diff --git a/contrib/caldav/README.md b/contrib/caldav/README.md index 63f6f20..35b789e 100644 --- a/contrib/caldav/README.md +++ b/contrib/caldav/README.md @@ -108,6 +108,7 @@ The following options should also be changed in your config file: Hostname = apidata.googleusercontent.com Path = /caldav/v2/*your_calendar_id_here*/events/ Scope = https://www.googleapis.com/auth/calendar +SyncFilter = cal ``` Your Calendar ID for "*Path*" should be your email for the default calendar. @@ -127,6 +128,7 @@ A complete config file for example@gmail.com would have the following options: Hostname = apidata.googleusercontent.com Path = /caldav/v2/example@gmail.com/events/ AuthMethod = oauth2 +SyncFilter = cal ... diff --git a/contrib/caldav/calcurse-caldav.py b/contrib/caldav/calcurse-caldav.py index 1d0a0c8..bc6d714 100755 --- a/contrib/caldav/calcurse-caldav.py +++ b/contrib/caldav/calcurse-caldav.py @@ -44,6 +44,11 @@ def die_atnode(msg, node): die(msg) +def validate_sync_filter(): + valid_sync_filter_values = {'event', 'apt', 'recur-event', 'recur-apt', 'todo', 'recur', 'cal'} + return set(sync_filter.split(',')) - valid_sync_filter_values + + def calcurse_wipe(): if verbose: print('Removing all local calcurse objects...') @@ -53,13 +58,20 @@ def calcurse_wipe(): def calcurse_import(icaldata): - p = subprocess.Popen([calcurse, '-i', '-', '--dump-imported', '-q', - '--format-apt=%(hash)\\n', - '--format-recur-apt=%(hash)\\n', - '--format-event=%(hash)\\n', - '--format-recur-event=%(hash)\\n', - '--format-todo=%(hash)\\n'], - stdin=subprocess.PIPE, stdout=subprocess.PIPE) + command = [ + calcurse, + '-i', '-', + '--dump-imported', + '-q', + '--filter-type', sync_filter, + '--format-apt=%(hash)\\n', + '--format-recur-apt=%(hash)\\n', + '--format-event=%(hash)\\n', + '--format-recur-event=%(hash)\\n', + '--format-todo=%(hash)\\n' + ] + + p = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE) return p.communicate(icaldata.encode('utf-8'))[0].decode('utf-8').rstrip() @@ -70,11 +82,18 @@ def calcurse_export(objhash): def calcurse_hashset(): - p = subprocess.Popen([calcurse, '-G', '--format-apt=%(hash)\\n', - '--format-recur-apt=%(hash)\\n', - '--format-event=%(hash)\\n', - '--format-recur-event=%(hash)\\n', - '--format-todo=%(hash)\\n'], stdout=subprocess.PIPE) + command = [ + calcurse, + '-G', + '--filter-type', sync_filter, + '--format-apt=%(hash)\\n', + '--format-recur-apt=%(hash)\\n', + '--format-event=%(hash)\\n', + '--format-recur-event=%(hash)\\n', + '--format-todo=%(hash)\\n' + ] + + p = subprocess.Popen(command, stdout=subprocess.PIPE) return set(p.communicate()[0].decode('utf-8').rstrip().splitlines()) @@ -533,6 +552,16 @@ if config.has_option('General', 'AuthMethod'): else: authmethod = 'basic' +if config.has_option('General', 'SyncFilter'): + sync_filter = config.get('General', 'SyncFilter') + + invalid_filter_values = validate_sync_filter() + + if len(invalid_filter_values): + die('Invalid value(s) in SyncFilter option: ' + ', '.join(invalid_filter_values)) +else: + sync_filter = 'cal,todo' + if config.has_option('Auth', 'UserName'): username = config.get('Auth', 'UserName') else: diff --git a/contrib/caldav/config.sample b/contrib/caldav/config.sample index 76c3ce3..8cbc4be 100644 --- a/contrib/caldav/config.sample +++ b/contrib/caldav/config.sample @@ -18,6 +18,16 @@ Path = /path/to/calendar/on/the/server/ # Enable this if you want to skip SSL certificate checks. InsecureSSL = No +# This option allows you to filter the types of tasks synced. To this end, the +# value of this option should be a comma-separated list of item types, where +# each item type is either "event", "apt", "recur-event", "recur-apt", "todo", +# "recur" or "cal". Note that the comma-separated list must not contain any +# spaces. Refer to the documentation of the --filter-type command line argument +# of calcurse for more details. Set this option to "cal" if the configured +# CalDAV server doesn't support tasks, such as is the case with Google +# Calendar. +SyncFilter = cal,todo + # Disable this option to actually enable synchronization. If it is enabled, # nothing is actually written to the server or to the local data files. If you # combine DryRun = Yes with Verbose = Yes, you get a log of what would have -- cgit v1.2.3-54-g00ecf