[geary/wip/366-remove-folders] Fix folders removed from the server never being removed



commit 9c8723ac2a905b93ba75ee1fbb183a56091f3a8c
Author: Michael Gratton <mike vee net>
Date:   Wed Jul 17 15:06:41 2019 +1000

    Fix folders removed from the server never being removed
    
    Third time lucky at using BidiIterator correctly :(

 src/client/application/application-controller.vala      | 6 ++++--
 src/engine/imap-engine/imap-engine-generic-account.vala | 6 ++++--
 2 files changed, 8 insertions(+), 4 deletions(-)
---
diff --git a/src/client/application/application-controller.vala 
b/src/client/application/application-controller.vala
index ba244cf5..63973e8a 100644
--- a/src/client/application/application-controller.vala
+++ b/src/client/application/application-controller.vala
@@ -1348,8 +1348,8 @@ public class Application.Controller : Geary.BaseObject {
         if (unavailable != null) {
             Gee.BidirIterator<Geary.Folder> unavailable_iterator =
                 unavailable.bidir_iterator();
-            unavailable_iterator.last();
-            while (unavailable_iterator.previous()) {
+            bool has_prev = unavailable_iterator.last();
+            while (has_prev) {
                 Geary.Folder folder = unavailable_iterator.get();
 
                 main_window.folder_list.remove_folder(folder);
@@ -1376,6 +1376,8 @@ public class Application.Controller : Geary.BaseObject {
                 }
 
                 folder.special_folder_type_changed.disconnect(on_special_folder_type_changed);
+
+                has_prev = unavailable_iterator.previous();
             }
         }
     }
diff --git a/src/engine/imap-engine/imap-engine-generic-account.vala 
b/src/engine/imap-engine/imap-engine-generic-account.vala
index e734868f..2f0f5f45 100644
--- a/src/engine/imap-engine/imap-engine-generic-account.vala
+++ b/src/engine/imap-engine/imap-engine-generic-account.vala
@@ -1318,8 +1318,8 @@ internal class Geary.ImapEngine.UpdateRemoteFolders : AccountOperation {
 
             Gee.BidirIterator<MinimalFolder> removed_iterator =
                 removed.bidir_iterator();
-            removed_iterator.last();
-            while (removed_iterator.previous()) {
+            bool has_prev = removed_iterator.last();
+            while (has_prev) {
                 MinimalFolder folder = removed_iterator.get();
 
                 try {
@@ -1328,6 +1328,8 @@ internal class Geary.ImapEngine.UpdateRemoteFolders : AccountOperation {
                 } catch (Error e) {
                     debug("Unable to locally delete removed folder %s: %s", folder.to_string(), e.message);
                 }
+
+                has_prev = removed_iterator.previous();
             }
 
             // Let the remote know as well


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]