+ @Override
+ public Vector<OCFile> getFilesbyParent(long parentId) {
+
+ Vector<OCFile> ret = new Vector<OCFile>();
+
+ 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) {
+ long folderSize = 0;
+
+ Vector<OCFile> files = getFilesbyParent(id);
+
+ Log_OC.d(TAG, "Folder " + String.valueOf(id) + "--- Number of Files = " + String.valueOf(files.size()));
+
+ for (OCFile f: files)
+ {
+ folderSize = folderSize + f.getFileLength();
+ Log_OC.d(TAG, "Folder Size = " + String.valueOf(folderSize));
+ }
+
+ updatefolderSize(id, folderSize);
+ }
+
+ /**
+ * Update the size value of a folder on DB
+ */
+ @Override
+ public int updatefolderSize(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) });
+ return result;
+ }
+
+ /**
+ * 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) {
+
+ OCFile file;
+
+ while (parentId != 0) {
+
+ Log_OC.d(TAG, "parent = " + parentId);
+ // Update the size of the parent
+ saveFolderSize(parentId);
+
+ // search the next parent
+ file = getFileById(parentId);
+ parentId = file.getParentId();
+
+ }
+
+ }
+