cv.put(ProviderTableMeta.FILE_ETAG, file.getEtag());
boolean sameRemotePath = fileExists(file.getRemotePath());
- boolean changesSizeOfAncestors = false;
if (sameRemotePath ||
fileExists(file.getFileId()) ) { // for renamed files; no more delete and create
} else {
oldFile = getFileById(file.getFileId());
}
- changesSizeOfAncestors = (oldFile.getFileLength() != file.getFileLength());
overriden = true;
if (getContentResolver() != null) {
}
}
} else {
- changesSizeOfAncestors = true;
Uri result_uri = null;
if (getContentResolver() != null) {
result_uri = getContentResolver().insert(
}
if (file.isFolder()) {
- calculateFolderSize(file.getFileId());
- if (file.needsUpdatingWhileSaving()) {
- for (OCFile f : getFolderContent(file))
- saveFile(f);
- }
- }
-
- if (changesSizeOfAncestors || file.isFolder()) {
- updateSizesToTheRoot(file.getParentId());
+ updateFolderSize(file.getFileId());
+ } else {
+ updateFolderSize(file.getParentId());
}
return overriden;
}
}
- // update metadata of folder --> TODO MOVE UPDATE OF SIZE TO CONTENTPROVIDER
+ // update metadata of folder
ContentValues cv = new ContentValues();
cv.put(ProviderTableMeta.FILE_MODIFIED, folder.getModificationTimestamp());
cv.put(ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA, folder.getModificationTimestampAtLastSyncForData());
cv.put(ProviderTableMeta.FILE_CREATION, folder.getCreationTimestamp());
- cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, folder.getFileLength());
+ cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, 0); // FileContentProvider calculates the right size
cv.put(ProviderTableMeta.FILE_CONTENT_TYPE, folder.getMimetype());
cv.put(ProviderTableMeta.FILE_NAME, folder.getFileName());
cv.put(ProviderTableMeta.FILE_PARENT, folder.getParentId());
cv.put(ProviderTableMeta.FILE_PATH, folder.getRemotePath());
- if (!folder.isFolder()) {
- cv.put(ProviderTableMeta.FILE_STORAGE_PATH, folder.getStoragePath());
- }
cv.put(ProviderTableMeta.FILE_ACCOUNT_OWNER, mAccount.name);
cv.put(ProviderTableMeta.FILE_LAST_SYNC_DATE, folder.getLastSyncDateForProperties());
cv.put(ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA, folder.getLastSyncDateForData());
}
}
+ updateFolderSize(folder.getFileId());
+
}
/**
- * Calculate and save the folderSize on DB
+ *
* @param id
*/
- public void calculateFolderSize(long id) {
- long folderSize = 0;
-
- Vector<OCFile> files = getFolderContent(id);
-
- for (OCFile f: files)
- {
- folderSize = folderSize + f.getFileLength();
+ private void updateFolderSize(long id) {
+ if (id > FileDataStorageManager.ROOT_PARENT_ID) {
+ Log_OC.d(TAG, "Updating size of " + id);
+ if (getContentResolver() != null) {
+ getContentResolver().update(ProviderTableMeta.CONTENT_URI_DIR, null,
+ ProviderTableMeta._ID + "=?",
+ new String[] { String.valueOf(id) });
+ } else {
+ try {
+ getContentProviderClient().update(ProviderTableMeta.CONTENT_URI_DIR, null,
+ ProviderTableMeta._ID + "=?",
+ new String[] { String.valueOf(id) });
+
+ } catch (RemoteException e) {
+ Log_OC.e(TAG, "Exception in update of folder size through compatibility patch " + e.getMessage());
+ }
+ }
+ } else {
+ Log_OC.e(TAG, "not updating size for folder " + id);
}
-
- updateSize(id, folderSize);
}
-
+
public void removeFile(OCFile file, boolean removeDBData, boolean removeLocalCopy) {
if (file != null) {
if (file.isFolder()) {
} else {
getContentResolver().delete(file_uri, where, whereArgs);
}
- if (file.getFileLength() > 0) {
- updateSizesToTheRoot(file.getParentId()); // TODO move to content provider
- }
+ updateFolderSize(file.getParentId());
}
if (removeLocalCopy && file.isDown()) {
boolean success = new File(file.getStoragePath()).delete();
} else {
getContentResolver().delete(folder_uri, where, whereArgs);
}
- if (folder.getFileLength() > 0) {
- updateSizesToTheRoot(folder.getParentId()); // TODO move to FileContentProvider
- }
+ updateFolderSize(folder.getParentId());
}
private void removeLocalFolder(File folder) {
return file;
}
- /**
+ /*
* Update the size value of an OCFile in DB
- */
+ *
private int updateSize(long id, long size) {
ContentValues cv = new ContentValues();
cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, size);
}
return result;
}
+ */
- /**
+ /*
* Update the size of a subtree of folder from a file to the root
* @param parentId: parent of the file
- */
+ *
private void updateSizesToTheRoot(long parentId) {
OCFile file;
while (parentId != FileDataStorageManager.ROOT_PARENT_ID) {
// Update the size of the parent
- calculateFolderSize(parentId);
+ updateFolderSize(parentId);
// search the next parent
file = getFileById(parentId);
parentId = file.getParentId();
}
-
}
+ */
}