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

Commit 18007bf5 authored by vince-bourgmayer's avatar vince-bourgmayer
Browse files

modify ListRemoteFile to get remote subfolder. Still few issue to correct

parent 0c00b205
Loading
Loading
Loading
Loading
+11 −8
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@ import io.eelo.drive.models.SyncedFileState;
 * Created by Vincent on 10/04/2018.
 * source: https://developer.android.com/training/data-storage/sqlite.html#java
 * https://vogella.developpez.com/tutoriels/android/utilisation-base-donnees-sqlite/
 *
 * @TODO: rewrite it cleaner
 */

public final class DbHelper extends SQLiteOpenHelper {
@@ -33,7 +35,7 @@ public final class DbHelper extends SQLiteOpenHelper {

    /**
     * Function to create a new DB.
     * @param db
     * @param db SQLiteDatabase object
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
@@ -44,9 +46,9 @@ public final class DbHelper extends SQLiteOpenHelper {
    /**
     * Function to upgrade a DB.
     * Delete old Tables
     * @param db
     * @param oldVersion
     * @param newVersion
     * @param db SQLiteDatabase object
     * @param oldVersion Version number of the db to delete
     * @param newVersion Version number of the db to create
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
@@ -99,7 +101,8 @@ public final class DbHelper extends SQLiteOpenHelper {
     * @param useLocalPath True if path is a local path, if it's false use remote path
     * @return instance of SyncedFileState or null if it can't open DB
     */
    public static SyncedFileState loadSyncedFile(Context context, String Path, boolean useLocalPath) {SyncedFileStateDAO dao = new SyncedFileStateDAO( context );
    public static SyncedFileState loadSyncedFile(Context context, String Path, boolean useLocalPath) {
        SyncedFileStateDAO dao = new SyncedFileStateDAO( context );
        try{
            dao.open( false );
        }catch ( Exception e ){
@@ -191,9 +194,9 @@ public final class DbHelper extends SQLiteOpenHelper {

    /**
     * Save new rootFolder into DB
     * @param mRootFolder
     * @param context
     * @return
     * @param mRootFolder The root Folder to insert
     * @param context The context of the app
     * @return the id of the root folder or -1 if it hasn't been inserted
     */
    public static long insertRootFolder(RootFolder mRootFolder, Context context){
        RootFolderDAO rootFolderDAO = new RootFolderDAO(context);
+9 −1
Original line number Diff line number Diff line
@@ -71,7 +71,14 @@ public class RootFolder implements Parcelable {
        this.lastModified = in.readLong();
    }

    public RootFolder(RootFolder parent, String suffixPath, long lastModified){
    /**
     * Create a RootFolder as a child of an other RootFolder
     * @param parent The parent RootFolder
     * @param suffixPath The part of the path that its parent doesn't have. Must not start by '\'
     * @param lastModified LastModified value of the current local folder (must be 0L if not known)
     * @param lastEtag Last etag of remote folder (must be empty string if not known)
     */
    public RootFolder(RootFolder parent, String suffixPath, long lastModified, String lastEtag){
        this.id = -1;
        this.libelle = parent.libelle;
        this.localFolder = parent.localFolder+suffixPath;
@@ -79,6 +86,7 @@ public class RootFolder implements Parcelable {
        this.scanLocal = parent.scanLocal;
        this.scanRemote = parent.scanRemote;
        this.lastModified = lastModified;
        this.lastEtag = lastEtag;
        this.enabled = parent.enabled;
    }
    public static final Creator<RootFolder> CREATOR = new Creator<RootFolder>() {
+37 −9
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ import com.owncloud.android.lib.resources.files.RemoteFile;

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

import io.eelo.drive.database.DbHelper;
import io.eelo.drive.models.RootFolder;
@@ -46,10 +47,12 @@ public class ListRemoteFileOperation extends RemoteOperation {
            Log.e(TAG, "Can't get list of remote file because mRootFolders is null");
            finalResult = new RemoteOperationResult(RemoteOperationResult.ResultCode.UNKNOWN_ERROR);
        }else {
            boolean atListOneDirAsChanged = false;
            int rootFolderSize = mRootFolders.size();
            for (int i = 0; i < rootFolderSize; ++i) {
                RootFolder rootFolder = mRootFolders.get(i);
            boolean atLeastOneDirAsChanged = false;
            ListIterator<RootFolder> mRootFolderIterator = mRootFolders.listIterator();

            while (mRootFolderIterator.hasNext() ){

                RootFolder rootFolder = mRootFolderIterator.next();
                ReadRemoteFolderOperation operation = new ReadRemoteFolderOperation(rootFolder.getRemoteFolder());
                RemoteOperationResult result = operation.execute(ownCloudClient);

@@ -60,11 +63,36 @@ public class ListRemoteFileOperation extends RemoteOperation {

                    //Check if directory has change since last time
                    if( directory != null && !directory.getEtag().equals( rootFolder.getLastEtag() ) ){
                        //If yes, add all files within the directory and update RootFolder last etag
                        mRemoteFiles.addAll( result.getData().subList( 1, dataSize ) );
                        //loop through remote file. If it's directory try to add it as new RootFolder or ignore it if already in the list
                        //If it's a file just add it to mRemoteFiles.
                        List<Object> remoteFiles = result.getData().subList( 1, dataSize );
                        int remoteFilesSize = remoteFiles.size();
                        for(int i = 0; i < remoteFilesSize; ++i) {
                            RemoteFile remoteFile = (RemoteFile) remoteFiles.get(i);

                            if(remoteFile.getMimeType().equals("DIR") ) {
                                String suffixPath = remoteFile.getRemotePath().substring( rootFolder.getRemoteFolder().length() );

                                //but is it already known as rootFolder?
                                RootFolder subFolder = new RootFolder(rootFolder, suffixPath, 0L, "" ); //need to set empty etag to allow it to be scan
                                //try to add. If it fails, it means  that the rootFolder is already in DB.
                                Long subfolderId = DbHelper.insertRootFolder( subFolder, mContext );
                                if( subfolderId > 0 ) {
                                    subFolder.setId( subfolderId.intValue() );
                                    mRootFolderIterator.add( subFolder );
                                    mRootFolderIterator.previous();
                                }

                            }else {
                                //then its a file
                                mRemoteFiles.add(remoteFile);
                            }
                        }
                        //mRemoteFiles.addAll( result.getData().subList( 1, dataSize ) );
                        rootFolder.setLastEtag(directory.getEtag() );
                        rootFolder.setToSync(true);
                        atListOneDirAsChanged = true;
                        atLeastOneDirAsChanged = true;

                    }else{
                        //If not, just go to next
                        rootFolder.setToSync(false);
@@ -72,13 +100,13 @@ public class ListRemoteFileOperation extends RemoteOperation {

                } else {
                    Log.e(TAG, "http " + result.getHttpCode() + " : " + result.getLogMessage());
                    return result; //@dev-only: Should I replace it by a new instance of RemoteOperationResult?
                    //return result; //@dev-only: Should I replace it by a new instance of RemoteOperationResult?
                }
            }

            finalResult = new RemoteOperationResult(RemoteOperationResult.ResultCode.OK);

            if( atListOneDirAsChanged ) {
            if( atLeastOneDirAsChanged ) {
                DbHelper.updateRootFolders(this.mRootFolders, this.mContext);
                ArrayList<Object> datas = new ArrayList<Object>();
                datas.addAll(this.mRootFolders);
+1 −1
Original line number Diff line number Diff line
@@ -452,7 +452,7 @@ public class ObserverService extends Service implements OnRemoteOperationListene
                            } else {
                                //if a subfolder is found, add it to rootFolder list
                                Log.d(TAG, "add new RootFolder for subFolder: " + subFiles[j].getName());
                                RootFolder childFolder = new RootFolder(rootFolder, subFiles[j].getName() + FileUtils.PATH_SEPARATOR, 0);//Need to put 0 to be handled on next iterati
                                RootFolder childFolder = new RootFolder(rootFolder, subFiles[j].getName() + FileUtils.PATH_SEPARATOR, 0L, "");//Need to put 0 into to be handled on next iterati
                                //persist new RootFolder
                                Long id = DbHelper.insertRootFolder(childFolder, this);
                                if (id != -1) {
+14 −0
Original line number Diff line number Diff line
package io.eelo.drive;

import org.junit.Assert;
import org.junit.Test;

import java.security.Timestamp;
@@ -22,6 +23,9 @@ public class ExampleUnitTest {
    }


    /**
     * Check how to iterate over a listIterator() and add a new element that must be explore too.
     */
    @Test
    public void testLoopOnList() {
        List<String> foo = new ArrayList<>();
@@ -43,6 +47,16 @@ public class ExampleUnitTest {
            System.out.println(foo);

        }
    }


    @Test
    public void testSubstringOnString(){
        String parentPath = "/root/folder/";
        String subfolderPath = "/root/folder/subfolder/";

        String substringResult = subfolderPath.substring(parentPath.length() );

        Assert.assertEquals("subfolder/", substringResult );
    }
}
 No newline at end of file
Loading