diff --git a/app/src/main/java/eu/faircode/email/DaoFolder.java b/app/src/main/java/eu/faircode/email/DaoFolder.java index 6d1b2dd1d8..0c3bdaa716 100644 --- a/app/src/main/java/eu/faircode/email/DaoFolder.java +++ b/app/src/main/java/eu/faircode/email/DaoFolder.java @@ -89,6 +89,11 @@ public interface DaoFolder { " AND folder.type = '" + EntityFolder.DRAFTS + "'") LiveData livePrimaryDrafts(); + @Query("SELECT COUNT(id) FROM folder" + + " WHERE sync_state = 'syncing'" + + " AND folder.type <> '" + EntityFolder.OUTBOX + "'") + LiveData liveSynchronizing(); + @Query("SELECT folder.*" + ", account.name AS accountName, account.color AS accountColor, account.state AS accountState" + ", COUNT(message.id) AS messages" + diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index d3b6b20644..66c520c8d4 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -128,7 +128,20 @@ public class ServiceSynchronize extends LifecycleService { } }); - db.message().liveUnseenNotify().observe(this, new Observer>() { + final TwoStateOwner cowner = new TwoStateOwner(this); + + db.folder().liveSynchronizing().observe(this, new Observer() { + @Override + public void onChanged(Integer count) { + Log.i("Synchronizing folders=" + count); + if (count == 0) + cowner.start(); + else + cowner.stop(); + } + }); + + db.message().liveUnseenNotify().observe(cowner, new Observer>() { @Override public void onChanged(List messages) { Core.notifyMessages(ServiceSynchronize.this, messages);