dav/sync.c

changeset 532
aeda47714978
parent 531
fa54e3a1250a
child 533
5b9f20aa88c2
--- a/dav/sync.c	Wed Mar 20 10:23:39 2019 +0100
+++ b/dav/sync.c	Wed Mar 20 13:20:38 2019 +0100
@@ -79,7 +79,7 @@
     if(!s1 && s2) {
         return -1;
     }
-    if(s1 && s2) {
+    if(s1 && !s2) {
         return 1;
     }
     if(!s1 && !s2) {
@@ -1605,6 +1605,9 @@
     UCX_MAP_FOREACH(key, resource, i) {
         if(resource == &nres) {
             resource = ucx_map_get(db->resources, key);
+            if(!resource) {
+                continue;
+            }
         }
         
         char *file_path = util_concat_path(dir->path, resource->path);
@@ -1618,10 +1621,14 @@
                 fprintf(stderr, "Cannot stat file: %s\n", file_path);
                 perror("");
             }
-        } else if(!resource->isdirectory && !S_ISDIR(s.st_mode)) {
-            if(resource->last_modified != s.st_mtime || resource->size != s.st_size) {
-                if(restore_modified) {
-                    modified = ucx_list_prepend(modified, resource);
+        } else {
+            if(files) {
+                modified = ucx_list_prepend(modified, resource);
+            } else if(!resource->isdirectory && !S_ISDIR(s.st_mode)) {
+                if(resource->last_modified != s.st_mtime || resource->size != s.st_size) {
+                    if(restore_modified) {
+                        modified = ucx_list_prepend(modified, resource);
+                    }
                 }
             }
         }
@@ -1678,16 +1685,32 @@
         LocalResource *resource = elm->data;
         
         DavResource *res = dav_get(sn, resource->path, "D:getetag,idav:status,idav:finfo,idav:xattributes");
-        
+        if(!res) {
+            printf("skip: %s\n", resource->path);
+            continue;
+            //continue;
+        }
         char *status = dav_get_string_property(res, "idav:status");
         if(status && !strcmp(status, "broken")) {
             continue;
         }
         
         // download the resource
-        if(!sync_shutdown && sync_get_resource(a, dir, res, db, &sync_success)) {
-            fprintf(stderr, "sync_get_resource failed for resource: %s\n", res->path);
-            sync_error++;
+        if(!sync_shutdown) {
+            if(resource->isdirectory) {
+                char *local_path = util_concat_path(dir->path, res->path);
+                if(sys_mkdir(local_path) && errno != EEXIST) {
+                    fprintf(stderr,
+                            "Cannot create directory %s: %s",
+                            local_path, strerror(errno));
+                }
+                free(local_path);
+            } else {
+                if(sync_get_resource(a, dir, res, db, &sync_success)) {
+                    fprintf(stderr, "sync_get_resource failed for resource: %s\n", res->path);
+                    sync_error++;
+                }
+            }
         }
     }
     

mercurial