libmalcontent-ui: Use appstream-glib code for content rating systems
If a suitably new version of appstream-glib is available, use its implementation of content rating systems (see https://github.com/hughsie/appstream-glib/pull/364), rather than our forked one. This adds a dependency on libappstream-glib, but no particular version. Eventually, our copy of `gs-content-rating.[ch]` can be dropped. Signed-off-by: Philip Withnall <withnall@endlessm.com> Fixes: #7
This commit is contained in:
parent
12c1718782
commit
52399e8d58
|
@ -6,7 +6,7 @@ before_script:
|
||||||
libglib2.0-dev libgirepository1.0-dev libpam0g-dev
|
libglib2.0-dev libgirepository1.0-dev libpam0g-dev
|
||||||
gettext policykit-1 libpolkit-gobject-1-dev git
|
gettext policykit-1 libpolkit-gobject-1-dev git
|
||||||
lcov libgtk-3-dev libaccountsservice-dev libflatpak-dev
|
lcov libgtk-3-dev libaccountsservice-dev libflatpak-dev
|
||||||
libglib-testing-0-dev
|
libglib-testing-0-dev libappstream-glib-dev
|
||||||
- export LANG=C.UTF-8
|
- export LANG=C.UTF-8
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
|
|
|
@ -89,6 +89,7 @@ Dependencies
|
||||||
------------
|
------------
|
||||||
|
|
||||||
* accounts-service
|
* accounts-service
|
||||||
|
* appstream-glib
|
||||||
* dbus-daemon
|
* dbus-daemon
|
||||||
* flatpak
|
* flatpak
|
||||||
* gio-2.0 ≥ 2.60
|
* gio-2.0 ≥ 2.60
|
||||||
|
|
|
@ -21,11 +21,13 @@
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <appstream-glib.h>
|
||||||
#include <glib/gi18n-lib.h>
|
#include <glib/gi18n-lib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "gs-content-rating.h"
|
#include "gs-content-rating.h"
|
||||||
|
|
||||||
|
#if !AS_CHECK_VERSION(0, 7, 18)
|
||||||
const gchar *
|
const gchar *
|
||||||
gs_content_rating_system_to_str (GsContentRatingSystem system)
|
gs_content_rating_system_to_str (GsContentRatingSystem system)
|
||||||
{
|
{
|
||||||
|
@ -573,7 +575,9 @@ static const struct {
|
||||||
{ "violence-desecration", OARS_1_1, 0, 13, 15, 18 },
|
{ "violence-desecration", OARS_1_1, 0, 13, 15, 18 },
|
||||||
{ "violence-slavery", OARS_1_1, 0, 13, 15, 18 },
|
{ "violence-slavery", OARS_1_1, 0, 13, 15, 18 },
|
||||||
};
|
};
|
||||||
|
#endif /* appstream-glib < 0.7.18 */
|
||||||
|
|
||||||
|
#if !AS_CHECK_VERSION(0, 7, 15)
|
||||||
/**
|
/**
|
||||||
* as_content_rating_id_value_to_csm_age:
|
* as_content_rating_id_value_to_csm_age:
|
||||||
* @id: the subsection ID e.g. "violence-cartoon"
|
* @id: the subsection ID e.g. "violence-cartoon"
|
||||||
|
@ -616,7 +620,9 @@ as_content_rating_id_value_to_csm_age (const gchar *id, MctAppFilterOarsValue va
|
||||||
/* @id not found. */
|
/* @id not found. */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif /* appstream-glib < 0.7.15 */
|
||||||
|
|
||||||
|
#if !AS_CHECK_VERSION(0, 7, 18)
|
||||||
/**
|
/**
|
||||||
* as_content_rating_id_csm_age_to_value:
|
* as_content_rating_id_csm_age_to_value:
|
||||||
* @id: the subsection ID e.g. "violence-cartoon"
|
* @id: the subsection ID e.g. "violence-cartoon"
|
||||||
|
@ -646,3 +652,4 @@ as_content_rating_id_csm_age_to_value (const gchar *id, guint age)
|
||||||
|
|
||||||
return MCT_APP_FILTER_OARS_VALUE_UNKNOWN;
|
return MCT_APP_FILTER_OARS_VALUE_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
#endif /* appstream-glib < 0.7.18 */
|
||||||
|
|
|
@ -23,9 +23,37 @@
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
#include <appstream-glib.h>
|
||||||
#include <glib-object.h>
|
#include <glib-object.h>
|
||||||
#include <libmalcontent/malcontent.h>
|
#include <libmalcontent/malcontent.h>
|
||||||
|
|
||||||
|
#if AS_CHECK_VERSION(0, 7, 18)
|
||||||
|
#define GS_CONTENT_RATING_SYSTEM_UNKNOWN AS_CONTENT_RATING_SYSTEM_UNKNOWN
|
||||||
|
#define GS_CONTENT_RATING_SYSTEM_INCAA AS_CONTENT_RATING_SYSTEM_INCAA
|
||||||
|
#define GS_CONTENT_RATING_SYSTEM_ACB AS_CONTENT_RATING_SYSTEM_ACB
|
||||||
|
#define GS_CONTENT_RATING_SYSTEM_DJCTQ AS_CONTENT_RATING_SYSTEM_DJCTQ
|
||||||
|
#define GS_CONTENT_RATING_SYSTEM_GSRR AS_CONTENT_RATING_SYSTEM_GSRR
|
||||||
|
#define GS_CONTENT_RATING_SYSTEM_PEGI AS_CONTENT_RATING_SYSTEM_PEGI
|
||||||
|
#define GS_CONTENT_RATING_SYSTEM_KAVI AS_CONTENT_RATING_SYSTEM_KAVI
|
||||||
|
#define GS_CONTENT_RATING_SYSTEM_USK AS_CONTENT_RATING_SYSTEM_USK
|
||||||
|
#define GS_CONTENT_RATING_SYSTEM_ESRA AS_CONTENT_RATING_SYSTEM_ESRA
|
||||||
|
#define GS_CONTENT_RATING_SYSTEM_CERO AS_CONTENT_RATING_SYSTEM_CERO
|
||||||
|
#define GS_CONTENT_RATING_SYSTEM_OFLCNZ AS_CONTENT_RATING_SYSTEM_OFLCNZ
|
||||||
|
#define GS_CONTENT_RATING_SYSTEM_RUSSIA AS_CONTENT_RATING_SYSTEM_RUSSIA
|
||||||
|
#define GS_CONTENT_RATING_SYSTEM_MDA AS_CONTENT_RATING_SYSTEM_MDA
|
||||||
|
#define GS_CONTENT_RATING_SYSTEM_GRAC AS_CONTENT_RATING_SYSTEM_GRAC
|
||||||
|
#define GS_CONTENT_RATING_SYSTEM_ESRB AS_CONTENT_RATING_SYSTEM_ESRB
|
||||||
|
#define GS_CONTENT_RATING_SYSTEM_IARC AS_CONTENT_RATING_SYSTEM_IARC
|
||||||
|
#define GS_CONTENT_RATING_SYSTEM_LAST AS_CONTENT_RATING_SYSTEM_LAST
|
||||||
|
#define GsContentRatingSystem AsContentRatingSystem
|
||||||
|
|
||||||
|
#define gs_utils_content_rating_age_to_str as_content_rating_system_format_age
|
||||||
|
#define gs_utils_content_rating_system_from_locale as_content_rating_system_from_locale
|
||||||
|
#define gs_content_rating_system_to_str as_content_rating_system_to_string
|
||||||
|
#define gs_utils_content_rating_get_values as_content_rating_system_get_formatted_ages
|
||||||
|
#define gs_utils_content_rating_get_ages as_content_rating_system_get_csm_ages
|
||||||
|
#define as_content_rating_id_csm_age_to_value as_content_rating_attribute_from_csm_age
|
||||||
|
#else
|
||||||
typedef enum {
|
typedef enum {
|
||||||
GS_CONTENT_RATING_SYSTEM_UNKNOWN,
|
GS_CONTENT_RATING_SYSTEM_UNKNOWN,
|
||||||
GS_CONTENT_RATING_SYSTEM_INCAA,
|
GS_CONTENT_RATING_SYSTEM_INCAA,
|
||||||
|
@ -53,7 +81,13 @@ GsContentRatingSystem gs_utils_content_rating_system_from_locale (const gchar *l
|
||||||
const gchar *gs_content_rating_system_to_str (GsContentRatingSystem system);
|
const gchar *gs_content_rating_system_to_str (GsContentRatingSystem system);
|
||||||
gchar **gs_utils_content_rating_get_values (GsContentRatingSystem system);
|
gchar **gs_utils_content_rating_get_values (GsContentRatingSystem system);
|
||||||
const guint *gs_utils_content_rating_get_ages (GsContentRatingSystem system, gsize *length_out);
|
const guint *gs_utils_content_rating_get_ages (GsContentRatingSystem system, gsize *length_out);
|
||||||
guint as_content_rating_id_value_to_csm_age (const gchar *id, MctAppFilterOarsValue value);
|
|
||||||
MctAppFilterOarsValue as_content_rating_id_csm_age_to_value (const gchar *id, guint age);
|
MctAppFilterOarsValue as_content_rating_id_csm_age_to_value (const gchar *id, guint age);
|
||||||
|
#endif /* appstream-glib < 0.7.18 */
|
||||||
|
|
||||||
|
#if AS_CHECK_VERSION(0, 7, 15)
|
||||||
|
#define as_content_rating_id_value_to_csm_age as_content_rating_attribute_to_csm_age
|
||||||
|
#else
|
||||||
|
guint as_content_rating_id_value_to_csm_age (const gchar *id, MctAppFilterOarsValue value);
|
||||||
|
#endif /* appstream-glib < 0.7.15 */
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
|
@ -36,6 +36,7 @@ libmalcontent_ui_public_deps = [
|
||||||
libmalcontent_dep,
|
libmalcontent_dep,
|
||||||
]
|
]
|
||||||
libmalcontent_ui_private_deps = [
|
libmalcontent_ui_private_deps = [
|
||||||
|
dependency('appstream-glib'),
|
||||||
dependency('flatpak'),
|
dependency('flatpak'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <appstream-glib.h>
|
||||||
#include <libmalcontent/malcontent.h>
|
#include <libmalcontent/malcontent.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#include <gio/gio.h>
|
#include <gio/gio.h>
|
||||||
|
@ -166,8 +167,7 @@ static const GActionEntry actions[] = {
|
||||||
{ "set-age", on_set_age_action_activated, "u", NULL, NULL, { 0, }}
|
{ "set-age", on_set_age_action_activated, "u", NULL, NULL, { 0, }}
|
||||||
};
|
};
|
||||||
|
|
||||||
/* FIXME: Factor this out and rely on code from libappstream-glib or gnome-software
|
#if !AS_CHECK_VERSION(0, 7, 15)
|
||||||
* to do it. See: https://gitlab.freedesktop.org/pwithnall/malcontent/issues/7 */
|
|
||||||
static const gchar * const oars_categories[] =
|
static const gchar * const oars_categories[] =
|
||||||
{
|
{
|
||||||
"violence-cartoon",
|
"violence-cartoon",
|
||||||
|
@ -199,6 +199,7 @@ static const gchar * const oars_categories[] =
|
||||||
"money-gambling",
|
"money-gambling",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
#endif /* appstream-glib < 0.7.15 */
|
||||||
|
|
||||||
/* Auxiliary methods */
|
/* Auxiliary methods */
|
||||||
|
|
||||||
|
@ -372,6 +373,13 @@ oars_value_to_string (MctAppFilterOarsValue oars_value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Ensure the enum casts below are safe. */
|
||||||
|
G_STATIC_ASSERT ((int) MCT_APP_FILTER_OARS_VALUE_UNKNOWN == (int) AS_CONTENT_RATING_VALUE_UNKNOWN);
|
||||||
|
G_STATIC_ASSERT ((int) MCT_APP_FILTER_OARS_VALUE_NONE == (int) AS_CONTENT_RATING_VALUE_NONE);
|
||||||
|
G_STATIC_ASSERT ((int) MCT_APP_FILTER_OARS_VALUE_MILD == (int) AS_CONTENT_RATING_VALUE_MILD);
|
||||||
|
G_STATIC_ASSERT ((int) MCT_APP_FILTER_OARS_VALUE_MODERATE == (int) AS_CONTENT_RATING_VALUE_MODERATE);
|
||||||
|
G_STATIC_ASSERT ((int) MCT_APP_FILTER_OARS_VALUE_INTENSE == (int) AS_CONTENT_RATING_VALUE_INTENSE);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
update_oars_level (MctUserControls *self)
|
update_oars_level (MctUserControls *self)
|
||||||
{
|
{
|
||||||
|
@ -380,6 +388,9 @@ update_oars_level (MctUserControls *self)
|
||||||
guint maximum_age;
|
guint maximum_age;
|
||||||
gsize i;
|
gsize i;
|
||||||
gboolean all_categories_unset;
|
gboolean all_categories_unset;
|
||||||
|
#if AS_CHECK_VERSION(0, 7, 15)
|
||||||
|
g_autofree const gchar **oars_categories = as_content_rating_get_all_rating_ids ();
|
||||||
|
#endif
|
||||||
|
|
||||||
g_assert (self->filter != NULL);
|
g_assert (self->filter != NULL);
|
||||||
|
|
||||||
|
@ -393,7 +404,7 @@ update_oars_level (MctUserControls *self)
|
||||||
|
|
||||||
oars_value = mct_app_filter_get_oars_value (self->filter, oars_categories[i]);
|
oars_value = mct_app_filter_get_oars_value (self->filter, oars_categories[i]);
|
||||||
all_categories_unset &= (oars_value == MCT_APP_FILTER_OARS_VALUE_UNKNOWN);
|
all_categories_unset &= (oars_value == MCT_APP_FILTER_OARS_VALUE_UNKNOWN);
|
||||||
age = as_content_rating_id_value_to_csm_age (oars_categories[i], oars_value);
|
age = as_content_rating_id_value_to_csm_age (oars_categories[i], (AsContentRatingValue) oars_value);
|
||||||
|
|
||||||
g_debug ("OARS value for '%s': %s", oars_categories[i], oars_value_to_string (oars_value));
|
g_debug ("OARS value for '%s': %s", oars_categories[i], oars_value_to_string (oars_value));
|
||||||
|
|
||||||
|
@ -1484,6 +1495,9 @@ mct_user_controls_build_app_filter (MctUserControls *self,
|
||||||
{
|
{
|
||||||
gboolean restrict_web_browsers;
|
gboolean restrict_web_browsers;
|
||||||
gsize i;
|
gsize i;
|
||||||
|
#if AS_CHECK_VERSION(0, 7, 15)
|
||||||
|
g_autofree const gchar **oars_categories = as_content_rating_get_all_rating_ids ();
|
||||||
|
#endif
|
||||||
|
|
||||||
g_return_if_fail (MCT_IS_USER_CONTROLS (self));
|
g_return_if_fail (MCT_IS_USER_CONTROLS (self));
|
||||||
g_return_if_fail (builder != NULL);
|
g_return_if_fail (builder != NULL);
|
||||||
|
@ -1509,7 +1523,7 @@ mct_user_controls_build_app_filter (MctUserControls *self,
|
||||||
const gchar *oars_category;
|
const gchar *oars_category;
|
||||||
|
|
||||||
oars_category = oars_categories[i];
|
oars_category = oars_categories[i];
|
||||||
oars_value = as_content_rating_id_csm_age_to_value (oars_category, self->selected_age);
|
oars_value = (MctAppFilterOarsValue) as_content_rating_id_csm_age_to_value (oars_category, self->selected_age);
|
||||||
|
|
||||||
g_debug ("\t\t → %s: %s", oars_category, oars_value_to_string (oars_value));
|
g_debug ("\t\t → %s: %s", oars_category, oars_value_to_string (oars_value));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue