mirror of https://github.com/M66B/FairEmail.git
Limit send tries
This commit is contained in:
parent
40e19a242c
commit
985646746b
|
@ -75,6 +75,7 @@ public class ServiceSend extends ServiceBase {
|
|||
private static final int PI_SEND = 1;
|
||||
private static final long CONNECTIVITY_DELAY = 5000L; // milliseconds
|
||||
private static final int IDENTITY_ERROR_AFTER = 30; // minutes
|
||||
private static final int RETRY_MAX = 3;
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
|
@ -274,22 +275,31 @@ public class ServiceSend extends ServiceBase {
|
|||
DB db = DB.getInstance(this);
|
||||
EntityFolder outbox = db.folder().getOutbox();
|
||||
try {
|
||||
db.folder().setFolderError(outbox.id, null);
|
||||
db.folder().setFolderSyncState(outbox.id, "syncing");
|
||||
|
||||
List<TupleOperationEx> ops = db.operation().getOperations(outbox.id);
|
||||
Log.i(outbox.name + " pending operations=" + ops.size());
|
||||
|
||||
if (ops.size() > 0)
|
||||
db.folder().setFolderError(outbox.id, null);
|
||||
while (ops.size() > 0) {
|
||||
TupleOperationEx op = ops.get(0);
|
||||
|
||||
for (EntityOperation op : ops) {
|
||||
EntityMessage message = null;
|
||||
if (op.message != null)
|
||||
message = db.message().getMessage(op.message);
|
||||
|
||||
try {
|
||||
Log.i(outbox.name +
|
||||
" start op=" + op.id + "/" + op.name +
|
||||
" msg=" + op.message +
|
||||
" args=" + op.args);
|
||||
|
||||
db.operation().setOperationTries(op.id, ++op.tries);
|
||||
db.operation().setOperationError(op.id, null);
|
||||
|
||||
if (message != null)
|
||||
db.message().setMessageError(message.id, null);
|
||||
|
||||
db.operation().setOperationState(op.id, "executing");
|
||||
|
||||
Map<String, String> crumb = new HashMap<>();
|
||||
|
@ -307,7 +317,6 @@ public class ServiceSend extends ServiceBase {
|
|||
break;
|
||||
|
||||
case EntityOperation.SEND:
|
||||
message = db.message().getMessage(op.message);
|
||||
if (message == null)
|
||||
throw new MessageRemovedException();
|
||||
onSend(message);
|
||||
|
@ -321,6 +330,7 @@ public class ServiceSend extends ServiceBase {
|
|||
}
|
||||
|
||||
db.operation().deleteOperation(op.id);
|
||||
ops.remove(op);
|
||||
} catch (Throwable ex) {
|
||||
Log.e(outbox.name, ex);
|
||||
EntityLog.log(this, outbox.name + " " + Log.formatThrowable(ex, false));
|
||||
|
@ -329,7 +339,8 @@ public class ServiceSend extends ServiceBase {
|
|||
if (message != null)
|
||||
db.message().setMessageError(message.id, Log.formatThrowable(ex));
|
||||
|
||||
if (ex instanceof OutOfMemoryError ||
|
||||
if (op.tries >= RETRY_MAX ||
|
||||
ex instanceof OutOfMemoryError ||
|
||||
ex instanceof MessageRemovedException ||
|
||||
ex instanceof FileNotFoundException ||
|
||||
ex instanceof AuthenticationFailedException ||
|
||||
|
@ -337,6 +348,7 @@ public class ServiceSend extends ServiceBase {
|
|||
ex instanceof IllegalArgumentException) {
|
||||
Log.w("Unrecoverable");
|
||||
db.operation().deleteOperation(op.id);
|
||||
ops.remove(op);
|
||||
continue;
|
||||
} else
|
||||
throw ex;
|
||||
|
|
Loading…
Reference in New Issue