[geary/wip/714104-refine-account-dialog] Tidy up ClientService API a bit
- From: Michael Gratton <mjog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary/wip/714104-refine-account-dialog] Tidy up ClientService API a bit
- Date: Thu, 27 Dec 2018 00:07:40 +0000 (UTC)
commit 95ebdd65d2bf7132d87d80641e978799973fe617
Author: Michael Gratton <mike vee net>
Date: Thu Dec 27 10:20:58 2018 +1030
Tidy up ClientService API a bit
Require endpoint to always be present so it is never null, and hence
passed in through account creation. Rename props to be a bit more
descriptive.
src/client/application/geary-controller.vala | 8 ++--
src/engine/api/geary-client-service.vala | 45 +++++++++++-----------
src/engine/api/geary-engine.vala | 34 +++++++++-------
.../gmail/imap-engine-gmail-account.vala | 7 +++-
.../imap-engine/imap-engine-generic-account.vala | 18 ++++++---
.../other/imap-engine-other-account.vala | 7 +++-
.../outlook/imap-engine-outlook-account.vala | 7 +++-
.../yahoo/imap-engine-yahoo-account.vala | 7 +++-
src/engine/imap/api/imap-client-service.vala | 41 ++++++++++----------
src/engine/smtp/smtp-client-service.vala | 19 ++++-----
test/engine/api/geary-account-mock.vala | 17 ++++++--
11 files changed, 123 insertions(+), 87 deletions(-)
---
diff --git a/src/client/application/geary-controller.vala b/src/client/application/geary-controller.vala
index b3bae268..dda59ec8 100644
--- a/src/client/application/geary-controller.vala
+++ b/src/client/application/geary-controller.vala
@@ -831,8 +831,8 @@ public class GearyController : Geary.BaseObject {
// they agreed to both, try again
Geary.Account account = this.accounts.get(config).account;
if (imap_prompted && smtp_prompted
- && account.incoming.endpoint.is_trusted_or_never_connected
- && account.outgoing.endpoint.is_trusted_or_never_connected) {
+ && account.incoming.remote.is_trusted_or_never_connected
+ && account.outgoing.remote.is_trusted_or_never_connected) {
retry_required = true;
} else if (validation_result == Geary.Engine.ValidationResult.OK) {
retry_required = true;
@@ -2893,10 +2893,10 @@ public class GearyController : Geary.BaseObject {
Geary.Endpoint? endpoint = null;
switch (service.protocol) {
case Geary.Protocol.IMAP:
- endpoint = account.incoming.endpoint;
+ endpoint = account.incoming.remote;
break;
case Geary.Protocol.SMTP:
- endpoint = account.outgoing.endpoint;
+ endpoint = account.outgoing.remote;
break;
}
return endpoint;
diff --git a/src/engine/api/geary-client-service.vala b/src/engine/api/geary-client-service.vala
index 0582188a..5033fee5 100644
--- a/src/engine/api/geary-client-service.vala
+++ b/src/engine/api/geary-client-service.vala
@@ -18,28 +18,30 @@ public abstract class Geary.ClientService : BaseObject {
/**
- * The configuration for the account the service belongs to.
+ * The service's account.
*/
public AccountInformation account { get; private set; }
/**
* The configuration for the service.
*/
- public ServiceInformation service { get; private set; }
+ public ServiceInformation configuration { get; private set; }
/**
* The network endpoint the service will connect to.
*/
- public Endpoint? endpoint { get; private set; default = null; }
+ public Endpoint remote { get; private set; }
/** Determines if this manager has been started. */
public bool is_running { get; protected set; default = false; }
protected ClientService(AccountInformation account,
- ServiceInformation service) {
+ ServiceInformation configuration,
+ Endpoint remote) {
this.account = account;
- this.service = service;
+ this.configuration = configuration;
+ this.remote = remote;
}
/**
@@ -52,23 +54,20 @@ public abstract class Geary.ClientService : BaseObject {
public async void set_endpoint_restart(Endpoint endpoint,
GLib.Cancellable? cancellable = null)
throws GLib.Error {
- if ((this.endpoint == null && endpoint != null) ||
- (this.endpoint != null && this.endpoint.equal_to(endpoint))) {
- if (this.endpoint != null) {
- this.endpoint.untrusted_host.disconnect(on_untrusted_host);
- }
-
- bool do_restart = this.is_running;
- if (do_restart) {
- yield stop(cancellable);
- }
-
- this.endpoint = endpoint;
- this.endpoint.untrusted_host.connect(on_untrusted_host);
-
- if (do_restart) {
- yield start(cancellable);
- }
+ if (this.remote != null) {
+ this.remote.untrusted_host.disconnect(on_untrusted_host);
+ }
+
+ bool do_restart = this.is_running;
+ if (do_restart) {
+ yield stop(cancellable);
+ }
+
+ this.remote = remote;
+ this.remote.untrusted_host.connect(on_untrusted_host);
+
+ if (do_restart) {
+ yield start(cancellable);
}
}
@@ -92,7 +91,7 @@ public abstract class Geary.ClientService : BaseObject {
private void on_untrusted_host(TlsNegotiationMethod method,
GLib.TlsConnection cx) {
- this.account.untrusted_host(this.service, method, cx);
+ this.account.untrusted_host(this.configuration, method, cx);
}
}
diff --git a/src/engine/api/geary-engine.vala b/src/engine/api/geary-engine.vala
index 08998c39..b5b9d72b 100644
--- a/src/engine/api/geary-engine.vala
+++ b/src/engine/api/geary-engine.vala
@@ -352,38 +352,44 @@ public class Geary.Engine : BaseObject {
if (account_instances.has_key(config.id))
return account_instances.get(config.id);
+ ImapDB.Account local = new ImapDB.Account(config);
+ Endpoint incoming_remote = get_shared_endpoint(
+ config.service_provider, config.incoming
+ );
+ Endpoint outgoing_remote = get_shared_endpoint(
+ config.service_provider, config.outgoing
+ );
+
Geary.Account account;
switch (config.service_provider) {
case ServiceProvider.GMAIL:
- account = new ImapEngine.GmailAccount(config);
+ account = new ImapEngine.GmailAccount(
+ config, local, incoming_remote, outgoing_remote
+ );
break;
case ServiceProvider.YAHOO:
- account = new ImapEngine.YahooAccount(config);
+ account = new ImapEngine.YahooAccount(
+ config, local, incoming_remote, outgoing_remote
+ );
break;
case ServiceProvider.OUTLOOK:
- account = new ImapEngine.OutlookAccount(config);
+ account = new ImapEngine.OutlookAccount(
+ config, local, incoming_remote, outgoing_remote
+ );
break;
case ServiceProvider.OTHER:
- account = new ImapEngine.OtherAccount(config);
+ account = new ImapEngine.OtherAccount(
+ config, local, incoming_remote, outgoing_remote
+ );
break;
default:
assert_not_reached();
}
- Endpoint incoming = get_shared_endpoint(
- config.service_provider, config.incoming
- );
- account.set_endpoint(account.incoming, incoming);
-
- Endpoint outgoing = get_shared_endpoint(
- config.service_provider, config.outgoing
- );
- account.set_endpoint(account.outgoing, outgoing);
-
account_instances.set(config.id, account);
return account;
}
diff --git a/src/engine/imap-engine/gmail/imap-engine-gmail-account.vala
b/src/engine/imap-engine/gmail/imap-engine-gmail-account.vala
index 2e9567be..0857352c 100644
--- a/src/engine/imap-engine/gmail/imap-engine-gmail-account.vala
+++ b/src/engine/imap-engine/gmail/imap-engine-gmail-account.vala
@@ -32,8 +32,11 @@ private class Geary.ImapEngine.GmailAccount : Geary.ImapEngine.GenericAccount {
}
- public GmailAccount(Geary.AccountInformation config) {
- base(config);
+ public GmailAccount(Geary.AccountInformation config,
+ ImapDB.Account local,
+ Endpoint incoming_remote,
+ Endpoint outgoing_remote) {
+ base(config, local, incoming_remote, outgoing_remote);
}
protected override Geary.SpecialFolderType[] get_supported_special_folders() {
diff --git a/src/engine/imap-engine/imap-engine-generic-account.vala
b/src/engine/imap-engine/imap-engine-generic-account.vala
index 041ccb11..785374fe 100644
--- a/src/engine/imap-engine/imap-engine-generic-account.vala
+++ b/src/engine/imap-engine/imap-engine-generic-account.vala
@@ -62,19 +62,27 @@ private abstract class Geary.ImapEngine.GenericAccount : Geary.Account {
new Gee.HashMap<Geary.SpecialFolderType, Gee.List<string>>();
- public GenericAccount(AccountInformation config) {
+ public GenericAccount(AccountInformation config,
+ ImapDB.Account local,
+ Endpoint incoming_remote,
+ Endpoint outgoing_remote) {
base(config);
- this.local = new ImapDB.Account(config);
+ this.local = local;
this.local.contacts_loaded.connect(() => { contacts_loaded(); });
- this.imap = new Imap.ClientService(config, config.incoming);
+ this.imap = new Imap.ClientService(
+ config, config.incoming, incoming_remote
+ );
this.imap.min_pool_size = IMAP_MIN_POOL_SIZE;
this.imap.ready.connect(on_pool_session_ready);
this.imap.connection_failed.connect(on_pool_connection_failed);
this.imap.login_failed.connect(on_pool_login_failed);
this.smtp = new Smtp.ClientService(
- config, config.outgoing, new Outbox.Folder(this, this.local)
+ config,
+ config.outgoing,
+ outgoing_remote,
+ new Outbox.Folder(this, this.local)
);
this.smtp.email_sent.connect(on_email_sent);
this.smtp.report_problem.connect(notify_report_problem);
@@ -488,7 +496,7 @@ private abstract class Geary.ImapEngine.GenericAccount : Geary.Account {
// that's supposed to be globally unique...
Geary.RFC822.Message rfc822 = new Geary.RFC822.Message.from_composed_email(
composed, GMime.utils_generate_message_id(
- this.smtp.endpoint.remote_address.hostname
+ this.smtp.remote.remote_address.hostname
));
yield this.smtp.queue_email(rfc822, cancellable);
diff --git a/src/engine/imap-engine/other/imap-engine-other-account.vala
b/src/engine/imap-engine/other/imap-engine-other-account.vala
index 85ff844a..e3eb94a6 100644
--- a/src/engine/imap-engine/other/imap-engine-other-account.vala
+++ b/src/engine/imap-engine/other/imap-engine-other-account.vala
@@ -7,8 +7,11 @@
private class Geary.ImapEngine.OtherAccount : Geary.ImapEngine.GenericAccount {
- public OtherAccount(AccountInformation config) {
- base(config);
+ public OtherAccount(AccountInformation config,
+ ImapDB.Account local,
+ Endpoint incoming_remote,
+ Endpoint outgoing_remote) {
+ base(config, local, incoming_remote, outgoing_remote);
}
protected override MinimalFolder new_folder(ImapDB.Folder local_folder) {
diff --git a/src/engine/imap-engine/outlook/imap-engine-outlook-account.vala
b/src/engine/imap-engine/outlook/imap-engine-outlook-account.vala
index 57c1c948..2c09c3e5 100644
--- a/src/engine/imap-engine/outlook/imap-engine-outlook-account.vala
+++ b/src/engine/imap-engine/outlook/imap-engine-outlook-account.vala
@@ -24,8 +24,11 @@ private class Geary.ImapEngine.OutlookAccount : Geary.ImapEngine.GenericAccount
}
- public OutlookAccount(AccountInformation config) {
- base(config);
+ public OutlookAccount(AccountInformation config,
+ ImapDB.Account local,
+ Endpoint incoming_remote,
+ Endpoint outgoing_remote) {
+ base(config, local, incoming_remote, outgoing_remote);
}
protected override MinimalFolder new_folder(ImapDB.Folder local_folder) {
diff --git a/src/engine/imap-engine/yahoo/imap-engine-yahoo-account.vala
b/src/engine/imap-engine/yahoo/imap-engine-yahoo-account.vala
index bbdc543d..b64c5afb 100644
--- a/src/engine/imap-engine/yahoo/imap-engine-yahoo-account.vala
+++ b/src/engine/imap-engine/yahoo/imap-engine-yahoo-account.vala
@@ -27,8 +27,11 @@ private class Geary.ImapEngine.YahooAccount : Geary.ImapEngine.GenericAccount {
}
- public YahooAccount(AccountInformation config) {
- base(config);
+ public YahooAccount(AccountInformation config,
+ ImapDB.Account local,
+ Endpoint incoming_remote,
+ Endpoint outgoing_remote) {
+ base(config, local, incoming_remote, outgoing_remote);
if (special_map == null) {
special_map = new Gee.HashMap<Geary.FolderPath, Geary.SpecialFolderType>();
diff --git a/src/engine/imap/api/imap-client-service.vala b/src/engine/imap/api/imap-client-service.vala
index 62fc66d3..e37b55eb 100644
--- a/src/engine/imap/api/imap-client-service.vala
+++ b/src/engine/imap/api/imap-client-service.vala
@@ -125,8 +125,9 @@ internal class Geary.Imap.ClientService : Geary.ClientService {
public ClientService(AccountInformation account,
- ServiceInformation service) {
- base(account, service);
+ ServiceInformation service,
+ Endpoint remote) {
+ base(account, service, remote);
this.pool_start = new TimeoutManager.seconds(
POOL_START_TIMEOUT_SEC,
@@ -154,20 +155,20 @@ internal class Geary.Imap.ClientService : Geary.ClientService {
this.authentication_failed = false;
this.pool_cancellable = new Cancellable();
- this.endpoint.notify[Endpoint.PROP_TRUST_UNTRUSTED_HOST].connect(
+ this.remote.notify[Endpoint.PROP_TRUST_UNTRUSTED_HOST].connect(
on_imap_trust_untrusted_host
);
- this.endpoint.untrusted_host.connect(on_imap_untrusted_host);
- this.endpoint.connectivity.notify["is-reachable"].connect(
+ this.remote.untrusted_host.connect(on_imap_untrusted_host);
+ this.remote.connectivity.notify["is-reachable"].connect(
on_connectivity_change
);
- this.endpoint.connectivity.address_error_reported.connect(
+ this.remote.connectivity.address_error_reported.connect(
on_connectivity_error
);
- if (this.endpoint.connectivity.is_reachable.is_certain()) {
+ if (this.remote.connectivity.is_reachable.is_certain()) {
this.check_pool.begin();
} else {
- this.endpoint.connectivity.check_reachable.begin();
+ this.remote.connectivity.check_reachable.begin();
}
}
@@ -183,14 +184,14 @@ internal class Geary.Imap.ClientService : Geary.ClientService {
this.is_running = false;
this.pool_cancellable.cancel();
- this.endpoint.notify[Endpoint.PROP_TRUST_UNTRUSTED_HOST].disconnect(
+ this.remote.notify[Endpoint.PROP_TRUST_UNTRUSTED_HOST].disconnect(
on_imap_trust_untrusted_host
);
- this.endpoint.untrusted_host.disconnect(on_imap_untrusted_host);
- this.endpoint.connectivity.notify["is-reachable"].disconnect(
+ this.remote.untrusted_host.disconnect(on_imap_untrusted_host);
+ this.remote.connectivity.notify["is-reachable"].disconnect(
on_connectivity_change
);
- this.endpoint.connectivity.address_error_reported.disconnect(
+ this.remote.connectivity.address_error_reported.disconnect(
on_connectivity_error
);
@@ -238,10 +239,10 @@ internal class Geary.Imap.ClientService : Geary.ClientService {
throw new ImapError.UNAUTHENTICATED("Invalid ClientSessionManager credentials");
if (this.untrusted_host)
- throw new ImapError.UNAVAILABLE("Untrusted host %s", endpoint.to_string());
+ throw new ImapError.UNAVAILABLE("Untrusted host %s", remote.to_string());
- if (!this.endpoint.connectivity.is_reachable.is_certain())
- throw new ImapError.UNAVAILABLE("Host at %s is unreachable", endpoint.to_string());
+ if (!this.remote.connectivity.is_reachable.is_certain())
+ throw new ImapError.UNAVAILABLE("Host at %s is unreachable", remote.to_string());
ClientSession? claimed = null;
while (claimed == null) {
@@ -330,7 +331,7 @@ internal class Geary.Imap.ClientService : Geary.ClientService {
if (this.is_running &&
!this.authentication_failed &&
!this.untrusted_host &&
- this.endpoint.connectivity.is_reachable.is_certain()) {
+ this.remote.connectivity.is_reachable.is_certain()) {
int needed = this.min_pool_size - this.all_sessions.size;
if (needed <= 0 && is_claiming) {
@@ -424,7 +425,7 @@ internal class Geary.Imap.ClientService : Geary.ClientService {
private async ClientSession create_new_authorized_session(Cancellable? cancellable) throws Error {
debug("[%s] Opening new session", this.account.id);
- ClientSession new_session = new ClientSession(endpoint);
+ ClientSession new_session = new ClientSession(remote);
// Listen for auth failures early so the client is notified if
// there is an error, even though we won't want to keep the
@@ -442,7 +443,7 @@ internal class Geary.Imap.ClientService : Geary.ClientService {
try {
yield new_session.initiate_session_async(
- this.service.credentials, cancellable
+ this.configuration.credentials, cancellable
);
} catch (Error err) {
if (!(err is IOError.CANCELLED)) {
@@ -571,7 +572,7 @@ internal class Geary.Imap.ClientService : Geary.ClientService {
private void on_imap_trust_untrusted_host() {
// fired when the trust_untrusted_host property changes, indicating if the user has agreed
// to ignore the trust problems and continue connecting
- if (untrusted_host && endpoint.trust_untrusted_host == Trillian.TRUE) {
+ if (untrusted_host && remote.trust_untrusted_host == Trillian.TRUE) {
untrusted_host = false;
if (this.is_running) {
@@ -581,7 +582,7 @@ internal class Geary.Imap.ClientService : Geary.ClientService {
}
private void on_connectivity_change() {
- bool is_reachable = this.endpoint.connectivity.is_reachable.is_certain();
+ bool is_reachable = this.remote.connectivity.is_reachable.is_certain();
if (is_reachable) {
this.pool_start.start();
this.pool_stop.reset();
diff --git a/src/engine/smtp/smtp-client-service.vala b/src/engine/smtp/smtp-client-service.vala
index 42b3f2a6..d7eb1f17 100644
--- a/src/engine/smtp/smtp-client-service.vala
+++ b/src/engine/smtp/smtp-client-service.vala
@@ -52,8 +52,9 @@ internal class Geary.Smtp.ClientService : Geary.ClientService {
public ClientService(AccountInformation account,
ServiceInformation service,
+ Endpoint remote,
Outbox.Folder outbox) {
- base(account, service);
+ base(account, service, remote);
this.outbox = outbox;
}
@@ -65,13 +66,13 @@ internal class Geary.Smtp.ClientService : Geary.ClientService {
this.is_running = true;
yield this.outbox.open_async(Folder.OpenFlags.NONE, cancellable);
yield this.fill_outbox_queue(cancellable);
- this.endpoint.connectivity.notify["is-reachable"].connect(
+ this.remote.connectivity.notify["is-reachable"].connect(
on_reachable_changed
);
- this.endpoint.connectivity.address_error_reported.connect(
+ this.remote.connectivity.address_error_reported.connect(
on_connectivity_error
);
- this.endpoint.connectivity.check_reachable.begin();
+ this.remote.connectivity.check_reachable.begin();
}
/**
@@ -79,10 +80,10 @@ internal class Geary.Smtp.ClientService : Geary.ClientService {
*/
public override async void stop(GLib.Cancellable? cancellable = null)
throws GLib.Error {
- this.endpoint.connectivity.notify["is-reachable"].disconnect(
+ this.remote.connectivity.notify["is-reachable"].disconnect(
on_reachable_changed
);
- this.endpoint.connectivity.address_error_reported.disconnect(
+ this.remote.connectivity.address_error_reported.disconnect(
on_connectivity_error
);
this.stop_postie();
@@ -311,7 +312,7 @@ internal class Geary.Smtp.ClientService : Geary.ClientService {
private async void send_email(Geary.RFC822.Message rfc822, Cancellable? cancellable)
throws Error {
- Smtp.ClientSession smtp = new Geary.Smtp.ClientSession(this.endpoint);
+ Smtp.ClientSession smtp = new Geary.Smtp.ClientSession(this.remote);
sending_monitor.notify_start();
@@ -408,12 +409,12 @@ internal class Geary.Smtp.ClientService : Geary.ClientService {
private void notify_report_problem(ProblemType problem, Error? err) {
report_problem(
- new ServiceProblemReport(problem, this.account, this.service, err)
+ new ServiceProblemReport(problem, this.account, this.configuration, err)
);
}
private void on_reachable_changed() {
- if (this.endpoint.connectivity.is_reachable.is_certain()) {
+ if (this.remote.connectivity.is_reachable.is_certain()) {
start_postie.begin();
} else {
stop_postie();
diff --git a/test/engine/api/geary-account-mock.vala b/test/engine/api/geary-account-mock.vala
index b1efca93..4696d2eb 100644
--- a/test/engine/api/geary-account-mock.vala
+++ b/test/engine/api/geary-account-mock.vala
@@ -34,8 +34,9 @@ public class Geary.MockAccount : Account, MockObject {
public class MockClientService : ClientService {
public MockClientService(AccountInformation account,
- ServiceInformation service) {
- base(account, service);
+ ServiceInformation configuration,
+ Endpoint remote) {
+ base(account, configuration, remote);
}
public override async void start(GLib.Cancellable? cancellable = null)
@@ -70,8 +71,16 @@ public class Geary.MockAccount : Account, MockObject {
public MockAccount(AccountInformation config) {
base(config);
- this._incoming = new MockClientService(config, config.incoming);
- this._outgoing = new MockClientService(config, config.outgoing);
+ this._incoming = new MockClientService(
+ config,
+ config.incoming,
+ new Endpoint(config.incoming.host, config.incoming.port, 0, 0)
+ );
+ this._outgoing = new MockClientService(
+ config,
+ config.outgoing,
+ new Endpoint(config.outgoing.host, config.outgoing.port, 0, 0)
+ );
}
public override async void open_async(Cancellable? cancellable = null) throws Error {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]