Как я могу обнаружить изменения в vCards? - PullRequest
0 голосов
/ 02 июня 2018

Я занимаюсь разработкой библиотеки для редактирования контактов на сервере CardDAV, и мне интересно, как правильно синхронизировать контакты.

Итак, когда я нахожу etag для конкретного контакта, изменился: как синхронизировать оба?

Могу ли я просто объединить измененные данные, например, номера телефонов?Или одна сторона (сервер или клиент) должна победить?И как определить, изменился ли номер или был добавлен?

1 Ответ

0 голосов
/ 02 июня 2018

Документ Создание клиента CardDAV объясняет все это очень хорошо.

Но чтобы ответить на ваши вопросы:

Поэтому, когда я нахожу etag дляконкретный контакт изменен: как синхронизировать оба?

Вы загружаете vCard с сервера.Тогда это зависит от логики вашего клиента.Хотите автоматическое слияние?Хотите подсказать пользователю, хочет ли он слиться?И т.д.

Обычно вы хотите автоматически объединить.Так сделай это.После того, как у вас есть объединенная vCard, снова поместите ее на сервер, но обязательно используйте заголовок If-Match, чтобы он не изменился снова на стороне сервера.

Неужели я простообъединить измененные данные, например, номера телефонов?

То, что вы считаете полезным, целиком зависит от вашего приложения.Но объединение полей может оказаться не тем, что вы хотите.Например, вы не сможете обнаружить удалений .Так что в большинстве случаев это будет трехстороннее объединение:

  • старая версия сервера (хранится локально)
  • новая версия сервера (которую вы только что загрузили)
  • текущая версия локального приложения

Или одна сторона (сервер или клиент) должна победить?

Некоторые клиенты делают это так, но это не обязательно.Однако, если вы вносите изменения после изменения, вам нужно ОЧЕНЬ быть осторожным с циклами синхронизации!

И как мне определить, изменился ли номер или был добавлен?

Вы сохраняете старую известную вам копию и отправляете ее в разные каталоги.

В целом, рекомендуется хранить локальную (последнюю известную) непрозрачную копию сервера и просто выбирать поля, которые интересуют вашего клиента.Затем при повторной загрузке элемента вы просто исправляете его снова.(и сохраните оставшуюся часть того, что отправил вам сервер).

Краткое описание: Правильная разность vCard и локальный кеш нетривиальны.Многие клиенты терпят неудачу на этом и теряют или дублируют данные пользователяПоэтому, если вы не планируете провести необходимую работу и тестирование, проще будет обнаружить изменения и спросить пользователя, что он хочет сделать (позволить серверу победить, принудительно скопировать пользователя, объединить).

...