[evolution-data-server] Add e_source_list_peek_default_source().
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Add e_source_list_peek_default_source().
- Date: Wed, 18 Aug 2010 20:46:02 +0000 (UTC)
commit fb81a9f23c3eb6a3dc4943edd3c1741ba9195e41
Author: Matthew Barnes <mbarnes redhat com>
Date: Wed Aug 18 10:31:36 2010 -0400
Add e_source_list_peek_default_source().
New convenience function searches the ESourceList for an ESource
with a property named "default", or else an ESource with a property
named "system". If no such ESource exists it returns NULL.
Adapt EBook and ECal to use this where appropriate.
addressbook/libebook/e-book.c | 47 ++++--------
calendar/libecal/e-cal.c | 79 ++++++-------------
.../libedataserver/libedataserver-sections.txt | 1 +
.../libedataserver/tmpl/e-source-list.sgml | 9 ++
libedataserver/e-source-list.c | 51 +++++++++++++
libedataserver/e-source-list.h | 1 +
6 files changed, 101 insertions(+), 87 deletions(-)
---
diff --git a/addressbook/libebook/e-book.c b/addressbook/libebook/e-book.c
index 251655e..1f76705 100644
--- a/addressbook/libebook/e-book.c
+++ b/addressbook/libebook/e-book.c
@@ -3240,51 +3240,32 @@ e_book_new_system_addressbook (GError **error)
return book;
}
-static gboolean
-check_default (ESource *source, gpointer data)
-{
- g_return_val_if_fail (source != NULL, FALSE);
-
- return e_source_get_property (source, "default") != NULL;
-}
-
/**
* e_book_new_default_addressbook:
- * @error: A #GError pointer
+ * @error: return location for a #GError, or %NULL
*
* Creates a new #EBook corresponding to the user's default
- * addressbook. See the documentation for e_book_new for further
- * information.
+ * address book. See the documentation for e_book_new() for
+ * further information.
*
- * Returns: a new but unopened #EBook.
+ * Returns: a new but unopened #EBook
*/
-EBook*
-e_book_new_default_addressbook (GError **error)
+EBook *
+e_book_new_default_addressbook (GError **error)
{
- GError *err = NULL;
- ESourceList *sources = NULL;
- ESource *default_source = NULL;
+ ESourceList *source_list;
+ ESource *source;
EBook *book;
- default_source = search_known_sources (check_default, NULL, &sources, &err);
- if (err) {
- g_propagate_error (error, err);
- if (sources)
- g_object_unref (sources);
+ if (!e_book_get_addressbooks (&source_list, error))
return NULL;
- }
- if (default_source) {
- book = e_book_new (default_source, &err);
- g_object_unref (default_source);
- } else {
- book = e_book_new_system_addressbook (&err);
- }
+ source = e_source_list_peek_default_source (source_list);
+ g_return_val_if_fail (source != NULL, NULL);
- if (sources)
- g_object_unref (sources);
- if (err)
- g_propagate_error (error, err);
+ book = e_book_new (source, error);
+
+ g_object_unref (source_list);
return book;
}
diff --git a/calendar/libecal/e-cal.c b/calendar/libecal/e-cal.c
index b367a82..ba02bbd 100644
--- a/calendar/libecal/e-cal.c
+++ b/calendar/libecal/e-cal.c
@@ -3973,14 +3973,6 @@ e_cal_get_error_message (ECalendarStatus status)
return NULL;
}
-static gboolean
-check_default (ESource *source, gpointer data)
-{
- g_return_val_if_fail (source != NULL, FALSE);
-
- return e_source_get_property (source, "default") != NULL;
-}
-
/**
* e_cal_open_default:
* @ecal: A calendar client.
@@ -3994,63 +3986,42 @@ check_default (ESource *source, gpointer data)
* Returns: TRUE if it opened correctly, FALSE otherwise.
*/
gboolean
-e_cal_open_default (ECal **ecal, ECalSourceType type, ECalAuthFunc func, gpointer data, GError **error)
+e_cal_open_default (ECal **ecal,
+ ECalSourceType type,
+ ECalAuthFunc func,
+ gpointer data,
+ GError **error)
{
- ESourceList *sources = NULL;
- GError *err = NULL;
- ESource *default_source;
- gboolean res = TRUE;
+ ESourceList *source_list;
+ ESource *source;
+ ECal *client;
- e_return_error_if_fail (ecal != NULL, E_CALENDAR_STATUS_INVALID_ARG);
- *ecal = NULL;
+ g_return_val_if_fail (ecal != NULL, FALSE);
- default_source = search_known_sources (type, check_default, NULL, &sources, &err);
+ /* In case something goes wrong... */
+ *ecal = NULL;
- if (err) {
- if (sources)
- g_object_unref (sources);
- g_propagate_error (error, err);
+ if (!e_cal_get_sources (&source_list, type, error))
return FALSE;
- }
- if (default_source) {
- *ecal = e_cal_new (default_source, type);
- } else {
- switch (type) {
- case E_CAL_SOURCE_TYPE_EVENT:
- *ecal = e_cal_new_system_calendar ();
- break;
- case E_CAL_SOURCE_TYPE_TODO:
- *ecal = e_cal_new_system_tasks ();
- break;
- case E_CAL_SOURCE_TYPE_JOURNAL:
- *ecal = e_cal_new_system_memos ();
- break;
- default:
- break;
- }
- }
+ source = e_source_list_peek_default_source (source_list);
+ g_return_val_if_fail (source != NULL, FALSE);
- if (!*ecal) {
- g_propagate_error (error, err);
- res = FALSE;
- } else {
- e_cal_set_auth_func (*ecal, func, data);
- if (!e_cal_open (*ecal, TRUE, &err)) {
- g_propagate_error (error, err);
- res = FALSE;
- }
- }
+ /* XXX This can fail but doesn't take a GError!? */
+ client = e_cal_new (source, type);
+ g_return_val_if_fail (client != NULL, FALSE);
- if (!res && *ecal) {
- g_object_unref (*ecal);
- *ecal = NULL;
+ e_cal_set_auth_func (client, func, data);
+ if (!e_cal_open (client, TRUE, error)) {
+ g_object_unref (client);
+ return FALSE;
}
- if (sources)
- g_object_unref (sources);
+ *ecal = client;
- return res;
+ g_object_unref (source_list);
+
+ return TRUE;
}
/**
diff --git a/docs/reference/libedataserver/libedataserver-sections.txt b/docs/reference/libedataserver/libedataserver-sections.txt
index 50fdcc4..425f1ea 100644
--- a/docs/reference/libedataserver/libedataserver-sections.txt
+++ b/docs/reference/libedataserver/libedataserver-sections.txt
@@ -219,6 +219,7 @@ e_source_list_peek_group_by_base_uri
e_source_list_peek_group_by_properties
e_source_list_peek_source_by_uid
e_source_list_peek_source_any
+e_source_list_peek_default_source
e_source_list_add_group
e_source_list_remove_group
e_source_list_remove_group_by_uid
diff --git a/docs/reference/libedataserver/tmpl/e-source-list.sgml b/docs/reference/libedataserver/tmpl/e-source-list.sgml
index 4c7ca11..116b098 100644
--- a/docs/reference/libedataserver/tmpl/e-source-list.sgml
+++ b/docs/reference/libedataserver/tmpl/e-source-list.sgml
@@ -136,6 +136,15 @@ ESourceList
@Returns:
+<!-- ##### FUNCTION e_source_list_peek_default_source ##### -->
+<para>
+
+</para>
+
+ list:
+ Returns:
+
+
<!-- ##### FUNCTION e_source_list_add_group ##### -->
<para>
diff --git a/libedataserver/e-source-list.c b/libedataserver/e-source-list.c
index e3a147f..62f75b0 100644
--- a/libedataserver/e-source-list.c
+++ b/libedataserver/e-source-list.c
@@ -562,6 +562,57 @@ e_source_list_peek_source_any (ESourceList *list)
return NULL;
}
+/**
+ * e_source_list_peek_default_source:
+ * @source_list: an #ESourceList
+ *
+ * Attempts to find a default #ESource in @source_list by looking for
+ * a source with a property named "default", or else a source with a
+ * property named "system". If no such #ESource exists, the function
+ * returns %NULL.
+ *
+ * Returns: the default #ESource in @source_list, or %NULL
+ *
+ * Since: 2.32
+ **/
+ESource *
+e_source_list_peek_default_source (ESourceList *source_list)
+{
+ ESource *system_source = NULL;
+ GSList *groups;
+ GSList *iter1;
+
+ g_return_val_if_fail (E_IS_SOURCE_LIST (source_list), NULL);
+
+ groups = e_source_list_peek_groups (source_list);
+
+ for (iter1 = groups; iter1 != NULL; iter1 = iter1->next) {
+ ESourceGroup *source_group;
+ GSList *sources;
+ GSList *iter2;
+
+ source_group = E_SOURCE_GROUP (iter1->data);
+ sources = e_source_group_peek_sources (source_group);
+
+ for (iter2 = sources; iter2 != NULL; iter2 = iter2->next) {
+ ESource *source;
+
+ source = E_SOURCE (iter2->data);
+
+ /* If we find the default source, we're done. */
+ if (e_source_get_property (source, "default"))
+ return source;
+
+ /* Make a note of the system source. If we fail
+ * to find a default source we fall back to this. */
+ if (e_source_get_property (source, "system"))
+ system_source = source;
+ }
+ }
+
+ return system_source;
+}
+
gboolean
e_source_list_add_group (ESourceList *list,
ESourceGroup *group,
diff --git a/libedataserver/e-source-list.h b/libedataserver/e-source-list.h
index d613927..719a788 100644
--- a/libedataserver/e-source-list.h
+++ b/libedataserver/e-source-list.h
@@ -73,6 +73,7 @@ ESourceGroup *e_source_list_peek_group_by_properties (ESourceList *list, const g
ESource *e_source_list_peek_source_by_uid (ESourceList *list,
const gchar *uid);
ESource *e_source_list_peek_source_any (ESourceList *list);
+ESource *e_source_list_peek_default_source (ESourceList *list);
gboolean e_source_list_add_group (ESourceList *list,
ESourceGroup *group,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]