X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/84178100798876fba915f7ed37ad62d686e92f01..fe4fc7a61283b74a89f3586d51363ca32cd59db0:/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 ec0a7efc..c8c0d24d 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, @@ -186,6 +186,8 @@ public class FileDataStorageManager { cv.put(ProviderTableMeta.FILE_ETAG, file.getEtag()); cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, file.isShareByLink() ? 1 : 0); cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, file.getPublicLink()); + cv.put(ProviderTableMeta.FILE_PERMISSIONS, file.getPermissions()); + cv.put(ProviderTableMeta.FILE_REMOTE_ID, file.getRemoteId()); boolean sameRemotePath = fileExists(file.getRemotePath()); if (sameRemotePath || @@ -285,6 +287,8 @@ public class FileDataStorageManager { cv.put(ProviderTableMeta.FILE_ETAG, file.getEtag()); cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, file.isShareByLink() ? 1 : 0); cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, file.getPublicLink()); + cv.put(ProviderTableMeta.FILE_PERMISSIONS, file.getPermissions()); + cv.put(ProviderTableMeta.FILE_REMOTE_ID, file.getRemoteId()); boolean existsByPath = fileExists(file.getRemotePath()); if (existsByPath || fileExists(file.getFileId())) { @@ -342,6 +346,8 @@ public class FileDataStorageManager { cv.put(ProviderTableMeta.FILE_ETAG, folder.getEtag()); cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, folder.isShareByLink() ? 1 : 0); cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, folder.getPublicLink()); + cv.put(ProviderTableMeta.FILE_PERMISSIONS, folder.getPermissions()); + cv.put(ProviderTableMeta.FILE_REMOTE_ID, folder.getRemoteId()); operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI). withValues(cv). @@ -494,6 +500,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,8 +518,27 @@ 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; } @@ -689,31 +715,6 @@ public class FileDataStorageManager { 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; @@ -755,6 +756,8 @@ public class FileDataStorageManager { file.setShareByLink(c.getInt( c.getColumnIndex(ProviderTableMeta.FILE_SHARE_BY_LINK)) == 1 ? true : false); file.setPublicLink(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_PUBLIC_LINK))); + file.setPermissions(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_PERMISSIONS))); + file.setRemoteId(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_REMOTE_ID))); } return file; @@ -853,25 +856,6 @@ public class FileDataStorageManager { 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; @@ -1116,6 +1100,8 @@ public class FileDataStorageManager { cv.put(ProviderTableMeta.FILE_ETAG, file.getEtag()); cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, file.isShareByLink() ? 1 : 0); cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, file.getPublicLink()); + cv.put(ProviderTableMeta.FILE_PERMISSIONS, file.getPermissions()); + cv.put(ProviderTableMeta.FILE_REMOTE_ID, file.getRemoteId()); boolean existsByPath = fileExists(file.getRemotePath()); if (existsByPath || fileExists(file.getFileId())) {