2022-03-22 13:18:09 +00:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
|
|
"""Parse a vcard file given via stdin and output some details.
|
|
|
|
Currently the following details are displayed if present:
|
|
|
|
|
|
|
|
- start date and time
|
|
|
|
- the summary information of the event
|
|
|
|
- a list of attendees
|
|
|
|
- the description of the event
|
|
|
|
|
|
|
|
Please note: if multiple events are included in the data then only the
|
|
|
|
first one will be parsed and displayed!
|
|
|
|
|
|
|
|
REQUIREMENTS:
|
|
|
|
- Python 3
|
|
|
|
- Python 3 - vobject library
|
|
|
|
|
|
|
|
To use as a filter in aerc, add the following line to your aerc.config:
|
|
|
|
text/calendar=show-ics-details.py
|
|
|
|
"""
|
|
|
|
|
|
|
|
import re
|
|
|
|
import sys
|
|
|
|
|
|
|
|
import vobject
|
|
|
|
|
|
|
|
|
|
|
|
def remove_mailto(message: str) -> str:
|
|
|
|
"""Remove a possible existing 'mailto:' from the given message.
|
|
|
|
|
|
|
|
Keyword arguments:
|
|
|
|
message -- A message string.
|
|
|
|
"""
|
|
|
|
return re.sub(r'^mailto:', '', message, flags=re.IGNORECASE)
|
|
|
|
|
|
|
|
def extract_field(cal: vobject.icalendar.VCalendar2_0, name: str) -> str:
|
|
|
|
"""Extract the desired field from the given calendar object.
|
|
|
|
|
|
|
|
Keyword arguments:
|
|
|
|
cal -- A VCalendar 2.0 object.
|
|
|
|
name -- The field name.
|
|
|
|
"""
|
|
|
|
try:
|
2022-03-24 11:41:24 +00:00
|
|
|
name = name.strip()
|
|
|
|
if name == 'attendees':
|
|
|
|
attendees = []
|
|
|
|
for attendee in cal.vevent.attendee_list:
|
|
|
|
attendees.append(remove_mailto(attendee.valueRepr()).strip())
|
|
|
|
return ', '.join(attendees)
|
|
|
|
elif name == 'description':
|
|
|
|
return cal.vevent.description.valueRepr().strip()
|
|
|
|
elif name == 'dtstart':
|
|
|
|
return str(cal.vevent.dtstart.valueRepr()).strip()
|
|
|
|
elif name == 'organizer':
|
|
|
|
return remove_mailto(cal.vevent.organizer.valueRepr()).strip()
|
|
|
|
elif name == 'summary':
|
|
|
|
return cal.vevent.summary.valueRepr().strip()
|
|
|
|
else:
|
|
|
|
return ''
|
2022-03-22 13:18:09 +00:00
|
|
|
except AttributeError:
|
|
|
|
return ''
|
|
|
|
|
|
|
|
attendees = ''
|
|
|
|
description = ''
|
|
|
|
dtstart = ''
|
|
|
|
error = ''
|
|
|
|
organizer = ''
|
|
|
|
summary = ''
|
|
|
|
|
|
|
|
try:
|
|
|
|
cal = vobject.readOne(sys.stdin)
|
|
|
|
attendees = extract_field(cal, 'attendees')
|
|
|
|
description = extract_field(cal, 'description')
|
|
|
|
dtstart = extract_field(cal, 'dtstart')
|
|
|
|
organizer = extract_field(cal, 'organizer')
|
|
|
|
summary = extract_field(cal, 'summary')
|
|
|
|
except vobject.base.ParseError:
|
|
|
|
error = '**Sorry, but we could not parse the calendar!**'
|
|
|
|
|
|
|
|
if error:
|
|
|
|
print(error)
|
|
|
|
print("")
|
|
|
|
|
|
|
|
print(f"Date/Time : {dtstart}")
|
|
|
|
print(f"Summary : {summary}")
|
|
|
|
print(f"Organizer : {organizer}")
|
|
|
|
print(f"Attendees : {attendees}")
|
|
|
|
print("")
|
|
|
|
print(description)
|