[geary/mjog/invert-folder-class-hierarchy: 67/72] engine: Update MinimalFolder's flag updater to use the replay queue
- From: Michael Gratton <mjog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary/mjog/invert-folder-class-hierarchy: 67/72] engine: Update MinimalFolder's flag updater to use the replay queue
- Date: Wed, 3 Mar 2021 11:52:48 +0000 (UTC)
commit 53020456d044f96bb69fecb278ac95d83525a06d
Author: Michael Gratton <mike vee net>
Date: Mon Mar 1 09:22:18 2021 +1100
engine: Update MinimalFolder's flag updater to use the replay queue
Use the new FetchEmail op to download email flags.
.../imap-engine/imap-engine-minimal-folder.vala | 55 +++++++++-------------
1 file changed, 22 insertions(+), 33 deletions(-)
---
diff --git a/src/engine/imap-engine/imap-engine-minimal-folder.vala
b/src/engine/imap-engine/imap-engine-minimal-folder.vala
index b83023d2f..a3c05b188 100644
--- a/src/engine/imap-engine/imap-engine-minimal-folder.vala
+++ b/src/engine/imap-engine/imap-engine-minimal-folder.vala
@@ -1336,42 +1336,31 @@ private class Geary.ImapEngine.MinimalFolder : BaseObject,
oldest = local.last().id;
// Get all email identifiers in the local folder mapped to their EmailFlags
- var local_map = new Gee.HashMap<EmailIdentifier,EmailFlags>();
+ var local_map = new Gee.HashMap<ImapDB.EmailIdentifier,EmailFlags>();
foreach (Geary.Email e in local) {
- local_map.set(e.id, e.email_flags);
+ local_map.set((ImapDB.EmailIdentifier) e.id, e.email_flags);
}
debug("Fetching %d flags", local_map.keys.size);
- var remote = yield claim_remote_session(cancellable);
- Gee.List<Email>? remote_email =
- yield remote.list_email_async(
- new Imap.MessageSet.uid_range(
- ((ImapDB.EmailIdentifier) oldest).uid,
- ((ImapDB.EmailIdentifier) local.first().id).uid
- ),
- FLAGS,
- cancellable
- );
-
- if (remote_email != null && !remote_email.is_empty) {
- var changed_set = new Gee.HashSet<Email>();
- var changed_map = new Gee.HashMap<EmailIdentifier,EmailFlags>();
- foreach (var email in remote_email) {
- var local_flags = local_map.get(email.id);
- var remote_flags = email.email_flags;
- if (local_flags != null &&
- local_flags.equal_to(remote_flags)) {
- changed_set.add(email);
- changed_map.set(email.id, remote_flags);
- }
- }
+ var op = new FetchEmail(
+ this, local_map.keys, FLAGS, cancellable
+ );
+ this.replay_queue.schedule(op);
+ yield op.wait_for_ready_async(cancellable);
- yield this.local_folder.create_or_merge_email_async(
- changed_set,
- true,
- this.harvester,
- cancellable
+ var changed_map = new Gee.HashMap<EmailIdentifier,EmailFlags>();
+ foreach (var fetched in op.fetched_email) {
+ var local_flags = local_map.get(
+ (ImapDB.EmailIdentifier) fetched.id
);
+ var remote_flags = fetched.email_flags;
+ if (local_flags != null &&
+ remote_flags != null &&
+ !local_flags.equal_to(remote_flags)) {
+ changed_map.set(fetched.id, remote_flags);
+ }
+ }
+ if (!changed_map.is_empty) {
email_flags_changed(changed_map);
}
@@ -1407,10 +1396,10 @@ private class Geary.ImapEngine.MinimalFolder : BaseObject,
(obj, res) => {
try {
this.update_flags.end(res);
- } catch (IOError.CANCELLED err) {
+ } catch (GLib.IOError.CANCELLED err) {
// all good
- } catch (Error err) {
- debug("Error updating flags: %s", err.message);
+ } catch (GLib.Error err) {
+ warning("Error updating flags: %s", err.message);
}
}
);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]