From: David A. Velasco Date: Tue, 9 Jul 2013 10:32:44 +0000 (+0200) Subject: Improvements from comments X-Git-Tag: oc-android-1.4.3~7^2~1 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/7a7fe5dbca73817d2e8d55cbd46ab99efa38bacf?ds=inline Improvements from comments --- diff --git a/src/com/owncloud/android/datamodel/DataStorageManager.java b/src/com/owncloud/android/datamodel/DataStorageManager.java index 64d8803c..133ab8de 100644 --- a/src/com/owncloud/android/datamodel/DataStorageManager.java +++ b/src/com/owncloud/android/datamodel/DataStorageManager.java @@ -47,10 +47,6 @@ public interface DataStorageManager { public Vector getDirectoryImages(OCFile mParentFolder); - public Vector getFilesbyParent(long id); + public void calculateFolderSize(long id); - public void saveFolderSize(long id); - - public int updatefolderSize(long id, long size); - } diff --git a/src/com/owncloud/android/datamodel/FileDataStorageManager.java b/src/com/owncloud/android/datamodel/FileDataStorageManager.java index a082cfc5..d84eb2a0 100644 --- a/src/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/src/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -137,13 +137,18 @@ public class FileDataStorageManager implements DataStorageManager { cv.put(ProviderTableMeta.FILE_KEEP_IN_SYNC, file.keepInSync() ? 1 : 0); boolean sameRemotePath = fileExists(file.getRemotePath()); + boolean changesSizeOfAncestors = false; if (sameRemotePath || fileExists(file.getFileId()) ) { // for renamed files; no more delete and create + OCFile oldFile = null; if (sameRemotePath) { - OCFile oldFile = getFileByPath(file.getRemotePath()); + oldFile = getFileByPath(file.getRemotePath()); file.setFileId(oldFile.getFileId()); + } else { + oldFile = getFileById(file.getFileId()); } + changesSizeOfAncestors = (oldFile.getFileLength() != file.getFileLength()); overriden = true; if (getContentResolver() != null) { @@ -162,6 +167,7 @@ public class FileDataStorageManager implements DataStorageManager { } } } else { + changesSizeOfAncestors = true; Uri result_uri = null; if (getContentResolver() != null) { result_uri = getContentResolver().insert( @@ -183,12 +189,17 @@ public class FileDataStorageManager implements DataStorageManager { } } - if (file.isDirectory() && file.needsUpdatingWhileSaving()) - for (OCFile f : getDirectoryContent(file)) - saveFile(f); + if (file.isDirectory()) { + calculateFolderSize(file.getFileId()); + if (file.needsUpdatingWhileSaving()) { + for (OCFile f : getDirectoryContent(file)) + saveFile(f); + } + } - Log_OC.d(TAG, ".........file Time= " + DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp())); - updateSubtreeSize(file.getParentId()); + if (changesSizeOfAncestors || file.isDirectory()) { + updateSizesToTheRoot(file.getParentId()); + } return overriden; } @@ -307,46 +318,56 @@ public class FileDataStorageManager implements DataStorageManager { public ContentProviderClient getContentProvider() { return mContentProvider; } - + @Override public Vector getDirectoryContent(OCFile f) { - Vector ret = new Vector(); if (f != null && f.isDirectory() && f.getFileId() != -1) { + return getDirectoryContent(f.getFileId()); - Uri req_uri = Uri.withAppendedPath( - ProviderTableMeta.CONTENT_URI_DIR, - String.valueOf(f.getFileId())); - Cursor c = null; + } else { + return new Vector(); + } + } - if (getContentProvider() != null) { - try { - c = getContentProvider().query(req_uri, null, - ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?", - new String[] { mAccount.name }, null); - } catch (RemoteException e) { - Log_OC.e(TAG, e.getMessage()); - return ret; - } - } else { - c = getContentResolver().query(req_uri, null, - ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?", - new String[] { mAccount.name }, null); - } + private Vector getDirectoryContent(long parentId) { - if (c.moveToFirst()) { - do { - OCFile child = createFileInstance(c); - ret.add(child); - } while (c.moveToNext()); - } + Vector ret = new Vector(); - c.close(); + Uri req_uri = Uri.withAppendedPath( + ProviderTableMeta.CONTENT_URI_DIR, + String.valueOf(parentId)); + Cursor c = null; - Collections.sort(ret); + if (getContentProvider() != null) { + try { + c = getContentProvider().query(req_uri, null, + ProviderTableMeta.FILE_PARENT + "=?" , + new String[] { String.valueOf(parentId)}, null); + } catch (RemoteException e) { + Log_OC.e(TAG, e.getMessage()); + return ret; + } + } else { + c = getContentResolver().query(req_uri, null, + ProviderTableMeta.FILE_PARENT + "=?" , + new String[] { String.valueOf(parentId)}, null); + } + if (c.moveToFirst()) { + do { + OCFile child = createFileInstance(c); + ret.add(child); + } while (c.moveToNext()); } + + c.close(); + + Collections.sort(ret); + return ret; } + + private boolean fileExists(String cmp_key, String value) { Cursor c; @@ -470,7 +491,9 @@ public class FileDataStorageManager implements DataStorageManager { } } - updateSubtreeSize(file.getParentId()); + if (file.getFileLength() > 0) { + updateSizesToTheRoot(file.getParentId()); + } } @Override @@ -499,7 +522,9 @@ public class FileDataStorageManager implements DataStorageManager { removeFile(dir, true); } - updateSubtreeSize(dir.getParentId()); + if (dir.getFileLength() > 0) { + updateSizesToTheRoot(dir.getParentId()); + } } } @@ -591,72 +616,42 @@ public class FileDataStorageManager implements DataStorageManager { return ret; } - @Override - public Vector getFilesbyParent(long parentId) { - - Vector ret = new Vector(); - - Uri req_uri = Uri.withAppendedPath( - ProviderTableMeta.CONTENT_URI_DIR, - String.valueOf(parentId)); - Cursor c = null; - - if (getContentProvider() != null) { - try { - c = getContentProvider().query(req_uri, null, - ProviderTableMeta.FILE_PARENT + "=?" , - new String[] { String.valueOf(parentId)}, null); - } catch (RemoteException e) { - Log_OC.e(TAG, e.getMessage()); - return ret; - } - } else { - c = getContentResolver().query(req_uri, null, - ProviderTableMeta.FILE_PARENT + "=?" , - new String[] { String.valueOf(parentId)}, null); - } - - if (c.moveToFirst()) { - do { - OCFile child = createFileInstance(c); - ret.add(child); - } while (c.moveToNext()); - } - - c.close(); - - Collections.sort(ret); - - return ret; - } - /** * Calculate and save the folderSize on DB * @param id */ @Override - public void saveFolderSize(long id) { + public void calculateFolderSize(long id) { long folderSize = 0; - Vector files = getFilesbyParent(id); + Vector files = getDirectoryContent(id); for (OCFile f: files) { folderSize = folderSize + f.getFileLength(); } - updatefolderSize(id, folderSize); + updateSize(id, folderSize); } /** - * Update the size value of a folder on DB + * Update the size value of an OCFile in DB */ - @Override - public int updatefolderSize(long id, long size) { + private int updateSize(long id, long size) { ContentValues cv = new ContentValues(); cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, size); - int result = getContentResolver().update(ProviderTableMeta.CONTENT_URI, cv, ProviderTableMeta._ID + "=?", - new String[] { String.valueOf(id) }); + int result = -1; + if (getContentResolver() != null) { + result = getContentResolver().update(ProviderTableMeta.CONTENT_URI, cv, ProviderTableMeta._ID + "=?", + new String[] { String.valueOf(id) }); + } else { + try { + result = getContentProvider().update(ProviderTableMeta.CONTENT_URI, cv, ProviderTableMeta._ID + "=?", + new String[] { String.valueOf(id) }); + } catch (RemoteException e) { + Log_OC.e(TAG,"Fail to update size column into database " + e.getMessage()); + } + } return result; } @@ -664,7 +659,7 @@ public class FileDataStorageManager implements DataStorageManager { * Update the size of a subtree of folder from a file to the root * @param parentId: parent of the file */ - private void updateSubtreeSize(long parentId) { + private void updateSizesToTheRoot(long parentId) { OCFile file; @@ -672,7 +667,7 @@ public class FileDataStorageManager implements DataStorageManager { Log_OC.d(TAG, "parent = " + parentId); // Update the size of the parent - saveFolderSize(parentId); + calculateFolderSize(parentId); // search the next parent file = getFileById(parentId); diff --git a/src/com/owncloud/android/syncadapter/FileSyncAdapter.java b/src/com/owncloud/android/syncadapter/FileSyncAdapter.java index a4c88501..44fe4014 100644 --- a/src/com/owncloud/android/syncadapter/FileSyncAdapter.java +++ b/src/com/owncloud/android/syncadapter/FileSyncAdapter.java @@ -267,8 +267,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter { fetchData(newFile.getRemotePath(), newFile.getFileId()); // Update folder size on DB - FileDataStorageManager storageManager = new FileDataStorageManager(getAccount(), getContext().getContentResolver()); - storageManager.saveFolderSize(newFile.getFileId()); + getStorageManager().calculateFolderSize(newFile.getFileId()); } }