From 3a10f0f4b587af1de29c3d3124788caca842fde7 Mon Sep 17 00:00:00 2001 From: skilion Date: Sun, 25 Dec 2016 23:25:24 +0100 Subject: [PATCH] fixed bug that allowed files marked for deletion to be keeped --- src/sync.d | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/sync.d b/src/sync.d index f07554dd..6dd0e284 100644 --- a/src/sync.d +++ b/src/sync.d @@ -56,7 +56,7 @@ final class SyncEngine // list of items to skip while applying the changes private string[] skippedItems; // list of items to delete after the changes has been downloaded - private string[] pathsToDelete; + private string[] idsToDelete; this(Config cfg, OneDriveApi onedrive, ItemDatabase itemdb) { @@ -117,8 +117,8 @@ final class SyncEngine } catch (OneDriveException e) { throw new SyncException(e.msg, e); } - // delete items in pathsToDelete - if (pathsToDelete.length > 0) deleteItems(); + // delete items in idsToDelete + if (idsToDelete.length > 0) deleteItems(); // empty the skipped items skippedItems.length = 0; assumeSafeAppend(skippedItems); @@ -166,10 +166,7 @@ final class SyncEngine ItemType type; if (isItemDeleted(item)) { log.vlog("The item is marked for deletion"); - if (cached) { - itemdb.deleteById(id); - pathsToDelete ~= oldPath; - } + if (cached) idsToDelete ~= id; return; } else if (isItemFile(item)) { type = ItemType.file; @@ -311,7 +308,9 @@ final class SyncEngine private void deleteItems() { log.vlog("Deleting files ..."); - foreach_reverse (path; pathsToDelete) { + foreach_reverse (id; idsToDelete) { + string path = itemdb.computePath(id); + itemdb.deleteById(id); if (exists(path)) { if (isFile(path)) { remove(path); @@ -326,8 +325,8 @@ final class SyncEngine } } } - pathsToDelete.length = 0; - assumeSafeAppend(pathsToDelete); + idsToDelete.length = 0; + assumeSafeAppend(idsToDelete); } // scan the given directory for differences