X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/606834980cea8cd1a743d7455174ae0be76eb630..cdabcf7b34dfe47835fdf1bee5a538928d966dce:/src/com/owncloud/android/providers/FileContentProvider.java diff --git a/src/com/owncloud/android/providers/FileContentProvider.java b/src/com/owncloud/android/providers/FileContentProvider.java index a4e50cec..e652bade 100644 --- a/src/com/owncloud/android/providers/FileContentProvider.java +++ b/src/com/owncloud/android/providers/FileContentProvider.java @@ -22,21 +22,6 @@ package com.owncloud.android.providers; -import java.io.File; -import java.security.Provider; -import java.util.ArrayList; -import java.util.HashMap; - -import com.owncloud.android.MainApp; -import com.owncloud.android.R; -import com.owncloud.android.datamodel.OCFile; -import com.owncloud.android.db.ProviderMeta; -import com.owncloud.android.db.ProviderMeta.ProviderTableMeta; -import com.owncloud.android.lib.common.accounts.AccountUtils; -import com.owncloud.android.lib.common.utils.Log_OC; -import com.owncloud.android.lib.resources.shares.ShareType; -import com.owncloud.android.utils.FileStorageUtils; - import android.accounts.Account; import android.accounts.AccountManager; import android.content.ContentProvider; @@ -55,6 +40,19 @@ import android.database.sqlite.SQLiteQueryBuilder; import android.net.Uri; import android.text.TextUtils; +import com.owncloud.android.MainApp; +import com.owncloud.android.R; +import com.owncloud.android.datamodel.OCFile; +import com.owncloud.android.db.ProviderMeta; +import com.owncloud.android.db.ProviderMeta.ProviderTableMeta; +import com.owncloud.android.lib.common.accounts.AccountUtils; +import com.owncloud.android.lib.common.utils.Log_OC; +import com.owncloud.android.lib.resources.shares.ShareType; +import com.owncloud.android.utils.FileStorageUtils; + +import java.io.File; +import java.util.ArrayList; + /** * The ContentProvider for the ownCloud App. */ @@ -62,95 +60,14 @@ public class FileContentProvider extends ContentProvider { private DataBaseHelper mDbHelper; - // Projection for filelist table - private static HashMap mFileProjectionMap; - static { - mFileProjectionMap = new HashMap(); - mFileProjectionMap.put(ProviderTableMeta._ID, ProviderTableMeta._ID); - mFileProjectionMap.put(ProviderTableMeta.FILE_PARENT, - ProviderTableMeta.FILE_PARENT); - mFileProjectionMap.put(ProviderTableMeta.FILE_PATH, - ProviderTableMeta.FILE_PATH); - mFileProjectionMap.put(ProviderTableMeta.FILE_NAME, - ProviderTableMeta.FILE_NAME); - mFileProjectionMap.put(ProviderTableMeta.FILE_CREATION, - ProviderTableMeta.FILE_CREATION); - mFileProjectionMap.put(ProviderTableMeta.FILE_MODIFIED, - ProviderTableMeta.FILE_MODIFIED); - mFileProjectionMap.put(ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA, - ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA); - mFileProjectionMap.put(ProviderTableMeta.FILE_CONTENT_LENGTH, - ProviderTableMeta.FILE_CONTENT_LENGTH); - mFileProjectionMap.put(ProviderTableMeta.FILE_CONTENT_TYPE, - ProviderTableMeta.FILE_CONTENT_TYPE); - mFileProjectionMap.put(ProviderTableMeta.FILE_STORAGE_PATH, - ProviderTableMeta.FILE_STORAGE_PATH); - mFileProjectionMap.put(ProviderTableMeta.FILE_LAST_SYNC_DATE, - ProviderTableMeta.FILE_LAST_SYNC_DATE); - mFileProjectionMap.put(ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA, - ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA); - mFileProjectionMap.put(ProviderTableMeta.FILE_KEEP_IN_SYNC, - ProviderTableMeta.FILE_KEEP_IN_SYNC); - mFileProjectionMap.put(ProviderTableMeta.FILE_ACCOUNT_OWNER, - ProviderTableMeta.FILE_ACCOUNT_OWNER); - mFileProjectionMap.put(ProviderTableMeta.FILE_ETAG, - ProviderTableMeta.FILE_ETAG); - mFileProjectionMap.put(ProviderTableMeta.FILE_SHARE_BY_LINK, - ProviderTableMeta.FILE_SHARE_BY_LINK); - mFileProjectionMap.put(ProviderTableMeta.FILE_PUBLIC_LINK, - ProviderTableMeta.FILE_PUBLIC_LINK); - mFileProjectionMap.put(ProviderTableMeta.FILE_PERMISSIONS, - ProviderTableMeta.FILE_PERMISSIONS); - mFileProjectionMap.put(ProviderTableMeta.FILE_REMOTE_ID, - ProviderTableMeta.FILE_REMOTE_ID); - mFileProjectionMap.put(ProviderTableMeta.FILE_UPDATE_THUMBNAIL, - ProviderTableMeta.FILE_UPDATE_THUMBNAIL); - mFileProjectionMap.put(ProviderTableMeta.FILE_IS_DOWNLOADING, - ProviderTableMeta.FILE_IS_DOWNLOADING); - } - private static final int SINGLE_FILE = 1; private static final int DIRECTORY = 2; private static final int ROOT_DIRECTORY = 3; private static final int SHARES = 4; + private static final int CAPABILITIES = 5; private static final String TAG = FileContentProvider.class.getSimpleName(); - // Projection for ocshares table - private static HashMap mOCSharesProjectionMap; - static { - mOCSharesProjectionMap = new HashMap(); - mOCSharesProjectionMap.put(ProviderTableMeta._ID, ProviderTableMeta._ID); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_FILE_SOURCE, - ProviderTableMeta.OCSHARES_FILE_SOURCE); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_ITEM_SOURCE, - ProviderTableMeta.OCSHARES_ITEM_SOURCE); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_SHARE_TYPE, - ProviderTableMeta.OCSHARES_SHARE_TYPE); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_SHARE_WITH, - ProviderTableMeta.OCSHARES_SHARE_WITH); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_PATH, - ProviderTableMeta.OCSHARES_PATH); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_PERMISSIONS, - ProviderTableMeta.OCSHARES_PERMISSIONS); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_SHARED_DATE, - ProviderTableMeta.OCSHARES_SHARED_DATE); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_EXPIRATION_DATE, - ProviderTableMeta.OCSHARES_EXPIRATION_DATE); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_TOKEN, - ProviderTableMeta.OCSHARES_TOKEN); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME, - ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, - ProviderTableMeta.OCSHARES_IS_DIRECTORY); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_USER_ID, - ProviderTableMeta.OCSHARES_USER_ID); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, - ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED); - mOCSharesProjectionMap.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, - ProviderTableMeta.OCSHARES_ACCOUNT_OWNER); - } - private UriMatcher mUriMatcher; @Override @@ -178,6 +95,7 @@ public class FileContentProvider extends ContentProvider { if (c != null && c.moveToFirst()) { remoteId = c.getString(c.getColumnIndex(ProviderTableMeta.FILE_REMOTE_ID)); //ThumbnailsCacheManager.removeFileFromCache(remoteId); + c.close(); } Log_OC.d(TAG, "Removing FILE " + remoteId); @@ -187,11 +105,6 @@ public class FileContentProvider extends ContentProvider { + uri.getPathSegments().get(1) + (!TextUtils.isEmpty(where) ? " AND (" + where + ")" : ""), whereArgs); - /* just for log - if (c!=null) { - c.close(); - } - */ break; case DIRECTORY: // deletion of folder is recursive @@ -254,6 +167,9 @@ public class FileContentProvider extends ContentProvider { case SHARES: count = db.delete(ProviderTableMeta.OCSHARES_TABLE_NAME, where, whereArgs); break; + case CAPABILITIES: + count = db.delete(ProviderTableMeta.CAPABILITIES_TABLE_NAME, where, whereArgs); + break; default: //Log_OC.e(TAG, "Unknown uri " + uri); throw new IllegalArgumentException("Unknown uri: " + uri.toString()); @@ -306,11 +222,12 @@ public class FileContentProvider extends ContentProvider { // ugly patch; serious refactorization is needed to reduce work in // FileDataStorageManager and bring it to FileContentProvider if (doubleCheck == null || !doubleCheck.moveToFirst()) { + if (doubleCheck != null) { + doubleCheck.close(); + } long rowId = db.insert(ProviderTableMeta.FILE_TABLE_NAME, null, values); if (rowId > 0) { - Uri insertedFileUri = - ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_FILE, rowId); - return insertedFileUri; + return ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_FILE, rowId); } else { throw new SQLException("ERROR " + uri); } @@ -326,42 +243,29 @@ public class FileContentProvider extends ContentProvider { } case SHARES: - String path = values.getAsString(ProviderTableMeta.OCSHARES_PATH); - String accountNameShare= values.getAsString(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER); - String[] projectionShare = new String[] { - ProviderTableMeta._ID, ProviderTableMeta.OCSHARES_PATH, - ProviderTableMeta.OCSHARES_ACCOUNT_OWNER - }; - String whereShare = ProviderTableMeta.OCSHARES_PATH + "=? AND " + - ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?"; - String[] whereArgsShare = new String[] {path, accountNameShare}; Uri insertedShareUri = null; - Cursor doubleCheckShare = - query(db, uri, projectionShare, whereShare, whereArgsShare, null); - // ugly patch; serious refactorization is needed to reduce work in - // FileDataStorageManager and bring it to FileContentProvider - if (doubleCheckShare == null || !doubleCheckShare.moveToFirst()) { - long rowId = db.insert(ProviderTableMeta.OCSHARES_TABLE_NAME, null, values); - if (rowId >0) { - insertedShareUri = - ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_SHARE, rowId); - } else { - throw new SQLException("ERROR " + uri); - - } + long rowId = db.insert(ProviderTableMeta.OCSHARES_TABLE_NAME, null, values); + if (rowId >0) { + insertedShareUri = + ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_SHARE, rowId); } else { - // file is already inserted; race condition, let's avoid a duplicated entry - insertedShareUri = ContentUris.withAppendedId( - ProviderTableMeta.CONTENT_URI_SHARE, - doubleCheckShare.getLong( - doubleCheckShare.getColumnIndex(ProviderTableMeta._ID) - ) - ); - doubleCheckShare.close(); + throw new SQLException("ERROR " + uri); + } - updateFilesTableAccordingToShareInsertion(db, uri, values); + updateFilesTableAccordingToShareInsertion(db, values); return insertedShareUri; + case CAPABILITIES: + Uri insertedCapUri = null; + long id = db.insert(ProviderTableMeta.CAPABILITIES_TABLE_NAME, null, values); + if (id >0) { + insertedCapUri = + ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_CAPABILITIES, id); + } else { + throw new SQLException("ERROR " + uri); + + } + return insertedCapUri; default: throw new IllegalArgumentException("Unknown uri id: " + uri); @@ -370,21 +274,23 @@ public class FileContentProvider extends ContentProvider { } private void updateFilesTableAccordingToShareInsertion( - SQLiteDatabase db, Uri uri, ContentValues shareValues + SQLiteDatabase db, ContentValues newShare ) { ContentValues fileValues = new ContentValues(); - fileValues.put( - ProviderTableMeta.FILE_SHARE_BY_LINK, - ShareType.PUBLIC_LINK.getValue() == - shareValues.getAsInteger(ProviderTableMeta.OCSHARES_SHARE_TYPE) ? 1 : 0 - ); - String whereShare = ProviderTableMeta.FILE_PATH + "=? AND " + + int newShareType = newShare.getAsInteger(ProviderTableMeta.OCSHARES_SHARE_TYPE); + if (newShareType == ShareType.PUBLIC_LINK.getValue()) { + fileValues.put(ProviderTableMeta.FILE_SHARED_VIA_LINK, 1); + } else if (newShareType == ShareType.USER.getValue() || newShareType == ShareType.GROUP.getValue()) { + fileValues.put(ProviderTableMeta.FILE_SHARED_WITH_SHAREE, 1); + } + + String where = ProviderTableMeta.FILE_PATH + "=? AND " + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?"; - String[] whereArgsShare = new String[] { - shareValues.getAsString(ProviderTableMeta.OCSHARES_PATH), - shareValues.getAsString(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER) + String[] whereArgs = new String[] { + newShare.getAsString(ProviderTableMeta.OCSHARES_PATH), + newShare.getAsString(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER) }; - db.update(ProviderTableMeta.FILE_TABLE_NAME, fileValues, whereShare, whereArgsShare); + db.update(ProviderTableMeta.FILE_TABLE_NAME, fileValues, where, whereArgs); } @@ -401,6 +307,8 @@ public class FileContentProvider extends ContentProvider { mUriMatcher.addURI(authority, "dir/#", DIRECTORY); mUriMatcher.addURI(authority, "shares/", SHARES); mUriMatcher.addURI(authority, "shares/#", SHARES); + mUriMatcher.addURI(authority, "capabilities/", CAPABILITIES); + mUriMatcher.addURI(authority, "capabilities/#", CAPABILITIES); return true; } @@ -439,7 +347,6 @@ public class FileContentProvider extends ContentProvider { SQLiteQueryBuilder sqlQuery = new SQLiteQueryBuilder(); sqlQuery.setTables(ProviderTableMeta.FILE_TABLE_NAME); - sqlQuery.setProjectionMap(mFileProjectionMap); switch (mUriMatcher.match(uri)) { case ROOT_DIRECTORY: @@ -457,7 +364,13 @@ public class FileContentProvider extends ContentProvider { break; case SHARES: sqlQuery.setTables(ProviderTableMeta.OCSHARES_TABLE_NAME); - sqlQuery.setProjectionMap(mOCSharesProjectionMap); + if (uri.getPathSegments().size() > 1) { + sqlQuery.appendWhere(ProviderTableMeta._ID + "=" + + uri.getPathSegments().get(1)); + } + break; + case CAPABILITIES: + sqlQuery.setTables(ProviderTableMeta.CAPABILITIES_TABLE_NAME); if (uri.getPathSegments().size() > 1) { sqlQuery.appendWhere(ProviderTableMeta._ID + "=" + uri.getPathSegments().get(1)); @@ -469,11 +382,16 @@ public class FileContentProvider extends ContentProvider { String order; if (TextUtils.isEmpty(sortOrder)) { - if (mUriMatcher.match(uri) == SHARES) { - order = ProviderTableMeta.OCSHARES_DEFAULT_SORT_ORDER; - } else { - - order = ProviderTableMeta.FILE_DEFAULT_SORT_ORDER; + switch (mUriMatcher.match(uri)) { + case SHARES: + order = ProviderTableMeta.OCSHARES_DEFAULT_SORT_ORDER; + break; + case CAPABILITIES: + order = ProviderTableMeta.CAPABILITIES_DEFAULT_SORT_ORDER; + break; + default: // Files + order = ProviderTableMeta.FILE_DEFAULT_SORT_ORDER; + break; } } else { order = sortOrder; @@ -518,6 +436,10 @@ public class FileContentProvider extends ContentProvider { return db.update( ProviderTableMeta.OCSHARES_TABLE_NAME, values, selection, selectionArgs ); + case CAPABILITIES: + return db.update( + ProviderTableMeta.CAPABILITIES_TABLE_NAME, values, selection, selectionArgs + ); default: return db.update( ProviderTableMeta.FILE_TABLE_NAME, values, selection, selectionArgs @@ -525,59 +447,6 @@ public class FileContentProvider extends ContentProvider { } } - /* - private int updateFolderSize(SQLiteDatabase db, String folderId) { - int count = 0; - String [] whereArgs = new String[] { folderId }; - - // read current size saved for the folder - long folderSize = 0; - long folderParentId = -1; - Uri selectFolderUri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_FILE, folderId); - String[] folderProjection = new String[] { ProviderTableMeta.FILE_CONTENT_LENGTH, ProviderTableMeta.FILE_PARENT}; - String folderWhere = ProviderTableMeta._ID + "=?"; - Cursor folderCursor = query(db, selectFolderUri, folderProjection, folderWhere, whereArgs, null); - if (folderCursor != null && folderCursor.moveToFirst()) { - folderSize = folderCursor.getLong(folderCursor.getColumnIndex(ProviderTableMeta.FILE_CONTENT_LENGTH));; - folderParentId = folderCursor.getLong(folderCursor.getColumnIndex(ProviderTableMeta.FILE_PARENT));; - } - folderCursor.close(); - - // read and sum sizes of children - long childrenSize = 0; - Uri selectChildrenUri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, folderId); - String[] childrenProjection = new String[] { ProviderTableMeta.FILE_CONTENT_LENGTH, ProviderTableMeta.FILE_PARENT}; - String childrenWhere = ProviderTableMeta.FILE_PARENT + "=?"; - Cursor childrenCursor = query(db, selectChildrenUri, childrenProjection, childrenWhere, whereArgs, null); - if (childrenCursor != null && childrenCursor.moveToFirst()) { - while (!childrenCursor.isAfterLast()) { - childrenSize += childrenCursor.getLong(childrenCursor.getColumnIndex(ProviderTableMeta.FILE_CONTENT_LENGTH)); - childrenCursor.moveToNext(); - } - } - childrenCursor.close(); - - // update if needed - if (folderSize != childrenSize) { - Log_OC.d("FileContentProvider", "Updating " + folderSize + " to " + childrenSize); - ContentValues cv = new ContentValues(); - cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, childrenSize); - count = db.update(ProviderTableMeta.FILE_TABLE_NAME, cv, folderWhere, whereArgs); - - // propagate update until root - if (folderParentId > FileDataStorageManager.ROOT_PARENT_ID) { - Log_OC.d("FileContentProvider", "Propagating update to " + folderParentId); - updateFolderSize(db, String.valueOf(folderParentId)); - } else { - Log_OC.d("FileContentProvider", "NOT propagating to " + folderParentId); - } - } else { - Log_OC.d("FileContentProvider", "NOT updating, sizes are " + folderSize + " and " + childrenSize); - } - return count; - } -*/ - @Override public ContentProviderResult[] applyBatch (ArrayList operations) throws OperationApplicationException { @@ -614,28 +483,30 @@ public class FileContentProvider extends ContentProvider { // files table Log_OC.i("SQL", "Entering in onCreate"); db.execSQL("CREATE TABLE " + ProviderTableMeta.FILE_TABLE_NAME + "(" - + ProviderTableMeta._ID + " INTEGER PRIMARY KEY, " - + ProviderTableMeta.FILE_NAME + " TEXT, " - + ProviderTableMeta.FILE_PATH + " TEXT, " - + ProviderTableMeta.FILE_PARENT + " INTEGER, " - + ProviderTableMeta.FILE_CREATION + " INTEGER, " - + ProviderTableMeta.FILE_MODIFIED + " INTEGER, " - + ProviderTableMeta.FILE_CONTENT_TYPE + " TEXT, " - + ProviderTableMeta.FILE_CONTENT_LENGTH + " INTEGER, " - + ProviderTableMeta.FILE_STORAGE_PATH + " TEXT, " - + ProviderTableMeta.FILE_ACCOUNT_OWNER + " TEXT, " - + ProviderTableMeta.FILE_LAST_SYNC_DATE + " INTEGER, " - + ProviderTableMeta.FILE_KEEP_IN_SYNC + " INTEGER, " - + ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA + " INTEGER, " - + ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA + " INTEGER, " - + ProviderTableMeta.FILE_ETAG + " TEXT, " - + ProviderTableMeta.FILE_SHARE_BY_LINK + " INTEGER, " - + ProviderTableMeta.FILE_PUBLIC_LINK + " TEXT, " - + ProviderTableMeta.FILE_PERMISSIONS + " TEXT null," - + ProviderTableMeta.FILE_REMOTE_ID + " TEXT null," - + ProviderTableMeta.FILE_UPDATE_THUMBNAIL + " INTEGER," //boolean - + ProviderTableMeta.FILE_IS_DOWNLOADING + " INTEGER);" //boolean - ); + + ProviderTableMeta._ID + " INTEGER PRIMARY KEY, " + + ProviderTableMeta.FILE_NAME + " TEXT, " + + ProviderTableMeta.FILE_PATH + " TEXT, " + + ProviderTableMeta.FILE_PARENT + " INTEGER, " + + ProviderTableMeta.FILE_CREATION + " INTEGER, " + + ProviderTableMeta.FILE_MODIFIED + " INTEGER, " + + ProviderTableMeta.FILE_CONTENT_TYPE + " TEXT, " + + ProviderTableMeta.FILE_CONTENT_LENGTH + " INTEGER, " + + ProviderTableMeta.FILE_STORAGE_PATH + " TEXT, " + + ProviderTableMeta.FILE_ACCOUNT_OWNER + " TEXT, " + + ProviderTableMeta.FILE_LAST_SYNC_DATE + " INTEGER, " + + ProviderTableMeta.FILE_KEEP_IN_SYNC + " INTEGER, " + + ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA + " INTEGER, " + + ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA + " INTEGER, " + + ProviderTableMeta.FILE_ETAG + " TEXT, " + + ProviderTableMeta.FILE_SHARED_VIA_LINK + " INTEGER, " + + ProviderTableMeta.FILE_PUBLIC_LINK + " TEXT, " + + ProviderTableMeta.FILE_PERMISSIONS + " TEXT null," + + ProviderTableMeta.FILE_REMOTE_ID + " TEXT null," + + ProviderTableMeta.FILE_UPDATE_THUMBNAIL + " INTEGER," //boolean + + ProviderTableMeta.FILE_IS_DOWNLOADING + " INTEGER," //boolean + + ProviderTableMeta.FILE_ETAG_IN_CONFLICT + " TEXT," + + ProviderTableMeta.FILE_SHARED_WITH_SHAREE + " INTEGER);" + ); // Create table ocshares db.execSQL("CREATE TABLE " + ProviderTableMeta.OCSHARES_TABLE_NAME + "(" @@ -654,6 +525,10 @@ public class FileContentProvider extends ContentProvider { + ProviderTableMeta.OCSHARES_USER_ID + " INTEGER, " + ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + " INTEGER," + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + " TEXT );" ); + + // Create table capabilities + createCapabilitiesTable(db); + } @Override @@ -733,7 +608,7 @@ public class FileContentProvider extends ContentProvider { db.beginTransaction(); try { db .execSQL("ALTER TABLE " + ProviderTableMeta.FILE_TABLE_NAME + - " ADD COLUMN " + ProviderTableMeta.FILE_SHARE_BY_LINK + " INTEGER " + + " ADD COLUMN " + ProviderTableMeta.FILE_SHARED_VIA_LINK + " INTEGER " + " DEFAULT 0"); db .execSQL("ALTER TABLE " + ProviderTableMeta.FILE_TABLE_NAME + @@ -834,9 +709,88 @@ public class FileContentProvider extends ContentProvider { if (!upgraded) Log_OC.i("SQL", "OUT of the ADD in onUpgrade; oldVersion == " + oldVersion + ", newVersion == " + newVersion); + + if (oldVersion < 11 && newVersion >= 11) { + Log_OC.i("SQL", "Entering in the #11 ADD in onUpgrade"); + db.beginTransaction(); + try { + db .execSQL("ALTER TABLE " + ProviderTableMeta.FILE_TABLE_NAME + + " ADD COLUMN " + ProviderTableMeta.FILE_ETAG_IN_CONFLICT + " TEXT " + + " DEFAULT NULL"); + + upgraded = true; + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + } + if (!upgraded) + Log_OC.i("SQL", "OUT of the ADD in onUpgrade; oldVersion == " + oldVersion + + ", newVersion == " + newVersion); + + if (oldVersion < 12 && newVersion >= 12) { + Log_OC.i("SQL", "Entering in the #12 ADD in onUpgrade"); + db.beginTransaction(); + try { + db .execSQL("ALTER TABLE " + ProviderTableMeta.FILE_TABLE_NAME + + " ADD COLUMN " + ProviderTableMeta.FILE_SHARED_WITH_SHAREE + " INTEGER " + + " DEFAULT 0"); + upgraded = true; + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + } + if (!upgraded) + Log_OC.i("SQL", "OUT of the ADD in onUpgrade; oldVersion == " + oldVersion + + ", newVersion == " + newVersion); + + if (oldVersion < 13 && newVersion >= 13) { + Log_OC.i("SQL", "Entering in the #13 ADD in onUpgrade"); + db.beginTransaction(); + try { + // Create capabilities table + createCapabilitiesTable(db); + upgraded = true; + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + } + if (!upgraded) + Log_OC.i("SQL", "OUT of the ADD in onUpgrade; oldVersion == " + oldVersion + + ", newVersion == " + newVersion); + } } + private void createCapabilitiesTable(SQLiteDatabase db){ + // Create table capabilities + db.execSQL("CREATE TABLE " + ProviderTableMeta.CAPABILITIES_TABLE_NAME + "(" + + ProviderTableMeta._ID + " INTEGER PRIMARY KEY, " + + ProviderTableMeta.CAPABILITIES_ACCOUNT_NAME + " TEXT, " + + ProviderTableMeta.CAPABILITIES_VERSION_MAYOR + " INTEGER, " + + ProviderTableMeta.CAPABILITIES_VERSION_MINOR + " INTEGER, " + + ProviderTableMeta.CAPABILITIES_VERSION_MICRO + " INTEGER, " + + ProviderTableMeta.CAPABILITIES_VERSION_STRING + " TEXT, " + + ProviderTableMeta.CAPABILITIES_VERSION_EDITION + " TEXT, " + + ProviderTableMeta.CAPABILITIES_CORE_POLLINTERVAL + " INTEGER, " + + ProviderTableMeta.CAPABILITIES_SHARING_API_ENABLED + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_ENABLED + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_PASSWORD_ENFORCED + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_ENABLED + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_DAYS + " INTEGER, " + + ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_EXPIRE_DATE_ENFORCED + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_SEND_MAIL + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_SHARING_PUBLIC_UPLOAD + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_SHARING_USER_SEND_MAIL + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_SHARING_RESHARING + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_SHARING_FEDERATION_OUTGOING + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_SHARING_FEDERATION_INCOMING + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_FILES_BIGFILECHUNKING + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_FILES_UNDELETE + " INTEGER, " // boolean + + ProviderTableMeta.CAPABILITIES_FILES_VERSIONING + " INTEGER );" ); // boolean + } /** * Version 10 of database does not modify its scheme. It coincides with the upgrade of the ownCloud account names