diff --git a/app/src/main/java/eu/faircode/email/AdapterFolder.java b/app/src/main/java/eu/faircode/email/AdapterFolder.java index 71c7cb5093..e5616cfb5e 100644 --- a/app/src/main/java/eu/faircode/email/AdapterFolder.java +++ b/app/src/main/java/eu/faircode/email/AdapterFolder.java @@ -238,8 +238,7 @@ public class AdapterFolder extends RecyclerView.Adapter> liveFolders(Long account); - @Query("SELECT folder.*, account.name AS accountName, account.color AS accountColor, account.state AS accountState" + + @Query("SELECT folder.*" + + ", account.name AS accountName, account.color AS accountColor" + + ", account.state AS accountState, account.ondemand AS accountOnDemand" + ", COUNT(message.id) AS messages" + ", SUM(CASE WHEN message.content = 1 THEN 1 ELSE 0 END) AS content" + ", SUM(CASE WHEN message.ui_seen = 0 THEN 1 ELSE 0 END) AS unseen" + @@ -81,7 +85,9 @@ public interface DaoFolder { " WHERE `primary` AND type = '" + EntityFolder.DRAFTS + "'") LiveData livePrimaryDrafts(); - @Query("SELECT folder.*, account.name AS accountName, account.color AS accountColor, account.state AS accountState" + + @Query("SELECT folder.*" + + ", account.name AS accountName, account.color AS accountColor" + + ", account.state AS accountState, account.ondemand AS accountOnDemand" + ", COUNT(message.id) AS messages" + ", SUM(CASE WHEN message.content = 1 THEN 1 ELSE 0 END) AS content" + ", SUM(CASE WHEN message.ui_seen = 0 THEN 1 ELSE 0 END) AS unseen" + diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 0029eaed2a..957ab1baac 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -516,8 +516,11 @@ public class FragmentMessages extends FragmentBase { for (EntityFolder folder : folders) if (folder.account == null) { // Outbox - now = internet; - EntityOperation.sync(context, db, folder.id); + if (internet) { + now = true; + EntityOperation.sync(context, db, folder.id); + } else + nointernet = true; } else { EntityAccount account = db.account().getAccount(folder.account); if (account.ondemand) { @@ -1555,7 +1558,7 @@ public class FragmentMessages extends FragmentBase { boolean refreshing = false; for (TupleFolderEx folder : folders) - if (folder.sync_state != null && "connected".equals(folder.accountState)) { + if (folder.isSynchronizing()) { refreshing = true; break; } @@ -1585,10 +1588,7 @@ public class FragmentMessages extends FragmentBase { } } - swipeRefresh.setRefreshing( - folder != null && folder.sync_state != null && - "connected".equals(EntityFolder.OUTBOX.equals(folder.type) - ? folder.state : folder.accountState)); + swipeRefresh.setRefreshing(folder != null && folder.isSynchronizing()); } }); break; diff --git a/app/src/main/java/eu/faircode/email/ServiceSend.java b/app/src/main/java/eu/faircode/email/ServiceSend.java index 9717aa51bc..dcff00a5f2 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSend.java +++ b/app/src/main/java/eu/faircode/email/ServiceSend.java @@ -185,6 +185,7 @@ public class ServiceSend extends LifecycleService { Log.e(outbox.name, ex); db.folder().setFolderError(outbox.id, Helper.formatThrowable(ex, true)); } finally { + db.folder().setFolderState(outbox.id, null); db.folder().setFolderSyncState(outbox.id, null); } } finally { diff --git a/app/src/main/java/eu/faircode/email/ServiceUI.java b/app/src/main/java/eu/faircode/email/ServiceUI.java index ec60753175..39806afa33 100644 --- a/app/src/main/java/eu/faircode/email/ServiceUI.java +++ b/app/src/main/java/eu/faircode/email/ServiceUI.java @@ -306,6 +306,9 @@ public class ServiceUI extends IntentService { } public static void sync(Context context, long folder) { + DB db = DB.getInstance(context); + db.folder().setFolderSyncState(folder, "requested"); + context.startService( new Intent(context, ServiceUI.class) .setAction("synchronize:" + folder)); diff --git a/app/src/main/java/eu/faircode/email/TupleFolderEx.java b/app/src/main/java/eu/faircode/email/TupleFolderEx.java index a201ea2988..7d85296621 100644 --- a/app/src/main/java/eu/faircode/email/TupleFolderEx.java +++ b/app/src/main/java/eu/faircode/email/TupleFolderEx.java @@ -25,10 +25,17 @@ public class TupleFolderEx extends EntityFolder { public String accountName; public Integer accountColor; public String accountState; + public Boolean accountOnDemand; public int messages; public int content; public int unseen; + boolean isSynchronizing() { + return (sync_state != null && + (EntityFolder.OUTBOX.equals(type) || + accountOnDemand || "connected".equals(accountState))); + } + @Override public boolean equals(Object obj) { if (obj instanceof TupleFolderEx) { @@ -37,6 +44,7 @@ public class TupleFolderEx extends EntityFolder { Objects.equals(accountName, other.accountName) && Objects.equals(this.accountColor, other.accountColor) && Objects.equals(accountState, other.accountState) && + Objects.equals(this.accountOnDemand, other.accountOnDemand) && this.messages == other.messages && this.content == other.content && this.unseen == other.unseen);