[geary/wip/composer-folks: 10/22] Pass email to a contact harvester instance when persisting it
- From: Michael Gratton <mjog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary/wip/composer-folks: 10/22] Pass email to a contact harvester instance when persisting it
- Date: Sat, 15 Jun 2019 14:31:44 +0000 (UTC)
commit 03b5fcee8a65bf18fc8cb8bd83d1aa1a422c7adc
Author: Michael Gratton <mike vee net>
Date: Mon Jun 10 08:54:05 2019 +1000
Pass email to a contact harvester instance when persisting it
Add a ContactHarvester arg to ImapDB.Folder.create_or_merge_email and
call it on the resulting email. Add and update a new harvester
property to MinimalFolder and pass that in as needed.
src/engine/imap-db/imap-db-folder.vala | 5 +++++
src/engine/imap-engine/imap-engine-minimal-folder.vala | 13 ++++++++++++-
.../replay-ops/imap-engine-abstract-list-email.vala | 12 ++++++++++--
.../imap-engine/replay-ops/imap-engine-create-email.vala | 1 +
.../imap-engine/replay-ops/imap-engine-fetch-email.vala | 2 +-
.../imap-engine/replay-ops/imap-engine-replay-append.vala | 2 +-
test/engine/common/common-contact-harvester-mock.vala | 15 +++++++++++++++
test/engine/imap-db/imap-db-folder-test.vala | 6 ++++++
test/meson.build | 1 +
9 files changed, 52 insertions(+), 5 deletions(-)
---
diff --git a/src/engine/imap-db/imap-db-folder.vala b/src/engine/imap-db/imap-db-folder.vala
index f4ed001b..615d8194 100644
--- a/src/engine/imap-db/imap-db-folder.vala
+++ b/src/engine/imap-db/imap-db-folder.vala
@@ -276,6 +276,7 @@ private class Geary.ImapDB.Folder : BaseObject, Geary.ReferenceSemantics {
public async Gee.Map<Email, bool>
create_or_merge_email_async(Gee.Collection<Email> emails,
bool update_totals,
+ ContactHarvester harvester,
GLib.Cancellable? cancellable)
throws GLib.Error {
Gee.HashMap<Geary.Email, bool> results = new Gee.HashMap<Geary.Email, bool>();
@@ -332,6 +333,10 @@ private class Geary.ImapDB.Folder : BaseObject, Geary.ReferenceSemantics {
yield Scheduler.sleep_ms_async(100);
}
+ yield harvester.harvest_from_email(
+ results.keys, cancellable
+ );
+
return results;
}
diff --git a/src/engine/imap-engine/imap-engine-minimal-folder.vala
b/src/engine/imap-engine/imap-engine-minimal-folder.vala
index bbe2bded..f1c2c80b 100644
--- a/src/engine/imap-engine/imap-engine-minimal-folder.vala
+++ b/src/engine/imap-engine/imap-engine-minimal-folder.vala
@@ -66,6 +66,7 @@ private class Geary.ImapEngine.MinimalFolder : Geary.Folder, Geary.FolderSupport
internal ReplayQueue? replay_queue { get; private set; default = null; }
internal EmailPrefetcher email_prefetcher { get; private set; }
+ internal ContactHarvester harvester { get; private set; }
private weak GenericAccount _account;
private Geary.AggregatedFolderProperties _properties =
@@ -124,6 +125,7 @@ private class Geary.ImapEngine.MinimalFolder : Geary.Folder, Geary.FolderSupport
this._special_folder_type = special_folder_type;
this._properties.add(local_folder.get_properties());
this.email_prefetcher = new EmailPrefetcher(this);
+ update_harvester();
this.remote_open_timer = new TimeoutManager.seconds(
FORCE_OPEN_REMOTE_TIMEOUT_SEC, () => { this.open_remote_session.begin(); }
@@ -181,6 +183,7 @@ private class Geary.ImapEngine.MinimalFolder : Geary.Folder, Geary.FolderSupport
_special_folder_type = new_type;
if (old_type != new_type)
notify_special_folder_type_changed(old_type, new_type);
+ update_harvester();
}
/** {@inheritDoc} */
@@ -535,7 +538,7 @@ private class Geary.ImapEngine.MinimalFolder : Geary.Folder, Geary.FolderSupport
// also Issue #213.
Gee.Map<Email, bool>? created_or_merged =
yield local_folder.create_or_merge_email_async(
- to_create, false, cancellable
+ to_create, false, this.harvester, cancellable
);
assert(created_or_merged != null);
@@ -1521,6 +1524,14 @@ private class Geary.ImapEngine.MinimalFolder : Geary.Folder, Geary.FolderSupport
}
}
+ private void update_harvester() {
+ this.harvester = new ContactHarvesterImpl(
+ this.account.contact_store,
+ this.special_folder_type,
+ this.account.information.sender_mailboxes
+ );
+ }
+
private void on_refresh_unseen() {
// We queue an account operation since the folder itself is
// closed and hence does not have a connection to use for it.
diff --git a/src/engine/imap-engine/replay-ops/imap-engine-abstract-list-email.vala
b/src/engine/imap-engine/replay-ops/imap-engine-abstract-list-email.vala
index 59ce9468..0d04eb47 100644
--- a/src/engine/imap-engine/replay-ops/imap-engine-abstract-list-email.vala
+++ b/src/engine/imap-engine/replay-ops/imap-engine-abstract-list-email.vala
@@ -23,18 +23,23 @@ private abstract class Geary.ImapEngine.AbstractListEmail : Geary.ImapEngine.Sen
// OUT
public Gee.Set<Geary.EmailIdentifier> created_ids = new Gee.HashSet<Geary.EmailIdentifier>();
+ private ContactHarvester harvester;
+
+
public RemoteBatchOperation(Imap.FolderSession remote,
ImapDB.Folder local,
Imap.MessageSet msg_set,
Geary.Email.Field unfulfilled_fields,
Geary.Email.Field required_fields,
- bool update_unread) {
+ bool update_unread,
+ ContactHarvester harvester) {
this.remote = remote;
this.local = local;
this.msg_set = msg_set;
this.unfulfilled_fields = unfulfilled_fields;
this.required_fields = required_fields;
this.update_unread = update_unread;
+ this.harvester = harvester;
}
public override async Object? execute_async(Cancellable? cancellable) throws Error {
@@ -50,8 +55,10 @@ private abstract class Geary.ImapEngine.AbstractListEmail : Geary.ImapEngine.Sen
yield this.local.create_or_merge_email_async(
list,
this.update_unread,
+ this.harvester,
cancellable
);
+
for (int ctr = 0; ctr < list.size; ctr++) {
Geary.Email email = list[ctr];
@@ -179,7 +186,8 @@ private abstract class Geary.ImapEngine.AbstractListEmail : Geary.ImapEngine.Sen
msg_set,
unfulfilled_fields,
required_fields,
- !this.flags.is_any_set(NO_UNREAD_UPDATE)
+ !this.flags.is_any_set(NO_UNREAD_UPDATE),
+ this.owner.harvester
);
batch.add(remote_op);
}
diff --git a/src/engine/imap-engine/replay-ops/imap-engine-create-email.vala
b/src/engine/imap-engine/replay-ops/imap-engine-create-email.vala
index 2f9a325d..ca5e29c9 100644
--- a/src/engine/imap-engine/replay-ops/imap-engine-create-email.vala
+++ b/src/engine/imap-engine/replay-ops/imap-engine-create-email.vala
@@ -60,6 +60,7 @@ private class Geary.ImapEngine.CreateEmail : Geary.ImapEngine.SendReplayOperatio
yield this.engine.local_folder.create_or_merge_email_async(
Geary.iterate<Geary.Email>(created).to_array_list(),
true,
+ this.engine.harvester,
this.cancellable
);
if (results.size > 0) {
diff --git a/src/engine/imap-engine/replay-ops/imap-engine-fetch-email.vala
b/src/engine/imap-engine/replay-ops/imap-engine-fetch-email.vala
index 79688792..50584097 100644
--- a/src/engine/imap-engine/replay-ops/imap-engine-fetch-email.vala
+++ b/src/engine/imap-engine/replay-ops/imap-engine-fetch-email.vala
@@ -116,7 +116,7 @@ private class Geary.ImapEngine.FetchEmail : Geary.ImapEngine.SendReplayOperation
Gee.Map<Geary.Email, bool> created_or_merged =
yield this.engine.local_folder.create_or_merge_email_async(
- list, true, this.cancellable
+ list, true, this.engine.harvester, this.cancellable
);
Geary.Email email = list[0];
diff --git a/src/engine/imap-engine/replay-ops/imap-engine-replay-append.vala
b/src/engine/imap-engine/replay-ops/imap-engine-replay-append.vala
index 1c2479b1..2ed09438 100644
--- a/src/engine/imap-engine/replay-ops/imap-engine-replay-append.vala
+++ b/src/engine/imap-engine/replay-ops/imap-engine-replay-append.vala
@@ -91,7 +91,7 @@ private class Geary.ImapEngine.ReplayAppend : Geary.ImapEngine.ReplayOperation {
// could mean created or simply a known email associated with this folder)
Gee.Map<Geary.Email, bool> created_or_merged =
yield this.owner.local_folder.create_or_merge_email_async(
- list, true, this.cancellable
+ list, true, this.owner.harvester, this.cancellable
);
foreach (Geary.Email email in created_or_merged.keys) {
// true means created
diff --git a/test/engine/common/common-contact-harvester-mock.vala
b/test/engine/common/common-contact-harvester-mock.vala
new file mode 100644
index 00000000..d949a934
--- /dev/null
+++ b/test/engine/common/common-contact-harvester-mock.vala
@@ -0,0 +1,15 @@
+/*
+ * Copyright 2019 Michael Gratton <mike vee net>
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+
+internal class Geary.MockContactHarvester : ContactHarvester, GLib.Object {
+
+ public async void harvest_from_email(Gee.Collection<Email> messages,
+ GLib.Cancellable? cancellable)
+ throws GLib.Error {
+ }
+
+}
diff --git a/test/engine/imap-db/imap-db-folder-test.vala b/test/engine/imap-db/imap-db-folder-test.vala
index ce32de7c..df890003 100644
--- a/test/engine/imap-db/imap-db-folder-test.vala
+++ b/test/engine/imap-db/imap-db-folder-test.vala
@@ -83,6 +83,7 @@ class Geary.ImapDB.FolderTest : TestCase {
this.folder.create_or_merge_email_async.begin(
Collection.single(mock),
true,
+ new MockContactHarvester(),
null,
(obj, ret) => { async_complete(ret); }
);
@@ -102,6 +103,7 @@ class Geary.ImapDB.FolderTest : TestCase {
this.folder.create_or_merge_email_async.begin(
Collection.single(mock),
true,
+ new MockContactHarvester(),
null,
(obj, ret) => { async_complete(ret); }
);
@@ -121,6 +123,7 @@ class Geary.ImapDB.FolderTest : TestCase {
this.folder.create_or_merge_email_async.begin(
Collection.single(mock),
false,
+ new MockContactHarvester(),
null,
(obj, ret) => { async_complete(ret); }
);
@@ -150,6 +153,7 @@ class Geary.ImapDB.FolderTest : TestCase {
this.folder.create_or_merge_email_async.begin(
Collection.single(mock),
true,
+ new MockContactHarvester(),
null,
(obj, ret) => { async_complete(ret); }
);
@@ -200,6 +204,7 @@ class Geary.ImapDB.FolderTest : TestCase {
this.folder.create_or_merge_email_async.begin(
Collection.single(test),
true,
+ new MockContactHarvester(),
null,
(obj, ret) => { async_complete(ret); }
);
@@ -233,6 +238,7 @@ class Geary.ImapDB.FolderTest : TestCase {
this.folder.create_or_merge_email_async.begin(
Collection.single(test),
true,
+ new MockContactHarvester(),
null,
(obj, ret) => { async_complete(ret); }
);
diff --git a/test/meson.build b/test/meson.build
index 1563a5fe..9bf86e1b 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -20,6 +20,7 @@ geary_test_engine_sources = [
'engine/api/geary-email-properties-mock.vala',
'engine/api/geary-folder-mock.vala',
'engine/api/geary-folder-properties-mock.vala',
+ 'engine/common/common-contact-harvester-mock.vala',
'engine/api/geary-account-information-test.vala',
'engine/api/geary-attachment-test.vala',
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]