Loading app/src/main/java/foundation/e/drive/models/SyncRequest.java +3 −1 Original line number Diff line number Diff line Loading @@ -32,7 +32,9 @@ public class SyncRequest { @Override public boolean equals(@Nullable Object obj) { if (obj instanceof SyncRequest) { return (syncedFileState.getId() == ((SyncRequest) obj).syncedFileState.getId() ); final SyncedFileState objFileState = ((SyncRequest) obj).syncedFileState; return (syncedFileState.getLocalPath().equals(objFileState.getLocalPath()) || syncedFileState.getRemotePath().equals(objFileState.getRemotePath())); } return super.equals(obj); } Loading app/src/main/java/foundation/e/drive/services/SynchronizationService.java +22 −23 Original line number Diff line number Diff line Loading @@ -9,9 +9,6 @@ package foundation.e.drive.services; import android.accounts.Account; import android.accounts.AccountManager; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; Loading @@ -24,7 +21,6 @@ import android.os.Message; import android.util.Log; import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; import com.owncloud.android.lib.common.OwnCloudClient; import com.owncloud.android.lib.common.operations.OnRemoteOperationListener; Loading @@ -37,7 +33,6 @@ import java.util.Collection; import java.util.Hashtable; import java.util.concurrent.ConcurrentLinkedDeque; import foundation.e.drive.R; import foundation.e.drive.database.DbHelper; import foundation.e.drive.models.DownloadRequest; import foundation.e.drive.models.SyncRequest; Loading @@ -56,7 +51,7 @@ public class SynchronizationService extends Service implements OnRemoteOperation private final static String TAG = SynchronizationService.class.getSimpleName(); private final SynchronizationBinder binder = new SynchronizationBinder(); private ConcurrentLinkedDeque<SyncRequest> syncedRequestQueue; private ConcurrentLinkedDeque<SyncRequest> syncRequestQueue; private Hashtable<RemoteOperation, Integer> startedOperations; //Operations which are running private Account account; private final int workerAmount = 4; Loading @@ -80,7 +75,7 @@ public class SynchronizationService extends Service implements OnRemoteOperation return START_NOT_STICKY; } syncedRequestQueue = new ConcurrentLinkedDeque<>(); syncRequestQueue = new ConcurrentLinkedDeque<>(); startedOperations = new Hashtable<>(); threadPool = new Thread[workerAmount]; threadWorkingState = new boolean[workerAmount]; Loading @@ -101,12 +96,14 @@ public class SynchronizationService extends Service implements OnRemoteOperation Log.w(TAG, "System is low on memory. Service might get killed."); } public boolean queueOperation(SyncRequest request){ return syncedRequestQueue.add(request); public void queueOperation(SyncRequest request){ syncRequestQueue.remove(request); syncRequestQueue.add(request); } public boolean queueOperations(Collection<SyncRequest> requests){ return syncedRequestQueue.addAll(requests); public void queueOperations(Collection<SyncRequest> requests){ syncRequestQueue.removeAll(requests); syncRequestQueue.addAll(requests); } public void startSynchronization(){ Loading @@ -117,11 +114,14 @@ public class SynchronizationService extends Service implements OnRemoteOperation } private void startWorker(int threadIndex){ if (syncedRequestQueue.isEmpty()) return; final boolean meteredNetworkAllowed = CommonUtils.isMeteredNetworkAllowed(account); if (!threadWorkingState[threadIndex] && CommonUtils.haveNetworkConnection(getApplicationContext(), meteredNetworkAllowed)) { //check if the thread corresponding to threadIndex isn't already working if (threadWorkingState[threadIndex] || !CommonUtils.haveNetworkConnection(getApplicationContext(), meteredNetworkAllowed)) { return; } final SyncRequest request = this.syncedRequestQueue.poll(); //return null if deque is empty final SyncRequest request = this.syncRequestQueue.poll(); //return null if empty if (request == null) return; final RemoteOperation operation = this.createRemoteOperation(request); Loading @@ -136,7 +136,6 @@ public class SynchronizationService extends Service implements OnRemoteOperation } } } } @Override public void onRemoteOperationFinish(RemoteOperation callerOperation, RemoteOperationResult result) { Loading Loading
app/src/main/java/foundation/e/drive/models/SyncRequest.java +3 −1 Original line number Diff line number Diff line Loading @@ -32,7 +32,9 @@ public class SyncRequest { @Override public boolean equals(@Nullable Object obj) { if (obj instanceof SyncRequest) { return (syncedFileState.getId() == ((SyncRequest) obj).syncedFileState.getId() ); final SyncedFileState objFileState = ((SyncRequest) obj).syncedFileState; return (syncedFileState.getLocalPath().equals(objFileState.getLocalPath()) || syncedFileState.getRemotePath().equals(objFileState.getRemotePath())); } return super.equals(obj); } Loading
app/src/main/java/foundation/e/drive/services/SynchronizationService.java +22 −23 Original line number Diff line number Diff line Loading @@ -9,9 +9,6 @@ package foundation.e.drive.services; import android.accounts.Account; import android.accounts.AccountManager; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; Loading @@ -24,7 +21,6 @@ import android.os.Message; import android.util.Log; import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; import com.owncloud.android.lib.common.OwnCloudClient; import com.owncloud.android.lib.common.operations.OnRemoteOperationListener; Loading @@ -37,7 +33,6 @@ import java.util.Collection; import java.util.Hashtable; import java.util.concurrent.ConcurrentLinkedDeque; import foundation.e.drive.R; import foundation.e.drive.database.DbHelper; import foundation.e.drive.models.DownloadRequest; import foundation.e.drive.models.SyncRequest; Loading @@ -56,7 +51,7 @@ public class SynchronizationService extends Service implements OnRemoteOperation private final static String TAG = SynchronizationService.class.getSimpleName(); private final SynchronizationBinder binder = new SynchronizationBinder(); private ConcurrentLinkedDeque<SyncRequest> syncedRequestQueue; private ConcurrentLinkedDeque<SyncRequest> syncRequestQueue; private Hashtable<RemoteOperation, Integer> startedOperations; //Operations which are running private Account account; private final int workerAmount = 4; Loading @@ -80,7 +75,7 @@ public class SynchronizationService extends Service implements OnRemoteOperation return START_NOT_STICKY; } syncedRequestQueue = new ConcurrentLinkedDeque<>(); syncRequestQueue = new ConcurrentLinkedDeque<>(); startedOperations = new Hashtable<>(); threadPool = new Thread[workerAmount]; threadWorkingState = new boolean[workerAmount]; Loading @@ -101,12 +96,14 @@ public class SynchronizationService extends Service implements OnRemoteOperation Log.w(TAG, "System is low on memory. Service might get killed."); } public boolean queueOperation(SyncRequest request){ return syncedRequestQueue.add(request); public void queueOperation(SyncRequest request){ syncRequestQueue.remove(request); syncRequestQueue.add(request); } public boolean queueOperations(Collection<SyncRequest> requests){ return syncedRequestQueue.addAll(requests); public void queueOperations(Collection<SyncRequest> requests){ syncRequestQueue.removeAll(requests); syncRequestQueue.addAll(requests); } public void startSynchronization(){ Loading @@ -117,11 +114,14 @@ public class SynchronizationService extends Service implements OnRemoteOperation } private void startWorker(int threadIndex){ if (syncedRequestQueue.isEmpty()) return; final boolean meteredNetworkAllowed = CommonUtils.isMeteredNetworkAllowed(account); if (!threadWorkingState[threadIndex] && CommonUtils.haveNetworkConnection(getApplicationContext(), meteredNetworkAllowed)) { //check if the thread corresponding to threadIndex isn't already working if (threadWorkingState[threadIndex] || !CommonUtils.haveNetworkConnection(getApplicationContext(), meteredNetworkAllowed)) { return; } final SyncRequest request = this.syncedRequestQueue.poll(); //return null if deque is empty final SyncRequest request = this.syncRequestQueue.poll(); //return null if empty if (request == null) return; final RemoteOperation operation = this.createRemoteOperation(request); Loading @@ -136,7 +136,6 @@ public class SynchronizationService extends Service implements OnRemoteOperation } } } } @Override public void onRemoteOperationFinish(RemoteOperation callerOperation, RemoteOperationResult result) { Loading