From 621e28560a703917c89490bd054d2537a3faaa32 Mon Sep 17 00:00:00 2001 From: M66B Date: Wed, 15 Oct 2025 07:53:46 +0200 Subject: [PATCH] Report async folder errors --- .../eu/faircode/email/ServiceSynchronize.java | 47 +++++++++---------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 32f7f45bef..0691e26954 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -2034,17 +2034,13 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences long start = new Date().getTime(); try { wlMessage.acquire(Helper.WAKELOCK_MAX); - fetch(folder, ifolder, e.getMessages(), false, false, "added"); + fetch(state, folder, ifolder, e.getMessages(), false, false, "added"); Thread.sleep(FETCH_YIELD_DURATION); } catch (Throwable ex) { - if (ex instanceof FolderClosedException) - state.error(ex); - else { - Log.e(folder.name, ex); - EntityLog.log(ServiceSynchronize.this, EntityLog.Type.Account, folder, - account.name + "/" + folder.name + " added " + Log.formatThrowable(ex, false)); - EntityOperation.sync(ServiceSynchronize.this, folder.id, false); - } + Log.e(folder.name, ex); + EntityLog.log(ServiceSynchronize.this, EntityLog.Type.Account, folder, + account.name + "/" + folder.name + " added " + Log.formatThrowable(ex, false)); + EntityOperation.sync(ServiceSynchronize.this, folder.id, false); } finally { if (wlMessage.isHeld()) wlMessage.release(); @@ -2058,17 +2054,13 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences long start = new Date().getTime(); try { wlMessage.acquire(Helper.WAKELOCK_MAX); - fetch(folder, ifolder, e.getMessages(), false, true, "removed"); + fetch(state, folder, ifolder, e.getMessages(), false, true, "removed"); Thread.sleep(FETCH_YIELD_DURATION); } catch (Throwable ex) { Log.e(folder.name, ex); - if (ex instanceof FolderClosedException) - state.error(ex); - else { - EntityLog.log(ServiceSynchronize.this, EntityLog.Type.Account, folder, - account.name + "/" + folder.name + " removed " + Log.formatThrowable(ex, false)); - EntityOperation.sync(ServiceSynchronize.this, folder.id, false); - } + EntityLog.log(ServiceSynchronize.this, EntityLog.Type.Account, folder, + account.name + "/" + folder.name + " removed " + Log.formatThrowable(ex, false)); + EntityOperation.sync(ServiceSynchronize.this, folder.id, false); } finally { if (wlMessage.isHeld()) wlMessage.release(); @@ -2088,17 +2080,13 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences try { wlMessage.acquire(Helper.WAKELOCK_MAX); Message imessage = e.getMessage(); - fetch(folder, ifolder, new Message[]{imessage}, true, false, "changed"); + fetch(state, folder, ifolder, new Message[]{imessage}, true, false, "changed"); Thread.sleep(FETCH_YIELD_DURATION); } catch (Throwable ex) { Log.e(folder.name, ex); - if (ex instanceof FolderClosedException) - state.error(ex); - else { - EntityLog.log(ServiceSynchronize.this, EntityLog.Type.Account, folder, - account.name + "/" + folder.name + " changed " + Log.formatThrowable(ex, false)); - EntityOperation.sync(ServiceSynchronize.this, folder.id, false); - } + EntityLog.log(ServiceSynchronize.this, EntityLog.Type.Account, folder, + account.name + "/" + folder.name + " changed " + Log.formatThrowable(ex, false)); + EntityOperation.sync(ServiceSynchronize.this, folder.id, false); } finally { if (wlMessage.isHeld()) wlMessage.release(); @@ -2951,7 +2939,7 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences } } - private void fetch(EntityFolder folder, IMAPFolder ifolder, Message[] messages, boolean invalidate, boolean deleted, String reason) throws MessagingException { + private void fetch(Core.State state, EntityFolder folder, IMAPFolder ifolder, Message[] messages, boolean invalidate, boolean deleted, String reason) throws MessagingException { Log.i(folder.name + " " + messages.length + " messages " + reason); List uids = new ArrayList<>(); @@ -2961,6 +2949,13 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences uids.add(uid); } catch (MessageRemovedException ex) { Log.w(ex); + } catch (Throwable ex) { + Log.w(ex); + if (ex instanceof FolderClosedException) { + state.error(ex); + return; + } else + throw ex; } Log.i(folder.name + " messages " + reason + " uids=" + TextUtils.join(",", uids));