X-Git-Url: https://git.madduck.net/etc/mutt.git/blobdiff_plain/187227c4347317860698831c97d71a19977f2122..d5205848963be4dac741aea462d3647945205ea8:/.mutt/icalparser diff --git a/.mutt/icalparser b/.mutt/icalparser new file mode 100755 index 0000000..b2b1af3 --- /dev/null +++ b/.mutt/icalparser @@ -0,0 +1,51 @@ +#!/usr/bin/python3 + +import sys +import os +from icalendar import Calendar, Event + +def dtstrs(start, end): + start, end = start.dt, end.dt + + def strftime(dt, strf): + return dt.astimezone().strftime(strf) + + ret = [] + if start.tzinfo == end.tzinfo: + ret.append(strftime(start, '%F %R')) + + else: + ret.append(strftime(start, '%F %R %Z')) + + if start.date() == end.date(): + ret.append(strftime(end, '%T %Z')) + + else: + ret.append(strftime(end, '%F %R %Z')) + + return ret + +def parse_ics_file(fp): + cal = Calendar.from_ical(fp.read()) + + for event in cal.walk(): + if event.name != "VEVENT": continue + print('=' * (int(os.getenv('COLUMNS', 80))-10)) + print('{} → {}'.format(*dtstrs(event.get('dtstart'), event.get('dtend')))) + for i in ('summary','organizer','location','rrule'): + print(' {:9s}: {}'.format(i.capitalize(), event.get(i, f'(no {i})'))) + flags = [] + for k in ('status', 'class', 'transp', 'priority'): + t = event.get(k) + if t: flags.append((k, t)) + print(' Flags : ' + ' '.join('{}:{}'.format(*f) for f in flags)) + +if __name__ == '__main__': + + if len(sys.argv) > 1: + for f in sys.argv[1:]: + fp = open(f) + parse_ics_file(fp) + fp.close() + else: + parse_ics_file(sys.stdin)