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

Commit 26cb7dac authored by Vincent Bourgmayer's avatar Vincent Bourgmayer
Browse files

replace SyncedFileState.java by Kotlin SyncedFileState.kt

parent 8b2a24c4
Loading
Loading
Loading
Loading
+23 −17
Original line number Diff line number Diff line
@@ -10,9 +10,9 @@ package foundation.e.drive.FileObservers;

import static foundation.e.drive.models.SyncRequest.Type.DISABLE_SYNCING;
import static foundation.e.drive.models.SyncRequest.Type.UPLOAD;
import static foundation.e.drive.models.SyncedFileState.DEVICE_SCANNABLE;
import static foundation.e.drive.models.SyncedFileState.ECLOUD_SCANNABLE;
import static foundation.e.drive.models.SyncedFileState.NOT_SCANNABLE;
import static foundation.e.drive.models.SyncedFileStateKt.DO_NOT_SCAN;
import static foundation.e.drive.models.SyncedFileStateKt.SCAN_ON_CLOUD;
import static foundation.e.drive.models.SyncedFileStateKt.SCAN_ON_DEVICE;
import static foundation.e.drive.utils.FileUtils.getLocalPath;

import android.content.Context;
@@ -103,7 +103,7 @@ public class FileEventListener {

    /**
     * Send syncRequest to SynchronizationService
     * @param request
     * @param request SyncRequest that should be executed asap
     */
    private void sendSyncRequestToSynchronizationService(@NonNull SyncRequest request) {
        Timber.d("Sending a SyncRequest for %s", request.getSyncedFileState().getName());
@@ -121,11 +121,14 @@ public class FileEventListener {
    /**
     * When a new directory is detected, it must be inserted in database
     * if it's parent directory is already in the database
     * @param directory
     * @param directory Directory that has been created
     */
    private void handleDirectoryCreate(@NonNull File directory) {
        Timber.d("handleDirectoryCreate( %s )",directory.getAbsolutePath());
        final String parentPath = getLocalPath(directory.getParentFile());
        final File parentFile = directory.getParentFile();
        if (parentFile == null) return;

        final String parentPath = getLocalPath(parentFile);
        final SyncedFolder parentFolder = DbHelper.getSyncedFolderByLocalPath(parentPath, appContext);
        if (parentFolder != null) {
            final SyncedFolder folder = new SyncedFolder(parentFolder, directory.getName() + PATH_SEPARATOR, directory.lastModified(), "");
@@ -136,7 +139,7 @@ public class FileEventListener {
    /**
     * Handle CLOSE_WRITE event for a directory
     * todo: check in which condition a directory can generate a close_write
     * @param directory
     * @param directory Directory that has been modified
     */
    private void handleDirectoryCloseWrite(@NonNull File directory) {
        final String fileLocalPath = getLocalPath(directory);
@@ -152,7 +155,7 @@ public class FileEventListener {

    /**
     * Handle a file deletion event for a directory
     * @param directory
     * @param directory Directory that has been removed
     */
    private void handleDirectoryDelete(@NonNull File directory) {
        final String fileLocalPath = getLocalPath(directory);
@@ -179,7 +182,7 @@ public class FileEventListener {

    /**
     * handle a file close_write event for a file which is not a directory
     * @param file
     * @param file File that has been modified
     */
    private void handleFileCloseWrite(@NonNull File file) {
        final String fileLocalPath = getLocalPath(file);
@@ -188,20 +191,23 @@ public class FileEventListener {
        SyncedFileState fileState = DbHelper.loadSyncedFile( appContext, fileLocalPath, true);

        if (fileState == null) { //New file discovered
            final File parentFile = file.getParentFile();
            if (parentFile == null) return;

            final String parentPath = getLocalPath(file.getParentFile());
            SyncedFolder parentFolder = DbHelper.getSyncedFolderByLocalPath(parentPath, appContext);
            if (parentFolder == null || !parentFolder.isEnabled()) {
                Timber.d("Won't send sync request: no parent are known for new file: %s", file.getName());
                return;
            }
            int scannableValue = NOT_SCANNABLE;
            int scanScope = DO_NOT_SCAN;
            if (parentFolder.isEnabled()) {
                if (parentFolder.isScanRemote()) scannableValue = ECLOUD_SCANNABLE;
                if (parentFolder.isScanLocal()) scannableValue += DEVICE_SCANNABLE;
                if (parentFolder.isScanRemote()) scanScope = SCAN_ON_CLOUD;
                if (parentFolder.isScanLocal()) scanScope += SCAN_ON_DEVICE;
            }

            final String remotePath = parentFolder.getRemoteFolder()+file.getName();
            fileState = new SyncedFileState(-1, file.getName(), getLocalPath(file), remotePath, "", 0L, parentFolder.getId(), parentFolder.isMediaType(), scannableValue);
            fileState = new SyncedFileState(-1, file.getName(), getLocalPath(file), remotePath, "", 0L, parentFolder.getId(), parentFolder.isMediaType(), scanScope);
            int storedId = DbHelper.manageSyncedFileStateDB(fileState, "INSERT", appContext);
            if (storedId > 0) {
                fileState.setId(storedId);
@@ -210,8 +216,8 @@ public class FileEventListener {
                Timber.d("New File %s observed but impossible to insert it in DB", file.getName());
            }
        } else { //File update
            final boolean isWaitingForDownload = fileState.isLastEtagStored() && fileState.getLocalLastModified() == 0L;
            if (fileState.getScannable() > ECLOUD_SCANNABLE && !isWaitingForDownload) {
            final boolean isWaitingForDownload = fileState.isLastEtagStored() && fileState.getLastModified() == 0L;
            if (fileState.getScanScope() > SCAN_ON_CLOUD && !isWaitingForDownload) {
                request = new SyncRequest(fileState, UPLOAD);
            }
        }
@@ -222,7 +228,7 @@ public class FileEventListener {

    /**
     * Handle a file deletion event for a file which is not a directory
     * @param file
     * @param file File that has been removed
     */
    private void handleFileDelete(@NonNull File file) {
        final String fileLocalPath = getLocalPath(file);
@@ -233,7 +239,7 @@ public class FileEventListener {
        }

        //If already in DB
        if (fileState.getScannable() > NOT_SCANNABLE) {
        if (fileState.getScanScope() > DO_NOT_SCAN) {
            //todo: if file is already sync disabled, we should probably remove file from DB
            final SyncRequest disableSyncingRequest = new SyncRequest(fileState, DISABLE_SYNCING);
            this.sendSyncRequestToSynchronizationService(disableSyncingRequest);
+3 −2
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import java.util.ListIterator;

import foundation.e.drive.models.SyncRequest;
import foundation.e.drive.models.SyncedFileState;
import foundation.e.drive.models.SyncedFileStateKt;
import foundation.e.drive.models.SyncedFolder;

/**
@@ -68,13 +69,13 @@ public abstract class AbstractContentScanner<T> {
        }
        
        for (SyncedFileState remainingFileState : fileStates) {
            if (remainingFileState.getScannable() == SyncedFileState.NOT_SCANNABLE) {
            if (remainingFileState.getScanScope() == SyncedFileStateKt.DO_NOT_SCAN) {
                continue;
            }
            onMissingFile(remainingFileState);
        }
        return syncRequests;
    };
    }

    /**
     * Obtain the SyncedFolder for parent of file denoted by the given path
+9 −9
Original line number Diff line number Diff line
@@ -7,9 +7,9 @@
 */
package foundation.e.drive.contentScanner;

import static foundation.e.drive.models.SyncedFileState.DEVICE_SCANNABLE;
import static foundation.e.drive.models.SyncedFileState.ECLOUD_SCANNABLE;
import static foundation.e.drive.models.SyncedFileState.NOT_SCANNABLE;
import static foundation.e.drive.models.SyncedFileStateKt.DO_NOT_SCAN;
import static foundation.e.drive.models.SyncedFileStateKt.SCAN_ON_CLOUD;
import static foundation.e.drive.models.SyncedFileStateKt.SCAN_ON_DEVICE;

import android.content.Context;

@@ -59,13 +59,13 @@ public class LocalContentScanner extends AbstractContentScanner<File>{
        final SyncedFolder parentDir = getParentSyncedFolder(filePath);
        if (parentDir == null) return;

        int scannableValue = NOT_SCANNABLE;
        int scanScope = DO_NOT_SCAN;
        if (parentDir.isEnabled()) {
            if (parentDir.isScanRemote()) scannableValue += ECLOUD_SCANNABLE;
            if (parentDir.isScanLocal()) scannableValue += DEVICE_SCANNABLE;
            if (parentDir.isScanRemote()) scanScope += SCAN_ON_CLOUD;
            if (parentDir.isScanLocal()) scanScope += SCAN_ON_DEVICE;
        }

        final SyncedFileState newSyncedFileState = new SyncedFileState(-1, file.getName(), filePath, parentDir.getRemoteFolder() + file.getName(), "", 0, parentDir.getId(), parentDir.isMediaType(),scannableValue);
        final SyncedFileState newSyncedFileState = new SyncedFileState(-1, file.getName(), filePath, parentDir.getRemoteFolder() + file.getName(), "", 0, parentDir.getId(), parentDir.isMediaType(), scanScope);

        final int storedId = DbHelper.manageSyncedFileStateDB(newSyncedFileState, "INSERT", context);
        if (storedId > 0) {
@@ -77,7 +77,7 @@ public class LocalContentScanner extends AbstractContentScanner<File>{

    @Override
    protected void onKnownFileFound(@NonNull File file, @NonNull SyncedFileState fileState) {
        if (fileState.getScannable() == NOT_SCANNABLE) return;
        if (fileState.getScanScope() == DO_NOT_SCAN) return;
        
        if (FileDiffUtils.getActionForFileDiff(file, fileState) == FileDiffUtils.Action.Upload) {
            Timber.d("Add upload SyncRequest for %s", file.getAbsolutePath());
@@ -95,6 +95,6 @@ public class LocalContentScanner extends AbstractContentScanner<File>{
        final String filePath = FileUtils.getLocalPath(file);
        final String localPath = fileState.getLocalPath();

        return localPath != null && localPath.equals(filePath);
        return localPath.equals(filePath);
    }
}
 No newline at end of file
+12 −12
Original line number Diff line number Diff line
@@ -8,9 +8,9 @@
package foundation.e.drive.contentScanner;

import static foundation.e.drive.models.SyncRequest.Type.DISABLE_SYNCING;
import static foundation.e.drive.models.SyncedFileState.DEVICE_SCANNABLE;
import static foundation.e.drive.models.SyncedFileState.ECLOUD_SCANNABLE;
import static foundation.e.drive.models.SyncedFileState.NOT_SCANNABLE;
import static foundation.e.drive.models.SyncedFileStateKt.DO_NOT_SCAN;
import static foundation.e.drive.models.SyncedFileStateKt.SCAN_ON_CLOUD;
import static foundation.e.drive.models.SyncedFileStateKt.SCAN_ON_DEVICE;
import static foundation.e.drive.utils.FileDiffUtils.getActionForFileDiff;

import android.content.Context;
@@ -46,7 +46,7 @@ public class RemoteContentScanner extends AbstractContentScanner<RemoteFile> {

    @Override
    protected void onKnownFileFound(@NonNull RemoteFile file, @NonNull SyncedFileState fileState) {
        if (fileState.getScannable() == NOT_SCANNABLE) return;
        if (fileState.getScanScope() == DO_NOT_SCAN) return;

        final FileDiffUtils.Action action = getActionForFileDiff(file, fileState);
        if (action == FileDiffUtils.Action.Download) {
@@ -56,7 +56,7 @@ public class RemoteContentScanner extends AbstractContentScanner<RemoteFile> {

        } else if (action == FileDiffUtils.Action.updateDB) {

            fileState.setLastETAG(file.getEtag());
            fileState.setLastEtag(file.getEtag());
            final int affectedRows = DbHelper.manageSyncedFileStateDB(fileState, "UPDATE", context);
            if (affectedRows == 0) Timber.d("Error while updating eTag in DB for: %s", file.getRemotePath());

@@ -70,14 +70,15 @@ public class RemoteContentScanner extends AbstractContentScanner<RemoteFile> {
        if (parentDir == null) return;

        final String fileName = FileUtils.getFileNameFromPath(remoteFilePath);
        if (fileName == null) return;

        int scannableValue = NOT_SCANNABLE;
        int scanScope = DO_NOT_SCAN;
        if (parentDir.isEnabled()) {
            if (parentDir.isScanRemote()) scannableValue += ECLOUD_SCANNABLE;
            if (parentDir.isScanLocal()) scannableValue += DEVICE_SCANNABLE;
            if (parentDir.isScanRemote()) scanScope += SCAN_ON_CLOUD;
            if (parentDir.isScanLocal()) scanScope += SCAN_ON_DEVICE;
        }

        final SyncedFileState newFileState = new SyncedFileState(-1, fileName, parentDir.getLocalFolder() + fileName, remoteFilePath, file.getEtag(), 0, parentDir.getId(), parentDir.isMediaType(), scannableValue);
        final SyncedFileState newFileState = new SyncedFileState(-1, fileName, parentDir.getLocalFolder() + fileName, remoteFilePath, file.getEtag(), 0, parentDir.getId(), parentDir.isMediaType(), scanScope);

        final int storedId = DbHelper.manageSyncedFileStateDB(newFileState, "INSERT", context);
        if (storedId > 0) {
@@ -99,9 +100,8 @@ public class RemoteContentScanner extends AbstractContentScanner<RemoteFile> {

    @Override
    protected boolean isFileMatchingSyncedFileState(@NonNull RemoteFile file, @NonNull SyncedFileState fileState) {
        String remotePath = fileState.getRemotePath();

        return remotePath != null && remotePath.equals(file.getRemotePath());
        final String remotePath = fileState.getRemotePath();
        return remotePath.equals(file.getRemotePath());
    }

    @Override
+11 −12
Original line number Diff line number Diff line
/*
 * Copyright © CLEUS SAS 2018-2019.
 * Copyright © ECORP SAS 2022.
 * Copyright © MURENA SAS 2022-2023.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Public License v3.0
 * which accompanies this distribution, and is available at
@@ -85,11 +85,11 @@ import timber.log.Timber;
        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( LAST_ETAG, syncedFileState.getLastEtag() );
        values.put( LOCAL_LAST_MODIFIED, syncedFileState.getLastModified() );
        values.put( SYNCEDFOLDER_ID, syncedFileState.getSyncedFolderId() );
        values.put( IS_MEDIA_TYPE, syncedFileState.isMediaType() ? 1 : 0 );
        values.put( SCANNABLE, syncedFileState.getScannable());
        values.put( SCANNABLE, syncedFileState.getScanScope());
        return values;
    }

@@ -194,14 +194,13 @@ import timber.log.Timber;
            whereValue[i] = syncedFolderIds.get(i).toString();
        }

        final StringBuilder whereClause = new StringBuilder();
        whereClause.append(SYNCEDFOLDER_ID)
                .append(" IN ")
                .append(matcherList.toString()
        final String whereClause = SYNCEDFOLDER_ID +
                " IN " +
                matcherList.toString()
                        .replace("[", "(")
                        .replace("]", ")"));
                        .replace("]", ")");

        final Cursor cursor = mDB.query(TABLE_NAME, allColumns, whereClause.toString(), whereValue, null, null, null);
        final Cursor cursor = mDB.query(TABLE_NAME, allColumns, whereClause, whereValue, null, null, null);
        cursor.moveToFirst();
        while(!cursor.isAfterLast() ) {
            result.add( cursorToSyncedFileState(cursor) );
@@ -241,10 +240,10 @@ import timber.log.Timber;
                cursor.getString(2 ),//local path
                cursor.getString(3 ),//remote path
                cursor.getString(4 ),// last Etag
                cursor.getLong(5 ),//Local last modified
                cursor.getLong(5 ),//Local mTime
                cursor.getLong(6 ), //SyncedFolderID
                (cursor.getInt(7) == 1), //is Media Type
                cursor.getInt(8) //scannable
                cursor.getInt(8) //scanScope
        );
    }
}
 No newline at end of file
Loading