Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 376fd299 authored by vince-bourgmayer's avatar vince-bourgmayer
Browse files

Fix e/apps/eDrive#5, DB has been updated with two new fields

parent 41d070e0
Loading
Loading
Loading
Loading
Loading
+19 −19
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ import io.eelo.drive.models.SyncedFileState;

public final class DbHelper extends SQLiteOpenHelper {
    final private static String TAG = DbHelper.class.getSimpleName(); //Tag for log
    private static final int DATABASE_VERSION = 14;
    private static final int DATABASE_VERSION = 19;
    public static final String DATABASE_NAME = "eelo_drive.db";

    /**
@@ -177,13 +177,29 @@ public final class DbHelper extends SQLiteOpenHelper {
     * @param context app or service activity
     * @return List<Folder> a list of SyncedFolder from DB
     */
    public static List<SyncedFolder> getSyncedFolders(Context context) {
    public static List<SyncedFolder> getAllSyncedFolders(Context context) {
        SyncedFolderDAO dao = openSyncedFolderDAO(context, false);
        List<SyncedFolder> mSyncedFolder = new ArrayList<SyncedFolder>();
        if(dao == null){
            return mSyncedFolder;
        }else {
            mSyncedFolder = dao.getAllSyncedFolders(SyncedFolderContract.ENABLED);

            mSyncedFolder = dao.getSyncedFolderList(SyncedFolderContract.ENABLED+" = 1 ", null );
            dao.close();
            return mSyncedFolder;
        }
    }

    public static List<SyncedFolder> getSyncedFolderList(Context context, boolean isMediaType) {
        SyncedFolderDAO dao = openSyncedFolderDAO(context, false);
        List<SyncedFolder> mSyncedFolder = new ArrayList<>();
        if(dao == null){
            return mSyncedFolder;
        }
        else {
            mSyncedFolder = dao.getSyncedFolderList(SyncedFolderContract.ENABLED+" = 1 AND "
                            +SyncedFolderContract.IS_MEDIA_TYPE+" = ?", new String[] {(isMediaType)? "1":"0"}
                    );
            dao.close();
            return mSyncedFolder;
        }
@@ -222,22 +238,6 @@ public final class DbHelper extends SQLiteOpenHelper {
        return result;
    }

    /**
     * Delete a syncedFolder and its relative SyncedFileState
     * @param id Id of the syncedFolder to remove
     * @param context context to use
     * @return
     */
    public static int deleteSyncedFolderAndSyncedFileStates(long id, Context context){
        SyncedFileStateDAO dao = openSyncedFileStateDAO(context, true);
        if(dao == null){
            return -1;
        }
        int result = dao.deleteByFolder(id);
        dao.close();
        return result+deleteSyncedFolder(id, context);
    }

    /**
     * Set the lastModified value of SyncedFolder to 1.
     * The goal is to force to rescan it next time.
+2 −2
Original line number Diff line number Diff line
@@ -17,8 +17,6 @@ import android.provider.BaseColumns;
class SyncedFileStateContract implements BaseColumns{

   /** Table structure **/


    static final String TABLE_NAME ="synced_file_state";
    static final String FILE_NAME ="file_name";
    static final String LOCAL_PATH ="local_path";
@@ -26,6 +24,7 @@ class SyncedFileStateContract implements BaseColumns{
    static final String LAST_ETAG = "last_etag";
    static final String LOCAL_LAST_MODIFIED = "local_last_modified";
    static final String SYNCEDFOLDER_ID = "synced_folder_id";
    static final String IS_MEDIA_TYPE = "is_media_type";

    static final String SQL_CREATE_TABLE_SYNCEDFILESTATE =
         "CREATE TABLE "+TABLE_NAME+" ( "
@@ -36,6 +35,7 @@ class SyncedFileStateContract implements BaseColumns{
         +LAST_ETAG+" TEXT, "
         +LOCAL_LAST_MODIFIED+" INTEGER, "
         + SYNCEDFOLDER_ID +" INTEGER, "
         +IS_MEDIA_TYPE+" BOOLEAN,"
         +"CONSTRAINT synced_unicity_constraint UNIQUE ("
         +FILE_NAME+", "
         +LOCAL_PATH+", "
+59 −46
Original line number Diff line number Diff line
@@ -20,6 +20,15 @@ import java.util.ArrayList;
import java.util.List;

import io.eelo.drive.models.SyncedFileState;
import static io.eelo.drive.database.SyncedFileStateContract.TABLE_NAME;
import static io.eelo.drive.database.SyncedFileStateContract.FILE_NAME;
import static io.eelo.drive.database.SyncedFileStateContract.IS_MEDIA_TYPE;
import static io.eelo.drive.database.SyncedFileStateContract.LAST_ETAG;
import static io.eelo.drive.database.SyncedFileStateContract.LOCAL_LAST_MODIFIED;
import static io.eelo.drive.database.SyncedFileStateContract.LOCAL_PATH;
import static io.eelo.drive.database.SyncedFileStateContract.REMOTE_PATH;
import static io.eelo.drive.database.SyncedFileStateContract.SYNCEDFOLDER_ID;


/**
 * @author Vincent Bourgmayer
@@ -37,7 +46,8 @@ class SyncedFileStateDAO {
            SyncedFileStateContract.LAST_ETAG,

            SyncedFileStateContract.LOCAL_LAST_MODIFIED,
            SyncedFileStateContract.SYNCEDFOLDER_ID
            SyncedFileStateContract.SYNCEDFOLDER_ID,
            SyncedFileStateContract.IS_MEDIA_TYPE
    };*/

    SyncedFileStateDAO(Context context){
@@ -60,21 +70,33 @@ class SyncedFileStateDAO {
        mHelper.close();
    }

    /**
     * Convert a SyncedFileState into a ContentValues object
     * @param syncedFileState syncedFileState to convert
     * @return a ContentValues object
     */
    private ContentValues toContentValues(SyncedFileState syncedFileState){
        ContentValues values = new ContentValues();
        values.put( FILE_NAME, syncedFileState.getName() );
        values.put( LOCAL_PATH, syncedFileState.getLocalPath() );
        values.put( REMOTE_PATH, syncedFileState.getRemotePath() );
        values.put( LAST_ETAG, syncedFileState.getLastETAG() );
        values.put( LOCAL_LAST_MODIFIED, syncedFileState.getLocalLastModified() );
        values.put( SYNCEDFOLDER_ID, syncedFileState.getSyncedFolderId() );
        values.put( IS_MEDIA_TYPE, syncedFileState.isMediaType() ? 1 : 0 );
        return values;
    }

    /**
    * Insert new SyncedFileState
    * @param syncedFileState element to register
    * @return id of the last added element
    */
    long insert(SyncedFileState syncedFileState){
        ContentValues values = new ContentValues();
        values.put( SyncedFileStateContract.FILE_NAME, syncedFileState.getName() );
        values.put( SyncedFileStateContract.LOCAL_PATH, syncedFileState.getLocalPath() );
        values.put( SyncedFileStateContract.REMOTE_PATH, syncedFileState.getRemotePath() );
        values.put( SyncedFileStateContract.LAST_ETAG, syncedFileState.getLastETAG() );
        values.put( SyncedFileStateContract.LOCAL_LAST_MODIFIED, syncedFileState.getLocalLastModified() );
        values.put( SyncedFileStateContract.SYNCEDFOLDER_ID, syncedFileState.getSyncedFolderId() );

        return mDB.insertWithOnConflict(SyncedFileStateContract.TABLE_NAME, null, values, SQLiteDatabase.CONFLICT_IGNORE);
        return mDB.insertWithOnConflict(SyncedFileStateContract.TABLE_NAME,
                null,
                toContentValues(syncedFileState),
                SQLiteDatabase.CONFLICT_IGNORE);
    }

    /**
@@ -92,17 +114,9 @@ class SyncedFileStateDAO {
     * @return number of row affected
     */
    public int deleteByFolder(long folderId) {
        return mDB.delete(SyncedFileStateContract.TABLE_NAME, SyncedFileStateContract.SYNCEDFOLDER_ID
        return mDB.delete(TABLE_NAME, SYNCEDFOLDER_ID
                + " = " + folderId, null);
    }
    /**
     * Not used actually
     * Delete all rows
     * @return number of row affected
     */
    /*public int deleteAll(){
        return mDB.delete(SyncedFileStateContract.TABLE_NAME, null, null);
    } */

    /**
    * Update a specific syncedFile
@@ -110,17 +124,12 @@ class SyncedFileStateDAO {
    * @return number of row affected
    */
    int update(SyncedFileState syncedFileState){
        ContentValues values = new ContentValues();
        values.put(SyncedFileStateContract.FILE_NAME, syncedFileState.getName());
        values.put(SyncedFileStateContract.LOCAL_PATH, syncedFileState.getLocalPath());
        values.put(SyncedFileStateContract.REMOTE_PATH, syncedFileState.getRemotePath());
        values.put(SyncedFileStateContract.LAST_ETAG, syncedFileState.getLastETAG());
        values.put( SyncedFileStateContract.LOCAL_LAST_MODIFIED, syncedFileState.getLocalLastModified() );
        values.put( SyncedFileStateContract.SYNCEDFOLDER_ID, syncedFileState.getSyncedFolderId() );
        int result = 0;

        try{
            result = mDB.update(SyncedFileStateContract.TABLE_NAME, values, SyncedFileStateContract._ID+" = "+syncedFileState.getId(), null);
            result = mDB.update(TABLE_NAME,
                    toContentValues(syncedFileState),
                    SyncedFileStateContract._ID+" = "+syncedFileState.getId(),
                    null);
        }catch(Exception e){
            Log.e(TAG, e.toString());
        }
@@ -136,19 +145,20 @@ class SyncedFileStateDAO {
    List<SyncedFileState> getBySyncedFolderID(List<Long> syncedFolderids){
         String query = "Select "
            +SyncedFileStateContract._ID+", "
            +SyncedFileStateContract.FILE_NAME+", "
            +SyncedFileStateContract.LOCAL_PATH+", "
            +SyncedFileStateContract.REMOTE_PATH+", "
            +SyncedFileStateContract.LAST_ETAG+", "
            +SyncedFileStateContract.LOCAL_LAST_MODIFIED+", "
            +SyncedFileStateContract.SYNCEDFOLDER_ID
            +FILE_NAME+", "
            +LOCAL_PATH+", "
            +REMOTE_PATH+", "
            +LAST_ETAG+", "
            +LOCAL_LAST_MODIFIED+", "
            + SYNCEDFOLDER_ID+", "
            + IS_MEDIA_TYPE
            +" FROM "
            +SyncedFileStateContract.TABLE_NAME;
            +TABLE_NAME;
         if(syncedFolderids.size() > 0) {
             query+=" WHERE ";

             for (int i = -1, idsSize = syncedFolderids.size(); ++i < idsSize; ) {
                 query += SyncedFileStateContract.SYNCEDFOLDER_ID + " = " + syncedFolderids.get(i);
                 query += SYNCEDFOLDER_ID + " = " + syncedFolderids.get(i);
                 if (i < idsSize - 1) {
                     query += " OR ";
                 }
@@ -174,17 +184,19 @@ class SyncedFileStateDAO {
    SyncedFileState getByPath(String path, boolean isLocalPath){
        String query  = "Select "
                +SyncedFileStateContract._ID+", "
                +SyncedFileStateContract.FILE_NAME+", "
                +SyncedFileStateContract.LOCAL_PATH+", "
                +SyncedFileStateContract.REMOTE_PATH+", "
                +SyncedFileStateContract.LAST_ETAG+", "
                +SyncedFileStateContract.LOCAL_LAST_MODIFIED+", "
                +SyncedFileStateContract.SYNCEDFOLDER_ID+" FROM "
                +SyncedFileStateContract.TABLE_NAME+" WHERE ";
                +FILE_NAME+", "
                +LOCAL_PATH+", "
                +REMOTE_PATH+", "
                +LAST_ETAG+", "
                +LOCAL_LAST_MODIFIED+", "
                + SYNCEDFOLDER_ID+", "
                + IS_MEDIA_TYPE+
                " FROM "
                +TABLE_NAME+" WHERE ";
        if(isLocalPath)
            query+=SyncedFileStateContract.LOCAL_PATH ;
            query+=LOCAL_PATH ;
        else
            query+=SyncedFileStateContract.REMOTE_PATH ;
            query+=REMOTE_PATH ;

        query +=" like \""+path+"\"";

@@ -211,7 +223,8 @@ class SyncedFileStateDAO {
                cursor.getString(3 ),//remote path
                cursor.getString(4 ),// last Etag
                cursor.getLong(5 ),//Local last modified
                cursor.getLong(6 ) //SyncedFolderID
                cursor.getLong(6 ), //SyncedFolderID
                (cursor.getInt(7) == 1 ) //is Media Type
        );
    }
}
+3 −1
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ final class SyncedFolderContract implements BaseColumns{
    static final String SCANLOCAL ="scan_local";
    static final String SCANREMOTE ="scan_remote";
    static final String ENABLED ="enabled";
    static final String IS_MEDIA_TYPE = "is_media_type";

    static final String SQL_CREATE_TABLE_SYNCEDFOLDER =
            "CREATE TABLE "+TABLE_NAME+" ( "
@@ -38,7 +39,8 @@ final class SyncedFolderContract implements BaseColumns{
            +LOCAL_LAST_MODIFIED+" INTEGER, "
            +SCANLOCAL+" BOOLEAN, "
            +SCANREMOTE+" BOOLEAN, "
            +ENABLED+" BOOLEAN ) ";
            +ENABLED+" BOOLEAN, "
            +IS_MEDIA_TYPE+" BOOLEAN ) ";

    static final String SQL_DELETE_TABLE_SYNCEDFOLDER = " DROP TABLE IF EXISTS "
            + TABLE_NAME;
+64 −63
Original line number Diff line number Diff line
@@ -14,29 +14,40 @@ import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

import java.util.ArrayList;
import java.util.List;

import io.eelo.drive.models.SyncedFolder;
import static io.eelo.drive.database.SyncedFolderContract.CATEGORIE_LABEL;
import static io.eelo.drive.database.SyncedFolderContract.ENABLED;
import static io.eelo.drive.database.SyncedFolderContract.LAST_ETAG;
import static io.eelo.drive.database.SyncedFolderContract.LOCAL_LAST_MODIFIED;
import static io.eelo.drive.database.SyncedFolderContract.LOCAL_PATH;
import static io.eelo.drive.database.SyncedFolderContract.REMOTE_PATH;
import static io.eelo.drive.database.SyncedFolderContract.SCANLOCAL;
import static io.eelo.drive.database.SyncedFolderContract.SCANREMOTE;
import static io.eelo.drive.database.SyncedFolderContract.IS_MEDIA_TYPE;
import static io.eelo.drive.database.SyncedFolderContract.TABLE_NAME;

/**
 * @author Vincent Bourgmayer
 * source: https://vogella.developpez.com/tutoriels/android/utilisation-base-donnees-sqlite/
 * Source: https://vogella.developpez.com/tutoriels/android/utilisation-base-donnees-sqlite/
 */
class SyncedFolderDAO {
    final private static String TAG = SyncedFolderDAO.class.getSimpleName(); //Tag for log
    private SQLiteDatabase mDB;
    private final DbHelper mHelper;
    private final String[] allColumns = { SyncedFolderContract._ID,
        SyncedFolderContract.CATEGORIE_LABEL,
        SyncedFolderContract.LOCAL_PATH,
        SyncedFolderContract.REMOTE_PATH,
        SyncedFolderContract.LAST_ETAG,
        SyncedFolderContract.LOCAL_LAST_MODIFIED,
        SyncedFolderContract.SCANLOCAL,
        SyncedFolderContract.SCANREMOTE,
        SyncedFolderContract.ENABLED};
        CATEGORIE_LABEL,
        LOCAL_PATH,
        REMOTE_PATH,
        LAST_ETAG,
        LOCAL_LAST_MODIFIED,
        SCANLOCAL,
        SCANREMOTE,
        ENABLED,
        IS_MEDIA_TYPE
    };

    SyncedFolderDAO(Context context){
        this.mHelper = new DbHelper(context);
@@ -58,22 +69,34 @@ class SyncedFolderDAO {
        mHelper.close();
    }

    /**
     * Convert a syncedFolder to ContentValues
     * @param syncedFolder SyncedFolder to convert
     * @return ContentValues object
     */
    private ContentValues toContentValues(SyncedFolder syncedFolder){
        ContentValues values = new ContentValues();
        values.put( CATEGORIE_LABEL, syncedFolder.getLibelle() );
        values.put( LOCAL_PATH, syncedFolder.getLocalFolder() );
        values.put( REMOTE_PATH, syncedFolder.getRemoteFolder() );
        values.put( LAST_ETAG, syncedFolder.getLastEtag() );
        values.put( LOCAL_LAST_MODIFIED, syncedFolder.getLastEtag() );
        values.put( SCANLOCAL, syncedFolder.isScanLocal() ? 1 : 0 );
        values.put( SCANREMOTE, syncedFolder.isScanRemote() ? 1 : 0 );
        values.put( ENABLED, syncedFolder.isEnabled() ? 1 : 0 );
        values.put( IS_MEDIA_TYPE, syncedFolder.isMediaType() ? 1 : 0 );
        return values;
    }

    /**
    * Insert new syncedFolder
    * @param syncedFolder element to register
    * @return Id of the last inserted value
    */
    long insert(SyncedFolder syncedFolder){
        ContentValues values = new ContentValues();
        values.put( SyncedFolderContract.CATEGORIE_LABEL, syncedFolder.getLibelle() );
        values.put( SyncedFolderContract.LOCAL_PATH, syncedFolder.getLocalFolder() );
        values.put( SyncedFolderContract.REMOTE_PATH, syncedFolder.getRemoteFolder() );
        values.put( SyncedFolderContract.LAST_ETAG, syncedFolder.getLastEtag() );
        values.put( SyncedFolderContract.LOCAL_LAST_MODIFIED, syncedFolder.getLastEtag() );
        values.put( SyncedFolderContract.SCANLOCAL, syncedFolder.isScanLocal() ? 1 : 0 );
        values.put( SyncedFolderContract.SCANREMOTE, syncedFolder.isScanRemote() ? 1 : 0 );
        values.put( SyncedFolderContract.ENABLED, syncedFolder.isEnabled() ? 1 : 0 );
        return mDB.insertWithOnConflict(SyncedFolderContract.TABLE_NAME, null, values, SQLiteDatabase.CONFLICT_IGNORE);
        return mDB.insertWithOnConflict(TABLE_NAME,
                null,
                toContentValues(syncedFolder), SQLiteDatabase.CONFLICT_IGNORE);
    }

    /**
@@ -81,38 +104,20 @@ class SyncedFolderDAO {
     * @param id syncedFolder's id
     */
    public int delete(long id) {
        return mDB.delete(SyncedFolderContract.TABLE_NAME, SyncedFolderContract._ID
        return mDB.delete(TABLE_NAME, SyncedFolderContract._ID
                + " = " + id, null);
    }



    /**
     * Delete all syncedFolder
     */
    /* public void delete() {
        mDB.delete(syncedFolderContract.TABLE_NAME, null, null);
    } */

    /**
     * Update a specific syncedFolder
     * @param syncedFolder syncedFolder to update
     * @return Number of row affected
     */
    public int update(SyncedFolder syncedFolder){
        ContentValues values = new ContentValues();
        values.put(SyncedFolderContract.CATEGORIE_LABEL, syncedFolder.getLibelle());
        values.put(SyncedFolderContract.LOCAL_PATH, syncedFolder.getLocalFolder());
        values.put(SyncedFolderContract.REMOTE_PATH, syncedFolder.getRemoteFolder());
        values.put(SyncedFolderContract.LAST_ETAG, syncedFolder.getLastEtag());
        values.put( SyncedFolderContract.LOCAL_LAST_MODIFIED, syncedFolder.getLastModified() );
        values.put(SyncedFolderContract.SCANLOCAL, syncedFolder.isScanLocal() ? 1 : 0);
        values.put(SyncedFolderContract.SCANREMOTE, syncedFolder.isScanRemote() ? 1 : 0);
        values.put( SyncedFolderContract.ENABLED, syncedFolder.isEnabled()? 1 : 0 );
        int result = 0;

        try{
            result = mDB.update(SyncedFolderContract.TABLE_NAME, values,
            result = mDB.update(TABLE_NAME,
                    toContentValues(syncedFolder),
                    SyncedFolderContract._ID+" = "+ syncedFolder.getId(),
                    null);
        }catch(Exception e){
@@ -127,21 +132,15 @@ class SyncedFolderDAO {
    * @param selection if true, return all enabled syncedFolder, if false return all disabled syncedFolder
    * @return List of all syncedFolder
    */
    List<SyncedFolder> getAllSyncedFolders(String selection) {
    List<SyncedFolder> getSyncedFolderList(String selection, String[] args) {
        Log.i(TAG, "getSyncedFolderList("+selection+", "+args+")");
        List<SyncedFolder> syncedFolders = new ArrayList<SyncedFolder>();
        String[] args = {"1"};

        if(selection.isEmpty()){
            selection = null;
            args = null;
        }else{
            selection += " = ?";
        }

        Cursor cursor = mDB.query(SyncedFolderContract.TABLE_NAME,
                allColumns, selection,args, null, null, null);
        Cursor cursor = mDB.query(TABLE_NAME, allColumns, selection,args, null, null,
                null);

        cursor.moveToFirst();

        while ( !cursor.isAfterLast() ) {
            SyncedFolder syncedFolder = cursorToSyncedFolder(cursor);
            if(syncedFolder == null ){
@@ -163,10 +162,10 @@ class SyncedFolderDAO {
     */
    int reduceLastModifiedValue(int syncFolderID) {
        ContentValues values = new ContentValues();
        values.put( SyncedFolderContract.LOCAL_LAST_MODIFIED, 1 );
        values.put( LOCAL_LAST_MODIFIED, 1 );
        int result = 0;
        try{
            result = mDB.update(SyncedFolderContract.TABLE_NAME, values,
            result = mDB.update(TABLE_NAME, values,
                    SyncedFolderContract._ID+" = "+ syncFolderID,
                    null);
        }catch(Exception e){
@@ -181,15 +180,17 @@ class SyncedFolderDAO {
    * @return syncedFolder instance build with data in the cursor
    */
    private SyncedFolder cursorToSyncedFolder(Cursor cursor) {
        return new SyncedFolder()
        return new SyncedFolder(cursor.getString(1), //libelle
                cursor.getString(2), //localFOlder
                cursor.getString(3), //remoteFolder
                ( cursor.getInt(6) == 1 ),//scanLocal
                ( cursor.getInt(7) == 1 ),//scanRemote
                ( cursor.getInt(8) == 1 ), //isEnabled
                ( cursor.getInt(9) == 1 ) //is Media Type
                )//active
            .setId(cursor.getInt(0) )
            .setLibelle(cursor.getString(1) )
            .setLocalFolder(cursor.getString(2) )
            .setRemoteFolder(cursor.getString(3) )
            .setLastEtag(cursor.getString( 4 ) )
            .setLastModified(cursor.getLong( 5 ) )
            .setScanLocal( cursor.getInt(6) == 1 )
            .setScanRemote( cursor.getInt(7) == 1 )
            .setEnabled( cursor.getInt(8) == 1 );
            .setLastModified(cursor.getLong( 5 ) );

    }
}
Loading