[gnome-break-timer] Clean up BreakManager init, remove uses of libgee



commit 176c1c7266ecabe81639c27f6bbeedff1a3fc73b
Author: Dylan McCall <dylan dylanmccall ca>
Date:   Mon Nov 16 09:19:45 2020 -0800

    Clean up BreakManager init, remove uses of libgee
    
    It seems a bit unnecessary pulling in libgee for a two-item list.

 src/daemon/Application.vala               | 14 +++++-
 src/daemon/BreakManager.vala              | 78 +++++++++++++++++--------------
 src/daemon/BreakManagerDBusObject.vala    | 12 +++--
 src/daemon/SessionStatus.vala             |  1 -
 src/daemon/UIManager.vala                 | 13 ++++--
 src/daemon/timerbreak/TimerBreakType.vala | 25 ++++++----
 6 files changed, 88 insertions(+), 55 deletions(-)
---
diff --git a/src/daemon/Application.vala b/src/daemon/Application.vala
index d061760..8d5ff56 100644
--- a/src/daemon/Application.vala
+++ b/src/daemon/Application.vala
@@ -74,8 +74,18 @@ public class Application : Gtk.Application {
         this.activity_monitor = new ActivityMonitor (session_status, activity_monitor_backend);
 
         this.ui_manager = new UIManager (this, session_status);
-        this.break_manager = new BreakManager (ui_manager);
-        this.break_manager.load_breaks (activity_monitor);
+        try {
+            this.ui_manager.init ();
+        } catch (GLib.Error error) {
+            GLib.error("Error initializing ui: %s", error.message);
+        }
+
+        this.break_manager = new BreakManager (ui_manager, activity_monitor);
+        try {
+            this.break_manager.init ();
+        } catch (GLib.Error error) {
+            GLib.error("Error initializing ui: %s", error.message);
+        }
 
         this.restore_state ();
 
diff --git a/src/daemon/BreakManager.vala b/src/daemon/BreakManager.vala
index d6c1732..5f20ce0 100644
--- a/src/daemon/BreakManager.vala
+++ b/src/daemon/BreakManager.vala
@@ -22,40 +22,65 @@ using BreakTimer.Daemon.RestBreak;
 
 namespace BreakTimer.Daemon {
 
-public class BreakManager : GLib.Object {
-    private UIManager ui_manager;
-
-    private Gee.Map<string, BreakType> breaks;
-    private BreakManagerDBusObject dbus_object;
-
+public class BreakManager : GLib.Object, GLib.Initable {
     private GLib.Settings settings;
+    private GLib.HashTable<string, BreakType> breaks;
     public bool master_enabled { get; set; }
     public string[] selected_break_ids { get; set; }
 
-    public BreakManager (UIManager ui_manager) {
-        this.ui_manager = ui_manager;
-
-        this.breaks = new Gee.HashMap<string, BreakType> ();
+    public BreakManager (UIManager ui_manager, ActivityMonitor activity_monitor) {
         this.settings = new GLib.Settings ("org.gnome.BreakTimer");
 
+        this.breaks = new GLib.HashTable<string, BreakType> (str_hash, str_equal);
+        this.breaks.set(
+            "microbreak",
+            new MicroBreakType (activity_monitor, ui_manager)
+        );
+        this.breaks.set(
+            "restbreak",
+            new RestBreakType (activity_monitor, ui_manager)
+        );
+
         this.settings.bind ("enabled", this, "master-enabled", GLib.SettingsBindFlags.DEFAULT);
         this.settings.bind ("selected-breaks", this, "selected-break-ids", GLib.SettingsBindFlags.DEFAULT);
+
         this.notify["master-enabled"].connect (this.update_enabled_breaks);
         this.notify["selected-break-ids"].connect (this.update_enabled_breaks);
+        this.update_enabled_breaks ();
+    }
+
+    public bool init (GLib.Cancellable? cancellable) throws GLib.Error {
+        GLib.DBusConnection connection;
 
-        this.dbus_object = new BreakManagerDBusObject (this);
         try {
-            GLib.DBusConnection connection = GLib.Bus.get_sync (
+            connection = GLib.Bus.get_sync (
                 GLib.BusType.SESSION,
                 null
             );
+        } catch (GLib.IOError error) {
+            GLib.warning ("Error connecting to the session bus: %s", error.message);
+            throw error;
+        }
+
+        try {
             connection.register_object (
                 Config.DAEMON_OBJECT_PATH,
-                this.dbus_object
+                new BreakManagerDBusObject (this)
             );
         } catch (GLib.IOError error) {
-            GLib.error ("Error registering daemon on the session bus: %s", error.message);
+            GLib.warning ("Error registering daemon on the session bus: %s", error.message);
+            throw error;
         }
+
+        foreach (BreakType break_type in this.all_breaks ()) {
+            try {
+                break_type.init (cancellable);
+            } catch (GLib.Error error) {
+                GLib.warning ("Error initializing break type %s: %s", break_type.id, error.message);
+            }
+        }
+
+        return true;
     }
 
     public Json.Object serialize () {
@@ -76,31 +101,16 @@ public class BreakManager : GLib.Object {
         }
     }
 
-    public void load_breaks (ActivityMonitor 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 ();
-    }
-
-    public Gee.Set<string> all_break_ids () {
-        return this.breaks.keys;
+    public GLib.List<unowned string> all_break_ids () {
+        return this.breaks.get_keys ();
     }
 
-    public Gee.Collection<BreakType> all_breaks () {
-        return this.breaks.values;
+    public GLib.List<unowned BreakType> all_breaks () {
+        return this.breaks.get_values ();
     }
 
     public BreakType? get_break_type_for_name (string name) {
-        return this.breaks.get (name);
-    }
-
-    private void add_break (BreakType break_type) {
-        this.breaks.set (break_type.id, break_type);
-        try {
-            break_type.init (null);
-        } catch (GLib.Error error) {
-            GLib.warning ("Error initializing break type %s: %s", break_type.id, error.message);
-        }
+        return this.breaks.lookup (name);
     }
 
     private void update_enabled_breaks () {
diff --git a/src/daemon/BreakManagerDBusObject.vala b/src/daemon/BreakManagerDBusObject.vala
index 8af4ae9..fbc3f66 100644
--- a/src/daemon/BreakManagerDBusObject.vala
+++ b/src/daemon/BreakManagerDBusObject.vala
@@ -47,16 +47,20 @@ public class BreakManagerDBusObject : GLib.Object, IBreakTimer {
     }
 
     public string[] get_break_ids () throws GLib.DBusError, GLib.IOError {
-        return this.break_manager.all_break_ids ().to_array ();
+        var break_ids = new GLib.Array<string> ();
+        foreach (unowned string break_id in this.break_manager.all_break_ids ()) {
+            break_ids.append_val (break_id);
+        }
+        return break_ids.steal ();
     }
 
     public string[] get_status_messages () throws GLib.DBusError, GLib.IOError {
-        var messages = new Gee.ArrayList<string> ();
+        var messages = new GLib.Array<string> ();
         foreach (BreakType break_type in break_manager.all_breaks ()) {
             string status_message = break_type.break_view.get_status_message ();
-            messages.add ("%s:\t%s".printf (break_type.id, status_message));
+            messages.append_val ("%s:\t%s".printf (break_type.id, status_message));
         }
-        return messages.to_array ();
+        return messages.steal ();
     }
 
     public void activate_break (string break_name) throws GLib.DBusError, GLib.IOError {
diff --git a/src/daemon/SessionStatus.vala b/src/daemon/SessionStatus.vala
index 19f6318..b2f8cce 100644
--- a/src/daemon/SessionStatus.vala
+++ b/src/daemon/SessionStatus.vala
@@ -30,7 +30,6 @@ public class SessionStatus : GLib.Object, ISessionStatus {
 
     public SessionStatus (Gtk.Application application) {
         this.application = application;
-
         GLib.Bus.watch_name (
             GLib.BusType.SESSION,
             "org.gnome.ScreenSaver",
diff --git a/src/daemon/UIManager.vala b/src/daemon/UIManager.vala
index bd69126..7c4db0e 100644
--- a/src/daemon/UIManager.vala
+++ b/src/daemon/UIManager.vala
@@ -27,7 +27,7 @@ namespace BreakTimer.Daemon {
  * sure only one break is affecting the UI at a time. This class also tries to
  * keep UI events nicely spaced so they don't generate excessive noise.
  */
-public class UIManager : SimpleFocusManager {
+public class UIManager : SimpleFocusManager, GLib.Initable {
     private weak Gtk.Application application;
     private ISessionStatus session_status;
 
@@ -42,16 +42,19 @@ public class UIManager : SimpleFocusManager {
         this.application = application;
         this.session_status = session_status;
 
+        this.session_status.unlocked.connect (this.hide_lock_notification_cb);
+        this.notify_capabilities = Notify.get_server_caps ();
+    }
+
+    public bool init (GLib.Cancellable? cancellable) throws GLib.Error {
         try {
             this.gsound = new GSound.Context ();
-            this.gsound.init ();
+            this.gsound.init (cancellable);
         } catch (GLib.Error error) {
             GLib.warning ("Error initializing gsound: %s", error.message);
             this.gsound = null;
         }
-
-        this.session_status.unlocked.connect (this.hide_lock_notification_cb);
-        this.notify_capabilities = Notify.get_server_caps ();
+        return true;
     }
 
     public bool notifications_can_do (string capability) {
diff --git a/src/daemon/timerbreak/TimerBreakType.vala b/src/daemon/timerbreak/TimerBreakType.vala
index c931bd4..ec5287c 100644
--- a/src/daemon/timerbreak/TimerBreakType.vala
+++ b/src/daemon/timerbreak/TimerBreakType.vala
@@ -25,22 +25,29 @@ public abstract class TimerBreakType : BreakType {
     }
 
     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;
+        GLib.DBusConnection connection;
 
-        var dbus_object = new TimerBreakDBusObject (
-            timer_break_controller,
-            timer_break_view
-        );
+        try {
+            connection = GLib.Bus.get_sync (
+                GLib.BusType.SESSION,
+                null
+            );
+        } catch (GLib.IOError error) {
+            GLib.warning ("Error connecting to the session bus: %s", error.message);
+            throw error;
+        }
 
         try {
-            GLib.DBusConnection connection = GLib.Bus.get_sync (GLib.BusType.SESSION, null);
             connection.register_object (
                 Config.DAEMON_BREAK_OBJECT_BASE_PATH+this.id,
-                dbus_object
+                new TimerBreakDBusObject (
+                    (TimerBreakController) this.break_controller,
+                    (TimerBreakView) this.break_view
+                )
             );
         } catch (GLib.IOError error) {
-            GLib.error ("Error registering break type on the session bus: %s", error.message);
+            GLib.warning ("Error registering break type on the session bus: %s", error.message);
+            throw error;
         }
 
         return base.init (cancellable);


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