diff --git a/app/src/main/java/eu/faircode/email/AdapterFolder.java b/app/src/main/java/eu/faircode/email/AdapterFolder.java index 33dec72c05..72cd792e97 100644 --- a/app/src/main/java/eu/faircode/email/AdapterFolder.java +++ b/app/src/main/java/eu/faircode/email/AdapterFolder.java @@ -26,6 +26,8 @@ import android.content.SharedPreferences; import android.content.res.ColorStateList; import android.graphics.Color; import android.graphics.Typeface; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; import android.os.Bundle; import android.preference.PreferenceManager; import android.text.TextUtils; @@ -294,16 +296,19 @@ public class AdapterFolder extends RecyclerView.Adapter folders = db.folder().getFoldersAutoSync(); for (EntityFolder folder : folders) - EntityOperation.sync(db, folder.id); + EntityOperation.sync(context, db, folder.id); return null; } diff --git a/app/src/main/java/eu/faircode/email/FragmentSetup.java b/app/src/main/java/eu/faircode/email/FragmentSetup.java index 534451b951..5227746057 100644 --- a/app/src/main/java/eu/faircode/email/FragmentSetup.java +++ b/app/src/main/java/eu/faircode/email/FragmentSetup.java @@ -406,7 +406,7 @@ public class FragmentSetup extends FragmentBase { protected Void onExecute(Context context, Bundle args) { DB db = DB.getInstance(context); for (EntityFolder folder : db.folder().getFoldersAutoSync()) - EntityOperation.sync(db, folder.id); + EntityOperation.sync(context, db, folder.id); return null; } diff --git a/app/src/main/java/eu/faircode/email/ServiceSend.java b/app/src/main/java/eu/faircode/email/ServiceSend.java index a1a5fc63db..8d6ed4b62e 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSend.java +++ b/app/src/main/java/eu/faircode/email/ServiceSend.java @@ -134,17 +134,27 @@ public class ServiceSend extends LifecycleService { List ops = db.operation().getOperations(outbox.id); Log.i(outbox.name + " pending operations=" + ops.size()); for (EntityOperation op : ops) { - EntityMessage message = db.message().getMessage(op.message); + EntityMessage message = null; try { Log.i(outbox.name + " start op=" + op.id + "/" + op.name + " msg=" + op.message + " args=" + op.args); - if (message == null) - throw new MessageRemovedException(); + switch (op.name) { + case EntityOperation.SYNC: + break; - send(message); + case EntityOperation.SEND: + message = db.message().getMessage(op.message); + if (message == null) + throw new MessageRemovedException(); + send(message); + break; + + default: + throw new IllegalArgumentException("Unknown operation=" + op.name); + } db.operation().deleteOperation(op.id); } catch (Throwable ex) { @@ -153,7 +163,9 @@ public class ServiceSend extends LifecycleService { if (message != null) db.message().setMessageError(message.id, Helper.formatThrowable(ex)); - if (ex instanceof SendFailedException) + if (ex instanceof MessageRemovedException || + ex instanceof SendFailedException || + ex instanceof IllegalArgumentException) db.operation().deleteOperation(op.id); else throw ex; diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index e2355e347b..4d9bdfd5df 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -1122,7 +1122,7 @@ public class ServiceSynchronize extends LifecycleService { idler.start(); idlers.add(idler); - EntityOperation.sync(db, folder.id); + EntityOperation.sync(this, db, folder.id); } else folders.put(folder, null); @@ -1260,7 +1260,7 @@ public class ServiceSynchronize extends LifecycleService { if (!folders.get(folder).isOpen()) throw new FolderClosedException(folders.get(folder)); } else - EntityOperation.sync(db, folder.id); + EntityOperation.sync(this, db, folder.id); // Successfully connected: reset back off time backoff = CONNECT_BACKOFF_START; @@ -1498,7 +1498,7 @@ public class ServiceSynchronize extends LifecycleService { break; default: - throw new MessagingException("Unknown operation name=" + op.name); + throw new IllegalArgumentException("Unknown operation=" + op.name); } // Operation succeeded