/* 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,
success = removeFolderInDb(folder);
}
if (removeLocalContent && success) {
- File localFolder = new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, folder));
- success = removeLocalFolder(localFolder);
+ success = removeLocalFolder(folder);
}
}
return success;
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<OCFile> 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;
}
return c;
}
- private Cursor getShareCursorForValue(String key, String value) {
- Cursor c = null;
- if (getContentResolver() != null) {
- c = getContentResolver()
- .query(ProviderTableMeta.CONTENT_URI_SHARE,
- null,
- key + "=? AND "
- + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER
- + "=?",
- new String[] { value, mAccount.name }, null);
- } else {
- try {
- c = getContentProviderClient().query(
- ProviderTableMeta.CONTENT_URI_SHARE,
- null,
- key + "=? AND " + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER
- + "=?", new String[] { value, mAccount.name },
- null);
- } catch (RemoteException e) {
- Log_OC.e(TAG, "Could not get file details: " + e.getMessage());
- c = null;
- }
- }
- return c;
- }
private OCFile createFileInstance(Cursor c) {
OCFile file = null;
return overriden;
}
-// private OCShare getShareById(long id) {
-// Cursor c = getShareCursorForValue(ProviderTableMeta._ID, String.valueOf(id));
-// OCShare share = null;
-// if (c.moveToFirst()) {
-// share = createShareInstance(c);
-// }
-// c.close();
-// return share;
-// }
-//
-// private OCShare getShareByRemoteId(long remoteId) {
-// Cursor c = getShareCursorForValue(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, String.valueOf(remoteId));
-// OCShare share = null;
-// if (c.moveToFirst()) {
-// share = createShareInstance(c);
-// }
-// c.close();
-// return share;
-// }
public OCShare getFirstShareByPathAndType(String path, ShareType type) {
Cursor c = null;