[evolution-data-server/uoa: 2/3] Add ESourceUoa extension class.



commit 12d626f96e50fdbc94a1e2a9a2487913f902cb51
Author: Matthew Barnes <mbarnes redhat com>
Date:   Sun Oct 14 14:11:34 2012 -0400

    Add ESourceUoa extension class.
    
    For Ubuntu Online Accounts, holds the ID of the corresponding AgAccount.

 .../libedataserver/libedataserver-docs.sgml        |    1 +
 .../libedataserver/libedataserver-sections.txt     |   20 +++
 docs/reference/libedataserver/libedataserver.types |    1 +
 libedataserver/Makefile.am                         |    2 +
 libedataserver/e-source-uoa.c                      |  173 ++++++++++++++++++++
 libedataserver/e-source-uoa.h                      |   88 ++++++++++
 libedataserver/e-source.c                          |    2 +
 libedataserver/libedataserver.h                    |    1 +
 8 files changed, 288 insertions(+), 0 deletions(-)
---
diff --git a/docs/reference/libedataserver/libedataserver-docs.sgml b/docs/reference/libedataserver/libedataserver-docs.sgml
index 3b2d804..2d33930 100644
--- a/docs/reference/libedataserver/libedataserver-docs.sgml
+++ b/docs/reference/libedataserver/libedataserver-docs.sgml
@@ -43,6 +43,7 @@
     <xi:include href="xml/e-source-security.xml"/>
     <xi:include href="xml/e-source-smime.xml"/>
     <xi:include href="xml/e-source-task-list.xml"/>
+    <xi:include href="xml/e-source-uoa.xml"/>
     <xi:include href="xml/e-source-webdav.xml"/>
   </chapter>
 
diff --git a/docs/reference/libedataserver/libedataserver-sections.txt b/docs/reference/libedataserver/libedataserver-sections.txt
index 8de0ebc..48f9681 100644
--- a/docs/reference/libedataserver/libedataserver-sections.txt
+++ b/docs/reference/libedataserver/libedataserver-sections.txt
@@ -997,6 +997,26 @@ ESourceTaskListPrivate
 </SECTION>
 
 <SECTION>
+<FILE>e-source-uoa</FILE>
+<TITLE>ESourceUoa</TITLE>
+ESourceUoa
+E_SOURCE_EXTENSION_UOA
+e_source_uoa_get_account_id
+e_source_uoa_set_account_id
+<SUBSECTION Standard>
+E_SOURCE_UOA
+E_IS_SOURCE_UOA
+E_TYPE_SOURCE_UOA
+E_SOURCE_UOA_CLASS
+E_IS_SOURCE_UOA_CLASS
+E_SOURCE_UOA_GET_CLASS
+ESourceUoaClass
+<SUBSECTION Private>
+ESourceUoaPrivate
+e_source_uoa_get_type
+</SECTION>
+
+<SECTION>
 <FILE>e-source-webdav</FILE>
 <TITLE>ESourceWebdav</TITLE>
 ESourceWebdav
diff --git a/docs/reference/libedataserver/libedataserver.types b/docs/reference/libedataserver/libedataserver.types
index 18eb94f..4005c82 100644
--- a/docs/reference/libedataserver/libedataserver.types
+++ b/docs/reference/libedataserver/libedataserver.types
@@ -32,5 +32,6 @@ e_source_security_get_type
 e_source_selectable_get_type
 e_source_smime_get_type
 e_source_task_list_get_type
+e_source_uoa_get_type
 e_source_webdav_get_type
 
diff --git a/libedataserver/Makefile.am b/libedataserver/Makefile.am
index 0b5378f..69e5bcf 100644
--- a/libedataserver/Makefile.am
+++ b/libedataserver/Makefile.am
@@ -87,6 +87,7 @@ libedataserver_1_2_la_SOURCES =		\
 	e-source-security.c		\
 	e-source-selectable.c		\
 	e-source-smime.c		\
+	e-source-uoa.c			\
 	e-source-webdav.c		\
 	e-debug-log.c			\
 	e-time-utils.c			\
@@ -160,6 +161,7 @@ libedataserverinclude_HEADERS =		\
 	e-source-security.h		\
 	e-source-selectable.h		\
 	e-source-smime.h		\
+	e-source-uoa.h			\
 	e-source-webdav.h		\
 	e-debug-log.h			\
 	e-time-utils.h			\
diff --git a/libedataserver/e-source-uoa.c b/libedataserver/e-source-uoa.c
new file mode 100644
index 0000000..40fbcff
--- /dev/null
+++ b/libedataserver/e-source-uoa.c
@@ -0,0 +1,173 @@
+/*
+ * e-source-uoa.c
+ *
+ * This program 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; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program 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 the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+/**
+ * SECTION: e-source-uoa
+ * @include: libedataserver/libedataserver.h
+ * @short_description: #ESource extension for Ubuntu Online Accounts
+ *
+ * The #ESourceGoa extension associates an #ESource with an #AgAccount.
+ * This extension is usually found in a top-level #ESource, with various
+ * mail, calendar and address book data sources as children.
+ *
+ * Access the extension as follows:
+ *
+ * |[
+ *   #include <libedataserver/libedataserver.h>
+ *
+ *   ESourceGoa *extension;
+ *
+ *   extension = e_source_get_extension (source, E_SOURCE_EXTENSION_UOA);
+ * ]|
+ **/
+
+#include "e-source-uoa.h"
+
+#include <libedataserver/e-data-server-util.h>
+
+#define E_SOURCE_UOA_GET_PRIVATE(obj) \
+	(G_TYPE_INSTANCE_GET_PRIVATE \
+	((obj), E_TYPE_SOURCE_UOA, ESourceUoaPrivate))
+
+struct _ESourceUoaPrivate {
+	guint account_id;
+};
+
+enum {
+	PROP_0,
+	PROP_ACCOUNT_ID
+};
+
+G_DEFINE_TYPE (
+	ESourceUoa,
+	e_source_uoa,
+	E_TYPE_SOURCE_EXTENSION)
+
+static void
+source_uoa_set_property (GObject *object,
+                         guint property_id,
+                         const GValue *value,
+                         GParamSpec *pspec)
+{
+	switch (property_id) {
+		case PROP_ACCOUNT_ID:
+			e_source_uoa_set_account_id (
+				E_SOURCE_UOA (object),
+				g_value_get_uint (value));
+			return;
+	}
+
+	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+source_uoa_get_property (GObject *object,
+                         guint property_id,
+                         GValue *value,
+                         GParamSpec *pspec)
+{
+	switch (property_id) {
+		case PROP_ACCOUNT_ID:
+			g_value_set_uint (
+				value,
+				e_source_uoa_get_account_id (
+				E_SOURCE_UOA (object)));
+			return;
+	}
+
+	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+e_source_uoa_class_init (ESourceUoaClass *class)
+{
+	GObjectClass *object_class;
+	ESourceExtensionClass *extension_class;
+
+	g_type_class_add_private (class, sizeof (ESourceUoaPrivate));
+
+	object_class = G_OBJECT_CLASS (class);
+	object_class->set_property = source_uoa_set_property;
+	object_class->get_property = source_uoa_get_property;
+
+	extension_class = E_SOURCE_EXTENSION_CLASS (class);
+	extension_class->name = E_SOURCE_EXTENSION_UOA;
+
+	g_object_class_install_property (
+		object_class,
+		PROP_ACCOUNT_ID,
+		g_param_spec_uint (
+			"account-id",
+			"Account ID",
+			"Ubuntu Online Account ID",
+			0, G_MAXUINT, 0,
+			G_PARAM_READWRITE |
+			G_PARAM_CONSTRUCT |
+			G_PARAM_STATIC_STRINGS |
+			E_SOURCE_PARAM_SETTING));
+}
+
+static void
+e_source_uoa_init (ESourceUoa *extension)
+{
+	extension->priv = E_SOURCE_UOA_GET_PRIVATE (extension);
+}
+
+/**
+ * e_source_uoa_get_account_id:
+ * @extension: an #ESourceUoa
+ *
+ * Returns the numeric identifier of the Ubuntu Online Account associated
+ * with the #ESource to which @extension belongs.
+ *
+ * Returns: the associated Ubuntu Online Account ID
+ *
+ * Since: 3.8
+ **/
+guint
+e_source_uoa_get_account_id (ESourceUoa *extension)
+{
+	g_return_val_if_fail (E_IS_SOURCE_UOA (extension), 0);
+
+	return extension->priv->account_id;
+}
+
+/**
+ * e_source_uoa_set_account_id:
+ * @extension: an #ESourceUoa
+ * @account_id: the associated Ubuntu Online Account ID
+ *
+ * Sets the numeric identifier of the Ubuntu Online Account associated
+ * with the #ESource to which @extension belongs.
+ *
+ * Since: 3.8
+ **/
+void
+e_source_uoa_set_account_id (ESourceUoa *extension,
+                             guint account_id)
+{
+	g_return_if_fail (E_IS_SOURCE_UOA (extension));
+
+	if (extension->priv->account_id == account_id)
+		return;
+
+	extension->priv->account_id = account_id;
+
+	g_object_notify (G_OBJECT (extension), "account-id");
+}
+
diff --git a/libedataserver/e-source-uoa.h b/libedataserver/e-source-uoa.h
new file mode 100644
index 0000000..06837ca
--- /dev/null
+++ b/libedataserver/e-source-uoa.h
@@ -0,0 +1,88 @@
+/*
+ * e-source-uoa.h
+ *
+ * This program 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; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program 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 the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+#if !defined (__LIBEDATASERVER_H_INSIDE__) && !defined (LIBEDATASERVER_COMPILATION)
+#error "Only <libedataserver/libedataserver.h> should be included directly."
+#endif
+
+#ifndef E_SOURCE_UOA_H
+#define E_SOURCE_UOA_H
+
+#include <libedataserver/e-source-extension.h>
+
+/* Standard GObject macros */
+#define E_TYPE_SOURCE_UOA \
+	(e_source_uoa_get_type ())
+#define E_SOURCE_UOA(obj) \
+	(G_TYPE_CHECK_INSTANCE_CAST \
+	((obj), E_TYPE_SOURCE_UOA, ESourceUoa))
+#define E_SOURCE_UOA_CLASS(cls) \
+	(G_TYPE_CHECK_CLASS_CAST \
+	((cls), E_TYPE_SOURCE_UOA, ESourceUoaClass))
+#define E_IS_SOURCE_UOA(obj) \
+	(G_TYPE_CHECK_INSTANCE_TYPE \
+	((obj), E_TYPE_SOURCE_UOA))
+#define E_IS_SOURCE_UOA_CLASS(cls) \
+	(G_TYPE_CHECK_CLASS_TYPE \
+	((cls), E_TYPE_SOURCE_UOA))
+#define E_SOURCE_UOA_GET_CLASS(obj) \
+	(G_TYPE_INSTANCE_GET_CLASS \
+	((obj), E_TYPE_SOURCE_UOA, ESourceUoaClass))
+
+/**
+ * E_SOURCE_EXTENSION_UOA:
+ *
+ * Pass this extension name to e_source_get_extension() to access
+ * #ESourceUoa.  This is also used as a group name in key files.
+ *
+ * Since: 3.8
+ **/
+#define E_SOURCE_EXTENSION_UOA "Ubuntu Online Accounts"
+
+G_BEGIN_DECLS
+
+typedef struct _ESourceUoa ESourceUoa;
+typedef struct _ESourceUoaClass ESourceUoaClass;
+typedef struct _ESourceUoaPrivate ESourceUoaPrivate;
+
+/**
+ * ESourceUoa:
+ *
+ * Contains only private data that should be read and manipulated using the
+ * functions below.
+ *
+ * Since: 3.8
+ **/
+struct _ESourceUoa {
+	ESourceExtension parent;
+	ESourceUoaPrivate *priv;
+};
+
+struct _ESourceUoaClass {
+	ESourceExtensionClass parent_class;
+};
+
+GType		e_source_uoa_get_type		(void) G_GNUC_CONST;
+guint		e_source_uoa_get_account_id	(ESourceUoa *extension);
+void		e_source_uoa_set_account_id	(ESourceUoa *extension,
+						 guint account_id);
+
+G_END_DECLS
+
+#endif /* E_SOURCE_UOA */
+
diff --git a/libedataserver/e-source.c b/libedataserver/e-source.c
index 5f1d045..0ffb94f 100644
--- a/libedataserver/e-source.c
+++ b/libedataserver/e-source.c
@@ -96,6 +96,7 @@
 #include "e-source-security.h"
 #include "e-source-selectable.h"
 #include "e-source-smime.h"
+#include "e-source-uoa.h"
 #include "e-source-webdav.h"
 
 #define E_SOURCE_GET_PRIVATE(obj) \
@@ -1653,6 +1654,7 @@ e_source_class_init (ESourceClass *class)
 	g_type_ensure (E_TYPE_SOURCE_SELECTABLE);
 	g_type_ensure (E_TYPE_SOURCE_SMIME);
 	g_type_ensure (E_TYPE_SOURCE_TASK_LIST);
+	g_type_ensure (E_TYPE_SOURCE_UOA);
 	g_type_ensure (E_TYPE_SOURCE_WEBDAV);
 }
 
diff --git a/libedataserver/libedataserver.h b/libedataserver/libedataserver.h
index 1bf689c..cb99996 100644
--- a/libedataserver/libedataserver.h
+++ b/libedataserver/libedataserver.h
@@ -64,6 +64,7 @@
 #include <libedataserver/e-source-security.h>
 #include <libedataserver/e-source-selectable.h>
 #include <libedataserver/e-source-smime.h>
+#include <libedataserver/e-source-uoa.h>
 #include <libedataserver/e-source-webdav.h>
 #include <libedataserver/e-source.h>
 #include <libedataserver/e-time-utils.h>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]