Add: * ability to associate media to a variant of the OS in the 'media' XML node. * API to query variant of the OS, media is associated with. --- data/schemas/libosinfo.rng | 5 +++++ osinfo/libosinfo.syms | 2 ++ osinfo/osinfo_db.c | 5 +++++ osinfo/osinfo_loader.c | 7 +++++++ osinfo/osinfo_media.c | 31 +++++++++++++++++++++++++++++++ osinfo/osinfo_media.h | 3 +++ 6 files changed, 53 insertions(+) diff --git a/data/schemas/libosinfo.rng b/data/schemas/libosinfo.rng index cc13982..ecd83c2 100644 --- a/data/schemas/libosinfo.rng +++ b/data/schemas/libosinfo.rng @@ -338,6 +338,11 @@ </attribute> </optional> <optional> + <attribute name='variant'> + <text/> + </attribute> + </optional> + <optional> <element name='url'> <ref name='url'/> </element> diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms index 528c2a5..1de56e3 100644 --- a/osinfo/libosinfo.syms +++ b/osinfo/libosinfo.syms @@ -448,6 +448,8 @@ LIBOSINFO_0.2.9 { osinfo_os_get_release_status; osinfo_release_status_get_type; + osinfo_media_get_variant; + osinfo_os_add_variant; osinfo_os_get_variant_list; diff --git a/osinfo/osinfo_db.c b/osinfo/osinfo_db.c index f19d9b4..d851499 100644 --- a/osinfo/osinfo_db.c +++ b/osinfo/osinfo_db.c @@ -627,6 +627,7 @@ static void fill_media (OsinfoDb *db, OsinfoMedia *media, const gchar *initrd_path; const gchar *arch; const gchar *url; + const gchar *variant; languages = match_languages(db, media, matched_media); if (languages != NULL) @@ -642,6 +643,10 @@ static void fill_media (OsinfoDb *db, OsinfoMedia *media, url = osinfo_media_get_url(matched_media); if (url != NULL) g_object_set(G_OBJECT(media), "url", url, NULL); + variant = osinfo_entity_get_param_value(OSINFO_ENTITY(matched_media), + "variant"); + if (variant != NULL) + osinfo_entity_set_param(OSINFO_ENTITY(media), "variant", variant); kernel_path = osinfo_media_get_kernel_path(matched_media); if (kernel_path != NULL) diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c index 84dd843..85e036e 100644 --- a/osinfo/osinfo_loader.c +++ b/osinfo/osinfo_loader.c @@ -892,6 +892,13 @@ static OsinfoMedia *osinfo_loader_media (OsinfoLoader *loader, xmlFree(installer_reboots); } + if (variant) { + osinfo_entity_set_param(OSINFO_ENTITY(media), + OSINFO_MEDIA_PROP_VARIANT, + (gchar *)variant); + xmlFree(variant); + } + gint nnodes = osinfo_loader_nodeset("./iso/*", ctxt, &nodes, err); if (error_is_set(err)) { g_object_unref(media); diff --git a/osinfo/osinfo_media.c b/osinfo/osinfo_media.c index 118ff8b..c3c9d20 100644 --- a/osinfo/osinfo_media.c +++ b/osinfo/osinfo_media.c @@ -1136,6 +1136,37 @@ void osinfo_media_set_os(OsinfoMedia *media, OsinfoOs *os) } /** + * osinfo_media_get_variant: + * @media: an #OsinfoMedia instance + * + * Gets the variant of the associated operating system. + * + * Returns: (transfer full): the operating system variant, or NULL + */ +OsinfoVariant *osinfo_media_get_variant(OsinfoMedia *media) +{ + const char *id; + OsinfoOs *os; + OsinfoVariantList *variants; + OsinfoEntity *variant; + + g_return_val_if_fail(OSINFO_IS_MEDIA(media), NULL); + + id = osinfo_entity_get_param_value(OSINFO_ENTITY(media), + OSINFO_MEDIA_PROP_VARIANT); + if (id == NULL) + return NULL; + + os = g_weak_ref_get(&media->priv->os); + variants = osinfo_os_get_variant_list(os); + g_object_unref (os); + variant = osinfo_list_find_by_id(OSINFO_LIST(variants), id); + g_return_val_if_fail(OSINFO_IS_VARIANT(variant), NULL); + + return g_object_ref (variant); +} + +/** * osinfo_media_get_languages: * @media: an #OsinfoMedia instance * diff --git a/osinfo/osinfo_media.h b/osinfo/osinfo_media.h index 308f75e..87ef8af 100644 --- a/osinfo/osinfo_media.h +++ b/osinfo/osinfo_media.h @@ -26,6 +26,7 @@ #include <glib-object.h> #include <gio/gio.h> #include <osinfo/osinfo_entity.h> +#include <osinfo/osinfo_variant.h> #ifndef __OSINFO_MEDIA_H__ #define __OSINFO_MEDIA_H__ @@ -84,6 +85,7 @@ typedef struct _OsinfoMediaPrivate OsinfoMediaPrivate; #define OSINFO_MEDIA_PROP_LANG "l10n-language" #define OSINFO_MEDIA_PROP_LANG_REGEX "l10n-language-regex" #define OSINFO_MEDIA_PROP_LANG_MAP "l10n-language-map" +#define OSINFO_MEDIA_PROP_VARIANT "variant" /* object */ struct _OsinfoMedia @@ -128,6 +130,7 @@ const gchar *osinfo_media_get_application_id(OsinfoMedia *media); const gchar *osinfo_media_get_kernel_path(OsinfoMedia *media); const gchar *osinfo_media_get_initrd_path(OsinfoMedia *media); OsinfoOs *osinfo_media_get_os(OsinfoMedia *media); +OsinfoVariant *osinfo_media_get_variant(OsinfoMedia *media); GList *osinfo_media_get_languages(OsinfoMedia *media); gboolean osinfo_media_get_installer(OsinfoMedia *media); gboolean osinfo_media_get_live(OsinfoMedia *media); -- 1.8.4.2 _______________________________________________ Libosinfo mailing list Libosinfo@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libosinfo