/* * Copyright © 2014 Red Hat, Inc * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . * * Authors: * Alexander Larsson */ #ifndef __FLATPAK_BUILTINS_UTILS_H__ #define __FLATPAK_BUILTINS_UTILS_H__ #include #include #include "libglnx.h" #include "flatpak-utils-private.h" #include "flatpak-dir-private.h" #include "flatpak-permission-dbus-generated.h" /* AS_CHECK_VERSION was introduced in 0.14.0; we still support 0.12.0, so * behave as though versions without this macro are arbitrarily old */ #ifndef AS_CHECK_VERSION #define AS_CHECK_VERSION(major, minor, micro) (0) #endif /* Appstream data expires after a day */ #define FLATPAK_APPSTREAM_TTL 86400 typedef struct RemoteDirPair { gchar *remote_name; FlatpakDir *dir; } RemoteDirPair; typedef struct RefDirPair { FlatpakDecomposed *ref; FlatpakDir *dir; } RefDirPair; void ref_dir_pair_free (RefDirPair *pair); RefDirPair * ref_dir_pair_new (FlatpakDecomposed *ref, FlatpakDir *dir); void remote_dir_pair_free (RemoteDirPair *pair); RemoteDirPair * remote_dir_pair_new (const char *remote_name, FlatpakDir *dir); gboolean looks_like_branch (const char *branch); GBytes * flatpak_load_gpg_keys (char **gpg_import, GCancellable *cancellable, GError **error); FlatpakDir * flatpak_find_installed_pref (const char *pref, FlatpakKinds kinds, const char *default_arch, const char *default_branch, gboolean search_all, gboolean search_user, gboolean search_system, char **search_installations, FlatpakDecomposed **out_ref, GCancellable *cancellable, GError **error); gboolean flatpak_resolve_duplicate_remotes (GPtrArray *dirs, const char *remote_name, FlatpakDir **out_dir, GCancellable *cancellable, GError **error); gboolean flatpak_resolve_matching_refs (const char *remote_name, FlatpakDir *dir, gboolean assume_yes, GPtrArray *refs, const char *opt_search_ref, char **out_ref, GError **error); gboolean flatpak_resolve_matching_installed_refs (gboolean assume_yes, gboolean only_one, GPtrArray *ref_dir_pairs, const char *opt_search_ref, GPtrArray *out_pairs, GError **error); gboolean flatpak_resolve_matching_remotes (GPtrArray *remote_dir_pairs, const char *opt_search_ref, RemoteDirPair **out_pair, GError **error); gboolean update_appstream (GPtrArray *dirs, const char *remote, const char *arch, guint64 ttl, gboolean quiet, GCancellable *cancellable, GError **error); char ** get_permission_tables (XdpDbusPermissionStore *store); gboolean reset_permissions_for_app (const char *app_id, GError **error); /* --columns handling */ typedef enum { FLATPAK_ELLIPSIZE_MODE_NONE, FLATPAK_ELLIPSIZE_MODE_START, FLATPAK_ELLIPSIZE_MODE_MIDDLE, FLATPAK_ELLIPSIZE_MODE_END, } FlatpakEllipsizeMode; typedef struct { const char *name; const char *title; /* use N_() */ const char *desc; /* use N_() */ gboolean expand; FlatpakEllipsizeMode ellipsize; gboolean all; gboolean def; gboolean skip_unique_if_default; } Column; int find_column (Column *columns, const char *name, GError **error); char *column_help (Column *columns); Column *handle_column_args (Column *all_columns, gboolean opt_show_all, const char **opt_cols, GError **error); char * format_timestamp (guint64 timestamp); char * ellipsize_string (const char *text, int len); char * ellipsize_string_full (const char *text, int len, FlatpakEllipsizeMode mode); void print_aligned (int len, const char *title, const char *value); void print_aligned_take (int len, const char *title, char *value); AsComponent *metadata_find_component (AsMetadata *mdata, const char *ref); const char *component_get_version_latest (AsComponent *component); gboolean flatpak_dir_load_appstream_data (FlatpakDir *self, const gchar *remote_name, const gchar *arch, AsMetadata *mdata, GCancellable *cancellable, GError **error); int cell_width (const char *text); const char *cell_advance (const char *text, int num); void print_wrapped (int columns, const char *text, ...) G_GNUC_PRINTF (2, 3); FlatpakRemoteState * get_remote_state (FlatpakDir *dir, const char *remote, gboolean cached, gboolean only_sideloaded, const char *opt_arch, const char **opt_sideload_repos, GCancellable *cancellable, GError **error); gboolean ensure_remote_state_arch (FlatpakDir *dir, FlatpakRemoteState *state, const char *arch, gboolean cached, gboolean only_sideloaded, GCancellable *cancellable, GError **error); gboolean ensure_remote_state_arch_for_ref (FlatpakDir *dir, FlatpakRemoteState *state, const char *ref, gboolean cached, gboolean only_sideloaded, GCancellable *cancellable, GError **error); gboolean ensure_remote_state_all_arches (FlatpakDir *dir, FlatpakRemoteState *state, gboolean cached, gboolean only_sideloaded, GCancellable *cancellable, GError **error); #endif /* __FLATPAK_BUILTINS_UTILS_H__ */