Все врут календари.
Dec. 23rd, 2019 01:02 pmПоразвлекался еще тут немного с не самым мейнстримным календарным софтом - vCalendar plugin к claws-mail
и calcurse.
Задача, которую хочется решить - это обеспечить нормальную синхронизацию между андродидным календарем и десктопным с использованием своего caldav сервера (в качестве которог у меня radicale).
То есть получается следуюая картина:
Есть vdirsyncer, который синхронизирует локальный ics-файл с сервером, есть андроидные устройства на которых тоже все впорядке.
vCalendar plugin умеет импортировать ics. И даже автоматически его обновалять. В режиме чтения все нормально.
Но вот создавать новые события он будет не в импортированном календаре а в своем собственном (они выглядят в дереве папок как две соседние папки внутри vCalendar).
Он умеет экспортировать свой календарь в .ics-файл. Но в другой. И даже вызывать указанную программу после экспорта. И при этом:
1. Делает его нечитаемым для питоновского модуля vobject, на базе котрого сделан radicale. Путем добавления туда некоторых полей с датой 0000000T000000 на которые питон весьма обоснованно ругается "не бывает нулевого месяца".
2. экспортирует не только новые события но и те, которые были эксполртированы.
3. Таймзону ставит GMT.
Следовательно, если я хочу обратно засинхронизировать события, измененные в claws-mail в radicale, мне нужно
0. Перед разбором средствами модуля vobject удалить поля с некорректной датой.
1. Выцепить из экспортированного файла новые события
2. Поменять им временную зону на ту, которую использует radicale
3. Скопировать их в тот календарь, который синхронизирует vdirsyncer.
В принципе все это на питоне через тот же vobject делается в два экрана. Но может быть лучше взять исходники плагина и поправить. (хотя это -то придется делать на C++).
Что касается calcurse, то при всех его симпатичных свойствах он использует собственный формат хранения, а не ics. И при повтороном импорте изменившегося ics-файла дублирует события - отфильтровать по uid не догадыватеся.
Зато его можно повесить обработчиком mime-тип text/calendar в текстовый почтовый клиент вроде mutt.
Но только если этот клиент у вас единственный и ни с чем синхронизировать его вы не хотите. Или по крайней мере все остальные календари будут read-only.
Возникает мысль взять питоновские модули curses и написать программму с интерфейсмо в точности как у calcurse, но использующую в качестве backend-хранилища ics-файл, синхронизируемый vdirsyncer-ом.
и calcurse.
Задача, которую хочется решить - это обеспечить нормальную синхронизацию между андродидным календарем и десктопным с использованием своего caldav сервера (в качестве которог у меня radicale).
То есть получается следуюая картина:
Есть vdirsyncer, который синхронизирует локальный ics-файл с сервером, есть андроидные устройства на которых тоже все впорядке.
vCalendar plugin умеет импортировать ics. И даже автоматически его обновалять. В режиме чтения все нормально.
Но вот создавать новые события он будет не в импортированном календаре а в своем собственном (они выглядят в дереве папок как две соседние папки внутри vCalendar).
Он умеет экспортировать свой календарь в .ics-файл. Но в другой. И даже вызывать указанную программу после экспорта. И при этом:
1. Делает его нечитаемым для питоновского модуля vobject, на базе котрого сделан radicale. Путем добавления туда некоторых полей с датой 0000000T000000 на которые питон весьма обоснованно ругается "не бывает нулевого месяца".
2. экспортирует не только новые события но и те, которые были эксполртированы.
3. Таймзону ставит GMT.
Следовательно, если я хочу обратно засинхронизировать события, измененные в claws-mail в radicale, мне нужно
0. Перед разбором средствами модуля vobject удалить поля с некорректной датой.
1. Выцепить из экспортированного файла новые события
2. Поменять им временную зону на ту, которую использует radicale
3. Скопировать их в тот календарь, который синхронизирует vdirsyncer.
В принципе все это на питоне через тот же vobject делается в два экрана. Но может быть лучше взять исходники плагина и поправить. (хотя это -то придется делать на C++).
Что касается calcurse, то при всех его симпатичных свойствах он использует собственный формат хранения, а не ics. И при повтороном импорте изменившегося ics-файла дублирует события - отфильтровать по uid не догадыватеся.
Зато его можно повесить обработчиком mime-тип text/calendar в текстовый почтовый клиент вроде mutt.
Но только если этот клиент у вас единственный и ни с чем синхронизировать его вы не хотите. Или по крайней мере все остальные календари будут read-only.
Возникает мысль взять питоновские модули curses и написать программму с интерфейсмо в точности как у calcurse, но использующую в качестве backend-хранилища ics-файл, синхронизируемый vdirsyncer-ом.