|
11 | 11 | import datetime
|
12 | 12 | import caldav
|
13 | 13 | import logging
|
| 14 | +import re |
14 | 15 | from collections import defaultdict
|
15 | 16 | from plann.template import Template
|
16 | 17 | from plann.timespec import tz, _now, _ensure_ts, parse_dt, parse_add_dur, parse_timespec
|
|
23 | 24 | attr_int = ['priority']
|
24 | 25 |
|
25 | 26 | def _split_vcal(ical):
|
26 |
| - ical = ical.strip() |
| 27 | + ical = ical.strip().replace('\r\n','\n') |
27 | 28 | icals = []
|
28 | 29 | while ical.startswith("BEGIN:VCALENDAR\n"):
|
29 | 30 | pos = ical.find("\nEND:VCALENDAR") + 14
|
30 | 31 | icals.append(ical[:pos])
|
31 | 32 | ical = ical[pos:].lstrip()
|
| 33 | + assert not ical |
| 34 | + if len(icals) == 1: |
| 35 | + ical_start = icals[0].find('BEGIN', 15) |
| 36 | + header = icals[0][:ical_start] |
| 37 | + ical = icals[0][ical_start:] |
| 38 | + icals = [] |
| 39 | + prev_uid = None |
| 40 | + while ical.startswith('BEGIN:'): |
| 41 | + what = ical[6:ical.find('\n')] |
| 42 | + uidpos = ical.find('UID:') |
| 43 | + uidend = ical.find('\n', uidpos) |
| 44 | + uidline = ical[uidpos:uidend] |
| 45 | + pos = ical.find('END:' + what) + 4 + len(what) |
| 46 | + if uidline != prev_uid: |
| 47 | + icals.append(ical[:pos]) |
| 48 | + prev_uid = uidline |
| 49 | + else: |
| 50 | + icals[-1].append(ical[:pos]) |
| 51 | + ical = ical[pos:].strip() |
| 52 | + import pdb; pdb.set_trace() |
| 53 | + assert ical == 'END:VCALENDAR' |
| 54 | + icals = [f"{header}{x}\nEND:VCALENDAR" for x in icals] |
32 | 55 | return icals
|
33 | 56 |
|
34 | 57 | def find_calendars(args, raise_errors):
|
|
0 commit comments