diff -r fbbbeed4ba8f -r 08d5544c92fb dav/sync.c --- a/dav/sync.c Sun Jun 15 16:07:11 2014 +0200 +++ b/dav/sync.c Sun Jun 15 20:12:48 2014 +0200 @@ -167,9 +167,15 @@ LocalResource *local = ucx_map_cstr_get(db, res->path); char *etag = dav_get_property(res, "D:getetag"); if(local) { - if(local->etag && !strcmp(etag, local->etag)) { - // resource is already up-to-date on the client - return 0; + if(local->etag) { + sstr_t e = sstr(etag); + if(sstrprefix(e, S("W/"))) { + e = sstrsubs(e, 2); + } + if(!strcmp(e.ptr, local->etag)) { + // resource is already up-to-date on the client + return 0; + } } } @@ -177,7 +183,7 @@ int ret = 0; if(res->iscollection) { mode_t mode = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH; - printf("mkdir %s\n", local_path); + //printf("mkdir %s\n", local_path); if(util_mkdir(local_path, mode) && errno != EEXIST) { ret = -1; } @@ -378,9 +384,6 @@ if(dav_store(res)) { break; } - if(dav_load(res)) { - break; - } ret = 0; break; } @@ -390,9 +393,21 @@ if(local_res->etag) { free(local_res->etag); } - char *etag = dav_get_property(res, "D:getetag"); - if(etag) { - local_res->etag = strdup(dav_get_property(res, "D:getetag")); + + DavResource *up_res = dav_get(res->session, res->path, "D:getetag"); + char *etag_str = dav_get_property(up_res, "D:getetag"); + sstr_t etag; + etag.ptr = NULL; + if(etag_str) { + etag = sstr(etag_str); + } + if(sstrprefix(etag, S("W/"))) { + etag = sstrsubs(etag, 2); + } + + + if(etag.ptr) { + local_res->etag = strdup(etag.ptr); } else { local_res->etag = NULL; }