Я пытаюсь реализовать синхронизацию с использованием отчетов Caldav и синхронизации, однако у меня возникают концептуальные проблемы с синхронизацией одного календаря (одного VEVENT) между несколькими клиентами и сервером.
Большинство rfc ссылаются на использование etag, чтобы определить, изменился ли ресурс с момента его последней синхронизации. (Если etag изменяется, ресурс изменился с момента последней синхронизации). Это я понимаю. Однако как я узнаю, какое изменение произошло позже?
Например, у клиента А есть ical «X», который последний раз редактировался в 1:00, и они синхронизируются в 8:00. У клиента B также есть версия ical X, которую они отредактировали в 2 часа ночи и синхронизировали в 7 утра. Таким образом, B новее, чем A, и B синхронизирован до A.
Когда A синхронизируется, он увидит более новую версию X B. Из etag он знает, что X изменился, но не «когда». Я предполагаю, что A должен перезаписать B, поскольку B новее (или, по крайней мере, иметь возможность подсказать пользователю, что B новее).... правильно ли это предположение/есть ли стандартный способ справиться с этой ситуацией?
Проблема вообще при попытке выяснить какой файл новее между сервером и клиентом. etag может обнаруживать только «измененные», но не «более новые». Дата последнего изменения, по-видимому, отражает дату загрузки icals, а не дату последнего редактирования на клиенте. Это заставляет меня поверить, что я что-то упускаю. Есть какой-то общепринятый алгоритм синхронизации?