From 1664299bd2ab1800b7d66db966295dd0d9a24a09 Mon Sep 17 00:00:00 2001 From: "David A. Velasco" Date: Tue, 20 May 2014 10:30:02 +0200 Subject: [PATCH] Fixed local removal of files when a folder is removed locally and holds local files currently out of sync --- .../datamodel/FileDataStorageManager.java | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/com/owncloud/android/datamodel/FileDataStorageManager.java b/src/com/owncloud/android/datamodel/FileDataStorageManager.java index ec0a7efcc6..efbb9222ea 100644 --- a/src/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/src/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -1,6 +1,6 @@ /* ownCloud Android client application * Copyright (C) 2012 Bartek Przybylski - * Copyright (C) 2012-2013 ownCloud Inc. + * Copyright (C) 2012-2014 ownCloud Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, @@ -494,6 +494,7 @@ public class FileDataStorageManager { boolean success = true; File localFolder = new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, folder)); if (localFolder.exists()) { + // stage 1: remove the local files already registered in the files database Vector files = getFolderContent(folder.getFileId()); if (files != null) { for (OCFile file : files) { @@ -511,11 +512,30 @@ public class FileDataStorageManager { } } } - success &= localFolder.delete(); + + // stage 2: remove the folder itself and any local file inside out of sync; + // for instance, after clearing the app cache or reinstalling + success &= removeLocalFolder(localFolder); } return success; } + private boolean removeLocalFolder(File localFolder) { + boolean success = true; + File[] localFiles = localFolder.listFiles(); + if (localFiles != null) { + for (File localFile : localFiles) { + if (localFile.isDirectory()) { + success &= removeLocalFolder(localFile); + } else { + success &= localFile.delete(); + } + } + } + success &= localFolder.delete(); + return success; + } + /** * Updates database for a folder that was moved to a different location. *