[gnome-builder] flatpak: Only get the list of flatpak installations once



commit 35bbe5da3b6dfc690879c7feead4d926ee3e9e2b
Author: Matthew Leeds <mleeds redhat com>
Date:   Sun Apr 23 12:45:41 2017 -0500

    flatpak: Only get the list of flatpak installations once
    
    Rather than looking for flatpak installations in both
    GbpFlatpakApplicationAddin and GbpFlatpakPreferencesAddin, access the
    former list from the latter to reduce duplication of effort. This also
    means the preferences pane will show runtimes from multiple system
    installations if they exist.

 plugins/flatpak/gbp-flatpak-application-addin.c |   27 +++++++++++++++++++++++
 plugins/flatpak/gbp-flatpak-application-addin.h |    1 +
 plugins/flatpak/gbp-flatpak-preferences-addin.c |   22 +++++++-----------
 3 files changed, 37 insertions(+), 13 deletions(-)
---
diff --git a/plugins/flatpak/gbp-flatpak-application-addin.c b/plugins/flatpak/gbp-flatpak-application-addin.c
index a684171..c8a554a 100644
--- a/plugins/flatpak/gbp-flatpak-application-addin.c
+++ b/plugins/flatpak/gbp-flatpak-application-addin.c
@@ -366,6 +366,33 @@ gbp_flatpak_application_addin_get_runtimes (GbpFlatpakApplicationAddin *self)
   IDE_RETURN (ret);
 }
 
+/**
+ * gbp_flatpak_application_addin_get_installations:
+ *
+ * Gets an array of flatpak installations on the system.
+ *
+ * Returns: (transfer container) (element-type Flatpak.Installation): Array of installations
+ */
+GPtrArray *
+gbp_flatpak_application_addin_get_installations (GbpFlatpakApplicationAddin *self)
+{
+  GPtrArray *ret;
+
+  IDE_ENTRY;
+
+  g_assert (GBP_IS_FLATPAK_APPLICATION_ADDIN (self));
+
+  ret = g_ptr_array_new_with_free_func (g_object_unref);
+
+  for (guint i = 0; i < self->installations->len; i++)
+    {
+      InstallInfo *info = g_ptr_array_index (self->installations, i);
+      g_ptr_array_add (ret, g_object_ref (info->installation));
+    }
+
+  IDE_RETURN (ret);
+}
+
 GbpFlatpakApplicationAddin *
 gbp_flatpak_application_addin_get_default (void)
 {
diff --git a/plugins/flatpak/gbp-flatpak-application-addin.h b/plugins/flatpak/gbp-flatpak-application-addin.h
index d429945..bfc682e 100644
--- a/plugins/flatpak/gbp-flatpak-application-addin.h
+++ b/plugins/flatpak/gbp-flatpak-application-addin.h
@@ -30,6 +30,7 @@ G_DECLARE_FINAL_TYPE (GbpFlatpakApplicationAddin, gbp_flatpak_application_addin,
 
 GbpFlatpakApplicationAddin *gbp_flatpak_application_addin_get_default            (void);
 GPtrArray                  *gbp_flatpak_application_addin_get_runtimes           (GbpFlatpakApplicationAddin 
 *self);
+GPtrArray                  *gbp_flatpak_application_addin_get_installations      (GbpFlatpakApplicationAddin 
 *self);
 gboolean                    gbp_flatpak_application_addin_has_runtime            (GbpFlatpakApplicationAddin 
 *self,
                                                                                   const gchar                
 *id,
                                                                                   const gchar                
 *arch,
diff --git a/plugins/flatpak/gbp-flatpak-preferences-addin.c b/plugins/flatpak/gbp-flatpak-preferences-addin.c
index dd74053..1473c61 100644
--- a/plugins/flatpak/gbp-flatpak-preferences-addin.c
+++ b/plugins/flatpak/gbp-flatpak-preferences-addin.c
@@ -197,11 +197,9 @@ gbp_flatpak_preferences_addin_reload_worker (GTask        *task,
                                              GCancellable *cancellable)
 {
   GbpFlatpakPreferencesAddin *self = (GbpFlatpakPreferencesAddin *)source_object;
-  g_autoptr(FlatpakInstallation) system = NULL;
-  g_autoptr(FlatpakInstallation) user = NULL;
-  g_autoptr(GFile) file = NULL;
+  g_autoptr(GPtrArray) installations = NULL;
   g_autoptr(GPtrArray) runtimes = NULL;
-  g_autofree gchar *path = NULL;
+  GbpFlatpakApplicationAddin *app_addin;
 
   IDE_ENTRY;
 
@@ -210,15 +208,13 @@ gbp_flatpak_preferences_addin_reload_worker (GTask        *task,
 
   runtimes = g_ptr_array_new_with_free_func (g_object_unref);
 
-  path = g_build_filename (g_get_home_dir (), ".local", "share", "flatpak", NULL);
-  file = g_file_new_for_path (path);
-  user = flatpak_installation_new_for_path (file, TRUE, NULL, NULL);
-  if (user != NULL)
-    populate_runtimes (self, user, runtimes);
-
-  system = flatpak_installation_new_system (NULL, NULL);
-  if (system != NULL)
-    populate_runtimes (self, system, runtimes);
+  app_addin = gbp_flatpak_application_addin_get_default ();
+  installations = gbp_flatpak_application_addin_get_installations (app_addin);
+  for (guint i = 0; i < installations->len; i++)
+    {
+      FlatpakInstallation *installation = g_ptr_array_index (installations, i);
+      populate_runtimes (self, installation, runtimes);
+    }
 
   g_ptr_array_sort (runtimes, compare_refs);
 


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