среда, 7 октября 2009 г.

GooglePIM reloaded

Мда, забросил я было это дело...
А тут недавно обнаружил, что гугель уже прикрутил Todo в свою балалайку.
Это то, чего не хватало.
Вот теперь можно лепить полноценный ПИМ. Или Гугль-десктоп :-)

В прошлой серии тормознулось из-за того, что при каждом старте софтины надо снимать _всю_ ленту Atom. Т.е. прокачиват сотни метров.
Идея появилась - сделать прокладку в виде SyncML. Но это ж кто её будет делать...
Поэтому сейчас сделаем проще (образно) и хитрее - воспользуемся возможностями сомого gdata.

Общая идея в том, чтобы не качать лишнего.
Для этого:
1. все данные надо кешировать
2. все изменения - журналировать и выполнять оптом (ессно, с проверкой - вдруг кто-то что-то там во время редактирования изменил.

Что для этого надо?
1. хранить последнее updated фида
2. хранить времена updated всех элементов
3. в случае изменения updated фида:
3.1. снять все элементы, у которых update >= feed update (ркурсивно повторить 2+)
3.2. причем не полностью элементы, а только id и updated
3.3. снять все _deleted_ элементы на тех же условиях.
4. снимать элементы небольшими порциями

Да, локально будет храниться полная копия всех элементов. А шо рабиць?
Еще прийдется разруливать конфликты, паче они случатся.
Зато можно поработать offline - и опубликовать в гугле одной педалькой.
В batch-режиме
Локальной базой можно сделать BerkleyDB или SQLite.

Итого план работы:
1. изучить возможности п.п. 3.2 и 3.3
2. разработать алгоритм синхронизации
3. разработать формат базы

Полетели.

1 комментарий:

TI_Eugene комментирует...

Мдаааблин...
Расписал классы Контактов.
Там есть Feed (тут просто), Контакт и Группа.
Контак наследует GData, который наследует Atom. Итого содержит:
* 37 атрибутов
* большая часть которых - опция (0..1) или множественные (0..*)
* и сами по себе - не простые типы, а тоже объекты
* содержащие свои атрибуты - опции и множественные...

Это только Контакт.

Четакактатак мне кажется, что реализация всего этого барахла в виде RDB - не самая лучшая идея... Грубо - под каждый множественный атрибут надо будет делать отдельную таблицу.
Заметим, что gdata общий папа всех типов данных. НО - некоторые атрибуты в зависимости от типа данных могут быть отсутствовать вообще, быть обязательными, опциональными или множественными. E.g. то, что для блога - обязательно, для контакта - нет, а для календаря - обязательно.

Надо думать дальше.