diff --git a/client/src/client.vala b/client/src/client.vala index 35a552d..e92c136 100644 --- a/client/src/client.vala +++ b/client/src/client.vala @@ -7,6 +7,8 @@ namespace StudySystemClient { public class Client { public signal void connection_status(bool connected); + public bool connected { get { return connection.connected; } } + private Connection connection; public Client(string cert_dir) throws Error { diff --git a/client/src/connection.vala b/client/src/connection.vala index 4e57af1..211340f 100644 --- a/client/src/connection.vala +++ b/client/src/connection.vala @@ -2,6 +2,8 @@ namespace StudySystemClient { public class Connection { public delegate void StatusCallback(bool connected); + public bool connected { get; private set; } + private StatusCallback status_callback; private SessionManager session_manager; private TransactionManager transaction_manager; @@ -16,9 +18,10 @@ namespace StudySystemClient { this.status_callback = (owned) status_callback; session_manager = new SessionManager( session_factory, (msg) => receive(msg), - (connected) => status_changed(connected)); + (connected) => update_status(connected)); transaction_manager = new TransactionManager(); worker = new Worker(session_manager); + connected = true; } public async Response.Body? send(Request.Body body) { @@ -43,9 +46,12 @@ namespace StudySystemClient { }, GLib.Priority.DEFAULT_IDLE); } - private void status_changed(bool connected) { + private void update_status(bool connected) { Idle.add(() => { - status_callback(connected); + if (connected != this.connected) { + this.connected = connected; + status_callback(connected); + } return false; }, GLib.Priority.DEFAULT_IDLE); }