From 687080d4353c9c6ae8b82020b1d854c1f7bc25af Mon Sep 17 00:00:00 2001 From: abraunegg Date: Mon, 17 Jun 2019 10:16:27 +1000 Subject: [PATCH] Size check should only be used if configured (Issue #540) (#541) * Size check should only be used if configured * Rather than make 2 x calls to OneDrive service, driveItem already has the size value to check * Add a try block when query for file details --- src/sync.d | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/sync.d b/src/sync.d index 64263e28..f2543526 100644 --- a/src/sync.d +++ b/src/sync.d @@ -963,9 +963,11 @@ final class SyncEngine log.vdebug("OneDrive change is a new local item"); // Check if file should be skipped based on size limit if (isItemFile(driveItem)) { - if (onedrive.getFileDetails(item.driveId, item.id)["size"].integer >= this.newSizeLimit) { - log.vlog("Skipping item - excluded by skip_size config: ", item.name, " (", onedrive.getFileDetails(item.driveId, item.id)["size"].integer/2^^20, " MB)"); - return; + if (cfg.getValueLong("skip_size") != 0) { + if (driveItem["size"].integer >= this.newSizeLimit) { + log.vlog("Skipping item - excluded by skip_size config: ", item.name, " (", driveItem["size"].integer/2^^20, " MB)"); + return; + } } } applyNewItem(item, path); @@ -1097,7 +1099,20 @@ final class SyncEngine { assert(item.type == ItemType.file); write("Downloading file ", path, " ... "); - JSONValue fileDetails = onedrive.getFileDetails(item.driveId, item.id); + JSONValue fileDetails; + + try { + fileDetails = onedrive.getFileDetails(item.driveId, item.id); + } catch (OneDriveException e) { + if (e.httpStatusCode >= 500) { + // OneDrive returned a 'HTTP 5xx Server Side Error' - gracefully handling error - error message already logged + return; + } else { + // Default operation if not a 500 error + log.error("ERROR: Query of OneDrive for file details failed"); + return; + } + } if (isMalware(fileDetails)){ // OneDrive reports that this file is malware