[virt-tools-list] [libosinfo PATCHv3 5/9] media: Add OsinfoMedia::languages property

Christophe Fergeau cfergeau at redhat.com
Wed Dec 12 14:26:34 UTC 2012


This lists all the languages a given media can show its UI in.
---
 osinfo/libosinfo.syms         |  1 +
 osinfo/osinfo_media.c         | 65 ++++++++++++++++++++++++++++++++++++++++++-
 osinfo/osinfo_media.h         |  2 ++
 osinfo/osinfo_media_private.h |  1 +
 4 files changed, 68 insertions(+), 1 deletion(-)

diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
index 4d886f6..767a1fc 100644
--- a/osinfo/libosinfo.syms
+++ b/osinfo/libosinfo.syms
@@ -397,6 +397,7 @@ LIBOSINFO_0.2.3 {
 
 	osinfo_install_script_get_config_params;
 
+	osinfo_media_get_languages;
 	osinfo_media_get_os;
 } LIBOSINFO_0.2.2;
 
diff --git a/osinfo/osinfo_media.c b/osinfo/osinfo_media.c
index d891615..abf449d 100644
--- a/osinfo/osinfo_media.c
+++ b/osinfo/osinfo_media.c
@@ -154,7 +154,8 @@ enum {
     PROP_INSTALLER,
     PROP_LIVE,
     PROP_INSTALLER_REBOOTS,
-    PROP_OS
+    PROP_OS,
+    PROP_LANGUAGES,
 };
 
 static void
@@ -225,6 +226,10 @@ osinfo_media_get_property (GObject    *object,
         g_value_take_object (value, osinfo_media_get_os (media));
         break;
 
+    case PROP_LANGUAGES:
+        g_value_set_pointer (value, osinfo_media_get_languages (media));
+        break;
+
     default:
         /* We don't have any other property... */
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -311,6 +316,10 @@ osinfo_media_set_property(GObject      *object,
         osinfo_media_set_os(media, g_value_get_object(value));
         break;
 
+    case PROP_LANGUAGES:
+        osinfo_media_set_languages(media, g_value_get_pointer(value));
+        break;
+
     default:
         /* We don't have any other property... */
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -517,6 +526,24 @@ osinfo_media_class_init (OsinfoMediaClass *klass)
                                   G_PARAM_READWRITE |
                                   G_PARAM_STATIC_STRINGS);
     g_object_class_install_property (g_klass, PROP_OS, pspec);
+
+    /*
+     * OsinfoMedia::languages:
+     *
+     * If media is an installer, this property indicates the languages that
+     * can be used during automatic installations.
+     *
+     * On media that are not installers, this property will indicate the
+     * languages that the user interface can be displayed in.
+     * Use #osinfo_media_get_installer (or OsinfoMedia::installer) to know
+     * if the media is an installer or not.
+     */
+    pspec = g_param_spec_pointer ("languages",
+                                  "Languages",
+                                  _("Supported languages"),
+                                  G_PARAM_READABLE |
+                                  G_PARAM_STATIC_STRINGS);
+    g_object_class_install_property (g_klass, PROP_LANGUAGES, pspec);
 }
 
 static void
@@ -1102,6 +1129,42 @@ void osinfo_media_set_os(OsinfoMedia *media, OsinfoOs *os)
     g_weak_ref_set(&media->priv->os, os);
     g_object_unref(os);
 }
+
+/**
+ * osinfo_media_get_languages:
+ * @media: a #OsinfoMedia instance
+ *
+ * If media is an installer, this property indicates the languages that
+ * can be used during automatic installations.
+ *
+ * On media that are not installers, this property will indicate the
+ * languages that the user interface can be displayed in.
+ * Use #osinfo_media_get_installer (or OsinfoMedia::installer) to know
+ * if the media is an installer or not.
+ *
+ * Returns: (transfer container) (element-type utf8): a #GList
+ * containing the list of supported supported languages which must be
+ * freed with g_list_free() when no longer neede, or NULL if the supported
+ * languages are unknown
+ */
+GList *osinfo_media_get_languages(OsinfoMedia *media)
+{
+    g_return_val_if_fail(OSINFO_IS_MEDIA(media), NULL);
+    return osinfo_entity_get_param_value_list(OSINFO_ENTITY(media), OSINFO_MEDIA_PROP_LANG);
+}
+
+void osinfo_media_set_languages(OsinfoMedia *media, GList *languages)
+{
+    GList *it;
+
+    g_return_if_fail(OSINFO_IS_MEDIA(media));
+
+    osinfo_entity_clear_param(OSINFO_ENTITY(media), OSINFO_MEDIA_PROP_LANG);
+    for (it = languages; it != NULL; it = it->next)
+        osinfo_entity_add_param(OSINFO_ENTITY(media),
+                                OSINFO_MEDIA_PROP_LANG,
+                                it->data);
+}
 /*
  * Local variables:
  *  indent-tabs-mode: nil
diff --git a/osinfo/osinfo_media.h b/osinfo/osinfo_media.h
index 8d34688..8c8d649 100644
--- a/osinfo/osinfo_media.h
+++ b/osinfo/osinfo_media.h
@@ -81,6 +81,7 @@ typedef struct _OsinfoMediaPrivate OsinfoMediaPrivate;
 #define OSINFO_MEDIA_PROP_LIVE           "live"
 #define OSINFO_MEDIA_PROP_INSTALLER      "installer"
 #define OSINFO_MEDIA_PROP_INSTALLER_REBOOTS "installer-reboots"
+#define OSINFO_MEDIA_PROP_LANG           "l10n-language"
 
 /* object */
 struct _OsinfoMedia
@@ -125,6 +126,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);
+GList *osinfo_media_get_languages(OsinfoMedia *media);
 gboolean osinfo_media_get_installer(OsinfoMedia *media);
 gboolean osinfo_media_get_live(OsinfoMedia *media);
 gint osinfo_media_get_installer_reboots(OsinfoMedia *media);
diff --git a/osinfo/osinfo_media_private.h b/osinfo/osinfo_media_private.h
index 00ae697..efaffd1 100644
--- a/osinfo/osinfo_media_private.h
+++ b/osinfo/osinfo_media_private.h
@@ -26,6 +26,7 @@
 #ifndef __OSINFO_MEDIA_PRIVATE_H__
 #define __OSINFO_MEDIA_PRIVATE_H__
 
+void osinfo_media_set_languages(OsinfoMedia *media, GList *languages);
 void osinfo_media_set_os(OsinfoMedia *media, OsinfoOs *os);
 
 #endif /* __OSINFO_MEDIA_PRIVATE_H__ */
-- 
1.8.0.1




More information about the virt-tools-list mailing list