From 749b9692d23204c87b0840512f6853378972787e Mon Sep 17 00:00:00 2001 From: M66B Date: Wed, 28 Nov 2018 18:50:53 +0100 Subject: [PATCH] Process events while running --- .../eu/faircode/email/ServiceSynchronize.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 54d964ff4e..19b3d023b0 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -886,7 +886,7 @@ public class ServiceSynchronize extends LifecycleService { wl.acquire(); // Process pending operations - processOperations(folder, isession, istore, ifolder); + processOperations(folder, isession, istore, ifolder, state); // Listen for new and deleted messages ifolder.addMessageCountListener(new MessageCountAdapter() { @@ -1118,10 +1118,10 @@ public class ServiceSynchronize extends LifecycleService { } if (ACTION_PROCESS_OPERATIONS.equals(intent.getAction())) - processOperations(folder, isession, istore, ifolder); + processOperations(folder, isession, istore, ifolder, state); else if (ACTION_SYNCHRONIZE_FOLDER.equals(intent.getAction())) { - processOperations(folder, isession, istore, ifolder); + processOperations(folder, isession, istore, ifolder, state); synchronizeMessages(account, folder, ifolder, state); } @@ -1320,7 +1320,7 @@ public class ServiceSynchronize extends LifecycleService { } } - private void processOperations(EntityFolder folder, Session isession, IMAPStore istore, IMAPFolder ifolder) throws MessagingException, JSONException, IOException { + private void processOperations(EntityFolder folder, Session isession, IMAPStore istore, IMAPFolder ifolder, ServiceState state) throws MessagingException, JSONException, IOException { synchronized (lock) { try { Log.i(Helper.TAG, folder.name + " start process"); @@ -1328,7 +1328,8 @@ public class ServiceSynchronize extends LifecycleService { DB db = DB.getInstance(this); List ops = db.operation().getOperationsByFolder(folder.id); Log.i(Helper.TAG, folder.name + " pending operations=" + ops.size()); - for (EntityOperation op : ops) + for (int i = 0; i < ops.size() && state.running; i++) { + EntityOperation op = ops.get(i); try { Log.i(Helper.TAG, folder.name + " start op=" + op.id + "/" + op.name + @@ -1421,8 +1422,9 @@ public class ServiceSynchronize extends LifecycleService { } finally { Log.i(Helper.TAG, folder.name + " end op=" + op.id + "/" + op.name); } + } } finally { - Log.i(Helper.TAG, folder.name + " end process"); + Log.i(Helper.TAG, folder.name + " end process running=" + state.running); } } } @@ -2515,7 +2517,7 @@ public class ServiceSynchronize extends LifecycleService { try { Log.i(Helper.TAG, outbox.name + " start operations"); db.folder().setFolderState(outbox.id, "syncing"); - processOperations(outbox, null, null, null); + processOperations(outbox, null, null, null, state); db.folder().setFolderError(outbox.id, null); } catch (Throwable ex) { Log.e(Helper.TAG, outbox.name + " " + ex + "\n" + Log.getStackTraceString(ex));