72 lines
1.9 KiB
Python
Executable File
72 lines
1.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import json
|
|
import os
|
|
import re
|
|
import subprocess
|
|
import sys
|
|
from datetime import datetime
|
|
from pathlib import Path
|
|
|
|
def get_khal_date_format():
|
|
"""Read the khal config and extract the longdatetimeformat."""
|
|
xdg_config = os.environ.get('XDG_CONFIG_HOME', os.path.expanduser('~/.config'))
|
|
config_path = Path(xdg_config) / 'khal' / 'config'
|
|
|
|
if not config_path.exists():
|
|
return '%c'
|
|
|
|
with open(config_path, 'r') as f:
|
|
for line in f:
|
|
if m := re.match(r'^longdatetimeformat\s?=\s?(.+?)\s*$', line):
|
|
date_format = m.group(1).strip()
|
|
return date_format
|
|
|
|
return '%c'
|
|
|
|
|
|
def to_khal(date_str, khal_format):
|
|
dt = datetime.strptime(date_str, "%Y-%m-%d")
|
|
return dt.strftime(khal_format)
|
|
|
|
def from_khal(date_str, khal_format):
|
|
if not date_str:
|
|
return ''
|
|
dt = datetime.strptime(date_str, khal_format)
|
|
return dt.isoformat()
|
|
|
|
def convert_event(event, khal_format):
|
|
event['start-long-full'] = from_khal(event.get('start-long-full', ''), khal_format)
|
|
event['end-long-full'] = from_khal(event.get('end-long-full', ''), khal_format)
|
|
return event
|
|
|
|
def main():
|
|
start_date = sys.argv[1]
|
|
duration = sys.argv[2]
|
|
|
|
khal_format = get_khal_date_format()
|
|
khal_start = to_khal(start_date, khal_format)
|
|
|
|
cmd = [
|
|
'khal', 'list',
|
|
'--json', 'uid',
|
|
'--json', 'title',
|
|
'--json', 'start-long-full',
|
|
'--json', 'end-long-full',
|
|
'--json', 'calendar',
|
|
'--json', 'description',
|
|
'--json', 'location',
|
|
'--json', 'repeat-pattern',
|
|
khal_start,
|
|
duration
|
|
]
|
|
|
|
result = subprocess.run(cmd, capture_output=True, text=True)
|
|
output = result.stdout.strip()
|
|
|
|
for line in output.split('\n'):
|
|
day_events = json.loads(line)
|
|
print(json.dumps([convert_event(e, khal_format) for e in day_events]))
|
|
|
|
if __name__ == '__main__':
|
|
main()
|