/* * This library is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library. If not, see . * */ /** * SECTION: e-source-webdav-notes * @include: libedataserver/libedataserver.h * @short_description: WebDAV Notes specific settings * * #ESourceWebDAVNotes is an extension holding specific settings * for the WebDAV Notes backend. **/ #include "e-source-webdav-notes.h" #include struct _ESourceWebDAVNotesPrivate { gchar *default_ext; }; enum { PROP_0, PROP_DEFAULT_EXT }; G_DEFINE_TYPE_WITH_PRIVATE (ESourceWebDAVNotes, e_source_webdav_notes, E_TYPE_SOURCE_EXTENSION) static void source_webdav_notes_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { switch (property_id) { case PROP_DEFAULT_EXT: e_source_webdav_notes_set_default_ext ( E_SOURCE_WEBDAV_NOTES (object), g_value_get_string (value)); return; } G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } static void source_webdav_notes_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { switch (property_id) { case PROP_DEFAULT_EXT: g_value_take_string ( value, e_source_webdav_notes_dup_default_ext ( E_SOURCE_WEBDAV_NOTES (object))); return; } G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } static void source_webdav_notes_finalize (GObject *object) { ESourceWebDAVNotesPrivate *priv; priv = E_SOURCE_WEBDAV_NOTES (object)->priv; g_free (priv->default_ext); /* Chain up to parent's method. */ G_OBJECT_CLASS (e_source_webdav_notes_parent_class)->finalize (object); } static void e_source_webdav_notes_class_init (ESourceWebDAVNotesClass *class) { GObjectClass *object_class; ESourceExtensionClass *extension_class; object_class = G_OBJECT_CLASS (class); object_class->set_property = source_webdav_notes_set_property; object_class->get_property = source_webdav_notes_get_property; object_class->finalize = source_webdav_notes_finalize; extension_class = E_SOURCE_EXTENSION_CLASS (class); extension_class->name = E_SOURCE_EXTENSION_WEBDAV_NOTES; g_object_class_install_property ( object_class, PROP_DEFAULT_EXT, g_param_spec_string ( "default-ext", "Default Ext", "Default file extension for new notes", ".md", G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS | E_SOURCE_PARAM_SETTING)); } static void e_source_webdav_notes_init (ESourceWebDAVNotes *extension) { extension->priv = e_source_webdav_notes_get_instance_private (extension); } /** * e_source_webdav_notes_get_default_ext: * @extension: an #ESourceWebDAVNotes * * Returns the default file extension for new notes. * * Returns: (nullable): the default file extension, or %NULL, when none is set * * Since: 3.44 **/ const gchar * e_source_webdav_notes_get_default_ext (ESourceWebDAVNotes *extension) { g_return_val_if_fail (E_IS_SOURCE_WEBDAV_NOTES (extension), NULL); return extension->priv->default_ext; } /** * e_source_webdav_notes_dup_default_ext: * @extension: an #ESourceWebDAVNotes * * Thread-safe variation of e_source_webdav_notes_get_default_ext(). * Use this function when accessing @extension from multiple threads. * * The returned string should be freed with g_free() when no longer needed. * * Returns: (nullable) (transfer full): a newly-allocated copy of #ESourceWebDAVNotes:default-ext, * or %NULL, when none is set * * Since: 3.44 **/ gchar * e_source_webdav_notes_dup_default_ext (ESourceWebDAVNotes *extension) { const gchar *protected; gchar *duplicate; g_return_val_if_fail (E_IS_SOURCE_WEBDAV_NOTES (extension), NULL); e_source_extension_property_lock (E_SOURCE_EXTENSION (extension)); protected = e_source_webdav_notes_get_default_ext (extension); duplicate = g_strdup (protected); e_source_extension_property_unlock (E_SOURCE_EXTENSION (extension)); return duplicate; } /** * e_source_webdav_notes_set_default_ext: * @extension: an #ESourceWebDAVNotes * @default_ext: (nullable): a default file extension, or %NULL * * Sets the default file extension for new notes. * * The internal copy of @default_ext is automatically stripped of leading and * trailing whitespace. If the resulting string is empty, %NULL is set * instead. * * Since: 3.44 **/ void e_source_webdav_notes_set_default_ext (ESourceWebDAVNotes *extension, const gchar *default_ext) { g_return_if_fail (E_IS_SOURCE_WEBDAV_NOTES (extension)); e_source_extension_property_lock (E_SOURCE_EXTENSION (extension)); if (e_util_strcmp0 (extension->priv->default_ext, default_ext) == 0) { e_source_extension_property_unlock (E_SOURCE_EXTENSION (extension)); return; } g_free (extension->priv->default_ext); extension->priv->default_ext = e_util_strdup_strip (default_ext); e_source_extension_property_unlock (E_SOURCE_EXTENSION (extension)); g_object_notify (G_OBJECT (extension), "default-ext"); }