Browse Source

Check running while synchronizing folders/messages

main
M66B 5 years ago
parent
commit
bee199ccf8
1 changed files with 12 additions and 5 deletions
  1. +12
    -5
      app/src/main/java/eu/faircode/email/ServiceSynchronize.java

+ 12
- 5
app/src/main/java/eu/faircode/email/ServiceSynchronize.java View File

@ -425,7 +425,7 @@ public class ServiceSynchronize extends LifecycleService {
// Update folder list
try {
synchronizeFolders(account, istore);
synchronizeFolders(account, istore, state);
} catch (MessagingException ex) {
// Don't show to user
throw new IllegalStateException("synchronize folders", ex);
@ -505,7 +505,7 @@ public class ServiceSynchronize extends LifecycleService {
});
// Fetch e-mail
synchronizeMessages(account, folder, ifolder);
synchronizeMessages(account, folder, ifolder, state);
// Flags (like "seen") at the remote could be changed while synchronizing
@ -1050,7 +1050,7 @@ public class ServiceSynchronize extends LifecycleService {
}
}
private void synchronizeFolders(EntityAccount account, IMAPStore istore) throws MessagingException {
private void synchronizeFolders(EntityAccount account, IMAPStore istore, ServiceState state) throws MessagingException {
try {
Log.v(Helper.TAG, "Start sync folders");
@ -1065,6 +1065,9 @@ public class ServiceSynchronize extends LifecycleService {
Log.i(Helper.TAG, "Remote folder count=" + ifolders.length);
for (Folder ifolder : ifolders) {
if (!state.running)
return;
String[] attrs = ((IMAPFolder) ifolder).getAttributes();
boolean selectable = true;
for (String attr : attrs) {
@ -1104,7 +1107,7 @@ public class ServiceSynchronize extends LifecycleService {
}
}
private void synchronizeMessages(EntityAccount account, EntityFolder folder, IMAPFolder ifolder) throws MessagingException, IOException {
private void synchronizeMessages(EntityAccount account, EntityFolder folder, IMAPFolder ifolder, ServiceState state) throws MessagingException, IOException {
try {
Log.v(Helper.TAG, folder.name + " start sync after=" + folder.after);
@ -1143,7 +1146,10 @@ public class ServiceSynchronize extends LifecycleService {
long fetch = SystemClock.elapsedRealtime();
Log.i(Helper.TAG, folder.name + " remote fetched=" + (SystemClock.elapsedRealtime() - fetch) + " ms");
for (Message imessage : imessages)
for (Message imessage : imessages) {
if (!state.running)
return;
try {
uids.remove(ifolder.getUID(imessage));
} catch (MessageRemovedException ex) {
@ -1154,6 +1160,7 @@ public class ServiceSynchronize extends LifecycleService {
db.folder().setFolderError(folder.id, Helper.formatThrowable(ex));
}
}
// Delete local messages not at remote
Log.i(Helper.TAG, folder.name + " delete=" + uids.size());


Loading…
Cancel
Save