Fix download failure due to incorrect filesystem permissions

* Add try block for opening new file for writing when downloading a new file to catch any read only file systems
* Move set file attributes to master function, incase there is a download failure, exit scope cannot set attributes on a file that is non existent
This commit is contained in:
abraunegg 2020-11-12 21:35:06 +11:00
parent cb57213fb9
commit aa47f1119f

View file

@ -501,7 +501,13 @@ final class OneDriveApi
// Configure the applicable permissions for the folder // Configure the applicable permissions for the folder
newPath.setAttributes(cfg.returnRequiredDirectoryPermisions()); newPath.setAttributes(cfg.returnRequiredDirectoryPermisions());
const(char)[] url = driveByIdUrl ~ driveId ~ "/items/" ~ id ~ "/content?AVOverride=1"; const(char)[] url = driveByIdUrl ~ driveId ~ "/items/" ~ id ~ "/content?AVOverride=1";
// Download file
download(url, saveToPath, fileSize); download(url, saveToPath, fileSize);
// Does path exist?
if (exists(saveToPath)) {
// File was downloaded sucessfully - configure the applicable permissions for the file
saveToPath.setAttributes(cfg.returnRequiredFilePermisions());
}
} }
// https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_put_content // https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_put_content
@ -797,8 +803,14 @@ final class OneDriveApi
{ {
// Threshold for displaying download bar // Threshold for displaying download bar
long thresholdFileSize = 4 * 2^^20; // 4 MiB long thresholdFileSize = 4 * 2^^20; // 4 MiB
// open file as write in binary mode
auto file = File(filename, "wb"); try {
// open file as write in binary mode
auto file = File(filename, "wb");
} catch (FileException e) {
// display the error message
displayFileSystemErrorMessage(e.msg);
}
// function scopes // function scopes
scope(exit) { scope(exit) {
@ -818,8 +830,6 @@ final class OneDriveApi
// close open file // close open file
file.close(); file.close();
} }
// Configure the applicable permissions for the file
filename.setAttributes(cfg.returnRequiredFilePermisions());
} }
http.method = HTTP.Method.get; http.method = HTTP.Method.get;