summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Hergert <chergert@redhat.com>2023-03-20 21:39:36 -0700
committerChristian Hergert <chergert@redhat.com>2023-03-22 16:44:45 -0700
commit57dae1b1c82ecc8b0e7cbbaf28e4f275172b84e2 (patch)
treee3c09e9e0048f0436db03ec83538ed3cc85c1226
parent4b683cd64b05620458a8eed6e808f91c6e67311c (diff)
downloadlibpeas-57dae1b1c82ecc8b0e7cbbaf28e4f275172b84e2.tar.gz
plugin-info: add resource methods to PeasPluginInfo
Related #20
-rw-r--r--libpeas/peas-plugin-info-priv.h1
-rw-r--r--libpeas/peas-plugin-info.c79
-rw-r--r--libpeas/peas-plugin-info.h8
3 files changed, 88 insertions, 0 deletions
diff --git a/libpeas/peas-plugin-info-priv.h b/libpeas/peas-plugin-info-priv.h
index 1362a0d..ba2f0d6 100644
--- a/libpeas/peas-plugin-info-priv.h
+++ b/libpeas/peas-plugin-info-priv.h
@@ -54,6 +54,7 @@ struct _PeasPluginInfo {
GHashTable *external_data;
+ GPtrArray *resources;
GSettingsSchemaSource *schema_source;
GError *error;
diff --git a/libpeas/peas-plugin-info.c b/libpeas/peas-plugin-info.c
index 2620145..e0d0ea8 100644
--- a/libpeas/peas-plugin-info.c
+++ b/libpeas/peas-plugin-info.c
@@ -107,6 +107,7 @@ peas_plugin_info_finalize (GObject *object)
g_clear_pointer (&info->schema_source, g_settings_schema_source_unref);
g_clear_pointer (&info->external_data, g_hash_table_unref);
g_clear_pointer (&info->error, g_error_free);
+ g_clear_pointer (&info->resources, g_ptr_array_unref);
G_OBJECT_CLASS (peas_plugin_info_parent_class)->finalize (object);
}
@@ -951,3 +952,81 @@ peas_plugin_info_get_external_data (const PeasPluginInfo *info,
return g_hash_table_lookup (info->external_data, key);
}
+
+ /**
+ * peas_plugin_info_get_resource:
+ * @info: A #PeasPluginInfo.
+ * @filename: (allow-none): The filename of the resource, or %NULL.
+ * @error: a #GError for error reporting, or %NULL.
+ *
+ * Creates a new #GResource for the given @filename
+ * located in the module directory. If @filename is %NULL
+ * then "${module_name}.gresource" will be loaded.
+ *
+ * Returns: (transfer full): a new #GResource, or %NULL.
+ */
+GResource *
+peas_plugin_info_get_resource (const PeasPluginInfo *info,
+ const char *filename,
+ GError **error)
+{
+ char *default_filename = NULL;
+ char *full_filename;
+ GResource *resource;
+
+ g_return_val_if_fail (info != NULL, NULL);
+ g_return_val_if_fail (filename == NULL || filename[0] != '\0', NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ if (filename == NULL)
+ {
+ default_filename = g_strconcat (info->module_name, ".gresource", NULL);
+ filename = (const char *) default_filename;
+ }
+
+ full_filename = g_build_filename (info->module_dir, filename, NULL);
+ resource = g_resource_load (full_filename, error);
+
+ g_free (full_filename);
+ g_free (default_filename);
+
+ return resource;
+}
+
+/**
+ * peas_plugin_info_load_resource:
+ * @info: A #PeasPluginInfo.
+ * @filename: (allow-none): The filename of the resource, or %NULL.
+ * @error: a #GError for error reporting, or %NULL.
+ *
+ * Loads the resource using peas_plugin_info_get_resource() and
+ * registers it. The resource's lifetime will be automatically
+ * handled by @info.
+ *
+ * See peas_plugin_info_get_resource() for more information.
+ */
+void
+peas_plugin_info_load_resource (const PeasPluginInfo *info,
+ const char *filename,
+ GError **error)
+{
+ GResource *resource;
+ PeasPluginInfo *info_ = (PeasPluginInfo *) info;
+
+ resource = peas_plugin_info_get_resource (info, filename, error);
+
+ if (resource == NULL)
+ return;
+
+ if (info_->resources == NULL)
+ {
+ info_->resources = g_ptr_array_new ();
+ g_ptr_array_set_free_func (info_->resources,
+ (GDestroyNotify) g_resources_unregister);
+ }
+
+ g_resources_register (resource);
+
+ g_ptr_array_add (info_->resources, resource);
+ g_resource_unref (resource);
+}
diff --git a/libpeas/peas-plugin-info.h b/libpeas/peas-plugin-info.h
index f5c4288..3313cd9 100644
--- a/libpeas/peas-plugin-info.h
+++ b/libpeas/peas-plugin-info.h
@@ -113,5 +113,13 @@ const char *peas_plugin_info_get_help_uri (const PeasPluginInfo *
PEAS_AVAILABLE_IN_ALL
const char *peas_plugin_info_get_external_data (const PeasPluginInfo *info,
const char *key);
+PEAS_AVAILABLE_IN_ALL
+GResource *peas_plugin_info_get_resource (const PeasPluginInfo *info,
+ const char *filename,
+ GError **error);
+PEAS_AVAILABLE_IN_ALL
+void peas_plugin_info_load_resource (const PeasPluginInfo *info,
+ const char *filename,
+ GError **error);
G_END_DECLS