[gnome-software: 5/6] flatpak: Allow per-operation interactive state
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software: 5/6] flatpak: Allow per-operation interactive state
- Date: Fri, 4 Mar 2022 07:37:21 +0000 (UTC)
commit 49eb1355655e24fb572f62c5bf51f2c7083ea0df
Author: Philip Withnall <pwithnall endlessos org>
Date: Tue Feb 22 17:33:01 2022 +0100
flatpak: Allow per-operation interactive state
To ensure multiple operations can happen in parallel on the plugin, each
with a separate interactivity state, keep two `FlatpakInstallation`
objects around for each `GsFlatpak`. One is interactive, the other is
non-interactive.
Execute interactive operations on the interactive one, and vice-versa.
This is necessary because `FlatpakInstallation` doesn’t provide a
per-method ‘interactive’ argument. It only has a single interactive
state for the entire object. That can’t change without significant new
API in libflatpak (or API breaks).
Based on work by Milan Crha.
Signed-off-by: Philip Withnall <pwithnall endlessos org>
Fixes: #1645
plugins/flatpak/gs-flatpak.c | 389 +++++++++++++++++++++++-------------
plugins/flatpak/gs-flatpak.h | 31 ++-
plugins/flatpak/gs-plugin-flatpak.c | 138 ++++++++-----
3 files changed, 368 insertions(+), 190 deletions(-)
---
diff --git a/plugins/flatpak/gs-flatpak.c b/plugins/flatpak/gs-flatpak.c
index 0f41babe8..3b3b641fa 100644
--- a/plugins/flatpak/gs-flatpak.c
+++ b/plugins/flatpak/gs-flatpak.c
@@ -12,6 +12,19 @@
*
* All GsApp's created have management-plugin set to flatpak
* The GsApp:origin is the remote name, e.g. test-repo
+ *
+ * Two #FlatpakInstallation objects are kept: `installation_noninteractive` and
+ * `installation_interactive`. One has flatpak_installation_set_no_interaction()
+ * set to %TRUE, the other to %FALSE.
+ *
+ * This is because multiple #GsFlatpak operations can be ongoing with different
+ * interactive states (for example, a background refresh operation while the
+ * user is refining an app in the foreground), but the #FlatpakInstallation
+ * methods don’t support per-operation interactive state.
+ *
+ * Internally, each #FlatpakInstallation will use a separate #FlatpakDir
+ * pointing to the same repository. Those #FlatpakDirs will lock the repository
+ * when using it, so parallel operations won’t race.
*/
#include <config.h>
@@ -27,7 +40,8 @@
struct _GsFlatpak {
GObject parent_instance;
GsFlatpakFlags flags;
- FlatpakInstallation *installation;
+ FlatpakInstallation *installation_noninteractive; /* (owned) */
+ FlatpakInstallation *installation_interactive; /* (owned) */
GPtrArray *installed_refs; /* must be entirely replaced rather than updated internally
*/
GMutex installed_refs_mutex;
GHashTable *broken_remotes;
@@ -54,7 +68,7 @@ static void
gs_plugin_refine_item_scope (GsFlatpak *self, GsApp *app)
{
if (gs_app_get_scope (app) == AS_COMPONENT_SCOPE_UNKNOWN) {
- gboolean is_user = flatpak_installation_get_is_user (self->installation);
+ gboolean is_user = flatpak_installation_get_is_user (self->installation_noninteractive);
gs_app_set_scope (app, is_user ? AS_COMPONENT_SCOPE_USER : AS_COMPONENT_SCOPE_SYSTEM);
}
}
@@ -77,6 +91,7 @@ gs_flatpak_claim_app (GsFlatpak *self, GsApp *app)
static void
gs_flatpak_ensure_remote_title (GsFlatpak *self,
+ gboolean interactive,
GCancellable *cancellable)
{
g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&self->remote_title_mutex);
@@ -85,7 +100,7 @@ gs_flatpak_ensure_remote_title (GsFlatpak *self,
if (g_hash_table_size (self->remote_title))
return;
- xremotes = flatpak_installation_list_remotes (self->installation, cancellable, NULL);
+ xremotes = flatpak_installation_list_remotes (gs_flatpak_get_installation (self, interactive),
cancellable, NULL);
if (xremotes) {
guint ii;
@@ -106,6 +121,7 @@ gs_flatpak_set_app_origin (GsFlatpak *self,
GsApp *app,
const gchar *origin,
FlatpakRemote *xremote,
+ gboolean interactive,
GCancellable *cancellable)
{
g_autoptr(GMutexLocker) locker = NULL;
@@ -126,7 +142,7 @@ gs_flatpak_set_app_origin (GsFlatpak *self,
if (!title) {
g_autoptr(GPtrArray) xremotes = NULL;
- xremotes = flatpak_installation_list_remotes (self->installation, cancellable, NULL);
+ xremotes = flatpak_installation_list_remotes (gs_flatpak_get_installation (self,
interactive), cancellable, NULL);
if (xremotes) {
guint ii;
@@ -157,7 +173,8 @@ gs_flatpak_set_app_origin (GsFlatpak *self,
static void
gs_flatpak_claim_app_list (GsFlatpak *self,
- GsAppList *list)
+ GsAppList *list,
+ gboolean interactive)
{
for (guint i = 0; i < gs_app_list_length (list); i++) {
GsApp *app = gs_app_list_index (list, i);
@@ -167,7 +184,7 @@ gs_flatpak_claim_app_list (GsFlatpak *self,
continue;
if (gs_app_get_origin (app))
- gs_flatpak_set_app_origin (self, app, gs_app_get_origin (app), NULL, NULL);
+ gs_flatpak_set_app_origin (self, app, gs_app_get_origin (app), NULL, interactive,
NULL);
gs_flatpak_claim_app (self, app);
}
@@ -273,6 +290,7 @@ static void
gs_flatpak_set_update_permissions (GsFlatpak *self,
GsApp *app,
FlatpakInstalledRef *xref,
+ gboolean interactive,
GCancellable *cancellable)
{
g_autoptr(GBytes) old_bytes = NULL;
@@ -289,7 +307,7 @@ gs_flatpak_set_update_permissions (GsFlatpak *self,
g_bytes_get_size (old_bytes),
0, NULL);
- bytes = flatpak_installation_fetch_remote_metadata_sync (self->installation,
+ bytes = flatpak_installation_fetch_remote_metadata_sync (gs_flatpak_get_installation (self,
interactive),
gs_app_get_origin (app),
FLATPAK_REF (xref),
cancellable,
@@ -364,6 +382,7 @@ gs_flatpak_create_app (GsFlatpak *self,
const gchar *origin,
FlatpakRef *xref,
FlatpakRemote *xremote,
+ gboolean interactive,
GCancellable *cancellable)
{
GsApp *app_cached;
@@ -373,7 +392,7 @@ gs_flatpak_create_app (GsFlatpak *self,
app = gs_app_new (flatpak_ref_get_name (xref));
gs_flatpak_set_metadata (self, app, xref);
if (origin != NULL) {
- gs_flatpak_set_app_origin (self, app, origin, xremote, cancellable);
+ gs_flatpak_set_app_origin (self, app, origin, xremote, interactive, cancellable);
if (!(self->flags & GS_FLATPAK_FLAG_IS_TEMPORARY)) {
/* return the ref'd cached copy, only if the origin is known */
@@ -414,7 +433,8 @@ gs_flatpak_create_source (GsFlatpak *self, FlatpakRemote *xremote)
g_autoptr(GsApp) app = NULL;
/* create a temp GsApp */
- app = gs_flatpak_app_new_from_remote (self->plugin, xremote, flatpak_installation_get_is_user
(self->installation));
+ app = gs_flatpak_app_new_from_remote (self->plugin, xremote,
+ flatpak_installation_get_is_user
(self->installation_noninteractive));
gs_flatpak_claim_app (self, app);
/* we already have one, returned the ref'd cached copy */
@@ -681,6 +701,7 @@ fixup_flatpak_appstream_xml (XbBuilderSource *source,
static gboolean
gs_flatpak_refresh_appstream_remote (GsFlatpak *self,
const gchar *remote_name,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
@@ -688,6 +709,7 @@ static gboolean
gs_flatpak_add_apps_from_xremote (GsFlatpak *self,
XbBuilder *builder,
FlatpakRemote *xremote,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -710,7 +732,7 @@ gs_flatpak_add_apps_from_xremote (GsFlatpak *self,
g_debug ("no appstream dir for %s, trying refresh...",
remote_name);
- if (!gs_flatpak_refresh_appstream_remote (self, remote_name, cancellable, &error_local)) {
+ if (!gs_flatpak_refresh_appstream_remote (self, remote_name, interactive, cancellable,
&error_local)) {
g_debug ("Failed to refresh appstream data for '%s': %s", remote_name,
error_local->message);
if (g_error_matches (error_local, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_FAILED)) {
g_autoptr(GMutexLocker) locker = NULL;
@@ -747,7 +769,7 @@ gs_flatpak_add_apps_from_xremote (GsFlatpak *self,
if (did_refresh)
return TRUE;
- if (!gs_flatpak_refresh_appstream_remote (self, remote_name, cancellable, &error_local)) {
+ if (!gs_flatpak_refresh_appstream_remote (self, remote_name, interactive, cancellable,
&error_local)) {
g_debug ("Failed to refresh appstream data for '%s': %s", remote_name,
error_local->message);
if (g_error_matches (error_local, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_FAILED)) {
g_autoptr(GMutexLocker) locker = NULL;
@@ -917,7 +939,7 @@ gs_flatpak_rescan_installed (GsFlatpak *self,
g_autofree gchar *path_apps = NULL;
/* add all installed desktop files */
- path = flatpak_installation_get_path (self->installation);
+ path = flatpak_installation_get_path (self->installation_noninteractive);
path_str = g_file_get_path (path);
path_exports = g_build_filename (path_str, "exports", NULL);
path_apps = g_build_filename (path_exports, "share", "applications", NULL);
@@ -948,6 +970,7 @@ gs_flatpak_rescan_installed (GsFlatpak *self,
static gboolean
gs_flatpak_rescan_appstream_store (GsFlatpak *self,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -993,7 +1016,7 @@ gs_flatpak_rescan_appstream_store (GsFlatpak *self,
xb_builder_add_locale (builder, locales[i]);
/* go through each remote adding metadata */
- xremotes = flatpak_installation_list_remotes (self->installation,
+ xremotes = flatpak_installation_list_remotes (gs_flatpak_get_installation (self, interactive),
cancellable,
error);
if (xremotes == NULL) {
@@ -1007,7 +1030,7 @@ gs_flatpak_rescan_appstream_store (GsFlatpak *self,
continue;
g_debug ("found remote %s",
flatpak_remote_get_name (xremote));
- if (!gs_flatpak_add_apps_from_xremote (self, builder, xremote, cancellable, &error_local)) {
+ if (!gs_flatpak_add_apps_from_xremote (self, builder, xremote, interactive, cancellable,
&error_local)) {
g_debug ("Failed to add apps from remote ‘%s’; skipping: %s",
flatpak_remote_get_name (xremote), error_local->message);
}
@@ -1051,24 +1074,25 @@ gs_flatpak_rescan_appstream_store (GsFlatpak *self,
static gboolean
gs_flatpak_rescan_app_data (GsFlatpak *self,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
if (self->requires_full_rescan) {
- gboolean res = gs_flatpak_refresh (self, 0, cancellable, error);
+ gboolean res = gs_flatpak_refresh (self, 0, interactive, cancellable, error);
if (res)
self->requires_full_rescan = FALSE;
return res;
}
- return gs_flatpak_rescan_appstream_store (self, cancellable, error);
+ return gs_flatpak_rescan_appstream_store (self, interactive, cancellable, error);
}
gboolean
gs_flatpak_setup (GsFlatpak *self, GCancellable *cancellable, GError **error)
{
/* watch for changes */
- self->monitor = flatpak_installation_create_monitor (self->installation,
+ self->monitor = flatpak_installation_create_monitor (self->installation_noninteractive,
cancellable,
error);
if (self->monitor == NULL) {
@@ -1142,12 +1166,14 @@ gs_flatpak_progress_cb (const gchar *status,
static gboolean
gs_flatpak_refresh_appstream_remote (GsFlatpak *self,
const gchar *remote_name,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
g_autofree gchar *str = NULL;
g_autoptr(GsApp) app_dl = gs_app_new (gs_plugin_get_name (self->plugin));
g_autoptr(GsFlatpakProgressHelper) phelper = NULL;
+ FlatpakInstallation *installation = gs_flatpak_get_installation (self, interactive);
g_autoptr(GError) error_local = NULL;
/* TRANSLATORS: status text when downloading new metadata */
@@ -1155,7 +1181,7 @@ gs_flatpak_refresh_appstream_remote (GsFlatpak *self,
gs_app_set_summary_missing (app_dl, str);
gs_plugin_status_update (self->plugin, app_dl, GS_PLUGIN_STATUS_DOWNLOADING);
- if (!flatpak_installation_update_remote_sync (self->installation,
+ if (!flatpak_installation_update_remote_sync (installation,
remote_name,
cancellable,
&error_local)) {
@@ -1166,7 +1192,7 @@ gs_flatpak_refresh_appstream_remote (GsFlatpak *self,
return FALSE;
}
phelper = gs_flatpak_progress_helper_new (self->plugin, app_dl);
- if (!flatpak_installation_update_appstream_full_sync (self->installation,
+ if (!flatpak_installation_update_appstream_full_sync (installation,
remote_name,
NULL, /* arch */
gs_flatpak_progress_cb,
@@ -1186,6 +1212,7 @@ gs_flatpak_refresh_appstream_remote (GsFlatpak *self,
static gboolean
gs_flatpak_refresh_appstream (GsFlatpak *self,
guint64 cache_age_secs,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -1193,7 +1220,7 @@ gs_flatpak_refresh_appstream (GsFlatpak *self,
g_autoptr(GPtrArray) xremotes = NULL;
/* get remotes */
- xremotes = flatpak_installation_list_remotes (self->installation,
+ xremotes = flatpak_installation_list_remotes (gs_flatpak_get_installation (self, interactive),
cancellable,
error);
if (xremotes == NULL) {
@@ -1240,6 +1267,7 @@ gs_flatpak_refresh_appstream (GsFlatpak *self,
remote_name, tmp);
ret = gs_flatpak_refresh_appstream_remote (self,
remote_name,
+ interactive,
cancellable,
&error_local);
if (!ret) {
@@ -1276,7 +1304,7 @@ gs_flatpak_refresh_appstream (GsFlatpak *self,
}
/* ensure the AppStream silo is up to date */
- if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
+ if (!gs_flatpak_rescan_appstream_store (self, interactive, cancellable, error))
return FALSE;
return TRUE;
@@ -1286,6 +1314,7 @@ static void
gs_flatpak_set_metadata_installed (GsFlatpak *self,
GsApp *app,
FlatpakInstalledRef *xref,
+ gboolean interactive,
GCancellable *cancellable)
{
const gchar *appdata_version;
@@ -1343,7 +1372,7 @@ gs_flatpak_set_metadata_installed (GsFlatpak *self,
/* this is faster than resolving */
if (gs_app_get_origin (app) == NULL)
- gs_flatpak_set_app_origin (self, app, flatpak_installed_ref_get_origin (xref), NULL,
cancellable);
+ gs_flatpak_set_app_origin (self, app, flatpak_installed_ref_get_origin (xref), NULL,
interactive, cancellable);
/* this is faster than flatpak_installation_fetch_remote_size_sync() */
size_installed = flatpak_installed_ref_get_installed_size (xref);
@@ -1359,6 +1388,7 @@ static GsApp *
gs_flatpak_create_installed (GsFlatpak *self,
FlatpakInstalledRef *xref,
FlatpakRemote *xremote,
+ gboolean interactive,
GCancellable *cancellable)
{
g_autoptr(GsApp) app = NULL;
@@ -1368,35 +1398,37 @@ gs_flatpak_create_installed (GsFlatpak *self,
/* create new object */
origin = flatpak_installed_ref_get_origin (xref);
- app = gs_flatpak_create_app (self, origin, FLATPAK_REF (xref), xremote, cancellable);
+ app = gs_flatpak_create_app (self, origin, FLATPAK_REF (xref), xremote, interactive, cancellable);
gs_app_set_state (app, GS_APP_STATE_UNKNOWN);
gs_app_set_state (app, GS_APP_STATE_INSTALLED);
- gs_flatpak_set_metadata_installed (self, app, xref, cancellable);
+ gs_flatpak_set_metadata_installed (self, app, xref, interactive, cancellable);
return g_steal_pointer (&app);
}
gboolean
-gs_flatpak_add_installed (GsFlatpak *self, GsAppList *list,
+gs_flatpak_add_installed (GsFlatpak *self,
+ GsAppList *list,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
g_autoptr(GPtrArray) xrefs = NULL;
/* get apps and runtimes */
- xrefs = flatpak_installation_list_installed_refs (self->installation,
+ xrefs = flatpak_installation_list_installed_refs (gs_flatpak_get_installation (self, interactive),
cancellable, error);
if (xrefs == NULL) {
gs_flatpak_error_convert (error);
return FALSE;
}
- gs_flatpak_ensure_remote_title (self, cancellable);
+ gs_flatpak_ensure_remote_title (self, interactive, cancellable);
for (guint i = 0; i < xrefs->len; i++) {
FlatpakInstalledRef *xref = g_ptr_array_index (xrefs, i);
- g_autoptr(GsApp) app = gs_flatpak_create_installed (self, xref, NULL, cancellable);
+ g_autoptr(GsApp) app = gs_flatpak_create_installed (self, xref, NULL, interactive,
cancellable);
gs_app_list_add (list, app);
}
@@ -1404,19 +1436,22 @@ gs_flatpak_add_installed (GsFlatpak *self, GsAppList *list,
}
gboolean
-gs_flatpak_add_sources (GsFlatpak *self, GsAppList *list,
+gs_flatpak_add_sources (GsFlatpak *self,
+ GsAppList *list,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
g_autoptr(GPtrArray) xrefs = NULL;
g_autoptr(GPtrArray) xremotes = NULL;
+ FlatpakInstallation *installation = gs_flatpak_get_installation (self, interactive);
/* refresh */
- if (!gs_flatpak_rescan_app_data (self, cancellable, error))
+ if (!gs_flatpak_rescan_app_data (self, interactive, cancellable, error))
return FALSE;
/* get installed apps and runtimes */
- xrefs = flatpak_installation_list_installed_refs (self->installation,
+ xrefs = flatpak_installation_list_installed_refs (installation,
cancellable,
error);
if (xrefs == NULL) {
@@ -1425,7 +1460,7 @@ gs_flatpak_add_sources (GsFlatpak *self, GsAppList *list,
}
/* get available remotes */
- xremotes = flatpak_installation_list_remotes (self->installation,
+ xremotes = flatpak_installation_list_remotes (installation,
cancellable,
error);
if (xremotes == NULL) {
@@ -1456,7 +1491,7 @@ gs_flatpak_add_sources (GsFlatpak *self, GsAppList *list,
if (g_strcmp0 (flatpak_installed_ref_get_origin (xref),
flatpak_remote_get_name (xremote)) != 0)
continue;
- related = gs_flatpak_create_installed (self, xref, xremote, cancellable);
+ related = gs_flatpak_create_installed (self, xref, xremote, interactive, cancellable);
gs_app_add_related (app, related);
}
}
@@ -1466,6 +1501,7 @@ gs_flatpak_add_sources (GsFlatpak *self, GsAppList *list,
GsApp *
gs_flatpak_find_source_by_url (GsFlatpak *self,
const gchar *url,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -1473,7 +1509,7 @@ gs_flatpak_find_source_by_url (GsFlatpak *self,
g_return_val_if_fail (url != NULL, NULL);
- xremotes = flatpak_installation_list_remotes (self->installation, cancellable, error);
+ xremotes = flatpak_installation_list_remotes (gs_flatpak_get_installation (self, interactive),
cancellable, error);
if (xremotes == NULL)
return NULL;
for (guint i = 0; i < xremotes->len; i++) {
@@ -1491,17 +1527,21 @@ gs_flatpak_find_source_by_url (GsFlatpak *self,
/* transfer full */
GsApp *
-gs_flatpak_ref_to_app (GsFlatpak *self, const gchar *ref,
- GCancellable *cancellable, GError **error)
+gs_flatpak_ref_to_app (GsFlatpak *self,
+ const gchar *ref,
+ gboolean interactive,
+ GCancellable *cancellable,
+ GError **error)
{
g_autoptr(GPtrArray) xremotes = NULL;
+ FlatpakInstallation *installation = gs_flatpak_get_installation (self, interactive);
g_return_val_if_fail (ref != NULL, NULL);
g_mutex_lock (&self->installed_refs_mutex);
if (self->installed_refs == NULL) {
- self->installed_refs = flatpak_installation_list_installed_refs (self->installation,
+ self->installed_refs = flatpak_installation_list_installed_refs (installation,
cancellable, error);
if (self->installed_refs == NULL) {
@@ -1516,14 +1556,14 @@ gs_flatpak_ref_to_app (GsFlatpak *self, const gchar *ref,
g_autofree gchar *ref_tmp = flatpak_ref_format_ref (FLATPAK_REF (xref));
if (g_strcmp0 (ref, ref_tmp) == 0) {
g_mutex_unlock (&self->installed_refs_mutex);
- return gs_flatpak_create_installed (self, xref, NULL, cancellable);
+ return gs_flatpak_create_installed (self, xref, NULL, interactive, cancellable);
}
}
g_mutex_unlock (&self->installed_refs_mutex);
/* look at each remote xref */
- xremotes = flatpak_installation_list_remotes (self->installation,
+ xremotes = flatpak_installation_list_remotes (installation,
cancellable, error);
if (xremotes == NULL) {
gs_flatpak_error_convert (error);
@@ -1537,7 +1577,7 @@ gs_flatpak_ref_to_app (GsFlatpak *self, const gchar *ref,
/* disabled */
if (flatpak_remote_get_disabled (xremote))
continue;
- refs_remote = flatpak_installation_list_remote_refs_sync (self->installation,
+ refs_remote = flatpak_installation_list_remote_refs_sync (installation,
flatpak_remote_get_name (xremote),
cancellable,
&error_local);
@@ -1552,7 +1592,7 @@ gs_flatpak_ref_to_app (GsFlatpak *self, const gchar *ref,
g_autofree gchar *ref_tmp = flatpak_ref_format_ref (xref);
if (g_strcmp0 (ref, ref_tmp) == 0) {
const gchar *origin = flatpak_remote_get_name (xremote);
- return gs_flatpak_create_app (self, origin, xref, xremote, cancellable);
+ return gs_flatpak_create_app (self, origin, xref, xremote, interactive,
cancellable);
}
}
}
@@ -1661,12 +1701,14 @@ gboolean
gs_flatpak_app_install_source (GsFlatpak *self,
GsApp *app,
gboolean is_install,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
g_autoptr(FlatpakRemote) xremote = NULL;
+ FlatpakInstallation *installation = gs_flatpak_get_installation (self, interactive);
- xremote = flatpak_installation_get_remote_by_name (self->installation,
+ xremote = flatpak_installation_get_remote_by_name (installation,
gs_app_get_id (app),
cancellable, NULL);
if (xremote != NULL) {
@@ -1687,7 +1729,7 @@ gs_flatpak_app_install_source (GsFlatpak *self,
/* install it */
gs_app_set_state (app, GS_APP_STATE_INSTALLING);
- if (!flatpak_installation_modify_remote (self->installation,
+ if (!flatpak_installation_modify_remote (installation,
xremote,
cancellable,
error)) {
@@ -1708,7 +1750,7 @@ gs_flatpak_app_install_source (GsFlatpak *self,
/* This can fail silently, it's only to update necessary caches, to provide
* up-to-date information after the successful remote enable/install. */
- gs_flatpak_refresh (self, 1, cancellable, NULL);
+ gs_flatpak_refresh (self, 1, interactive, cancellable, NULL);
gs_plugin_repository_changed (self->plugin, app);
@@ -1718,6 +1760,7 @@ gs_flatpak_app_install_source (GsFlatpak *self,
static GsApp *
get_main_app_of_related (GsFlatpak *self,
GsApp *related_app,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -1749,7 +1792,7 @@ get_main_app_of_related (GsFlatpak *self,
/* this function only returns G_IO_ERROR_NOT_FOUND when the metadata file
* is missing, but if that's the case then things should have broken before
* this point */
- ref = flatpak_installation_get_installed_ref (self->installation,
+ ref = flatpak_installation_get_installed_ref (gs_flatpak_get_installation (self, interactive),
ref_kind,
app_tokens[1],
app_tokens[2],
@@ -1759,12 +1802,13 @@ get_main_app_of_related (GsFlatpak *self,
if (ref == NULL)
return NULL;
- return gs_flatpak_create_installed (self, ref, NULL, cancellable);
+ return gs_flatpak_create_installed (self, ref, NULL, interactive, cancellable);
}
static GsApp *
get_real_app_for_update (GsFlatpak *self,
GsApp *app,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -1772,7 +1816,7 @@ get_real_app_for_update (GsFlatpak *self,
g_autoptr(GError) error_local = NULL;
if (gs_flatpak_app_get_ref_kind (app) == FLATPAK_REF_KIND_RUNTIME)
- main_app = get_main_app_of_related (self, app, cancellable, &error_local);
+ main_app = get_main_app_of_related (self, app, interactive, cancellable, &error_local);
if (main_app == NULL) {
/* not all runtimes are extensions, and in that case we get the
@@ -1798,18 +1842,21 @@ get_real_app_for_update (GsFlatpak *self,
}
gboolean
-gs_flatpak_add_updates (GsFlatpak *self, GsAppList *list,
+gs_flatpak_add_updates (GsFlatpak *self,
+ GsAppList *list,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
g_autoptr(GPtrArray) xrefs = NULL;
+ FlatpakInstallation *installation = gs_flatpak_get_installation (self, interactive);
/* ensure valid */
- if (!gs_flatpak_rescan_app_data (self, cancellable, error))
+ if (!gs_flatpak_rescan_app_data (self, interactive, cancellable, error))
return FALSE;
/* get all the updatable apps and runtimes */
- xrefs = flatpak_installation_list_installed_refs_for_update (self->installation,
+ xrefs = flatpak_installation_list_installed_refs_for_update (installation,
cancellable,
error);
if (xrefs == NULL) {
@@ -1817,7 +1864,7 @@ gs_flatpak_add_updates (GsFlatpak *self, GsAppList *list,
return FALSE;
}
- gs_flatpak_ensure_remote_title (self, cancellable);
+ gs_flatpak_ensure_remote_title (self, interactive, cancellable);
/* look at each installed xref */
for (guint i = 0; i < xrefs->len; i++) {
@@ -1831,8 +1878,8 @@ gs_flatpak_add_updates (GsFlatpak *self, GsAppList *list,
/* check the application has already been downloaded */
commit = flatpak_ref_get_commit (FLATPAK_REF (xref));
latest_commit = flatpak_installed_ref_get_latest_commit (xref);
- app = gs_flatpak_create_installed (self, xref, NULL, cancellable);
- main_app = get_real_app_for_update (self, app, cancellable, &error_local);
+ app = gs_flatpak_create_installed (self, xref, NULL, interactive, cancellable);
+ main_app = get_real_app_for_update (self, app, interactive, cancellable, &error_local);
if (main_app == NULL) {
g_debug ("Couldn't get the main app for updatable app extension %s: "
"%s; adding the app itself to the updates list...",
@@ -1869,7 +1916,7 @@ gs_flatpak_add_updates (GsFlatpak *self, GsAppList *list,
/* get the current download size */
if (gs_app_get_size_download (main_app) == 0) {
- if (!flatpak_installation_fetch_remote_size_sync (self->installation,
+ if (!flatpak_installation_fetch_remote_size_sync (installation,
gs_app_get_origin (app),
FLATPAK_REF (xref),
&download_size,
@@ -1885,7 +1932,7 @@ gs_flatpak_add_updates (GsFlatpak *self, GsAppList *list,
}
}
}
- gs_flatpak_set_update_permissions (self, main_app, xref, cancellable);
+ gs_flatpak_set_update_permissions (self, main_app, xref, interactive, cancellable);
gs_app_list_add (list, main_app);
}
@@ -1896,6 +1943,7 @@ gs_flatpak_add_updates (GsFlatpak *self, GsAppList *list,
gboolean
gs_flatpak_refresh (GsFlatpak *self,
guint64 cache_age_secs,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -1905,7 +1953,7 @@ gs_flatpak_refresh (GsFlatpak *self,
g_mutex_unlock (&self->broken_remotes_mutex);
/* manually drop the cache */
- if (!flatpak_installation_drop_caches (self->installation,
+ if (!flatpak_installation_drop_caches (gs_flatpak_get_installation (self, interactive),
cancellable,
error)) {
gs_flatpak_error_convert (error);
@@ -1924,11 +1972,11 @@ gs_flatpak_refresh (GsFlatpak *self,
g_rw_lock_reader_unlock (&self->silo_lock);
/* update AppStream metadata */
- if (!gs_flatpak_refresh_appstream (self, cache_age_secs, cancellable, error))
+ if (!gs_flatpak_refresh_appstream (self, cache_age_secs, interactive, cancellable, error))
return FALSE;
/* ensure valid */
- if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
+ if (!gs_flatpak_rescan_appstream_store (self, interactive, cancellable, error))
return FALSE;
/* success */
@@ -1936,7 +1984,9 @@ gs_flatpak_refresh (GsFlatpak *self,
}
static gboolean
-gs_plugin_refine_item_origin_hostname (GsFlatpak *self, GsApp *app,
+gs_plugin_refine_item_origin_hostname (GsFlatpak *self,
+ GsApp *app,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -1953,7 +2003,7 @@ gs_plugin_refine_item_origin_hostname (GsFlatpak *self, GsApp *app,
return TRUE;
/* get the remote */
- xremote = flatpak_installation_get_remote_by_name (self->installation,
+ xremote = flatpak_installation_get_remote_by_name (gs_flatpak_get_installation (self, interactive),
gs_app_get_origin (app),
cancellable,
&error_local);
@@ -2025,11 +2075,13 @@ gs_refine_item_metadata (GsFlatpak *self, GsApp *app,
static gboolean
gs_plugin_refine_item_origin (GsFlatpak *self,
GsApp *app,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
g_autofree gchar *ref_display = NULL;
g_autoptr(GPtrArray) xremotes = NULL;
+ FlatpakInstallation *installation = gs_flatpak_get_installation (self, interactive);
/* already set */
if (gs_app_get_origin (app) != NULL)
@@ -2046,7 +2098,7 @@ gs_plugin_refine_item_origin (GsFlatpak *self,
/* find list of remotes */
ref_display = gs_flatpak_app_get_ref_display (app);
g_debug ("looking for a remote for %s", ref_display);
- xremotes = flatpak_installation_list_remotes (self->installation,
+ xremotes = flatpak_installation_list_remotes (installation,
cancellable, error);
if (xremotes == NULL) {
gs_flatpak_error_convert (error);
@@ -2065,7 +2117,7 @@ gs_plugin_refine_item_origin (GsFlatpak *self,
/* sync */
remote_name = flatpak_remote_get_name (xremote);
g_debug ("looking at remote %s", remote_name);
- xref = flatpak_installation_fetch_remote_ref_sync (self->installation,
+ xref = flatpak_installation_fetch_remote_ref_sync (installation,
remote_name,
gs_flatpak_app_get_ref_kind (app),
gs_flatpak_app_get_ref_name (app),
@@ -2075,7 +2127,7 @@ gs_plugin_refine_item_origin (GsFlatpak *self,
&error_local);
if (xref != NULL) {
g_debug ("found remote %s", remote_name);
- gs_flatpak_set_app_origin (self, app, remote_name, xremote, cancellable);
+ gs_flatpak_set_app_origin (self, app, remote_name, xremote, interactive, cancellable);
gs_flatpak_app_set_commit (app, flatpak_ref_get_commit (FLATPAK_REF (xref)));
gs_plugin_refine_item_scope (self, app);
return TRUE;
@@ -2116,11 +2168,13 @@ gs_flatpak_create_fake_ref (GsApp *app, GError **error)
static gboolean
gs_flatpak_refine_app_state_unlocked (GsFlatpak *self,
GsApp *app,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
g_autoptr(FlatpakInstalledRef) ref = NULL;
g_autoptr(GPtrArray) installed_refs = NULL;
+ FlatpakInstallation *installation = gs_flatpak_get_installation (self, interactive);
/* already found */
if (gs_app_get_state (app) != GS_APP_STATE_UNKNOWN)
@@ -2131,14 +2185,14 @@ gs_flatpak_refine_app_state_unlocked (GsFlatpak *self,
return FALSE;
/* ensure origin set */
- if (!gs_plugin_refine_item_origin (self, app, cancellable, error))
+ if (!gs_plugin_refine_item_origin (self, app, interactive, cancellable, error))
return FALSE;
/* find the app using the origin and the ID */
g_mutex_lock (&self->installed_refs_mutex);
if (self->installed_refs == NULL) {
- self->installed_refs = flatpak_installation_list_installed_refs (self->installation,
+ self->installed_refs = flatpak_installation_list_installed_refs (installation,
cancellable, error);
if (self->installed_refs == NULL) {
@@ -2168,7 +2222,7 @@ gs_flatpak_refine_app_state_unlocked (GsFlatpak *self,
if (ref != NULL) {
g_debug ("marking %s as installed with flatpak",
gs_app_get_unique_id (app));
- gs_flatpak_set_metadata_installed (self, app, ref, cancellable);
+ gs_flatpak_set_metadata_installed (self, app, ref, interactive, cancellable);
if (gs_app_get_state (app) == GS_APP_STATE_UNKNOWN)
gs_app_set_state (app, GS_APP_STATE_INSTALLED);
@@ -2187,7 +2241,7 @@ gs_flatpak_refine_app_state_unlocked (GsFlatpak *self,
if (gs_app_get_state (app) == GS_APP_STATE_UNKNOWN &&
gs_app_get_origin (app) != NULL) {
g_autoptr(FlatpakRemote) xremote = NULL;
- xremote = flatpak_installation_get_remote_by_name (self->installation,
+ xremote = flatpak_installation_get_remote_by_name (installation,
gs_app_get_origin (app),
cancellable, NULL);
if (xremote != NULL) {
@@ -2218,18 +2272,22 @@ gs_flatpak_refine_app_state_unlocked (GsFlatpak *self,
gboolean
gs_flatpak_refine_app_state (GsFlatpak *self,
GsApp *app,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
/* ensure valid */
- if (!gs_flatpak_rescan_app_data (self, cancellable, error))
+ if (!gs_flatpak_rescan_app_data (self, interactive, cancellable, error))
return FALSE;
- return gs_flatpak_refine_app_state_unlocked (self, app, cancellable, error);
+ return gs_flatpak_refine_app_state_unlocked (self, app, interactive, cancellable, error);
}
static GsApp *
-gs_flatpak_create_runtime (GsFlatpak *self, GsApp *parent, const gchar *runtime)
+gs_flatpak_create_runtime (GsFlatpak *self,
+ GsApp *parent,
+ const gchar *runtime,
+ gboolean interactive)
{
g_autofree gchar *source = NULL;
g_auto(GStrv) split = NULL;
@@ -2274,7 +2332,7 @@ gs_flatpak_create_runtime (GsFlatpak *self, GsApp *parent, const gchar *runtime)
gs_flatpak_app_set_ref_name (app, split[0]);
gs_flatpak_app_set_ref_arch (app, split[1]);
- if (!gs_flatpak_refine_app_state_unlocked (self, app, NULL, &local_error))
+ if (!gs_flatpak_refine_app_state_unlocked (self, app, interactive, NULL, &local_error))
g_debug ("Failed to refine state for runtime '%s': %s", gs_app_get_unique_id (app),
local_error->message);
/* save in the cache */
@@ -2287,6 +2345,7 @@ gs_flatpak_set_app_metadata (GsFlatpak *self,
GsApp *app,
const gchar *data,
gsize length,
+ gboolean interactive,
GError **error)
{
gboolean secure = TRUE;
@@ -2340,7 +2399,7 @@ gs_flatpak_set_app_metadata (GsFlatpak *self,
gs_app_add_kudo (app, GS_APP_KUDO_SANDBOXED_SECURE);
/* create runtime */
- app_runtime = gs_flatpak_create_runtime (self, app, runtime);
+ app_runtime = gs_flatpak_create_runtime (self, app, runtime, interactive);
if (app_runtime != NULL) {
gs_plugin_refine_item_scope (self, app_runtime);
gs_app_set_runtime (app, app_runtime);
@@ -2355,6 +2414,7 @@ gs_flatpak_set_app_metadata (GsFlatpak *self,
static GBytes *
gs_flatpak_fetch_remote_metadata (GsFlatpak *self,
GsApp *app,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -2376,7 +2436,7 @@ gs_flatpak_fetch_remote_metadata (GsFlatpak *self,
xref = gs_flatpak_create_fake_ref (app, error);
if (xref == NULL)
return NULL;
- data = flatpak_installation_fetch_remote_metadata_sync (self->installation,
+ data = flatpak_installation_fetch_remote_metadata_sync (gs_flatpak_get_installation (self,
interactive),
gs_app_get_origin (app),
xref,
cancellable,
@@ -2398,6 +2458,7 @@ gs_flatpak_fetch_remote_metadata (GsFlatpak *self,
static gboolean
gs_plugin_refine_item_metadata (GsFlatpak *self,
GsApp *app,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -2420,7 +2481,7 @@ gs_plugin_refine_item_metadata (GsFlatpak *self,
return TRUE;
/* this is quicker than doing network IO */
- installation_path = flatpak_installation_get_path (self->installation);
+ installation_path = flatpak_installation_get_path (self->installation_noninteractive);
installation_path_str = g_file_get_path (installation_path);
install_path = g_build_filename (installation_path_str,
gs_flatpak_app_get_ref_kind_as_str (app),
@@ -2435,7 +2496,8 @@ gs_plugin_refine_item_metadata (GsFlatpak *self,
return FALSE;
str = contents;
} else {
- data = gs_flatpak_fetch_remote_metadata (self, app, cancellable,
+ data = gs_flatpak_fetch_remote_metadata (self, app, interactive,
+ cancellable,
error);
if (data == NULL)
return FALSE;
@@ -2443,7 +2505,7 @@ gs_plugin_refine_item_metadata (GsFlatpak *self,
}
/* parse key file */
- if (!gs_flatpak_set_app_metadata (self, app, str, len, error))
+ if (!gs_flatpak_set_app_metadata (self, app, str, len, interactive, error))
return FALSE;
return TRUE;
}
@@ -2451,11 +2513,12 @@ gs_plugin_refine_item_metadata (GsFlatpak *self,
static FlatpakInstalledRef *
gs_flatpak_get_installed_ref (GsFlatpak *self,
GsApp *app,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
FlatpakInstalledRef *ref;
- ref = flatpak_installation_get_installed_ref (self->installation,
+ ref = flatpak_installation_get_installed_ref (gs_flatpak_get_installation (self, interactive),
gs_flatpak_app_get_ref_kind (app),
gs_flatpak_app_get_ref_name (app),
gs_flatpak_app_get_ref_arch (app),
@@ -2470,6 +2533,7 @@ gs_flatpak_get_installed_ref (GsFlatpak *self,
static gboolean
gs_flatpak_prune_addons_list (GsFlatpak *self,
GsApp *app,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -2477,6 +2541,7 @@ gs_flatpak_prune_addons_list (GsFlatpak *self,
g_autoptr(GPtrArray) installed_related_refs = NULL;
g_autoptr(GPtrArray) remote_related_refs = NULL;
g_autofree gchar *ref = NULL;
+ FlatpakInstallation *installation = gs_flatpak_get_installation (self, interactive);
g_autoptr(GError) error_local = NULL;
addons_list = gs_app_get_addons (app);
@@ -2509,7 +2574,7 @@ gs_flatpak_prune_addons_list (GsFlatpak *self,
gs_app_get_branch (app));
/* Find installed related refs in case the app is installed */
- installed_related_refs = flatpak_installation_list_installed_related_refs_sync (self->installation,
+ installed_related_refs = flatpak_installation_list_installed_related_refs_sync (installation,
gs_app_get_origin
(app),
ref,
NULL, &error_local);
@@ -2526,7 +2591,7 @@ gs_flatpak_prune_addons_list (GsFlatpak *self,
#if FLATPAK_CHECK_VERSION(1,11,1)
/* Find remote related refs that match the installed version in case the app is installed */
- remote_related_refs = flatpak_installation_list_remote_related_refs_for_installed_sync
(self->installation,
+ remote_related_refs = flatpak_installation_list_remote_related_refs_for_installed_sync (installation,
gs_app_get_origin (app),
ref,
NULL,
&error_local);
@@ -2544,7 +2609,7 @@ gs_flatpak_prune_addons_list (GsFlatpak *self,
/* Find remote related refs in case the app is not installed */
if (remote_related_refs == NULL) {
- remote_related_refs = flatpak_installation_list_remote_related_refs_sync (self->installation,
+ remote_related_refs = flatpak_installation_list_remote_related_refs_sync (installation,
gs_app_get_origin
(app),
ref,
NULL, &error_local);
@@ -2611,6 +2676,7 @@ gs_flatpak_get_app_directory_size (GsApp *app,
static gboolean
gs_plugin_refine_item_size (GsFlatpak *self,
GsApp *app,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -2636,7 +2702,7 @@ gs_plugin_refine_item_size (GsFlatpak *self,
}
/* need runtime */
- if (!gs_plugin_refine_item_metadata (self, app, cancellable, error))
+ if (!gs_plugin_refine_item_metadata (self, app, interactive, cancellable, error))
return FALSE;
/* calculate the platform size too if the app is not installed */
@@ -2648,6 +2714,7 @@ gs_plugin_refine_item_size (GsFlatpak *self,
app_runtime = gs_app_get_runtime (app);
if (!gs_flatpak_refine_app_state_unlocked (self,
app_runtime,
+ interactive,
cancellable,
error))
return FALSE;
@@ -2657,6 +2724,7 @@ gs_plugin_refine_item_size (GsFlatpak *self,
} else {
if (!gs_plugin_refine_item_size (self,
app_runtime,
+ interactive,
cancellable,
error))
return FALSE;
@@ -2664,7 +2732,7 @@ gs_plugin_refine_item_size (GsFlatpak *self,
}
/* just get the size of the app */
- if (!gs_plugin_refine_item_origin (self, app,
+ if (!gs_plugin_refine_item_origin (self, app, interactive,
cancellable, error))
return FALSE;
@@ -2672,7 +2740,7 @@ gs_plugin_refine_item_size (GsFlatpak *self,
* and ignore the download size as this is faster */
if (gs_app_is_installed (app)) {
g_autoptr(FlatpakInstalledRef) xref = NULL;
- xref = gs_flatpak_get_installed_ref (self, app, cancellable, error);
+ xref = gs_flatpak_get_installed_ref (self, app, interactive, cancellable, error);
if (xref == NULL)
return FALSE;
installed_size = flatpak_installed_ref_get_installed_size (xref);
@@ -2694,7 +2762,7 @@ gs_plugin_refine_item_size (GsFlatpak *self,
xref = gs_flatpak_create_fake_ref (app, error);
if (xref == NULL)
return FALSE;
- ret = flatpak_installation_fetch_remote_size_sync (self->installation,
+ ret = flatpak_installation_fetch_remote_size_sync (gs_flatpak_get_installation (self,
interactive),
gs_app_get_origin (app),
xref,
&download_size,
@@ -2753,6 +2821,7 @@ gs_flatpak_refine_appstream_from_bytes (GsFlatpak *self,
FlatpakInstalledRef *installed_ref, /* (nullable) */
GBytes *appstream_gz,
GsPluginRefineFlags flags,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -2893,7 +2962,7 @@ gs_flatpak_refine_appstream_from_bytes (GsFlatpak *self,
return FALSE;
if (gs_app_get_origin (app))
- gs_flatpak_set_app_origin (self, app, gs_app_get_origin (app), NULL, cancellable);
+ gs_flatpak_set_app_origin (self, app, gs_app_get_origin (app), NULL, interactive,
cancellable);
/* use the default release as the version number */
gs_flatpak_refine_appstream_release (component_node, app);
@@ -2912,7 +2981,8 @@ gs_flatpak_refine_appstream_from_bytes (GsFlatpak *self,
static XbNode *
get_renamed_component (GsFlatpak *self,
GsApp *app,
- XbSilo *silo)
+ XbSilo *silo,
+ gboolean interactive)
{
const gchar *origin = gs_app_get_origin (app);
const gchar *renamed_to;
@@ -2925,8 +2995,9 @@ get_renamed_component (GsFlatpak *self,
#endif
g_autoptr(FlatpakRemoteRef) remote_ref = NULL;
g_autoptr(XbNode) component = NULL;
+ FlatpakInstallation *installation = gs_flatpak_get_installation (self, interactive);
- remote_ref = flatpak_installation_fetch_remote_ref_sync (self->installation,
+ remote_ref = flatpak_installation_fetch_remote_ref_sync (installation,
origin,
gs_flatpak_app_get_ref_kind (app),
gs_flatpak_app_get_ref_name (app),
@@ -2957,7 +3028,7 @@ get_renamed_component (GsFlatpak *self,
g_autoptr(FlatpakInstalledRef) installed_ref = NULL;
const gchar *installed_name = NULL;
- installed_ref = flatpak_installation_get_installed_ref (self->installation,
+ installed_ref = flatpak_installation_get_installed_ref (installation,
gs_flatpak_app_get_ref_kind (app),
gs_flatpak_app_get_ref_name (app),
gs_flatpak_app_get_ref_arch (app),
@@ -2977,6 +3048,7 @@ gs_flatpak_refine_appstream (GsFlatpak *self,
GsApp *app,
XbSilo *silo,
GsPluginRefineFlags flags,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -3002,7 +3074,7 @@ gs_flatpak_refine_appstream (GsFlatpak *self,
/* If the app was renamed, use the appstream data from the new name;
* usually it will not exist under the old name */
if (component == NULL && gs_flatpak_app_get_ref_kind (app) == FLATPAK_REF_KIND_APP)
- component = get_renamed_component (self, app, silo);
+ component = get_renamed_component (self, app, silo, interactive);
if (component == NULL) {
g_autoptr(FlatpakInstalledRef) installed_ref = NULL;
@@ -3013,7 +3085,7 @@ gs_flatpak_refine_appstream (GsFlatpak *self,
* appstream data in @silo for it, so use the appstream data from
* within the app.
*/
- installed_ref = flatpak_installation_get_installed_ref (self->installation,
+ installed_ref = flatpak_installation_get_installed_ref (gs_flatpak_get_installation (self,
interactive),
gs_flatpak_app_get_ref_kind (app),
gs_flatpak_app_get_ref_name (app),
gs_flatpak_app_get_ref_arch (app),
@@ -3033,6 +3105,7 @@ gs_flatpak_refine_appstream (GsFlatpak *self,
installed_ref,
appstream_gz,
flags,
+ interactive,
cancellable, error);
}
@@ -3050,6 +3123,7 @@ static gboolean
gs_flatpak_refine_app_unlocked (GsFlatpak *self,
GsApp *app,
GsPluginRefineFlags flags,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -3064,7 +3138,7 @@ gs_flatpak_refine_app_unlocked (GsFlatpak *self,
locker = g_rw_lock_reader_locker_new (&self->silo_lock);
/* always do AppStream properties */
- if (!gs_flatpak_refine_appstream (self, app, self->silo, flags, cancellable, error))
+ if (!gs_flatpak_refine_appstream (self, app, self->silo, flags, interactive, cancellable, error))
return FALSE;
/* AppStream sets the source to appname/arch/branch */
@@ -3074,13 +3148,13 @@ gs_flatpak_refine_app_unlocked (GsFlatpak *self,
}
/* check the installed state */
- if (!gs_flatpak_refine_app_state_unlocked (self, app, cancellable, error)) {
+ if (!gs_flatpak_refine_app_state_unlocked (self, app, interactive, cancellable, error)) {
g_prefix_error (error, "failed to get state: ");
return FALSE;
}
/* hide any addons that aren't for this app */
- if (!gs_flatpak_prune_addons_list (self, app, cancellable, &local_error)) {
+ if (!gs_flatpak_prune_addons_list (self, app, interactive, cancellable, &local_error)) {
g_warning ("failed to prune addons: %s", local_error->message);
g_clear_error (&local_error);
}
@@ -3091,7 +3165,7 @@ gs_flatpak_refine_app_unlocked (GsFlatpak *self,
/* if the state was changed, perhaps set the version from the release */
if (old_state != gs_app_get_state (app)) {
- if (!gs_flatpak_refine_appstream (self, app, self->silo, flags, cancellable, error))
+ if (!gs_flatpak_refine_appstream (self, app, self->silo, flags, interactive, cancellable,
error))
return FALSE;
}
@@ -3107,7 +3181,7 @@ gs_flatpak_refine_app_unlocked (GsFlatpak *self,
/* size */
if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_SIZE) {
g_autoptr(GError) error_local = NULL;
- if (!gs_plugin_refine_item_size (self, app,
+ if (!gs_plugin_refine_item_size (self, app, interactive,
cancellable, &error_local)) {
if (g_error_matches (error_local, GS_PLUGIN_ERROR,
GS_PLUGIN_ERROR_NO_NETWORK)) {
@@ -3140,7 +3214,7 @@ gs_flatpak_refine_app_unlocked (GsFlatpak *self,
/* origin-hostname */
if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN_HOSTNAME) {
- if (!gs_plugin_refine_item_origin_hostname (self, app,
+ if (!gs_plugin_refine_item_origin_hostname (self, app, interactive,
cancellable,
error)) {
g_prefix_error (error, "failed to get origin-hostname: ");
@@ -3152,7 +3226,7 @@ gs_flatpak_refine_app_unlocked (GsFlatpak *self,
if (flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_RUNTIME ||
flags & GS_PLUGIN_REFINE_FLAGS_REQUIRE_PERMISSIONS) {
g_autoptr(GError) error_local = NULL;
- if (!gs_plugin_refine_item_metadata (self, app,
+ if (!gs_plugin_refine_item_metadata (self, app, interactive,
cancellable, &error_local)) {
if (!gs_plugin_get_network_available (self->plugin) &&
g_error_matches (error_local, GS_PLUGIN_ERROR,
@@ -3170,7 +3244,7 @@ gs_flatpak_refine_app_unlocked (GsFlatpak *self,
}
if (gs_app_get_origin (app))
- gs_flatpak_set_app_origin (self, app, gs_app_get_origin (app), NULL, cancellable);
+ gs_flatpak_set_app_origin (self, app, gs_app_get_origin (app), NULL, interactive,
cancellable);
return TRUE;
}
@@ -3180,6 +3254,7 @@ gs_flatpak_refine_addons (GsFlatpak *self,
GsApp *parent_app,
GsPluginRefineFlags flags,
GsAppState state,
+ gboolean interactive,
GCancellable *cancellable)
{
GsAppList *addons;
@@ -3199,7 +3274,7 @@ gs_flatpak_refine_addons (GsFlatpak *self,
/* To have refined also the state */
gs_app_set_state (addon, GS_APP_STATE_UNKNOWN);
- if (!gs_flatpak_refine_app_unlocked (self, addon, flags, cancellable, &local_error)) {
+ if (!gs_flatpak_refine_app_unlocked (self, addon, flags, interactive, cancellable,
&local_error)) {
if (errors)
g_string_append_c (errors, '\n');
else
@@ -3225,19 +3300,21 @@ gboolean
gs_flatpak_refine_app (GsFlatpak *self,
GsApp *app,
GsPluginRefineFlags flags,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
/* ensure valid */
- if (!gs_flatpak_rescan_app_data (self, cancellable, error))
+ if (!gs_flatpak_rescan_app_data (self, interactive, cancellable, error))
return FALSE;
- return gs_flatpak_refine_app_unlocked (self, app, flags, cancellable, error);
+ return gs_flatpak_refine_app_unlocked (self, app, flags, interactive, cancellable, error);
}
gboolean
gs_flatpak_refine_wildcard (GsFlatpak *self, GsApp *app,
GsAppList *list, GsPluginRefineFlags refine_flags,
+ gboolean interactive,
GCancellable *cancellable, GError **error)
{
const gchar *id;
@@ -3252,7 +3329,7 @@ gs_flatpak_refine_wildcard (GsFlatpak *self, GsApp *app,
return TRUE;
/* ensure valid */
- if (!gs_flatpak_rescan_app_data (self, cancellable, error))
+ if (!gs_flatpak_rescan_app_data (self, interactive, cancellable, error))
return FALSE;
locker = g_rw_lock_reader_locker_new (&self->silo_lock);
@@ -3269,7 +3346,7 @@ gs_flatpak_refine_wildcard (GsFlatpak *self, GsApp *app,
return FALSE;
}
- gs_flatpak_ensure_remote_title (self, cancellable);
+ gs_flatpak_ensure_remote_title (self, interactive, cancellable);
for (guint i = 0; i < components->len; i++) {
XbNode *component = g_ptr_array_index (components, i);
@@ -3278,7 +3355,7 @@ gs_flatpak_refine_wildcard (GsFlatpak *self, GsApp *app,
if (new == NULL)
return FALSE;
gs_flatpak_claim_app (self, new);
- if (!gs_flatpak_refine_app_unlocked (self, new, refine_flags, cancellable, error))
+ if (!gs_flatpak_refine_app_unlocked (self, new, refine_flags, interactive, cancellable,
error))
return FALSE;
gs_app_subsume_metadata (new, app);
gs_app_list_add (list, new);
@@ -3291,11 +3368,12 @@ gs_flatpak_refine_wildcard (GsFlatpak *self, GsApp *app,
gboolean
gs_flatpak_launch (GsFlatpak *self,
GsApp *app,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
/* launch the app */
- if (!flatpak_installation_launch (self->installation,
+ if (!flatpak_installation_launch (gs_flatpak_get_installation (self, interactive),
gs_flatpak_app_get_ref_name (app),
gs_flatpak_app_get_ref_arch (app),
gs_app_get_branch (app),
@@ -3312,14 +3390,16 @@ gboolean
gs_flatpak_app_remove_source (GsFlatpak *self,
GsApp *app,
gboolean is_remove,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
g_autoptr(FlatpakRemote) xremote = NULL;
gboolean success;
+ FlatpakInstallation *installation = gs_flatpak_get_installation (self, interactive);
/* find the remote */
- xremote = flatpak_installation_get_remote_by_name (self->installation,
+ xremote = flatpak_installation_get_remote_by_name (installation,
gs_app_get_id (app),
cancellable, error);
if (xremote == NULL) {
@@ -3333,11 +3413,11 @@ gs_flatpak_app_remove_source (GsFlatpak *self,
/* remove */
gs_app_set_state (app, GS_APP_STATE_REMOVING);
if (is_remove) {
- success = flatpak_installation_remove_remote (self->installation, gs_app_get_id (app),
cancellable, error);
+ success = flatpak_installation_remove_remote (installation, gs_app_get_id (app), cancellable,
error);
} else {
gboolean was_disabled = flatpak_remote_get_disabled (xremote);
flatpak_remote_set_disabled (xremote, TRUE);
- success = flatpak_installation_modify_remote (self->installation, xremote, cancellable,
error);
+ success = flatpak_installation_modify_remote (installation, xremote, cancellable, error);
if (!success)
flatpak_remote_set_disabled (xremote, was_disabled);
}
@@ -3365,6 +3445,7 @@ GsApp *
gs_flatpak_file_to_app_bundle (GsFlatpak *self,
GFile *file,
gboolean unrefined,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -3383,7 +3464,7 @@ gs_flatpak_file_to_app_bundle (GsFlatpak *self,
}
/* load metadata */
- app = gs_flatpak_create_app (self, NULL, FLATPAK_REF (xref_bundle), NULL, cancellable);
+ app = gs_flatpak_create_app (self, NULL, FLATPAK_REF (xref_bundle), NULL, interactive, cancellable);
if (unrefined)
return g_steal_pointer (&app);
@@ -3395,6 +3476,7 @@ gs_flatpak_file_to_app_bundle (GsFlatpak *self,
if (!gs_flatpak_set_app_metadata (self, app,
g_bytes_get_data (metadata, NULL),
g_bytes_get_size (metadata),
+ interactive,
error))
return NULL;
@@ -3404,6 +3486,7 @@ gs_flatpak_file_to_app_bundle (GsFlatpak *self,
if (!gs_flatpak_refine_appstream_from_bytes (self, app, NULL, NULL,
appstream_gz,
GS_PLUGIN_REFINE_FLAGS_REQUIRE_ID,
+ interactive,
cancellable, error))
return NULL;
} else {
@@ -3478,6 +3561,7 @@ GsApp *
gs_flatpak_file_to_app_ref (GsFlatpak *self,
GFile *file,
gboolean unrefined,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -3509,6 +3593,7 @@ gs_flatpak_file_to_app_ref (GsFlatpak *self,
g_autofree gchar *ref_title = NULL;
g_autofree gchar *ref_name = NULL;
g_autofree gchar *ref_branch = NULL;
+ FlatpakInstallation *installation = gs_flatpak_get_installation (self, interactive);
/* add current locales */
for (guint i = 0; locales[i] != NULL; i++)
@@ -3577,14 +3662,14 @@ gs_flatpak_file_to_app_ref (GsFlatpak *self,
}
/* early return */
- app = gs_flatpak_create_app (self, NULL, parsed_ref, NULL, cancellable);
+ app = gs_flatpak_create_app (self, NULL, parsed_ref, NULL, interactive, cancellable);
return g_steal_pointer (&app);
}
/* Add the remote (to the temporary installation) but abort the
* transaction before it installs the app
*/
- transaction = flatpak_transaction_new_for_installation (self->installation, cancellable, error);
+ transaction = flatpak_transaction_new_for_installation (installation, cancellable, error);
if (transaction == NULL) {
gs_flatpak_error_convert (error);
return NULL;
@@ -3639,7 +3724,7 @@ gs_flatpak_file_to_app_ref (GsFlatpak *self,
#if FLATPAK_CHECK_VERSION(1,13,1)
/* fetch remote ref */
- remote_ref = flatpak_installation_fetch_remote_ref_sync (self->installation,
+ remote_ref = flatpak_installation_fetch_remote_ref_sync (installation,
remote_name,
flatpak_ref_get_kind (parsed_ref),
flatpak_ref_get_name (parsed_ref),
@@ -3651,9 +3736,9 @@ gs_flatpak_file_to_app_ref (GsFlatpak *self,
gs_flatpak_error_convert (error);
return NULL;
}
- app = gs_flatpak_create_app (self, remote_name, FLATPAK_REF (remote_ref), NULL, cancellable);
+ app = gs_flatpak_create_app (self, remote_name, FLATPAK_REF (remote_ref), NULL, interactive,
cancellable);
#else
- app = gs_flatpak_create_app (self, remote_name, parsed_ref, NULL, cancellable);
+ app = gs_flatpak_create_app (self, remote_name, parsed_ref, NULL, interactive, cancellable);
if (app_download_size != 0)
gs_app_set_size_download (app, app_download_size);
if (app_installed_size != 0)
@@ -3718,7 +3803,7 @@ gs_flatpak_file_to_app_ref (GsFlatpak *self,
}
/* set the origin data */
- xremote = flatpak_installation_get_remote_by_name (self->installation,
+ xremote = flatpak_installation_get_remote_by_name (installation,
remote_name,
cancellable,
error);
@@ -3738,7 +3823,7 @@ gs_flatpak_file_to_app_ref (GsFlatpak *self,
gs_app_set_origin_hostname (app, origin_url);
/* get the new appstream data (nonfatal for failure) */
- if (!gs_flatpak_refresh_appstream_remote (self, remote_name,
+ if (!gs_flatpak_refresh_appstream_remote (self, remote_name, interactive,
cancellable, &error_local)) {
g_autoptr(GsPluginEvent) event = NULL;
@@ -3753,11 +3838,11 @@ gs_flatpak_file_to_app_ref (GsFlatpak *self,
}
/* get this now, as it's not going to be available at install time */
- if (!gs_plugin_refine_item_metadata (self, app, cancellable, error))
+ if (!gs_plugin_refine_item_metadata (self, app, interactive, cancellable, error))
return NULL;
/* parse it */
- if (!gs_flatpak_add_apps_from_xremote (self, builder, xremote, cancellable, error))
+ if (!gs_flatpak_add_apps_from_xremote (self, builder, xremote, interactive, cancellable, error))
return NULL;
/* build silo */
@@ -3781,6 +3866,7 @@ gs_flatpak_file_to_app_ref (GsFlatpak *self,
/* get extra AppStream data if available */
if (!gs_flatpak_refine_appstream (self, app, silo,
GS_PLUGIN_REFINE_FLAGS_MASK,
+ interactive,
cancellable,
error))
return NULL;
@@ -3793,6 +3879,7 @@ gboolean
gs_flatpak_search (GsFlatpak *self,
const gchar * const *values,
GsAppList *list,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -3803,7 +3890,7 @@ gs_flatpak_search (GsFlatpak *self,
GHashTableIter iter;
gpointer key, value;
- if (!gs_flatpak_rescan_app_data (self, cancellable, error))
+ if (!gs_flatpak_rescan_app_data (self, interactive, cancellable, error))
return FALSE;
locker = g_rw_lock_reader_locker_new (&self->silo_lock);
@@ -3811,9 +3898,9 @@ gs_flatpak_search (GsFlatpak *self,
cancellable, error))
return FALSE;
- gs_flatpak_ensure_remote_title (self, cancellable);
+ gs_flatpak_ensure_remote_title (self, interactive, cancellable);
- gs_flatpak_claim_app_list (self, list_tmp);
+ gs_flatpak_claim_app_list (self, list_tmp, interactive);
gs_app_list_add_list (list, list_tmp);
/* Also search silos from installed apps which were missing from self->silo */
@@ -3835,7 +3922,7 @@ gs_flatpak_search (GsFlatpak *self,
kind = FLATPAK_REF_KIND_APP;
else
kind = FLATPAK_REF_KIND_RUNTIME;
- installed_ref = flatpak_installation_get_installed_ref (self->installation,
+ installed_ref = flatpak_installation_get_installed_ref (gs_flatpak_get_installation (self,
interactive),
kind,
split[1],
split[2],
@@ -3850,7 +3937,7 @@ gs_flatpak_search (GsFlatpak *self,
cancellable, error))
return FALSE;
- gs_flatpak_claim_app_list (self, app_list_tmp);
+ gs_flatpak_claim_app_list (self, app_list_tmp, interactive);
gs_app_list_add_list (list, app_list_tmp);
}
@@ -3866,12 +3953,13 @@ gboolean
gs_flatpak_add_category_apps (GsFlatpak *self,
GsCategory *category,
GsAppList *list,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
g_autoptr(GRWLockReaderLocker) locker = NULL;
- if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
+ if (!gs_flatpak_rescan_appstream_store (self, interactive, cancellable, error))
return FALSE;
locker = g_rw_lock_reader_locker_new (&self->silo_lock);
@@ -3883,12 +3971,13 @@ gs_flatpak_add_category_apps (GsFlatpak *self,
gboolean
gs_flatpak_add_categories (GsFlatpak *self,
GPtrArray *list,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
g_autoptr(GRWLockReaderLocker) locker = NULL;
- if (!gs_flatpak_rescan_app_data (self, cancellable, error))
+ if (!gs_flatpak_rescan_app_data (self, interactive, cancellable, error))
return FALSE;
locker = g_rw_lock_reader_locker_new (&self->silo_lock);
@@ -3899,13 +3988,14 @@ gs_flatpak_add_categories (GsFlatpak *self,
gboolean
gs_flatpak_add_popular (GsFlatpak *self,
GsAppList *list,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
g_autoptr(GsAppList) list_tmp = gs_app_list_new ();
g_autoptr(GRWLockReaderLocker) locker = NULL;
- if (!gs_flatpak_rescan_app_data (self, cancellable, error))
+ if (!gs_flatpak_rescan_app_data (self, interactive, cancellable, error))
return FALSE;
locker = g_rw_lock_reader_locker_new (&self->silo_lock);
@@ -3921,13 +4011,14 @@ gs_flatpak_add_popular (GsFlatpak *self,
gboolean
gs_flatpak_add_featured (GsFlatpak *self,
GsAppList *list,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
g_autoptr(GsAppList) list_tmp = gs_app_list_new ();
g_autoptr(GRWLockReaderLocker) locker = NULL;
- if (!gs_flatpak_rescan_app_data (self, cancellable, error))
+ if (!gs_flatpak_rescan_app_data (self, interactive, cancellable, error))
return FALSE;
locker = g_rw_lock_reader_locker_new (&self->silo_lock);
@@ -3944,13 +4035,14 @@ gboolean
gs_flatpak_add_alternates (GsFlatpak *self,
GsApp *app,
GsAppList *list,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
g_autoptr(GsAppList) list_tmp = gs_app_list_new ();
g_autoptr(GRWLockReaderLocker) locker = NULL;
- if (!gs_flatpak_rescan_app_data (self, cancellable, error))
+ if (!gs_flatpak_rescan_app_data (self, interactive, cancellable, error))
return FALSE;
locker = g_rw_lock_reader_locker_new (&self->silo_lock);
@@ -3967,13 +4059,14 @@ gboolean
gs_flatpak_add_recent (GsFlatpak *self,
GsAppList *list,
guint64 age,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
g_autoptr(GsAppList) list_tmp = gs_app_list_new ();
g_autoptr(GRWLockReaderLocker) locker = NULL;
- if (!gs_flatpak_rescan_app_data (self, cancellable, error))
+ if (!gs_flatpak_rescan_app_data (self, interactive, cancellable, error))
return FALSE;
locker = g_rw_lock_reader_locker_new (&self->silo_lock);
@@ -3981,7 +4074,7 @@ gs_flatpak_add_recent (GsFlatpak *self,
cancellable, error))
return FALSE;
- gs_flatpak_claim_app_list (self, list_tmp);
+ gs_flatpak_claim_app_list (self, list_tmp, interactive);
gs_app_list_add_list (list, list_tmp);
return TRUE;
@@ -3991,20 +4084,21 @@ gboolean
gs_flatpak_url_to_app (GsFlatpak *self,
GsAppList *list,
const gchar *url,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
g_autoptr(GsAppList) list_tmp = gs_app_list_new ();
g_autoptr(GRWLockReaderLocker) locker = NULL;
- if (!gs_flatpak_rescan_app_data (self, cancellable, error))
+ if (!gs_flatpak_rescan_app_data (self, interactive, cancellable, error))
return FALSE;
locker = g_rw_lock_reader_locker_new (&self->silo_lock);
if (!gs_appstream_url_to_app (self->plugin, self->silo, list_tmp, url, cancellable, error))
return FALSE;
- gs_flatpak_claim_app_list (self, list_tmp);
+ gs_flatpak_claim_app_list (self, list_tmp, interactive);
gs_app_list_add_list (list, list_tmp);
return TRUE;
@@ -4017,9 +4111,9 @@ gs_flatpak_get_id (GsFlatpak *self)
GString *str = g_string_new ("flatpak");
g_string_append_printf (str, "-%s",
as_component_scope_to_string (self->scope));
- if (flatpak_installation_get_id (self->installation) != NULL) {
+ if (flatpak_installation_get_id (self->installation_noninteractive) != NULL) {
g_string_append_printf (str, "-%s",
- flatpak_installation_get_id (self->installation));
+ flatpak_installation_get_id
(self->installation_noninteractive));
}
if (self->flags & GS_FLATPAK_FLAG_IS_TEMPORARY)
g_string_append (str, "-temp");
@@ -4035,9 +4129,10 @@ gs_flatpak_get_scope (GsFlatpak *self)
}
FlatpakInstallation *
-gs_flatpak_get_installation (GsFlatpak *self)
+gs_flatpak_get_installation (GsFlatpak *self,
+ gboolean interactive)
{
- return self->installation;
+ return interactive ? self->installation_interactive : self->installation_noninteractive;
}
static void
@@ -4057,7 +4152,8 @@ gs_flatpak_finalize (GObject *object)
g_object_unref (self->monitor);
g_free (self->id);
- g_object_unref (self->installation);
+ g_object_unref (self->installation_noninteractive);
+ g_object_unref (self->installation_interactive);
g_clear_pointer (&self->installed_refs, g_ptr_array_unref);
g_mutex_clear (&self->installed_refs_mutex);
g_object_unref (self->plugin);
@@ -4101,10 +4197,23 @@ GsFlatpak *
gs_flatpak_new (GsPlugin *plugin, FlatpakInstallation *installation, GsFlatpakFlags flags)
{
GsFlatpak *self;
+ g_autoptr(GFile) path = NULL;
+ gboolean is_user;
+
+ path = flatpak_installation_get_path (installation);
+ is_user = flatpak_installation_get_is_user (installation);
+
self = g_object_new (GS_TYPE_FLATPAK, NULL);
- self->installation = g_object_ref (installation);
- self->scope = flatpak_installation_get_is_user (installation)
- ? AS_COMPONENT_SCOPE_USER : AS_COMPONENT_SCOPE_SYSTEM;
+
+ self->installation_noninteractive = g_object_ref (installation);
+ flatpak_installation_set_no_interaction (self->installation_noninteractive, TRUE);
+
+ /* Cloning it should never fail as the repo should already exist on disk. */
+ self->installation_interactive = flatpak_installation_new_for_path (path, is_user, NULL, NULL);
+ g_assert (self->installation_interactive != NULL);
+ flatpak_installation_set_no_interaction (self->installation_interactive, FALSE);
+
+ self->scope = is_user ? AS_COMPONENT_SCOPE_USER : AS_COMPONENT_SCOPE_SYSTEM;
self->plugin = g_object_ref (plugin);
self->flags = flags;
return GS_FLATPAK (self);
diff --git a/plugins/flatpak/gs-flatpak.h b/plugins/flatpak/gs-flatpak.h
index 4eb9ce7b6..3c4724897 100644
--- a/plugins/flatpak/gs-flatpak.h
+++ b/plugins/flatpak/gs-flatpak.h
@@ -27,9 +27,14 @@ typedef enum {
GsFlatpak *gs_flatpak_new (GsPlugin *plugin,
FlatpakInstallation *installation,
GsFlatpakFlags flags);
-FlatpakInstallation *gs_flatpak_get_installation (GsFlatpak *self);
+FlatpakInstallation *gs_flatpak_get_installation (GsFlatpak *self,
+ gboolean interactive);
-GsApp *gs_flatpak_ref_to_app (GsFlatpak *self, const gchar *ref, GCancellable *cancellable, GError **error);
+GsApp *gs_flatpak_ref_to_app (GsFlatpak *self,
+ const gchar *ref,
+ gboolean interactive,
+ GCancellable *cancellable,
+ GError **error);
AsComponentScope gs_flatpak_get_scope (GsFlatpak *self);
const gchar *gs_flatpak_get_id (GsFlatpak *self);
@@ -38,103 +43,125 @@ gboolean gs_flatpak_setup (GsFlatpak *self,
GError **error);
gboolean gs_flatpak_add_installed (GsFlatpak *self,
GsAppList *list,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
gboolean gs_flatpak_add_sources (GsFlatpak *self,
GsAppList *list,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
gboolean gs_flatpak_add_updates (GsFlatpak *self,
GsAppList *list,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
gboolean gs_flatpak_refresh (GsFlatpak *self,
guint64 cache_age_secs,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
gboolean gs_flatpak_refine_app (GsFlatpak *self,
GsApp *app,
GsPluginRefineFlags flags,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
void gs_flatpak_refine_addons (GsFlatpak *self,
GsApp *parent_app,
GsPluginRefineFlags flags,
GsAppState state,
+ gboolean interactive,
GCancellable *cancellable);
gboolean gs_flatpak_refine_app_state (GsFlatpak *self,
GsApp *app,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
gboolean gs_flatpak_refine_wildcard (GsFlatpak *self,
GsApp *app,
GsAppList *list,
GsPluginRefineFlags flags,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
gboolean gs_flatpak_launch (GsFlatpak *self,
GsApp *app,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
gboolean gs_flatpak_app_remove_source (GsFlatpak *self,
GsApp *app,
gboolean is_remove,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
gboolean gs_flatpak_app_install_source (GsFlatpak *self,
GsApp *app,
gboolean is_install,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
GsApp *gs_flatpak_file_to_app_ref (GsFlatpak *self,
GFile *file,
gboolean unrefined,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
GsApp *gs_flatpak_file_to_app_bundle (GsFlatpak *self,
GFile *file,
gboolean unrefined,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
GsApp *gs_flatpak_find_source_by_url (GsFlatpak *self,
const gchar *name,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
gboolean gs_flatpak_search (GsFlatpak *self,
const gchar * const *values,
GsAppList *list,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
gboolean gs_flatpak_add_categories (GsFlatpak *self,
GPtrArray *list,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
gboolean gs_flatpak_add_category_apps (GsFlatpak *self,
GsCategory *category,
GsAppList *list,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
gboolean gs_flatpak_add_popular (GsFlatpak *self,
GsAppList *list,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
gboolean gs_flatpak_add_featured (GsFlatpak *self,
GsAppList *list,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
gboolean gs_flatpak_add_alternates (GsFlatpak *self,
GsApp *app,
GsAppList *list,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
gboolean gs_flatpak_add_recent (GsFlatpak *self,
GsAppList *list,
guint64 age,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
gboolean gs_flatpak_url_to_app (GsFlatpak *self,
GsAppList *list,
const gchar *url,
+ gboolean interactive,
GCancellable *cancellable,
GError **error);
void gs_flatpak_set_busy (GsFlatpak *self,
diff --git a/plugins/flatpak/gs-plugin-flatpak.c b/plugins/flatpak/gs-plugin-flatpak.c
index b846af4b0..15e60404d 100644
--- a/plugins/flatpak/gs-plugin-flatpak.c
+++ b/plugins/flatpak/gs-plugin-flatpak.c
@@ -385,6 +385,7 @@ list_installed_apps_thread_cb (GTask *task,
GsPluginFlatpak *self = GS_PLUGIN_FLATPAK (source_object);
g_autoptr(GsAppList) list = gs_app_list_new ();
GsPluginListInstalledAppsFlags flags = GPOINTER_TO_INT (task_data);
+ gboolean interactive = (flags & GS_PLUGIN_LIST_INSTALLED_APPS_FLAGS_INTERACTIVE);
g_autoptr(GError) local_error = NULL;
assert_in_worker (self);
@@ -392,7 +393,7 @@ list_installed_apps_thread_cb (GTask *task,
for (guint i = 0; i < self->installations->len; i++) {
GsFlatpak *flatpak = g_ptr_array_index (self->installations, i);
- if (!gs_flatpak_add_installed (flatpak, list, cancellable, &local_error)) {
+ if (!gs_flatpak_add_installed (flatpak, list, interactive, cancellable, &local_error)) {
g_task_return_error (task, g_steal_pointer (&local_error));
return;
}
@@ -416,10 +417,11 @@ gs_plugin_add_sources (GsPlugin *plugin,
GError **error)
{
GsPluginFlatpak *self = GS_PLUGIN_FLATPAK (plugin);
+ gboolean interactive = gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE);
for (guint i = 0; i < self->installations->len; i++) {
GsFlatpak *flatpak = g_ptr_array_index (self->installations, i);
- if (!gs_flatpak_add_sources (flatpak, list, cancellable, error))
+ if (!gs_flatpak_add_sources (flatpak, list, interactive, cancellable, error))
return FALSE;
}
return TRUE;
@@ -432,10 +434,11 @@ gs_plugin_add_updates (GsPlugin *plugin,
GError **error)
{
GsPluginFlatpak *self = GS_PLUGIN_FLATPAK (plugin);
+ gboolean interactive = gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE);
for (guint i = 0; i < self->installations->len; i++) {
GsFlatpak *flatpak = g_ptr_array_index (self->installations, i);
- if (!gs_flatpak_add_updates (flatpak, list, cancellable, error))
+ if (!gs_flatpak_add_updates (flatpak, list, interactive, cancellable, error))
return FALSE;
}
gs_plugin_cache_lookup_by_state (plugin, list, GS_APP_STATE_INSTALLING);
@@ -476,23 +479,15 @@ refresh_metadata_thread_cb (GTask *task,
{
GsPluginFlatpak *self = GS_PLUGIN_FLATPAK (source_object);
GsPluginRefreshMetadataData *data = task_data;
+ gboolean interactive = (data->flags & GS_PLUGIN_REFRESH_METADATA_FLAGS_INTERACTIVE);
g_autoptr(GError) local_error = NULL;
assert_in_worker (self);
for (guint i = 0; i < self->installations->len; i++) {
- FlatpakInstallation *installation;
GsFlatpak *flatpak = g_ptr_array_index (self->installations, i);
- g_autoptr(FlatpakInstallation) installation_clone = NULL;
-
- installation = gs_flatpak_get_installation (flatpak);
- installation_clone = g_object_ref (installation);
- /* Let flatpak know if it is a background operation */
- flatpak_installation_set_no_interaction (installation_clone,
- !(data->flags &
GS_PLUGIN_REFRESH_METADATA_FLAGS_INTERACTIVE));
-
- if (!gs_flatpak_refresh (flatpak, data->cache_age_secs, cancellable, &local_error)) {
+ if (!gs_flatpak_refresh (flatpak, data->cache_age_secs, interactive, cancellable,
&local_error)) {
g_task_return_error (task, g_steal_pointer (&local_error));
return;
}
@@ -543,6 +538,7 @@ static gboolean
gs_plugin_flatpak_refine_app (GsPluginFlatpak *self,
GsApp *app,
GsPluginRefineFlags flags,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -559,7 +555,7 @@ gs_plugin_flatpak_refine_app (GsPluginFlatpak *self,
for (guint i = 0; i < self->installations->len; i++) {
GsFlatpak *flatpak_tmp = g_ptr_array_index (self->installations, i);
g_autoptr(GError) error_local = NULL;
- if (gs_flatpak_refine_app_state (flatpak_tmp, app,
+ if (gs_flatpak_refine_app_state (flatpak_tmp, app, interactive,
cancellable, &error_local)) {
flatpak = flatpak_tmp;
break;
@@ -572,7 +568,7 @@ gs_plugin_flatpak_refine_app (GsPluginFlatpak *self,
}
if (flatpak == NULL)
return TRUE;
- return gs_flatpak_refine_app (flatpak, app, flags, cancellable, error);
+ return gs_flatpak_refine_app (flatpak, app, flags, interactive, cancellable, error);
}
@@ -580,6 +576,7 @@ static gboolean
refine_app (GsPluginFlatpak *self,
GsApp *app,
GsPluginRefineFlags flags,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -588,7 +585,7 @@ refine_app (GsPluginFlatpak *self,
return TRUE;
/* get the runtime first */
- if (!gs_plugin_flatpak_refine_app (self, app, flags, cancellable, error))
+ if (!gs_plugin_flatpak_refine_app (self, app, flags, interactive, cancellable, error))
return FALSE;
/* the runtime might be installed in a different scope */
@@ -597,6 +594,7 @@ refine_app (GsPluginFlatpak *self,
if (runtime != NULL) {
if (!gs_plugin_flatpak_refine_app (self, app,
flags,
+ interactive,
cancellable,
error)) {
return FALSE;
@@ -641,6 +639,7 @@ refine_thread_cb (GTask *task,
GsPluginRefineData *data = task_data;
GsAppList *list = data->list;
GsPluginRefineFlags flags = data->flags;
+ gboolean interactive = gs_plugin_has_flags (GS_PLUGIN (self), GS_PLUGIN_FLAGS_INTERACTIVE);
g_autoptr(GsAppList) app_list = NULL;
g_autoptr(GError) local_error = NULL;
@@ -648,7 +647,7 @@ refine_thread_cb (GTask *task,
for (guint i = 0; i < gs_app_list_length (list); i++) {
GsApp *app = gs_app_list_index (list, i);
- if (!refine_app (self, app, flags, cancellable, &local_error)) {
+ if (!refine_app (self, app, flags, interactive, cancellable, &local_error)) {
g_task_return_error (task, g_steal_pointer (&local_error));
return;
}
@@ -671,7 +670,7 @@ refine_thread_cb (GTask *task,
for (guint i = 0; i < self->installations->len; i++) {
GsFlatpak *flatpak = g_ptr_array_index (self->installations, i);
- if (!gs_flatpak_refine_wildcard (flatpak, app, list, flags,
+ if (!gs_flatpak_refine_wildcard (flatpak, app, list, flags, interactive,
cancellable, &local_error)) {
g_task_return_error (task, g_steal_pointer (&local_error));
return;
@@ -697,15 +696,19 @@ gs_plugin_launch (GsPlugin *plugin,
GError **error)
{
GsFlatpak *flatpak = gs_plugin_flatpak_get_handler (GS_PLUGIN_FLATPAK (plugin), app);
+ gboolean interactive = gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE);
+
if (flatpak == NULL)
return TRUE;
- return gs_flatpak_launch (flatpak, app, cancellable, error);
+
+ return gs_flatpak_launch (flatpak, app, interactive, cancellable, error);
}
/* ref full */
static GsApp *
gs_plugin_flatpak_find_app_by_ref (GsPluginFlatpak *self,
const gchar *ref,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -715,7 +718,7 @@ gs_plugin_flatpak_find_app_by_ref (GsPluginFlatpak *self,
g_autoptr(GsApp) app = NULL;
g_autoptr(GError) error_local = NULL;
- app = gs_flatpak_ref_to_app (flatpak_tmp, ref, cancellable, &error_local);
+ app = gs_flatpak_ref_to_app (flatpak_tmp, ref, interactive, cancellable, &error_local);
if (app == NULL) {
g_debug ("%s", error_local->message);
continue;
@@ -737,7 +740,9 @@ _ref_to_app (FlatpakTransaction *transaction,
g_return_val_if_fail (GS_IS_PLUGIN_FLATPAK (self), NULL);
/* search through each GsFlatpak */
- return gs_plugin_flatpak_find_app_by_ref (self, ref, NULL, NULL);
+ return gs_plugin_flatpak_find_app_by_ref (self, ref,
+ gs_plugin_has_flags (GS_PLUGIN (self),
GS_PLUGIN_FLAGS_INTERACTIVE),
+ NULL, NULL);
}
static void
@@ -915,7 +920,7 @@ _build_transaction (GsPlugin *plugin, GsFlatpak *flatpak,
g_autoptr(FlatpakInstallation) installation_clone = NULL;
g_autoptr(FlatpakTransaction) transaction = NULL;
- installation = gs_flatpak_get_installation (flatpak);
+ installation = gs_flatpak_get_installation (flatpak, interactive);
installation_clone = g_object_ref (installation);
@@ -1118,6 +1123,7 @@ gs_plugin_app_remove (GsPlugin *plugin,
GsFlatpak *flatpak;
g_autoptr(FlatpakTransaction) transaction = NULL;
g_autofree gchar *ref = NULL;
+ gboolean interactive = gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE);
/* not supported */
flatpak = gs_plugin_flatpak_get_handler (self, app);
@@ -1155,19 +1161,25 @@ gs_plugin_app_remove (GsPlugin *plugin,
}
/* get any new state */
- if (!gs_flatpak_refresh (flatpak, G_MAXUINT, cancellable, error)) {
+ if (!gs_flatpak_refresh (flatpak, G_MAXUINT, interactive, cancellable, error)) {
gs_flatpak_error_convert (error);
return FALSE;
}
if (!gs_flatpak_refine_app (flatpak, app,
GS_PLUGIN_REFINE_FLAGS_REQUIRE_ID,
+ interactive,
cancellable, error)) {
g_prefix_error (error, "failed to run refine for %s: ", ref);
gs_flatpak_error_convert (error);
return FALSE;
}
- gs_flatpak_refine_addons (flatpak, app, GS_PLUGIN_REFINE_FLAGS_REQUIRE_ID, GS_APP_STATE_REMOVING,
cancellable);
+ gs_flatpak_refine_addons (flatpak,
+ app,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ID,
+ GS_APP_STATE_REMOVING,
+ interactive,
+ cancellable);
return TRUE;
}
@@ -1352,12 +1364,13 @@ gs_plugin_app_install (GsPlugin *plugin,
remove_schedule_entry (schedule_entry_handle);
/* get any new state */
- if (!gs_flatpak_refresh (flatpak, G_MAXUINT, cancellable, error)) {
+ if (!gs_flatpak_refresh (flatpak, G_MAXUINT, interactive, cancellable, error)) {
gs_flatpak_error_convert (error);
return FALSE;
}
if (!gs_flatpak_refine_app (flatpak, app,
GS_PLUGIN_REFINE_FLAGS_REQUIRE_ID,
+ interactive,
cancellable, error)) {
g_prefix_error (error, "failed to run refine for %s: ",
gs_app_get_unique_id (app));
@@ -1365,7 +1378,12 @@ gs_plugin_app_install (GsPlugin *plugin,
return FALSE;
}
- gs_flatpak_refine_addons (flatpak, app, GS_PLUGIN_REFINE_FLAGS_REQUIRE_ID, GS_APP_STATE_INSTALLING,
cancellable);
+ gs_flatpak_refine_addons (flatpak,
+ app,
+ GS_PLUGIN_REFINE_FLAGS_REQUIRE_ID,
+ GS_APP_STATE_INSTALLING,
+ interactive,
+ cancellable);
return TRUE;
}
@@ -1471,7 +1489,7 @@ gs_plugin_flatpak_update (GsPlugin *plugin,
gs_plugin_updates_changed (plugin);
/* get any new state */
- if (!gs_flatpak_refresh (flatpak, G_MAXUINT, cancellable, error)) {
+ if (!gs_flatpak_refresh (flatpak, G_MAXUINT, interactive, cancellable, error)) {
gs_flatpak_error_convert (error);
return FALSE;
}
@@ -1482,6 +1500,7 @@ gs_plugin_flatpak_update (GsPlugin *plugin,
ref = gs_flatpak_app_get_ref_display (app);
if (!gs_flatpak_refine_app (flatpak, app,
GS_PLUGIN_REFINE_FLAGS_REQUIRE_RUNTIME,
+ interactive,
cancellable, error)) {
g_prefix_error (error, "failed to run refine for %s: ", ref);
gs_flatpak_error_convert (error);
@@ -1527,6 +1546,7 @@ gs_plugin_update (GsPlugin *plugin,
static GsApp *
gs_plugin_flatpak_file_to_app_repo (GsPluginFlatpak *self,
GFile *file,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -1544,6 +1564,7 @@ gs_plugin_flatpak_file_to_app_repo (GsPluginFlatpak *self,
g_autoptr(GsApp) app_tmp = NULL;
app_tmp = gs_flatpak_find_source_by_url (flatpak,
gs_flatpak_app_get_repo_url (app),
+ interactive,
cancellable, &error_local);
if (app_tmp == NULL) {
g_debug ("%s", error_local->message);
@@ -1592,6 +1613,7 @@ gs_plugin_flatpak_create_temporary (GsPluginFlatpak *self,
static GsApp *
gs_plugin_flatpak_file_to_app_bundle (GsPluginFlatpak *self,
GFile *file,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -1606,19 +1628,21 @@ gs_plugin_flatpak_file_to_app_bundle (GsPluginFlatpak *self,
return NULL;
/* First make a quick GsApp to get the ref */
- app = gs_flatpak_file_to_app_bundle (flatpak_tmp, file, TRUE /* unrefined */, cancellable, error);
+ app = gs_flatpak_file_to_app_bundle (flatpak_tmp, file, TRUE /* unrefined */,
+ interactive, cancellable, error);
if (app == NULL)
return NULL;
/* is this already installed or available in a configured remote */
ref = gs_flatpak_app_get_ref_display (app);
- app_tmp = gs_plugin_flatpak_find_app_by_ref (self, ref, cancellable, NULL);
+ app_tmp = gs_plugin_flatpak_find_app_by_ref (self, ref, interactive, cancellable, NULL);
if (app_tmp != NULL)
return g_steal_pointer (&app_tmp);
/* If not installed/available, make a fully refined GsApp */
g_clear_object (&app);
- app = gs_flatpak_file_to_app_bundle (flatpak_tmp, file, FALSE /* unrefined */, cancellable, error);
+ app = gs_flatpak_file_to_app_bundle (flatpak_tmp, file, FALSE /* unrefined */,
+ interactive, cancellable, error);
if (app == NULL)
return NULL;
@@ -1632,6 +1656,7 @@ gs_plugin_flatpak_file_to_app_bundle (GsPluginFlatpak *self,
static GsApp *
gs_plugin_flatpak_file_to_app_ref (GsPluginFlatpak *self,
GFile *file,
+ gboolean interactive,
GCancellable *cancellable,
GError **error)
{
@@ -1647,19 +1672,21 @@ gs_plugin_flatpak_file_to_app_ref (GsPluginFlatpak *self,
return NULL;
/* First make a quick GsApp to get the ref */
- app = gs_flatpak_file_to_app_ref (flatpak_tmp, file, TRUE /* unrefined */, cancellable, error);
+ app = gs_flatpak_file_to_app_ref (flatpak_tmp, file, TRUE /* unrefined */,
+ interactive, cancellable, error);
if (app == NULL)
return NULL;
/* is this already installed or available in a configured remote */
ref = gs_flatpak_app_get_ref_display (app);
- app_tmp = gs_plugin_flatpak_find_app_by_ref (self, ref, cancellable, NULL);
+ app_tmp = gs_plugin_flatpak_find_app_by_ref (self, ref, interactive, cancellable, NULL);
if (app_tmp != NULL)
return g_steal_pointer (&app_tmp);
/* If not installed/available, make a fully refined GsApp */
g_clear_object (&app);
- app = gs_flatpak_file_to_app_ref (flatpak_tmp, file, FALSE /* unrefined */, cancellable, error);
+ app = gs_flatpak_file_to_app_ref (flatpak_tmp, file, FALSE /* unrefined */,
+ interactive, cancellable, error);
if (app == NULL)
return NULL;
@@ -1673,6 +1700,7 @@ gs_plugin_flatpak_file_to_app_ref (GsPluginFlatpak *self,
g_autofree gchar *runtime_ref = gs_flatpak_app_get_ref_display (runtime);
runtime_tmp = gs_plugin_flatpak_find_app_by_ref (self,
runtime_ref,
+ interactive,
cancellable,
NULL);
if (runtime_tmp != NULL) {
@@ -1698,6 +1726,7 @@ gs_plugin_file_to_app (GsPlugin *plugin,
GsPluginFlatpak *self = GS_PLUGIN_FLATPAK (plugin);
g_autofree gchar *content_type = NULL;
g_autoptr(GsApp) app = NULL;
+ gboolean interactive = gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE);
const gchar *mimetypes_bundle[] = {
"application/vnd.flatpak",
NULL };
@@ -1713,17 +1742,17 @@ gs_plugin_file_to_app (GsPlugin *plugin,
if (content_type == NULL)
return FALSE;
if (g_strv_contains (mimetypes_bundle, content_type)) {
- app = gs_plugin_flatpak_file_to_app_bundle (self, file,
+ app = gs_plugin_flatpak_file_to_app_bundle (self, file, interactive,
cancellable, error);
if (app == NULL)
return FALSE;
} else if (g_strv_contains (mimetypes_repo, content_type)) {
- app = gs_plugin_flatpak_file_to_app_repo (self, file,
+ app = gs_plugin_flatpak_file_to_app_repo (self, file, interactive,
cancellable, error);
if (app == NULL)
return FALSE;
} else if (g_strv_contains (mimetypes_ref, content_type)) {
- app = gs_plugin_flatpak_file_to_app_ref (self, file,
+ app = gs_plugin_flatpak_file_to_app_ref (self, file, interactive,
cancellable, error);
if (app == NULL)
return FALSE;
@@ -1733,7 +1762,7 @@ gs_plugin_file_to_app (GsPlugin *plugin,
/* Ensure the origin for the runtime is set */
if (runtime != NULL && gs_app_get_origin (runtime) == NULL) {
g_autoptr(GError) error_local = NULL;
- if (!gs_plugin_flatpak_refine_app (self, runtime,
GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN, cancellable, &error_local))
+ if (!gs_plugin_flatpak_refine_app (self, runtime,
GS_PLUGIN_REFINE_FLAGS_REQUIRE_ORIGIN, interactive, cancellable, &error_local))
g_debug ("Failed to refine runtime: %s", error_local->message);
}
gs_app_list_add (list, app);
@@ -1749,11 +1778,12 @@ gs_plugin_flatpak_do_search (GsPlugin *plugin,
GError **error)
{
GsPluginFlatpak *self = GS_PLUGIN_FLATPAK (plugin);
+ gboolean interactive = gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE);
for (guint i = 0; i < self->installations->len; i++) {
GsFlatpak *flatpak = g_ptr_array_index (self->installations, i);
if (!gs_flatpak_search (flatpak, (const gchar * const *) values, list,
- cancellable, error)) {
+ interactive, cancellable, error)) {
return FALSE;
}
}
@@ -1788,10 +1818,11 @@ gs_plugin_add_categories (GsPlugin *plugin,
GError **error)
{
GsPluginFlatpak *self = GS_PLUGIN_FLATPAK (plugin);
+ gboolean interactive = gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE);
for (guint i = 0; i < self->installations->len; i++) {
GsFlatpak *flatpak = g_ptr_array_index (self->installations, i);
- if (!gs_flatpak_add_categories (flatpak, list, cancellable, error))
+ if (!gs_flatpak_add_categories (flatpak, list, interactive, cancellable, error))
return FALSE;
}
return TRUE;
@@ -1805,12 +1836,14 @@ gs_plugin_add_category_apps (GsPlugin *plugin,
GError **error)
{
GsPluginFlatpak *self = GS_PLUGIN_FLATPAK (plugin);
+ gboolean interactive = gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE);
for (guint i = 0; i < self->installations->len; i++) {
GsFlatpak *flatpak = g_ptr_array_index (self->installations, i);
if (!gs_flatpak_add_category_apps (flatpak,
category,
list,
+ interactive,
cancellable,
error)) {
return FALSE;
@@ -1826,10 +1859,11 @@ gs_plugin_add_popular (GsPlugin *plugin,
GError **error)
{
GsPluginFlatpak *self = GS_PLUGIN_FLATPAK (plugin);
+ gboolean interactive = gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE);
for (guint i = 0; i < self->installations->len; i++) {
GsFlatpak *flatpak = g_ptr_array_index (self->installations, i);
- if (!gs_flatpak_add_popular (flatpak, list, cancellable, error))
+ if (!gs_flatpak_add_popular (flatpak, list, interactive, cancellable, error))
return FALSE;
}
return TRUE;
@@ -1843,10 +1877,11 @@ gs_plugin_add_alternates (GsPlugin *plugin,
GError **error)
{
GsPluginFlatpak *self = GS_PLUGIN_FLATPAK (plugin);
+ gboolean interactive = gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE);
for (guint i = 0; i < self->installations->len; i++) {
GsFlatpak *flatpak = g_ptr_array_index (self->installations, i);
- if (!gs_flatpak_add_alternates (flatpak, app, list, cancellable, error))
+ if (!gs_flatpak_add_alternates (flatpak, app, list, interactive, cancellable, error))
return FALSE;
}
return TRUE;
@@ -1859,10 +1894,11 @@ gs_plugin_add_featured (GsPlugin *plugin,
GError **error)
{
GsPluginFlatpak *self = GS_PLUGIN_FLATPAK (plugin);
+ gboolean interactive = gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE);
for (guint i = 0; i < self->installations->len; i++) {
GsFlatpak *flatpak = g_ptr_array_index (self->installations, i);
- if (!gs_flatpak_add_featured (flatpak, list, cancellable, error))
+ if (!gs_flatpak_add_featured (flatpak, list, interactive, cancellable, error))
return FALSE;
}
return TRUE;
@@ -1876,10 +1912,11 @@ gs_plugin_add_recent (GsPlugin *plugin,
GError **error)
{
GsPluginFlatpak *self = GS_PLUGIN_FLATPAK (plugin);
+ gboolean interactive = gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE);
for (guint i = 0; i < self->installations->len; i++) {
GsFlatpak *flatpak = g_ptr_array_index (self->installations, i);
- if (!gs_flatpak_add_recent (flatpak, list, age, cancellable, error))
+ if (!gs_flatpak_add_recent (flatpak, list, age, interactive, cancellable, error))
return FALSE;
}
return TRUE;
@@ -1893,10 +1930,11 @@ gs_plugin_url_to_app (GsPlugin *plugin,
GError **error)
{
GsPluginFlatpak *self = GS_PLUGIN_FLATPAK (plugin);
+ gboolean interactive = gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE);
for (guint i = 0; i < self->installations->len; i++) {
GsFlatpak *flatpak = g_ptr_array_index (self->installations, i);
- if (!gs_flatpak_url_to_app (flatpak, list, url, cancellable, error))
+ if (!gs_flatpak_url_to_app (flatpak, list, url, interactive, cancellable, error))
return FALSE;
}
return TRUE;
@@ -1910,6 +1948,7 @@ gs_plugin_install_repo (GsPlugin *plugin,
{
GsPluginFlatpak *self = GS_PLUGIN_FLATPAK (plugin);
GsFlatpak *flatpak;
+ gboolean interactive = gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE);
/* queue for install if installation needs the network */
if (!app_has_local_source (repo) &&
@@ -1927,7 +1966,7 @@ gs_plugin_install_repo (GsPlugin *plugin,
/* is a source */
g_return_val_if_fail (gs_app_get_kind (repo) == AS_COMPONENT_KIND_REPOSITORY, FALSE);
- return gs_flatpak_app_install_source (flatpak, repo, TRUE, cancellable, error);
+ return gs_flatpak_app_install_source (flatpak, repo, TRUE, interactive, cancellable, error);
}
gboolean
@@ -1938,6 +1977,7 @@ gs_plugin_remove_repo (GsPlugin *plugin,
{
GsPluginFlatpak *self = GS_PLUGIN_FLATPAK (plugin);
GsFlatpak *flatpak;
+ gboolean interactive = gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE);
flatpak = gs_plugin_flatpak_get_handler (self, repo);
if (flatpak == NULL)
@@ -1946,7 +1986,7 @@ gs_plugin_remove_repo (GsPlugin *plugin,
/* is a source */
g_return_val_if_fail (gs_app_get_kind (repo) == AS_COMPONENT_KIND_REPOSITORY, FALSE);
- return gs_flatpak_app_remove_source (flatpak, repo, TRUE, cancellable, error);
+ return gs_flatpak_app_remove_source (flatpak, repo, TRUE, interactive, cancellable, error);
}
gboolean
@@ -1957,6 +1997,7 @@ gs_plugin_enable_repo (GsPlugin *plugin,
{
GsPluginFlatpak *self = GS_PLUGIN_FLATPAK (plugin);
GsFlatpak *flatpak;
+ gboolean interactive = gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE);
flatpak = gs_plugin_flatpak_get_handler (self, repo);
if (flatpak == NULL)
@@ -1965,7 +2006,7 @@ gs_plugin_enable_repo (GsPlugin *plugin,
/* is a source */
g_return_val_if_fail (gs_app_get_kind (repo) == AS_COMPONENT_KIND_REPOSITORY, FALSE);
- return gs_flatpak_app_install_source (flatpak, repo, FALSE, cancellable, error);
+ return gs_flatpak_app_install_source (flatpak, repo, FALSE, interactive, cancellable, error);
}
gboolean
@@ -1976,6 +2017,7 @@ gs_plugin_disable_repo (GsPlugin *plugin,
{
GsPluginFlatpak *self = GS_PLUGIN_FLATPAK (plugin);
GsFlatpak *flatpak;
+ gboolean interactive = gs_plugin_has_flags (plugin, GS_PLUGIN_FLAGS_INTERACTIVE);
flatpak = gs_plugin_flatpak_get_handler (self, repo);
if (flatpak == NULL)
@@ -1984,7 +2026,7 @@ gs_plugin_disable_repo (GsPlugin *plugin,
/* is a source */
g_return_val_if_fail (gs_app_get_kind (repo) == AS_COMPONENT_KIND_REPOSITORY, FALSE);
- return gs_flatpak_app_remove_source (flatpak, repo, FALSE, cancellable, error);
+ return gs_flatpak_app_remove_source (flatpak, repo, FALSE, interactive, cancellable, error);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]