X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/6cb184ab6377431383d7a6b30da30c3c4b02d8d7..8385525aaa4ef3c2c55432330295fa1145f08e6e:/src/com/owncloud/android/datamodel/FileDataStorageManager.java diff --git a/src/com/owncloud/android/datamodel/FileDataStorageManager.java b/src/com/owncloud/android/datamodel/FileDataStorageManager.java index a6765310..efbb9222 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, @@ -467,8 +467,7 @@ public class FileDataStorageManager { success = removeFolderInDb(folder); } if (removeLocalContent && success) { - File localFolder = new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, folder)); - success = removeLocalFolder(localFolder); + success = removeLocalFolder(folder); } } return success; @@ -491,21 +490,49 @@ public class FileDataStorageManager { return deleted > 0; } - private boolean removeLocalFolder(File folder) { + private boolean removeLocalFolder(OCFile folder) { boolean success = true; - if (folder.exists()) { - File[] files = folder.listFiles(); + 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 (File file : files) { - if (file.isDirectory()) { + for (OCFile file : files) { + if (file.isFolder()) { success &= removeLocalFolder(file); } else { - success &= file.delete(); + if (file.isDown()) { + File localFile = new File(file.getStoragePath()); + success &= localFile.delete(); + if (success) { + file.setStoragePath(null); + saveFile(file); + } + } } } } - success &= folder.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; }