+
+ // prepare operations to remove files in the given folder
+ String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?" + " AND " + ProviderTableMeta.FILE_PATH + "=?";
+ String [] whereArgs = null;
+ for (OCFile file : filesToRemove) {
+ if (file.getParentId() == folder.getFileId()) {
+ whereArgs = new String[]{mAccount.name, file.getRemotePath()};
+ //Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_FILE, "" + file.getFileId());
+ if (file.isFolder()) {
+ operations.add(ContentProviderOperation
+ .newDelete(ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_DIR, file.getFileId())).withSelection(where, whereArgs)
+ .build());
+ // TODO remove local folder
+ } else {
+ operations.add(ContentProviderOperation
+ .newDelete(ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_FILE, file.getFileId())).withSelection(where, whereArgs)
+ .build());
+ if (file.isDown()) {
+ new File(file.getStoragePath()).delete();
+ // TODO move the deletion of local contents after success of deletions
+ }
+ }
+ }
+ }
+
+ // 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, 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());
+ 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());
+ cv.put(ProviderTableMeta.FILE_KEEP_IN_SYNC, folder.keepInSync() ? 1 : 0);
+ cv.put(ProviderTableMeta.FILE_ETAG, folder.getEtag());
+ operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
+ withValues(cv).
+ withSelection( ProviderTableMeta._ID + "=?",
+ new String[] { String.valueOf(folder.getFileId()) })
+ .build());