[gnome-builder/wip/chergert/flatpak-repo: 6/29] flatpak: add IpcFlatpakRepo abstraction




commit 7454df6042b5c8c8b49f8a9f0b14270ba3e07d64
Author: Christian Hergert <chergert redhat com>
Date:   Mon Aug 23 15:05:15 2021 -0700

    flatpak: add IpcFlatpakRepo abstraction
    
    This helps manage our private repository so we can support flatpak,
    gnome-nightly, and flatpak-beta repositories without perturbing the
    user installation.

 .../flatpak/daemon/flathub-beta.flatpakrepo        |   8 +
 src/plugins/flatpak/daemon/flathub.flatpakrepo     |   8 +
 src/plugins/flatpak/daemon/gnome-builder-flatpak.c |   4 +
 .../flatpak/daemon/gnome-nightly.flatpakrepo       |   7 +
 src/plugins/flatpak/daemon/ipc-flatpak-repo.c      | 211 +++++++++++++++++++++
 .../ipc-flatpak-repo.h}                            |  16 +-
 .../flatpak/daemon/ipc-flatpak-service-impl.c      |  15 ++
 .../flatpak/daemon/ipc-flatpak.gresource.xml       |   8 +
 src/plugins/flatpak/daemon/meson.build             |   8 +
 .../daemon/org.gnome.Builder.Flatpak.Service.xml   |   4 +
 src/plugins/flatpak/flatpak-plugin.c               |   4 -
 .../flatpak/gbp-flatpak-application-addin.c        | 127 -------------
 src/plugins/flatpak/meson.build                    |   1 -
 13 files changed, 283 insertions(+), 138 deletions(-)
---
diff --git a/src/plugins/flatpak/daemon/flathub-beta.flatpakrepo 
b/src/plugins/flatpak/daemon/flathub-beta.flatpakrepo
new file mode 100644
index 000000000..340cb529a
--- /dev/null
+++ b/src/plugins/flatpak/daemon/flathub-beta.flatpakrepo
@@ -0,0 +1,8 @@
+[Flatpak Repo]
+Title=Flathub Beta
+Url=https://dl.flathub.org/beta-repo/
+Homepage=https://flathub.org/
+Comment=Beta builds of Flatpak applications
+Description=Beta builds of Flatpak applications
+Icon=https://dl.flathub.org/repo/logo.svg
+GPGKey=mQINBFlD2sABEADsiUZUOYBg1UdDaWkEdJYkTSZD68214m8Q1fbrP5AptaUfCl8KYKFMNoAJRBXn9FbE6q6VBzghHXj/rSnA8WPnkbaEWR7xltOqzB1yHpCQ1l8xSfH5N02DMUBSRtD/rOYsBKbaJcOgW0K21sX+BecMY/AI2yADvCJEjhVKrjR9yfRX+NQEhDcbXUFRGt9ZT+TI5yT4xcwbvvTu7aFUR/dH7+wjrQ7lzoGlZGFFrQXSs2WI0WaYHWDeCwymtohXryF8lcWQkhH8UhfNJVBJFgCY8Q6UHkZG0FxMu8xnIDBMjBmSZKwKQn0nwzwM2afskZEnmNPYDI8nuNsSZBZSAw+ThhkdCZHZZRwzmjzyRuLLVFpOj3XryXwZcSefNMPDkZAuWWzPYjxS80cm2hG1WfqrG0Gl8+iX69cbQchb7gbEb0RtqNskTo9DDmO0bNKNnMbzmIJ3/rTbSahKSwtewklqSP/01o0WKZiy+n/RAkUKOFBprjJtWOZkc8SPXV/rnoS2dWsJWQZhuPPtv3tefdDiEyp7ePrfgfKxuHpZES0IZRiFI4J/nAUP5bix+srcIxOVqAam68CbAlPvWTivRUMRVbKjJiGXIOJ78wAMjqPg3QIC0GQ0EPAWwAOzzpdgbnG7TCQetaVV8rSYCuirlPYN+bJIwBtkOC9SWLoPMVZTwQARAQABtC5GbGF0aHViIFJlcG8gU2lnbmluZyBLZXkgPGZsYXRodWJAZmxhdGh1Yi5vcmc+iQJUBBMBCAA+FiEEblwF2XnHba+TwIE1QYTdTZB6fK4FAllD2sACGwMFCRLMAwAFCwkIBwIGFQgJCgsCBBYCAwECHgECF4AACgkQQYTdTZB6fK5RJQ/+Ptd4sWxaiAW91FFk7+wmYOkEe1NY2UDNJjEEz34PNP/1RoxveHDt43kYJQ23OWaPJuZAbu+fWtjRYcMBzOsMCaFcRSHFiDIC9aTp4ux/mo
 
+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
diff --git a/src/plugins/flatpak/daemon/flathub.flatpakrepo b/src/plugins/flatpak/daemon/flathub.flatpakrepo
new file mode 100644
index 000000000..99c4786c4
--- /dev/null
+++ b/src/plugins/flatpak/daemon/flathub.flatpakrepo
@@ -0,0 +1,8 @@
+[Flatpak Repo]
+Title=Flathub
+Url=https://dl.flathub.org/repo/
+Homepage=https://flathub.org/
+Comment=Central repository of Flatpak applications
+Description=Central repository of Flatpak applications
+Icon=https://dl.flathub.org/repo/logo.svg
+GPGKey=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
 
+IEeyarYt/oyKb5t5lta6xaAqg7rwt65jW5/aQjnS4h7eFZ+dAKta7Y/fljNrOznUp81/SMcx4QA5G2Pw0hs4Xrxg59oONOTFGBgA6FF8WQghrpR7SnEe0FSEOVsAjwQ13Cfkfa7b70omXSWp7GWfUzgBKyoWxKTqzMN3RQHjjhPJcsQnrqH5enUu4Pcb2LcMFpzimHnUgb9ft72DP5wxfzHGAWOUiUXHbAekfq5iFks8cha/RST6wkxG3Rf44Zn09aOxh1btMcGL+5xb1G0BuCQnA0fP/kDYIPwh9z22EqwRQOspIcvGeLVkFeIfubxpcMdOfQqQnZtHMCabV5Q/Rk9K1ZGc8M2hlg8gHbXMFch2xJ0Wu72eXbA/UY5MskEeBgawTQnQOK/vNm7t0AJMpWK26Qg6178UmRghmeZDj9uNRc3EI1nSbgvmGlpDmCxaAGqaGL1zW4KPW5yN25/qeqXcgCvUjZLI9PNq3Kvizp1lUrbx7heRiSoazCucvHQ1VHUzcPVLUKKTkoTP8okThnRRRsBcZ1+jI4yMWIDLOCT7IW3FePr+3xyuy5eEo9a25Ag0EWUPa7AEQALT/CmSyZ8LWlRYQZKYw417p7Z2hxqd6TjwkwM3IQ1irumkWcTZBZIbBgrSOg6CcXD2oWydCQHWi9qaxhuhEl2bJL5LskmBcMxVdQeD0LLHd8QUnbnnIby8ocvWN1alPfvJFjCUTrmD22U1ycOzRw2lIe4kiQONbOZtdWrVImQQSndjFlisitbmlWHvHm2lOOYy8+GJB7YffVV193hmnBSJffCy4bvkuLxsI+n1DhOzc7MPV3z6HGk4HiEcF0yyt9tCYhpsxHFdBoq2h771HfAcS0s98EVAqYMFnf9em+4cnYpdI6mhIfS1FQiKl6DBAYA8tT3ggla00DurPo0JwX/zN+PaO5h/6O9aCZwV7G6rbkgMuqMergXaf8oP38gr0z+MqWnkfM63Bodq68GP4l4h
 
d02BoFBbDf38TMuGQB14+twJMdfbAxo2MbgluvQgfwHfZ2ca6gyEY+9s/YD1gugLjV+S6CB51WkFNe1z4tAPgJZNxUcKCbeaHNbthl8Hks/pY9RCEseX/EdfzF18epbSjJMPh4DPQXbUoFwmyuYcoBOPmvZHNl9hK7B/1RP8w1ZrXk8qdupC0SNbafX7270B7lMMVImzZetGsM9ypXJ6llhp3FwW09iseNyGJGPsr/dvTMGDXqOPfU/9SAS1LSTY4K9PbRtdrBE318YX8mIk5ABEBAAGJBHIEGAEIACYWIQRuXAXZecdtr5PAgTVBhN1NkHp8rgUCWUPa7AIbAgUJEswDAAJACRBBhN1NkHp8rsF0IAQZAQgAHRYhBFSmzd2JGfsgQgDYrFYnAunj7X7oBQJZQ9rsAAoJEFYnAunj7X7oR6AP/0KYmiAFeqx14Z43/6s2gt3VhxlSd8bmcVV7oJFbMhdHBIeWBp2BvsUf00I0Zl14ZkwCKfLwbbORC2eIxvzJ+QWjGfPhDmS4XUSmhlXxWnYEveSek5Tde+fmu6lqKM8CHg5BNx4GWIX/vdLi1wWJZyhrUwwICAxkuhKxuP2Z1An48930eslTD2GGcjByc27+9cIZjHKa07I/aLffo04V+oMT9/tgzoquzgpVV4jwekADo2MJjhkkPveSNI420bgT+Q7Fi1l0X1aFUniBvQMsaBa27PngWm6xE2ZYvh7nWCdd5g0c0eLIHxWwzV1lZ4Ryx4ITO/VL25ItECcjhTRdYa64sA62MYSaB0x3eR+SihpgP3wSNPFu3MJo6FKTFdi4CBAEmpWHFW7FcRmd+cQXeFrHLN3iNVWryy0HK/CUEJmiZEmpNiXecl4vPIIuyF0zgSCztQtKoMr+injpmQGC/rF/ELBVZTUSLNB350S0Ztvw0FKWDAJSxFmoxt3xycqvvt47rxTrhi78nkk6jATKGyvP55sO+K7Q7Wh0DXA69hvPrYW2eu8j
 
GCdVGxi6HX7L1qcfEd0378S71dZ3g9o6KKl1OsDWWQ6MJ6FGBZedl/ibRfs8p5+sbCX3lQSjEFy3rx6n0rUrXx8U2qb+RCLzJlmC5MNBOTDJwHPcX6gKsUcXZrEQALmRHoo3SrewO41RCr+5nUlqiqV3AohBMhnQbGzyHf2+drutIaoh7Rj80XRh2bkkuPLwlNPf+bTXwNVGse4bej7B3oV6Ae1N7lTNVF4Qh+1OowtGjmfJPWo0z1s6HFJVxoIof9z58Msvgao0zrKGqaMWaNQ6LUeC9g9Aj/9Uqjbo8X54aLiYs8Z1WNc06jKP+gv8AWLtv6CR+l2kLez1YMDucjm7v6iuCMVAmZdmxhg5I/X2+OM3vBsqPDdQpr2TPDLX3rCrSBiS0gOQ6DwN5N5QeTkxmY/7QO8bgLo/Wzu1iilH4vMKW6LBKCaRx5UEJxKpL4wkgITsYKneIt3NTHo5EOuaYk+y2+Dvt6EQFiuMsdbfUjs3seIHsghX/cbPJa4YUqZAL8C4OtVHaijwGo0ymt9MWvS9yNKMyT0JhN2/BdeOVWrHk7wXXJn/ZjpXilicXKPx4udCF76meE+6N2u/T+RYZ7fP1QMEtNZNmYDOfA6sViuPDfQSHLNbauJBo/n1sRYAsL5mcG22UDchJrlKvmK3EOADCQg+myrm8006LltubNB4wWNzHDJ0Ls2JGzQZCd/xGyVmUiidCBUrD537WdknOYE4FD7P0cHaM9brKJ/M8LkEH0zUlo73bY4XagbnCqve6PvQb5G2Z55qhWphd6f4B6DGed86zJEa/RhS
diff --git a/src/plugins/flatpak/daemon/gnome-builder-flatpak.c 
b/src/plugins/flatpak/daemon/gnome-builder-flatpak.c
index 9321adf18..1f5f3ccc1 100644
--- a/src/plugins/flatpak/daemon/gnome-builder-flatpak.c
+++ b/src/plugins/flatpak/daemon/gnome-builder-flatpak.c
@@ -34,6 +34,7 @@
 #include <sys/procctl.h>
 #endif
 
+#include "ipc-flatpak-repo.h"
 #include "ipc-flatpak-service.h"
 #include "ipc-flatpak-service-impl.h"
 
@@ -110,6 +111,9 @@ main (gint argc,
   g_dbus_connection_set_exit_on_close (connection, FALSE);
   g_signal_connect_swapped (connection, "closed", G_CALLBACK (g_main_loop_quit), main_loop);
 
+  /* Setup private flatpak installation immediately */
+  (void)ipc_flatpak_repo_get_default ();
+
   service = ipc_flatpak_service_impl_new ();
 
   if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (service),
diff --git a/src/plugins/flatpak/daemon/gnome-nightly.flatpakrepo 
b/src/plugins/flatpak/daemon/gnome-nightly.flatpakrepo
new file mode 100644
index 000000000..f91b62e8c
--- /dev/null
+++ b/src/plugins/flatpak/daemon/gnome-nightly.flatpakrepo
@@ -0,0 +1,7 @@
+[Flatpak Repo]
+Title=GNOME Nightly Builds Repository
+Url=https://nightly.gnome.org/repo/
+Homepage=https://gnome.org/
+Description=The latest GNOME flatpak runtimes/apps directly from the gitlab CI. This is highly unstable 
stuff aimed at GNOME developers/designers to test 
+GPGKey=mQENBFYSUcEBCAC50sRVDy40A0mF/L877gPpjP2GVunQ+VGd5NY0MPwlSxG2TxM0VwfAjHZvDcWxKV0842bVfAXWzmbxMiVRZKFJMAsjWopsuvFCg14h4ysBJYL0T4gmaTOn49d8WUpyJzN1MeS8GEOVvNUa+w/q+ScW8/cICerzkMSiiQzg86Ph0YTvpsFy/feSPZk5VfY28Nw5204DO6z06+i4HuHm7wu8uSPu3TNrQwSPgqF+CeY1nHnw/LZIY6dRykkWOsOnfyPSd0EK8QYJD6q6i1JOctXutG/gR4GvbprgDagtJQpQmHHaGnoe0qJHOD0TOd+7mEiel0AfyPMwkzcobi5LwfwjABEBAAG0Kk5pZ2h0bHkgYXBwIGF1dG9idWlsZGVyIDxhbGV4bEByZWRoYXQuY29tPokBNwQTAQgAIQUCVhJRwQIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRBqfF1EghcOPVqiCACeD67ypYuBj+fx1Tfm3b9zW7E3g2FI1gLcK1KYva89pE1IUmYiFb6Lk/pWgNZpsbchsXxd7cOh31p66z1R/Mz10XYO5/33z4lrsJYna20ist7Gf3s+f8Wgg31T28DdhRP7ID8mjsZJo2iTutaWEwAAD23ggsEeW1kzMsIiOqzbJ+WXGhQv2kdfXOLgDSJElaH3gXsd60sbgxJVDD7IYxoInbv6C/WXc9+rLcY7zrauAIRoDrMIb5Z3EE7SJ5INhB3A9oM0fVIfGo9M1tNkk/FIbqYne07Rmb+4voA2wyT1wBHsqz5G+FxkFO1+gAyLc3AUHSHVFX7iQd5x4s91w+J5uQENBFYSUcEBCAC2EN17qhMREDRVY7/j6qj3CmQB/9OTNtWexJimpQ/q60a3LrE0KAu10eOV+IeURQcx2CRxHSIX3kAApOSu0xufN/flqWLfE39iLwpcwnp4fsEYphlrw5agkFUzkex2Jx++3Llp4v
 
3FXoM1Fmgo8GzAzKlk0JFqszQf2FA5wupFh0hc3u0cwln3W4IluXGveAoaF1WZTsjPwJ8Qtstpd68801Zb9jHez+8GkBk5aFkxvOuZFvXGRwOyo5O8RyjFFEaRqi6WEBNGYcmsihgSg3fNi1htPY18AqUcaZrBaSQ36RMC7tPbQZQGrg40hWlPrMWvzHDPOusmUYH8xsAHjdufABEBAAGJAR8EGAEIAAkFAlYSUcECGwwACgkQanxdRIIXDj2sjgf+KcheM4QJCVhnxcsv3geUyGRaguswIDqWc6xv6ScqTLgOBSlaVcqrbtVErJXINxa5fb3eX7UmuCVySPkPoip1IBH07+zvKtOlqOYIdFd9oaAqmRxX4iJiNr/70c7Gi09xg8EWY7BKLosLojIns/HawZ7kLO3rRPGjEV0oIavH8jiaAHm6rp6d5awGaZP6c7+ZuB+oFIZT71RsFoNPHhRKId4cC4zdcK1VCzJep6VekpepCmmh264TJdrfa0TEOAxt4DTQKz0gCYIKg8QRpYw/URi/kP15Xk/FbnG8hc2svd+u7mCd3FEvhuf25t7LBmUxsAWCR9HRgdnkFafANaa2JA==
+
diff --git a/src/plugins/flatpak/daemon/ipc-flatpak-repo.c b/src/plugins/flatpak/daemon/ipc-flatpak-repo.c
new file mode 100644
index 000000000..92ac1712b
--- /dev/null
+++ b/src/plugins/flatpak/daemon/ipc-flatpak-repo.c
@@ -0,0 +1,211 @@
+/* ipc-flatpak-repo.c
+ *
+ * Copyright 2021 Christian Hergert <chergert redhat com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+#define G_LOG_DOMAIN "ipc-flatpak-repo"
+
+#include "ipc-flatpak-repo.h"
+
+struct _IpcFlatpakRepo
+{
+  GObject parent_instance;
+  FlatpakInstallation *installation;
+};
+
+G_DEFINE_TYPE (IpcFlatpakRepo, ipc_flatpak_repo, G_TYPE_OBJECT)
+
+static const char filter_file_contents[] = "\
+deny *\n\
+allow runtime/org.freedesktop.*\n\
+allow runtime/org.gnome.*\n\
+";
+
+static const char *remotes[] = { "flathub", "flathub-beta", "gnome-nightly" };
+
+static void
+ipc_flatpak_repo_constructed (GObject *object)
+{
+  IpcFlatpakRepo *self = (IpcFlatpakRepo *)object;
+  g_autofree gchar *gnome_builder_conf_data = NULL;
+  g_autoptr(GFile) etc = NULL;
+  g_autoptr(GFile) installations_d = NULL;
+  g_autoptr(GFile) gnome_builder_conf = NULL;
+  g_autoptr(GFile) filter_file = NULL;
+  g_autoptr(GFile) flatpak = NULL;
+  g_autoptr(GError) error = NULL;
+  g_autoptr(GKeyFile) keyfile = NULL;
+
+  g_assert (IPC_IS_FLATPAK_REPO (self));
+
+  G_OBJECT_CLASS (ipc_flatpak_repo_parent_class)->constructed (object);
+
+  flatpak = g_file_new_build_filename (g_get_user_data_dir (), "gnome-builder", "flatpak", NULL);
+  filter_file = g_file_get_child (flatpak, "filter");
+  etc = g_file_get_child (flatpak, "etc");
+  installations_d = g_file_get_child (etc, "installations.d");
+  gnome_builder_conf = g_file_get_child (installations_d, "gnome-builder.conf");
+
+  /* Create installation if it doesn't exist */
+  if (!(self->installation = flatpak_installation_new_for_path (flatpak, TRUE, NULL, &error)))
+    {
+      g_warning ("Failed to create private flatpak installation: %s", error->message);
+      return;
+    }
+
+  /* Create filter list to only allow runtimes */
+  if (!g_file_replace_contents (filter_file, filter_file_contents, strlen (filter_file_contents),
+                                NULL, FALSE, G_FILE_CREATE_REPLACE_DESTINATION, NULL, NULL, &error))
+    {
+      g_warning ("Failed to create repository filter file: %s", error->message);
+      return;
+    }
+
+  g_assert (FLATPAK_IS_INSTALLATION (self->installation));
+
+  /* Add repos we need for development to private installation, but filtered to
+   * only include runtimes.
+   */
+  for (guint i = 0; i < G_N_ELEMENTS (remotes); i++)
+    {
+      g_autoptr(FlatpakRemote) remote = NULL;
+
+      if (!(remote = flatpak_installation_get_remote_by_name (self->installation, remotes[i], NULL, NULL)))
+        {
+          g_autofree char *title = g_strdup_printf ("Builder (%s)", remotes[i]);
+          g_autofree char *resource = g_strdup_printf ("/flatpak/%s.flatpakrepo", remotes[i]);
+          g_autoptr(GBytes) bytes = g_resources_lookup_data (resource, 0, NULL);
+
+          g_assert (bytes != NULL);
+
+          if (!(remote = flatpak_remote_new_from_file (remotes[i], bytes, &error)))
+            {
+              g_warning ("Failed to add remote %s to flatpak installation: %s",
+                         remotes[i], error->message);
+              g_clear_error (&error);
+              continue;
+            }
+
+          flatpak_remote_set_filter (remote, g_file_peek_path (filter_file));
+
+          if (!flatpak_installation_add_remote (self->installation, remote, TRUE, NULL, &error))
+            {
+              g_warning ("Failed to add remote %s to flatpak installation: %s",
+                         remotes[i], error->message);
+              g_clear_error (&error);
+            }
+        }
+    }
+
+#define INSTALLATION_NAME "Installation \"gnome-builder-private\""
+
+  keyfile = g_key_file_new ();
+  g_key_file_set_string (keyfile, INSTALLATION_NAME, "Path", g_file_peek_path (flatpak));
+  g_key_file_set_string (keyfile, INSTALLATION_NAME, "DisplayName", "GNOME Builder");
+  g_key_file_set_integer (keyfile, INSTALLATION_NAME, "Priority", 0);
+  g_key_file_set_string (keyfile, INSTALLATION_NAME, "StorageType", "harddisk");
+  gnome_builder_conf_data = g_key_file_to_data (keyfile, NULL, NULL);
+
+  /* Now setup a configuration file that points to all the installations we
+   * know about so that we can use FLATPAK_CONFIG_DIR to initialize them.
+   */
+  if ((!g_file_query_exists (installations_d, NULL) &&
+       !g_file_make_directory_with_parents (installations_d, NULL, &error)) ||
+      !g_file_replace_contents (gnome_builder_conf, gnome_builder_conf_data, strlen 
(gnome_builder_conf_data),
+                                NULL, FALSE, G_FILE_CREATE_REPLACE_DESTINATION, NULL, NULL, &error))
+    {
+      g_warning ("Failed to create flatpak site configuration: %s", error->message);
+      return;
+    }
+}
+
+static void
+ipc_flatpak_repo_finalize (GObject *object)
+{
+  IpcFlatpakRepo *self = (IpcFlatpakRepo *)object;
+
+  g_clear_object (&self->installation);
+
+  G_OBJECT_CLASS (ipc_flatpak_repo_parent_class)->finalize (object);
+}
+
+static void
+ipc_flatpak_repo_class_init (IpcFlatpakRepoClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->constructed = ipc_flatpak_repo_constructed;
+  object_class->finalize = ipc_flatpak_repo_finalize;
+}
+
+static void
+ipc_flatpak_repo_init (IpcFlatpakRepo *self)
+{
+}
+
+IpcFlatpakRepo *
+ipc_flatpak_repo_get_default (void)
+{
+  static IpcFlatpakRepo *instance;
+
+  if (!instance)
+    {
+      instance = g_object_new (IPC_TYPE_FLATPAK_REPO, NULL);
+      g_object_add_weak_pointer (G_OBJECT (instance), (gpointer *)&instance);
+    }
+
+  return instance;
+}
+
+FlatpakInstallation *
+ipc_flatpak_repo_get_installation (IpcFlatpakRepo *self)
+{
+  g_return_val_if_fail (IPC_IS_FLATPAK_REPO (self), NULL);
+
+  return self->installation;
+}
+
+char *
+ipc_flatpak_repo_get_path (IpcFlatpakRepo *self)
+{
+  g_autoptr(GFile) path = NULL;
+
+  g_return_val_if_fail (IPC_IS_FLATPAK_REPO (self), NULL);
+
+  if (self->installation == NULL)
+    return NULL;
+
+  if (!(path = flatpak_installation_get_path (self->installation)))
+    return NULL;
+
+  return g_file_get_path (path);
+}
+
+char *
+ipc_flatpak_repo_get_config_dir (IpcFlatpakRepo *self)
+{
+  g_autoptr(GFile) path = NULL;
+
+  g_return_val_if_fail (IPC_IS_FLATPAK_REPO (self), NULL);
+
+  return g_build_filename (g_get_user_data_dir (),
+                           "gnome-builder",
+                           "etc",
+                           "flatpak",
+                           NULL);
+}
diff --git a/src/plugins/flatpak/gbp-flatpak-application-addin.h 
b/src/plugins/flatpak/daemon/ipc-flatpak-repo.h
similarity index 57%
rename from src/plugins/flatpak/gbp-flatpak-application-addin.h
rename to src/plugins/flatpak/daemon/ipc-flatpak-repo.h
index 01d09e1e9..f96c7f97a 100644
--- a/src/plugins/flatpak/gbp-flatpak-application-addin.h
+++ b/src/plugins/flatpak/daemon/ipc-flatpak-repo.h
@@ -1,6 +1,6 @@
-/* gbp-flatpak-application-addin.h
+/* ipc-flatpak-service-impl.c
  *
- * Copyright 2015-2019 Christian Hergert <christian hergert me>
+ * Copyright 2021 Christian Hergert <chergert redhat com>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -20,13 +20,17 @@
 
 #pragma once
 
-#include <libide-gui.h>
+#include <flatpak/flatpak.h>
 
 G_BEGIN_DECLS
 
-#define GBP_TYPE_FLATPAK_APPLICATION_ADDIN (gbp_flatpak_application_addin_get_type())
+#define IPC_TYPE_FLATPAK_REPO (ipc_flatpak_repo_get_type())
 
-G_DECLARE_FINAL_TYPE (GbpFlatpakApplicationAddin, gbp_flatpak_application_addin, GBP, 
FLATPAK_APPLICATION_ADDIN, GObject)
+G_DECLARE_FINAL_TYPE (IpcFlatpakRepo, ipc_flatpak_repo, IPC, FLATPAK_REPO, GObject)
 
-G_END_DECLS
+IpcFlatpakRepo      *ipc_flatpak_repo_get_default      (void);
+FlatpakInstallation *ipc_flatpak_repo_get_installation (IpcFlatpakRepo  *self);
+char                *ipc_flatpak_repo_get_path         (IpcFlatpakRepo  *self);
+char                *ipc_flatpak_repo_get_config_dir   (IpcFlatpakRepo  *self);
 
+G_END_DECLS
diff --git a/src/plugins/flatpak/daemon/ipc-flatpak-service-impl.c 
b/src/plugins/flatpak/daemon/ipc-flatpak-service-impl.c
index 3117c4615..dda483280 100644
--- a/src/plugins/flatpak/daemon/ipc-flatpak-service-impl.c
+++ b/src/plugins/flatpak/daemon/ipc-flatpak-service-impl.c
@@ -25,6 +25,7 @@
 #include <flatpak/flatpak.h>
 #include <glib/gi18n.h>
 
+#include "ipc-flatpak-repo.h"
 #include "ipc-flatpak-service-impl.h"
 #include "ipc-flatpak-transfer.h"
 #include "ipc-flatpak-util.h"
@@ -1321,9 +1322,11 @@ static void
 ipc_flatpak_service_impl_constructed (GObject *object)
 {
   IpcFlatpakServiceImpl *self = (IpcFlatpakServiceImpl *)object;
+  IpcFlatpakRepo *repo = ipc_flatpak_repo_get_default ();
   g_autoptr(GPtrArray) installations = NULL;
   g_autoptr(FlatpakInstallation) user = NULL;
   g_autoptr(GFile) user_file = NULL;
+  FlatpakInstallation *priv_install;
 
   G_OBJECT_CLASS (ipc_flatpak_service_impl_parent_class)->constructed (object);
 
@@ -1338,6 +1341,18 @@ ipc_flatpak_service_impl_constructed (GObject *object)
       for (guint i = 0; i < installations->len; i++)
         add_installation (self, g_ptr_array_index (installations, i), NULL);
     }
+
+  /* Fallback for SDKs not available elsewhere */
+  if ((priv_install = ipc_flatpak_repo_get_installation (repo)))
+    {
+      g_autofree char *config_dir = ipc_flatpak_repo_get_config_dir (repo);
+      g_autofree char *path = ipc_flatpak_repo_get_path (repo);
+
+      add_installation (self, priv_install, NULL);
+      ipc_flatpak_service_set_config_dir (IPC_FLATPAK_SERVICE (self), config_dir);
+
+      g_debug ("Added installation at %s and FLATPAK_CONFIG_DIR %s", config_dir, path);
+    }
 }
 
 static void
diff --git a/src/plugins/flatpak/daemon/ipc-flatpak.gresource.xml 
b/src/plugins/flatpak/daemon/ipc-flatpak.gresource.xml
new file mode 100644
index 000000000..81bc34c7f
--- /dev/null
+++ b/src/plugins/flatpak/daemon/ipc-flatpak.gresource.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+  <gresource prefix="/flatpak">
+    <file>gnome-nightly.flatpakrepo</file>
+    <file>flathub.flatpakrepo</file>
+    <file>flathub-beta.flatpakrepo</file>
+  </gresource>
+</gresources>
diff --git a/src/plugins/flatpak/daemon/meson.build b/src/plugins/flatpak/daemon/meson.build
index 1e803677b..34acf2b9d 100644
--- a/src/plugins/flatpak/daemon/meson.build
+++ b/src/plugins/flatpak/daemon/meson.build
@@ -19,11 +19,19 @@ ipc_flatpak_transfer_src = gnome.gdbus_codegen('ipc-flatpak-transfer',
          namespace: 'Ipc',
 )
 
+ipc_flatpak_resources = gnome.compile_resources(
+  'ipc-resources',
+  'ipc-flatpak.gresource.xml',
+  c_name: 'ipc_flatpak'
+)
+
 gnome_builder_flatpak_sources = [
   'gnome-builder-flatpak.c',
   'ipc-flatpak-service-impl.c',
+  'ipc-flatpak-repo.c',
   ipc_flatpak_service_src,
   ipc_flatpak_transfer_src,
+  ipc_flatpak_resources,
 ]
 
 gnome_builder_flatpak = executable('gnome-builder-flatpak', gnome_builder_flatpak_sources,
diff --git a/src/plugins/flatpak/daemon/org.gnome.Builder.Flatpak.Service.xml 
b/src/plugins/flatpak/daemon/org.gnome.Builder.Flatpak.Service.xml
index df1b7d7bc..01e15c44c 100644
--- a/src/plugins/flatpak/daemon/org.gnome.Builder.Flatpak.Service.xml
+++ b/src/plugins/flatpak/daemon/org.gnome.Builder.Flatpak.Service.xml
@@ -21,6 +21,10 @@
     SPDX-License-Identifier: GPL-3.0-or-later
   -->
   <interface name="org.gnome.Builder.Flatpak.Service">
+    <!--
+      The directory to use for FLATPAK_CONFIG_DIR.
+    -->
+    <property name="ConfigDir" type="s" access="read"/>
     <!--
       The default architecture of the system, such as "x86_64".
     -->
diff --git a/src/plugins/flatpak/flatpak-plugin.c b/src/plugins/flatpak/flatpak-plugin.c
index f3786f062..120e1365f 100644
--- a/src/plugins/flatpak/flatpak-plugin.c
+++ b/src/plugins/flatpak/flatpak-plugin.c
@@ -27,7 +27,6 @@
 #include <libide-foundry.h>
 #include <libide-gui.h>
 
-#include "gbp-flatpak-application-addin.h"
 #include "gbp-flatpak-build-system-discovery.h"
 #include "gbp-flatpak-build-target-provider.h"
 #include "gbp-flatpak-config-provider.h"
@@ -40,9 +39,6 @@ _gbp_flatpak_register_types (PeasObjectModule *module)
 {
   ide_g_file_add_ignored_pattern (".flatpak-builder");
 
-  peas_object_module_register_extension_type (module,
-                                              IDE_TYPE_APPLICATION_ADDIN,
-                                              GBP_TYPE_FLATPAK_APPLICATION_ADDIN);
   peas_object_module_register_extension_type (module,
                                               IDE_TYPE_BUILD_SYSTEM_DISCOVERY,
                                               GBP_TYPE_FLATPAK_BUILD_SYSTEM_DISCOVERY);
diff --git a/src/plugins/flatpak/meson.build b/src/plugins/flatpak/meson.build
index 0133d3455..4be33614d 100644
--- a/src/plugins/flatpak/meson.build
+++ b/src/plugins/flatpak/meson.build
@@ -15,7 +15,6 @@ subdir('daemon')
 
 plugins_sources += files([
   'flatpak-plugin.c',
-  'gbp-flatpak-application-addin.c',
   'gbp-flatpak-build-system-discovery.c',
   'gbp-flatpak-build-target-provider.c',
   'gbp-flatpak-build-target.c',


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