$cache_etag = $cache->server_etags[$fname]; unset($cache->server_etags[$fname]); if ($cache_etag == $etag) { continue; } $update_urls[$href] = 1; printf('Need to pull to update "%s"' . "\n", $href); } else { $insert_urls[$href] = 1; printf('Need to pull to insert "%s"' . "\n", $href); } } $local_delete_urls = $cache->server_etags; } // Fetch the calendar data $events = $caldav->CalendarMultiget(array_merge(array_keys($insert_urls), array_keys($update_urls))); // printf( "\nCalendarMultiget Request:\n%s\n Response:\n%s\n", $caldav->GetXmlRequest(), $caldav->GetXmlResponse() ); // print_r($events); printf("Fetched %d possible changes.\n", count($events)); if (!preg_match('{/$}', $remote_event_prefix)) { $remote_event_prefix .= '/'; } } /** * This is a fairly tricky bit. We find local changes and check to see if they * are collisions. We actually have to check the data for a collision, since the * real data may in fact be identical, e.g. because of the -a option or something. * * Once we have verified that the target objects actually *are* different, then: * Change vs No change => The change is propagated to the other server * DELETE vs UPDATE/INSERT => DELETE always loses