Loading app/src/main/java/foundation/e/drive/FileObservers/FileEventListener.java +23 −17 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()); Loading @@ -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(), ""); Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading @@ -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); } } Loading @@ -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); Loading @@ -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); Loading app/src/main/java/foundation/e/drive/contentScanner/AbstractContentScanner.java +3 −2 Original line number Diff line number Diff line Loading @@ -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; /** Loading Loading @@ -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 Loading app/src/main/java/foundation/e/drive/contentScanner/LocalContentScanner.java +9 −9 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading @@ -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()); Loading @@ -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 app/src/main/java/foundation/e/drive/contentScanner/RemoteContentScanner.java +12 −12 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading @@ -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()); Loading @@ -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) { Loading @@ -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 Loading app/src/main/java/foundation/e/drive/database/SyncedFileStateDAO.java +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 Loading Loading @@ -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; } Loading Loading @@ -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) ); Loading Loading @@ -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
app/src/main/java/foundation/e/drive/FileObservers/FileEventListener.java +23 −17 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()); Loading @@ -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(), ""); Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading @@ -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); } } Loading @@ -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); Loading @@ -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); Loading
app/src/main/java/foundation/e/drive/contentScanner/AbstractContentScanner.java +3 −2 Original line number Diff line number Diff line Loading @@ -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; /** Loading Loading @@ -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 Loading
app/src/main/java/foundation/e/drive/contentScanner/LocalContentScanner.java +9 −9 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading @@ -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()); Loading @@ -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
app/src/main/java/foundation/e/drive/contentScanner/RemoteContentScanner.java +12 −12 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) { Loading @@ -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()); Loading @@ -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) { Loading @@ -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 Loading
app/src/main/java/foundation/e/drive/database/SyncedFileStateDAO.java +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 Loading Loading @@ -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; } Loading Loading @@ -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) ); Loading Loading @@ -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