[gnome-builder] flatpak: resolve extension before finding FlatpakRef



commit 2a26d13af9aac44f8199c11b39a10c8ab02d904e
Author: Christian Hergert <chergert redhat com>
Date:   Fri Apr 30 15:53:07 2021 -0700

    flatpak: resolve extension before finding FlatpakRef
    
    This still needs further work to remove the bits that use flatpak from
    the application UI itself, but this should now resolve the correct
    extension Ref when looking for binaries.

 src/plugins/flatpak/gbp-flatpak-manifest.c | 25 +++++++++++++++++--------
 1 file changed, 17 insertions(+), 8 deletions(-)
---
diff --git a/src/plugins/flatpak/gbp-flatpak-manifest.c b/src/plugins/flatpak/gbp-flatpak-manifest.c
index 26c0e186f..4ec0a325e 100644
--- a/src/plugins/flatpak/gbp-flatpak-manifest.c
+++ b/src/plugins/flatpak/gbp-flatpak-manifest.c
@@ -25,10 +25,13 @@
 #include <json-glib/json-glib.h>
 
 #include "gbp-flatpak-application-addin.h"
+#include "gbp-flatpak-client.h"
 #include "gbp-flatpak-manifest.h"
 #include "gbp-flatpak-runtime.h"
 #include "gbp-flatpak-util.h"
 
+#include "ipc-flatpak-service.h"
+
 struct _GbpFlatpakManifest
 {
   IdeConfig  parent_instance;
@@ -551,21 +554,27 @@ find_extension (GbpFlatpakManifest *self,
                 const gchar        *name)
 {
   g_autoptr(FlatpakInstalledRef) ref = NULL;
+  g_autofree char *resolved = NULL;
   GbpFlatpakApplicationAddin *addin;
   GbpFlatpakRuntime *ret = NULL;
+  IpcFlatpakService *service;
+  GbpFlatpakClient *client;
+  IdeContext *context;
 
   g_assert (GBP_IS_FLATPAK_MANIFEST (self));
   g_assert (name != NULL);
 
-  /* TODO: This doesn't allow pinning to the right version
-   * of extension because we need to know the right parent
-   * version of the extension.
-   */
-  addin = gbp_flatpak_application_addin_get_default ();
-  ref = gbp_flatpak_application_addin_find_extension (addin, self->sdk, name);
+  context = ide_object_get_context (IDE_OBJECT (self));
 
-  if (ref != NULL)
-    ret = gbp_flatpak_runtime_new (ref, TRUE, NULL, NULL);
+  if ((client = gbp_flatpak_client_from_context (context)) &&
+      (service = gbp_flatpak_client_get_service (client, NULL, NULL)) &&
+      ipc_flatpak_service_call_resolve_extension_sync (service, self->sdk, name, &resolved, NULL, NULL))
+    {
+      addin = gbp_flatpak_application_addin_get_default ();
+      ref = gbp_flatpak_application_addin_find_extension (addin, self->sdk, name);
+      if (ref != NULL)
+        ret = gbp_flatpak_runtime_new (ref, TRUE, NULL, NULL);
+    }
 
   return IDE_RUNTIME (g_steal_pointer (&ret));
 }


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