[devhelp] Settings: add API for the "books-disabled" GSettings key
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [devhelp] Settings: add API for the "books-disabled" GSettings key
- Date: Wed, 4 Apr 2018 11:19:09 +0000 (UTC)
commit 2476b53ff07adc4813ed69179a1a98a25715db5e
Author: Sébastien Wilmet <swilmet gnome org>
Date: Wed Apr 4 11:56:20 2018 +0200
Settings: add API for the "books-disabled" GSettings key
And use it in DhBookManager. The use of the "books-disabled" GSettings
key was localized only in DhBookManager.
devhelp/dh-book-manager.c | 139 +++--------------------------
devhelp/dh-settings.c | 169 +++++++++++++++++++++++++++++++++--
devhelp/dh-settings.h | 8 ++
docs/reference/devhelp-sections.txt | 2 +
4 files changed, 186 insertions(+), 132 deletions(-)
---
diff --git a/devhelp/dh-book-manager.c b/devhelp/dh-book-manager.c
index f466db8..69c5ef6 100644
--- a/devhelp/dh-book-manager.c
+++ b/devhelp/dh-book-manager.c
@@ -126,9 +126,6 @@ typedef struct {
/* List of NewPossibleBookData* */
GSList *new_possible_books_data;
-
- /* List of book IDs (gchar*) currently disabled */
- GList *books_disabled;
} DhBookManagerPrivate;
enum {
@@ -201,12 +198,7 @@ dh_book_manager_dispose (GObject *object)
static void
dh_book_manager_finalize (GObject *object)
{
- DhBookManager *book_manager = DH_BOOK_MANAGER (object);
- DhBookManagerPrivate *priv = dh_book_manager_get_instance_private (book_manager);
-
- g_list_free_full (priv->books_disabled, g_free);
-
- if (singleton == book_manager)
+ if (singleton == DH_BOOK_MANAGER (object))
singleton = NULL;
G_OBJECT_CLASS (dh_book_manager_parent_class)->finalize (object);
@@ -282,87 +274,6 @@ dh_book_manager_class_init (DhBookManagerClass *klass)
}
static void
-load_books_disabled (DhBookManager *book_manager)
-{
- DhBookManagerPrivate *priv = dh_book_manager_get_instance_private (book_manager);
- DhSettings *settings;
- GSettings *contents_settings;
- gchar **books_disabled_strv;
- gint i;
-
- g_assert (priv->books_disabled == NULL);
-
- settings = dh_settings_get_default ();
- contents_settings = dh_settings_peek_contents_settings (settings);
- books_disabled_strv = g_settings_get_strv (contents_settings, "books-disabled");
-
- if (books_disabled_strv == NULL)
- return;
-
- for (i = 0; books_disabled_strv[i] != NULL; i++) {
- gchar *book_id = books_disabled_strv[i];
- priv->books_disabled = g_list_prepend (priv->books_disabled, book_id);
- }
-
- priv->books_disabled = g_list_reverse (priv->books_disabled);
-
- g_free (books_disabled_strv);
-}
-
-static void
-store_books_disabled (DhBookManager *book_manager)
-{
- DhBookManagerPrivate *priv = dh_book_manager_get_instance_private (book_manager);
- DhSettings *settings;
- GSettings *contents_settings;
- GVariantBuilder *builder;
- GVariant *variant;
- GList *l;
-
- builder = g_variant_builder_new (G_VARIANT_TYPE_STRING_ARRAY);
-
- for (l = priv->books_disabled; l != NULL; l = l->next) {
- const gchar *book_id = l->data;
- g_variant_builder_add (builder, "s", book_id);
- }
-
- variant = g_variant_builder_end (builder);
- g_variant_builder_unref (builder);
-
- settings = dh_settings_get_default ();
- contents_settings = dh_settings_peek_contents_settings (settings);
- g_settings_set_value (contents_settings, "books-disabled", variant);
-}
-
-static GList *
-find_book_in_disabled_list (GList *books_disabled,
- DhBook *book)
-{
- const gchar *book_id;
- GList *node;
-
- book_id = dh_book_get_id (book);
-
- for (node = books_disabled; node != NULL; node = node->next) {
- const gchar *cur_book_id = node->data;
-
- if (g_strcmp0 (book_id, cur_book_id) == 0)
- return node;
- }
-
- return NULL;
-}
-
-static gboolean
-is_book_disabled_in_conf (DhBookManager *book_manager,
- DhBook *book)
-{
- DhBookManagerPrivate *priv = dh_book_manager_get_instance_private (book_manager);
-
- return find_book_in_disabled_list (priv->books_disabled, book) != NULL;
-}
-
-static void
remove_book (DhBookManager *book_manager,
DhBook *book)
{
@@ -410,22 +321,11 @@ static void
book_enabled_cb (DhBook *book,
DhBookManager *book_manager)
{
- DhBookManagerPrivate *priv = dh_book_manager_get_instance_private (book_manager);
- GList *node;
- gchar *book_id;
-
- node = find_book_in_disabled_list (priv->books_disabled, book);
-
- /* When setting as enabled a given book, we should have it in the
- * disabled books list!
- */
- g_return_if_fail (node != NULL);
-
- book_id = node->data;
- g_free (book_id);
- priv->books_disabled = g_list_delete_link (priv->books_disabled, node);
+ DhSettings *settings;
- store_books_disabled (book_manager);
+ settings = dh_settings_get_default ();
+ g_return_if_fail (!dh_settings_is_book_enabled (settings, book));
+ dh_settings_set_book_enabled (settings, book, TRUE);
g_signal_emit (book_manager,
signals[SIGNAL_BOOK_ENABLED],
@@ -437,21 +337,11 @@ static void
book_disabled_cb (DhBook *book,
DhBookManager *book_manager)
{
- DhBookManagerPrivate *priv = dh_book_manager_get_instance_private (book_manager);
- GList *node;
- const gchar *book_id;
-
- node = find_book_in_disabled_list (priv->books_disabled, book);
-
- /* When setting as disabled a given book, we shouldn't have it in the
- * disabled books list!
- */
- g_return_if_fail (node == NULL);
+ DhSettings *settings;
- book_id = dh_book_get_id (book);
- priv->books_disabled = g_list_append (priv->books_disabled,
- g_strdup (book_id));
- store_books_disabled (book_manager);
+ settings = dh_settings_get_default ();
+ g_return_if_fail (dh_settings_is_book_enabled (settings, book));
+ dh_settings_set_book_enabled (settings, book, FALSE);
g_signal_emit (book_manager,
signals[SIGNAL_BOOK_DISABLED],
@@ -466,13 +356,11 @@ static gboolean
create_book_from_index_file (DhBookManager *book_manager,
GFile *index_file)
{
- DhBookManagerPrivate *priv;
+ DhBookManagerPrivate *priv = dh_book_manager_get_instance_private (book_manager);
DhBook *book;
- gboolean book_enabled;
+ DhSettings *settings;
GList *l;
- priv = dh_book_manager_get_instance_private (book_manager);
-
/* Check if a DhBook at the same location has already been loaded. */
for (l = priv->books; l != NULL; l = l->next) {
DhBook *cur_book = DH_BOOK (l->data);
@@ -502,8 +390,8 @@ create_book_from_index_file (DhBookManager *book_manager,
book,
(GCompareFunc)dh_book_cmp_by_title);
- book_enabled = !is_book_disabled_in_conf (book_manager, book);
- dh_book_set_enabled (book, book_enabled);
+ settings = dh_settings_get_default ();
+ dh_book_set_enabled (book, dh_settings_is_book_enabled (settings, book));
g_signal_connect_object (book,
"deleted",
@@ -769,7 +657,6 @@ populate (DhBookManager *book_manager)
static void
dh_book_manager_init (DhBookManager *book_manager)
{
- load_books_disabled (book_manager);
populate (book_manager);
}
diff --git a/devhelp/dh-settings.c b/devhelp/dh-settings.c
index 82acb4b..a09edaa 100644
--- a/devhelp/dh-settings.c
+++ b/devhelp/dh-settings.c
@@ -50,6 +50,9 @@
struct _DhSettingsPrivate {
GSettings *gsettings_contents;
+ /* List of book IDs (gchar*) currently disabled. */
+ GList *books_disabled;
+
guint group_books_by_language : 1;
};
@@ -65,6 +68,101 @@ static DhSettings *default_instance = NULL;
G_DEFINE_TYPE_WITH_PRIVATE (DhSettings, dh_settings, G_TYPE_OBJECT);
static void
+load_books_disabled (DhSettings *settings)
+{
+ gchar **books_disabled_strv;
+ gint i;
+
+ g_assert (settings->priv->books_disabled == NULL);
+
+ books_disabled_strv = g_settings_get_strv (settings->priv->gsettings_contents,
+ "books-disabled");
+
+ if (books_disabled_strv == NULL)
+ return;
+
+ for (i = 0; books_disabled_strv[i] != NULL; i++) {
+ gchar *book_id = books_disabled_strv[i];
+ settings->priv->books_disabled = g_list_prepend (settings->priv->books_disabled, book_id);
+ }
+
+ settings->priv->books_disabled = g_list_reverse (settings->priv->books_disabled);
+
+ g_free (books_disabled_strv);
+}
+
+static void
+store_books_disabled (DhSettings *settings)
+{
+ GVariantBuilder *builder;
+ GVariant *variant;
+ GList *l;
+
+ builder = g_variant_builder_new (G_VARIANT_TYPE_STRING_ARRAY);
+
+ for (l = settings->priv->books_disabled; l != NULL; l = l->next) {
+ const gchar *book_id = l->data;
+ g_variant_builder_add (builder, "s", book_id);
+ }
+
+ variant = g_variant_builder_end (builder);
+ g_variant_builder_unref (builder);
+
+ g_settings_set_value (settings->priv->gsettings_contents, "books-disabled", variant);
+}
+
+static GList *
+find_in_books_disabled (DhSettings *settings,
+ const gchar *book_id)
+{
+ GList *node;
+
+ for (node = settings->priv->books_disabled; node != NULL; node = node->next) {
+ const gchar *cur_book_id = node->data;
+
+ if (g_strcmp0 (book_id, cur_book_id) == 0)
+ return node;
+ }
+
+ return NULL;
+}
+
+static void
+enable_book (DhSettings *settings,
+ const gchar *book_id)
+{
+ GList *node;
+
+ node = find_in_books_disabled (settings, book_id);
+
+ /* Already enabled. */
+ if (node == NULL)
+ return;
+
+ g_free (node->data);
+ settings->priv->books_disabled = g_list_delete_link (settings->priv->books_disabled, node);
+
+ store_books_disabled (settings);
+}
+
+static void
+disable_book (DhSettings *settings,
+ const gchar *book_id)
+{
+ GList *node;
+
+ node = find_in_books_disabled (settings, book_id);
+
+ /* Already disabled. */
+ if (node != NULL)
+ return;
+
+ settings->priv->books_disabled = g_list_append (settings->priv->books_disabled,
+ g_strdup (book_id));
+ store_books_disabled (settings);
+}
+
+static void
dh_settings_get_property (GObject *object,
guint prop_id,
GValue *value,
@@ -115,7 +213,11 @@ dh_settings_dispose (GObject *object)
static void
dh_settings_finalize (GObject *object)
{
- if (default_instance == DH_SETTINGS (object))
+ DhSettings *settings = DH_SETTINGS (object);
+
+ g_list_free_full (settings->priv->books_disabled, g_free);
+
+ if (default_instance == settings)
default_instance = NULL;
G_OBJECT_CLASS (dh_settings_parent_class)->finalize (object);
@@ -159,15 +261,16 @@ dh_settings_init (DhSettings *settings)
DhSettings *
_dh_settings_new (const gchar *contents_path)
{
- DhSettings *object;
+ DhSettings *settings;
g_return_val_if_fail (contents_path != NULL, NULL);
- object = g_object_new (DH_TYPE_SETTINGS, NULL);
- object->priv->gsettings_contents = g_settings_new_with_path (SETTINGS_SCHEMA_ID_CONTENTS,
- contents_path);
+ settings = g_object_new (DH_TYPE_SETTINGS, NULL);
+ settings->priv->gsettings_contents = g_settings_new_with_path (SETTINGS_SCHEMA_ID_CONTENTS,
+ contents_path);
+ load_books_disabled (settings);
- return object;
+ return settings;
}
/**
@@ -293,3 +396,57 @@ dh_settings_bind_group_books_by_language (DhSettings *settings)
G_SETTINGS_BIND_DEFAULT |
G_SETTINGS_BIND_NO_SENSITIVITY);
}
+
+/**
+ * dh_settings_is_book_enabled:
+ * @settings: a #DhSettings.
+ * @book: a #DhBook.
+ *
+ * Returns whether @book is enabled according to the "books-disabled" #GSettings
+ * key. If the @book ID is present in "books-disabled", this function returns
+ * %FALSE, otherwise %TRUE is returned.
+ *
+ * Returns: whether @book is enabled.
+ * Since: 3.30
+ */
+gboolean
+dh_settings_is_book_enabled (DhSettings *settings,
+ DhBook *book)
+{
+ const gchar *book_id;
+
+ g_return_val_if_fail (DH_IS_SETTINGS (settings), FALSE);
+ g_return_val_if_fail (DH_IS_BOOK (book), FALSE);
+
+ book_id = dh_book_get_id (book);
+ return find_in_books_disabled (settings, book_id) == NULL;
+}
+
+/**
+ * dh_settings_set_book_enabled:
+ * @settings: a #DhSettings.
+ * @book: a #DhBook.
+ * @enabled: the new value.
+ *
+ * Modifies the "books-disabled" #GSettings key. It adds or removes the @book ID
+ * from "books-disabled".
+ *
+ * Since: 3.30
+ */
+void
+dh_settings_set_book_enabled (DhSettings *settings,
+ DhBook *book,
+ gboolean enabled)
+{
+ const gchar *book_id;
+
+ g_return_if_fail (DH_IS_SETTINGS (settings));
+ g_return_if_fail (DH_IS_BOOK (book));
+
+ book_id = dh_book_get_id (book);
+
+ if (enabled)
+ enable_book (settings, book_id);
+ else
+ disable_book (settings, book_id);
+}
diff --git a/devhelp/dh-settings.h b/devhelp/dh-settings.h
index ff3527c..77f3061 100644
--- a/devhelp/dh-settings.h
+++ b/devhelp/dh-settings.h
@@ -23,6 +23,7 @@
#define DH_SETTINGS_H
#include <gio/gio.h>
+#include <devhelp/dh-book.h>
G_BEGIN_DECLS
@@ -70,6 +71,13 @@ void dh_settings_set_group_books_by_language (DhSettings *set
void dh_settings_bind_group_books_by_language (DhSettings *settings);
+gboolean dh_settings_is_book_enabled (DhSettings *settings,
+ DhBook *book);
+
+void dh_settings_set_book_enabled (DhSettings *settings,
+ DhBook *book,
+ gboolean enabled);
+
G_END_DECLS
#endif /* DH_SETTINGS_H */
diff --git a/docs/reference/devhelp-sections.txt b/docs/reference/devhelp-sections.txt
index 50ba4b5..6266b17 100644
--- a/docs/reference/devhelp-sections.txt
+++ b/docs/reference/devhelp-sections.txt
@@ -158,6 +158,8 @@ dh_settings_bind_all
dh_settings_get_group_books_by_language
dh_settings_set_group_books_by_language
dh_settings_bind_group_books_by_language
+dh_settings_is_book_enabled
+dh_settings_set_book_enabled
<SUBSECTION Standard>
DH_IS_SETTINGS
DH_IS_SETTINGS_CLASS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]