From e7ca2b8db02aee7f4893964f13f2f708d0a3b695 Mon Sep 17 00:00:00 2001 From: Alexander Tkachev Date: Wed, 24 Jul 2019 19:12:14 +0700 Subject: CLOUD: Ignore hidden files in sync/download In PR#1754 we've discussed and decided to ignore hidden (having a name starting with '.') files while syncing saves or downloading game files. This commit adds a CloudManager method to test whether file should be ignored, and this method could be extended later if we need to ignore some other specific file names. --- backends/cloud/cloudmanager.cpp | 7 +++++++ backends/cloud/cloudmanager.h | 3 +++ backends/cloud/folderdownloadrequest.cpp | 4 +++- backends/cloud/savessyncrequest.cpp | 4 ++-- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/backends/cloud/cloudmanager.cpp b/backends/cloud/cloudmanager.cpp index 432a63b040..a3e9856455 100644 --- a/backends/cloud/cloudmanager.cpp +++ b/backends/cloud/cloudmanager.cpp @@ -358,6 +358,13 @@ Common::String CloudManager::savesDirectoryPath() { return ""; } +bool CloudManager::canSyncFilename(const Common::String &filename) const { + if (filename == "" || filename[0] == '.') + return false; + + return true; +} + SavesSyncRequest *CloudManager::syncSaves(Storage::BoolCallback callback, Networking::ErrorCallback errorCallback) { Storage *storage = getCurrentStorage(); if (storage) { diff --git a/backends/cloud/cloudmanager.h b/backends/cloud/cloudmanager.h index 131af9bb8f..ebcc6ea5cf 100644 --- a/backends/cloud/cloudmanager.h +++ b/backends/cloud/cloudmanager.h @@ -227,6 +227,9 @@ public: /** Returns storage's saves directory path with the trailing slash. */ Common::String savesDirectoryPath(); + /** Returns whether given filename could be uploaded to or downloaded from storage. */ + bool canSyncFilename(const Common::String &filename) const; + /** * Starts saves syncing process in currently active storage if there is any. */ diff --git a/backends/cloud/folderdownloadrequest.cpp b/backends/cloud/folderdownloadrequest.cpp index 3d31beba4b..c3b9eece87 100644 --- a/backends/cloud/folderdownloadrequest.cpp +++ b/backends/cloud/folderdownloadrequest.cpp @@ -26,6 +26,7 @@ #include "common/debug.h" #include "gui/downloaddialog.h" #include +#include "cloudmanager.h" namespace Cloud { @@ -73,8 +74,9 @@ void FolderDownloadRequest::directoryListedCallback(Storage::ListDirectoryRespon // remove all directories // non-empty directories would be created by DumpFile, and empty ones are just ignored + // also skip all hidden files (with names starting with '.') or with other names that are forbidden to sync in CloudManager for (Common::Array::iterator i = _pendingFiles.begin(); i != _pendingFiles.end();) - if (i->isDirectory()) + if (i->isDirectory() || !CloudMan.canSyncFilename(i->name())) _pendingFiles.erase(i); else { _totalBytes += i->size(); diff --git a/backends/cloud/savessyncrequest.cpp b/backends/cloud/savessyncrequest.cpp index ab455c63a2..3a581005c6 100644 --- a/backends/cloud/savessyncrequest.cpp +++ b/backends/cloud/savessyncrequest.cpp @@ -96,7 +96,7 @@ void SavesSyncRequest::directoryListedCallback(Storage::ListDirectoryResponse re if (file.isDirectory()) continue; totalSize += file.size(); - if (file.name() == DefaultSaveFileManager::TIMESTAMPS_FILENAME) + if (file.name() == DefaultSaveFileManager::TIMESTAMPS_FILENAME || !CloudMan.canSyncFilename(file.name())) continue; Common::String name = file.name(); @@ -129,7 +129,7 @@ void SavesSyncRequest::directoryListedCallback(Storage::ListDirectoryResponse re //upload files which are unavailable in cloud for (Common::HashMap::iterator i = localFileNotAvailableInCloud.begin(); i != localFileNotAvailableInCloud.end(); ++i) { - if (i->_key == DefaultSaveFileManager::TIMESTAMPS_FILENAME) + if (i->_key == DefaultSaveFileManager::TIMESTAMPS_FILENAME || !CloudMan.canSyncFilename(i->_key)) continue; if (i->_value) { _filesToUpload.push_back(i->_key); -- cgit v1.2.3