[gnome-break-timer] Clean up BreakType initialize methods



commit f29a958ec6060d3b2eab3144eb64656756711abe
Author: Dylan McCall <dylan dylanmccall ca>
Date:   Sun Nov 15 23:24:09 2020 -0800

    Clean up BreakType initialize methods

 src/daemon/BreakManager.vala                    | 11 +++++++----
 src/daemon/break/BreakType.vala                 | 23 +++++++++--------------
 src/daemon/microbreak/MicroBreakController.vala |  1 -
 src/daemon/microbreak/MicroBreakType.vala       | 24 +++++++-----------------
 src/daemon/restbreak/RestBreakType.vala         | 24 +++++++-----------------
 src/daemon/timerbreak/TimerBreakType.vala       | 24 ++++++++++--------------
 src/settings/Application.vala                   |  2 +-
 src/settings/BreakManager.vala                  |  6 +++++-
 src/settings/break/BreakType.vala               | 25 +++++++++++++------------
 src/settings/microbreak/MicroBreakType.vala     |  6 +++---
 src/settings/restbreak/RestBreakType.vala       |  6 +++---
 src/settings/timerbreak/TimerBreakType.vala     |  5 ++---
 src/settings/widgets/CircleCounter.vala         |  2 ++
 13 files changed, 69 insertions(+), 90 deletions(-)
---
diff --git a/src/daemon/BreakManager.vala b/src/daemon/BreakManager.vala
index 4885227..d6c1732 100644
--- a/src/daemon/BreakManager.vala
+++ b/src/daemon/BreakManager.vala
@@ -77,9 +77,8 @@ public class BreakManager : GLib.Object {
     }
 
     public void load_breaks (ActivityMonitor activity_monitor) {
-        this.add_break (new MicroBreakType (activity_monitor));
-        this.add_break (new RestBreakType (activity_monitor));
-
+        this.add_break (new MicroBreakType (activity_monitor, this.ui_manager));
+        this.add_break (new RestBreakType (activity_monitor, this.ui_manager));
         this.update_enabled_breaks ();
     }
 
@@ -97,7 +96,11 @@ public class BreakManager : GLib.Object {
 
     private void add_break (BreakType break_type) {
         this.breaks.set (break_type.id, break_type);
-        break_type.initialize (this.ui_manager);
+        try {
+            break_type.init (null);
+        } catch (GLib.Error error) {
+            GLib.warning ("Error initializing break type %s: %s", break_type.id, error.message);
+        }
     }
 
     private void update_enabled_breaks () {
diff --git a/src/daemon/break/BreakType.vala b/src/daemon/break/BreakType.vala
index f6743cd..8c3828b 100644
--- a/src/daemon/break/BreakType.vala
+++ b/src/daemon/break/BreakType.vala
@@ -17,25 +17,20 @@
 
 namespace BreakTimer.Daemon.Break {
 
-public abstract class BreakType : GLib.Object {
-    public string id;
-    public BreakController break_controller;
-    public BreakView break_view;
+public abstract class BreakType : GLib.Object, GLib.Initable {
+    public string id {get; private set; }
+    public BreakController break_controller { get; private set; }
+    public BreakView break_view { get; private set; }
 
-    protected GLib.Settings settings;
-
-    protected BreakType (string id, GLib.Settings settings) {
+    protected BreakType (string id, BreakController break_controller, BreakView break_view) {
         this.id = id;
-        this.settings = settings;
+        this.break_controller = break_controller;
+        this.break_view = break_view;
     }
 
-    public virtual void initialize (UIManager ui_manager) {
-        this.break_controller = this.get_break_controller ();
-        this.break_view = this.get_break_view (this.break_controller, ui_manager);
+    public virtual bool init (GLib.Cancellable? cancellable) throws GLib.Error {
+        return true;
     }
-
-    protected abstract BreakController get_break_controller ();
-    protected abstract BreakView get_break_view (BreakController controller, UIManager ui_manager);
 }
 
 }
diff --git a/src/daemon/microbreak/MicroBreakController.vala b/src/daemon/microbreak/MicroBreakController.vala
index c5805d6..c48ac8e 100644
--- a/src/daemon/microbreak/MicroBreakController.vala
+++ b/src/daemon/microbreak/MicroBreakController.vala
@@ -29,7 +29,6 @@ namespace BreakTimer.Daemon.MicroBreak {
 public class MicroBreakController : TimerBreakController {
     public MicroBreakController (ActivityMonitor activity_monitor) {
         base (activity_monitor, 0);
-
         this.delayed.connect (this.delayed_cb);
     }
 
diff --git a/src/daemon/microbreak/MicroBreakType.vala b/src/daemon/microbreak/MicroBreakType.vala
index 6109199..e7c85fc 100644
--- a/src/daemon/microbreak/MicroBreakType.vala
+++ b/src/daemon/microbreak/MicroBreakType.vala
@@ -22,25 +22,15 @@ using BreakTimer.Daemon.TimerBreak;
 namespace BreakTimer.Daemon.MicroBreak {
 
 public class MicroBreakType : TimerBreakType {
-    private ActivityMonitor activity_monitor;
+    public MicroBreakType (ActivityMonitor activity_monitor, UIManager ui_manager) {
+        var break_controller = new MicroBreakController (activity_monitor);
+        var break_view = new MicroBreakView (break_controller, ui_manager);
 
-    public MicroBreakType (ActivityMonitor activity_monitor) {
-        GLib.Settings settings = new GLib.Settings ("org.gnome.BreakTimer.microbreak");
-        base ("microbreak", settings);
-        this.activity_monitor = activity_monitor;
-    }
-
-    protected override BreakController get_break_controller () {
-        return new MicroBreakController (
-            this.activity_monitor
-        );
-    }
+        var settings = new GLib.Settings ("org.gnome.BreakTimer.microbreak");
+        settings.bind ("interval-seconds", break_controller, "interval", GLib.SettingsBindFlags.GET);
+        settings.bind ("duration-seconds", break_controller, "duration", GLib.SettingsBindFlags.GET);
 
-    protected override BreakView get_break_view (BreakController controller, UIManager ui_manager) {
-        return new MicroBreakView (
-            (MicroBreakController)controller,
-            ui_manager
-        );
+        base ("microbreak", break_controller, break_view);
     }
 }
 
diff --git a/src/daemon/restbreak/RestBreakType.vala b/src/daemon/restbreak/RestBreakType.vala
index 694b00a..eb30091 100644
--- a/src/daemon/restbreak/RestBreakType.vala
+++ b/src/daemon/restbreak/RestBreakType.vala
@@ -22,25 +22,15 @@ using BreakTimer.Daemon.TimerBreak;
 namespace BreakTimer.Daemon.RestBreak {
 
 public class RestBreakType : TimerBreakType {
-    private ActivityMonitor activity_monitor;
+    public RestBreakType (ActivityMonitor activity_monitor, UIManager ui_manager) {
+        var break_controller = new RestBreakController (activity_monitor);
+        var break_view = new RestBreakView (break_controller, ui_manager);
 
-    public RestBreakType (ActivityMonitor activity_monitor) {
-        GLib.Settings settings = new GLib.Settings ("org.gnome.BreakTimer.restbreak");
-        base ("restbreak", settings);
-        this.activity_monitor = activity_monitor;
-    }
-
-    protected override BreakController get_break_controller () {
-        return new RestBreakController (
-            this.activity_monitor
-        );
-    }
+        var settings = new GLib.Settings ("org.gnome.BreakTimer.restbreak");
+        settings.bind ("interval-seconds", break_controller, "interval", GLib.SettingsBindFlags.GET);
+        settings.bind ("duration-seconds", break_controller, "duration", GLib.SettingsBindFlags.GET);
 
-    protected override BreakView get_break_view (BreakController controller, UIManager ui_manager) {
-        return new RestBreakView (
-            (RestBreakController)controller,
-            ui_manager
-        );
+        base ("restbreak", break_controller, break_view);
     }
 }
 
diff --git a/src/daemon/timerbreak/TimerBreakType.vala b/src/daemon/timerbreak/TimerBreakType.vala
index c6aab25..c931bd4 100644
--- a/src/daemon/timerbreak/TimerBreakType.vala
+++ b/src/daemon/timerbreak/TimerBreakType.vala
@@ -20,34 +20,30 @@ using BreakTimer.Daemon.Break;
 namespace BreakTimer.Daemon.TimerBreak {
 
 public abstract class TimerBreakType : BreakType {
-    private TimerBreakDBusObject dbus_object;
-
-    protected TimerBreakType (string id, GLib.Settings settings) {
-        base (id, settings);
+    protected TimerBreakType (string id, BreakController break_controller, BreakView break_view) {
+        base (id, break_controller, break_view);
     }
 
-    protected override void initialize (UIManager ui_manager) {
-        base.initialize (ui_manager);
-
-        var timer_break_controller = (TimerBreakController)this.break_controller;
-        var timer_break_view = (TimerBreakView)this.break_view;
-
-        this.settings.bind ("interval-seconds", timer_break_controller, "interval", 
GLib.SettingsBindFlags.GET);
-        this.settings.bind ("duration-seconds", timer_break_controller, "duration", 
GLib.SettingsBindFlags.GET);
+    public override bool init (GLib.Cancellable? cancellable) throws GLib.Error {
+        var timer_break_controller = (TimerBreakController) this.break_controller;
+        var timer_break_view = (TimerBreakView) this.break_view;
 
-        this.dbus_object = new TimerBreakDBusObject (
+        var dbus_object = new TimerBreakDBusObject (
             timer_break_controller,
             timer_break_view
         );
+
         try {
             GLib.DBusConnection connection = GLib.Bus.get_sync (GLib.BusType.SESSION, null);
             connection.register_object (
                 Config.DAEMON_BREAK_OBJECT_BASE_PATH+this.id,
-                this.dbus_object
+                dbus_object
             );
         } catch (GLib.IOError error) {
             GLib.error ("Error registering break type on the session bus: %s", error.message);
         }
+
+        return base.init (cancellable);
     }
 }
 
diff --git a/src/settings/Application.vala b/src/settings/Application.vala
index bbd6e79..9e99600 100644
--- a/src/settings/Application.vala
+++ b/src/settings/Application.vala
@@ -110,7 +110,7 @@ public class Application : Gtk.Application {
     }
 
     private void delayed_start () {
-        // Delay up to 500ms waiting for break_manager to initialize
+        // Wait 500ms for break_manager to appear
         this.break_manager.break_status_available.connect (this.delayed_start_cb);
         GLib.Timeout.add (500, () => { delayed_start_cb (); return false; });
     }
diff --git a/src/settings/BreakManager.vala b/src/settings/BreakManager.vala
index f292987..f9bdbd8 100644
--- a/src/settings/BreakManager.vala
+++ b/src/settings/BreakManager.vala
@@ -147,7 +147,11 @@ public class BreakManager : GLib.Object {
     }
 
     private void add_break (BreakType break_type) {
-        break_type.initialize ();
+        try {
+            break_type.init (null);
+        } catch (GLib.Error error) {
+            GLib.warning ("Error initializing break type %s: %s", break_type.id, error.message);
+        }
         this.breaks.set (break_type.id, break_type);
         this.breaks_ordered.append (break_type);
         break_type.status_changed.connect (this.break_status_changed);
diff --git a/src/settings/break/BreakType.vala b/src/settings/break/BreakType.vala
index 43fd04f..50e9dea 100644
--- a/src/settings/break/BreakType.vala
+++ b/src/settings/break/BreakType.vala
@@ -19,13 +19,13 @@ using BreakTimer.Common;
 
 namespace BreakTimer.Settings.Break {
 
-public abstract class BreakType : GLib.Object {
+public abstract class BreakType : GLib.Object, GLib.Initable {
     public string id { get; private set; }
-    public BreakStatus? status;
+    public BreakStatus? status {get; private set; }
 
-    public BreakInfoWidget info_widget;
-    public BreakStatusWidget status_widget;
-    public BreakSettingsWidget settings_widget;
+    public BreakInfoWidget info_widget {get; private set; }
+    public BreakStatusWidget status_widget {get; private set; }
+    public BreakSettingsWidget settings_widget {get; private set; }
 
     public GLib.Settings settings;
 
@@ -36,10 +36,11 @@ public abstract class BreakType : GLib.Object {
 
     public signal void status_changed (BreakStatus? status);
 
-    public virtual void initialize () {
-        this.info_widget = this.get_info_widget ();
-        this.status_widget = this.get_status_widget ();
-        this.settings_widget = this.get_settings_widget ();
+    public virtual bool init (GLib.Cancellable? cancellable) throws GLib.Error {
+        this.info_widget = this.create_info_widget ();
+        this.status_widget = this.create_status_widget ();
+        this.settings_widget = this.create_settings_widget ();
+        return true;
     }
 
     protected void update_status (BreakStatus? status) {
@@ -47,9 +48,9 @@ public abstract class BreakType : GLib.Object {
         this.status_changed (status);
     }
 
-    protected abstract BreakInfoWidget get_info_widget ();
-    protected abstract BreakStatusWidget get_status_widget ();
-    protected abstract BreakSettingsWidget get_settings_widget ();
+    protected abstract BreakInfoWidget create_info_widget ();
+    protected abstract BreakStatusWidget create_status_widget ();
+    protected abstract BreakSettingsWidget create_settings_widget ();
 }
 
 }
diff --git a/src/settings/microbreak/MicroBreakType.vala b/src/settings/microbreak/MicroBreakType.vala
index 412b992..c8461ad 100644
--- a/src/settings/microbreak/MicroBreakType.vala
+++ b/src/settings/microbreak/MicroBreakType.vala
@@ -29,15 +29,15 @@ public class MicroBreakType : TimerBreakType {
         this.duration_options = { 15, 30, 45, 60 };
     }
 
-    protected override BreakInfoWidget get_info_widget () {
+    protected override BreakInfoWidget create_info_widget () {
         return new MicroBreakInfoWidget (this);
     }
 
-    protected override BreakStatusWidget get_status_widget () {
+    protected override BreakStatusWidget create_status_widget () {
         return new MicroBreakStatusWidget (this);
     }
 
-    protected override BreakSettingsWidget get_settings_widget () {
+    protected override BreakSettingsWidget create_settings_widget () {
         return new MicroBreakSettingsWidget (this);
     }
 }
diff --git a/src/settings/restbreak/RestBreakType.vala b/src/settings/restbreak/RestBreakType.vala
index 83f5f8f..51cae19 100644
--- a/src/settings/restbreak/RestBreakType.vala
+++ b/src/settings/restbreak/RestBreakType.vala
@@ -29,15 +29,15 @@ public class RestBreakType : TimerBreakType {
         this.duration_options = { 240, 300, 360, 480, 600 };
     }
 
-    protected override BreakInfoWidget get_info_widget () {
+    protected override BreakInfoWidget create_info_widget () {
         return new RestBreakInfoWidget (this);
     }
 
-    protected override BreakStatusWidget get_status_widget () {
+    protected override BreakStatusWidget create_status_widget () {
         return new RestBreakStatusWidget (this);
     }
 
-    protected override BreakSettingsWidget get_settings_widget () {
+    protected override BreakSettingsWidget create_settings_widget () {
         return new RestBreakSettingsWidget (this);
     }
 }
diff --git a/src/settings/timerbreak/TimerBreakType.vala b/src/settings/timerbreak/TimerBreakType.vala
index 96fcd42..4913c0f 100644
--- a/src/settings/timerbreak/TimerBreakType.vala
+++ b/src/settings/timerbreak/TimerBreakType.vala
@@ -37,9 +37,7 @@ public abstract class TimerBreakType : BreakType {
 
     public signal void timer_status_changed (TimerBreakStatus? status);
 
-    public override void initialize () {
-        base.initialize ();
-
+    public override bool init (GLib.Cancellable? cancellable) throws GLib.Error {
         GLib.Bus.watch_name (
             GLib.BusType.SESSION,
             Config.DAEMON_APPLICATION_ID,
@@ -47,6 +45,7 @@ public abstract class TimerBreakType : BreakType {
             this.breakdaemon_appeared,
             this.breakdaemon_disappeared
         );
+        return base.init (cancellable);
     }
 
     protected new void update_status (TimerBreakStatus? status) {
diff --git a/src/settings/widgets/CircleCounter.vala b/src/settings/widgets/CircleCounter.vala
index 116a72f..73fa8ec 100644
--- a/src/settings/widgets/CircleCounter.vala
+++ b/src/settings/widgets/CircleCounter.vala
@@ -58,6 +58,8 @@ public class CircleCounter : Gtk.Widget {
         });
     }
 
+    // TODO: Animate between states <3
+
     public override bool draw (Cairo.Context cr) {
         Gtk.StyleContext style_context = this.get_style_context ();
         Gtk.StateFlags state = this.get_state_flags ();


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