From 67c0ce8617f12ee0a937ffe14fb40f390e4df86d Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 26 Apr 2011 10:26:55 -0400 Subject: Add e_meeting_store_find_self(). Convenience function that uses registered mail identities to find the user among meeting attendees. --- calendar/gui/dialogs/event-editor.c | 23 ++++-------------- calendar/gui/dialogs/task-editor.c | 24 +++++-------------- calendar/gui/e-meeting-store.c | 47 +++++++++++++++++++++++++++++++++++++ calendar/gui/e-meeting-store.h | 3 +++ 4 files changed, 61 insertions(+), 36 deletions(-) (limited to 'calendar/gui') diff --git a/calendar/gui/dialogs/event-editor.c b/calendar/gui/dialogs/event-editor.c index b66063dd73..41985bd8b7 100644 --- a/calendar/gui/dialogs/event-editor.c +++ b/calendar/gui/dialogs/event-editor.c @@ -33,7 +33,6 @@ #include #include -#include #include #include #include @@ -674,23 +673,11 @@ event_editor_edit_comp (CompEditor *editor, ECalComponent *comp) /* If we aren't the organizer we can still change our own status */ if (!comp_editor_get_user_org (editor)) { - EAccountList *accounts; - EAccount *account; - EIterator *it; - - accounts = e_get_account_list (); - for (it = e_list_get_iterator ((EList *)accounts); - e_iterator_is_valid (it); - e_iterator_next (it)) { - EMeetingAttendee *ia; - - account = (EAccount*)e_iterator_get (it); - - ia = e_meeting_store_find_attendee (priv->model, account->id->address, &row); - if (ia != NULL) - e_meeting_attendee_set_edit_level (ia, E_MEETING_ATTENDEE_EDIT_STATUS); - } - g_object_unref (it); + EMeetingAttendee *ia; + + ia = e_meeting_store_find_self (priv->model, &row); + if (ia != NULL) + e_meeting_attendee_set_edit_level (ia, E_MEETING_ATTENDEE_EDIT_STATUS); } else if (e_cal_get_organizer_must_attend (client)) { EMeetingAttendee *ia; diff --git a/calendar/gui/dialogs/task-editor.c b/calendar/gui/dialogs/task-editor.c index 2deee3b6ec..110b66692a 100644 --- a/calendar/gui/dialogs/task-editor.c +++ b/calendar/gui/dialogs/task-editor.c @@ -32,7 +32,6 @@ #include #include -#include "e-util/e-account-utils.h" #include "e-util/e-plugin-ui.h" #include "e-util/e-util-private.h" @@ -422,23 +421,12 @@ task_editor_edit_comp (CompEditor *editor, ECalComponent *comp) /* If we aren't the organizer we can still change our own status */ if (!comp_editor_get_user_org (editor)) { - EAccountList *accounts; - EAccount *account; - EIterator *it; - - accounts = e_get_account_list (); - for (it = e_list_get_iterator ((EList *)accounts); - e_iterator_is_valid (it); - e_iterator_next (it)) { - EMeetingAttendee *ia; - - account = (EAccount*)e_iterator_get (it); - - ia = e_meeting_store_find_attendee (priv->model, account->id->address, &row); - if (ia != NULL) - e_meeting_attendee_set_edit_level (ia, E_MEETING_ATTENDEE_EDIT_STATUS); - } - g_object_unref (it); + EMeetingAttendee *ia; + + ia = e_meeting_store_find_self (priv->model, &row); + + if (ia != NULL) + e_meeting_attendee_set_edit_level (ia, E_MEETING_ATTENDEE_EDIT_STATUS); } else if (e_cal_get_organizer_must_attend (client)) { EMeetingAttendee *ia; diff --git a/calendar/gui/e-meeting-store.c b/calendar/gui/e-meeting-store.c index c89bd44e2a..b0c658215c 100644 --- a/calendar/gui/e-meeting-store.c +++ b/calendar/gui/e-meeting-store.c @@ -35,6 +35,7 @@ #include #include #include +#include #include #include "itip-utils.h" #include "e-meeting-utils.h" @@ -1086,6 +1087,52 @@ e_meeting_store_remove_all_attendees (EMeetingStore *store) } } +/** + * e_meeting_store_find_self: + * @store: an #EMeetingStore + * @row: return location for the matching row number, or %NULL + * + * Looks for the user in @store by comparing attendee email addresses to + * registered mail identities. If a matching email address is found and + * @row is not %NULL, @row will be set to the #EMeetingStore row number + * with the matching email address. + * + * Returns: an #EMeetingAttendee, or %NULL + **/ +EMeetingAttendee * +e_meeting_store_find_self (EMeetingStore *store, + gint *row) +{ + EMeetingAttendee *attendee = NULL; + EAccountList *account_list; + EIterator *iterator; + + g_return_val_if_fail (E_IS_MEETING_STORE (store), NULL); + + account_list = e_get_account_list (); + + iterator = e_list_get_iterator (E_LIST (account_list)); + + while (e_iterator_is_valid (iterator)) { + EAccount *account; + + /* XXX EIterator misuses const. */ + account = (EAccount *) e_iterator_get (iterator); + + attendee = e_meeting_store_find_attendee ( + store, account->id->address, row); + + if (attendee != NULL) + break; + + e_iterator_next (iterator); + } + + g_object_unref (iterator); + + return attendee; +} + EMeetingAttendee * e_meeting_store_find_attendee (EMeetingStore *store, const gchar *address, diff --git a/calendar/gui/e-meeting-store.h b/calendar/gui/e-meeting-store.h index 3565657429..2c863ef506 100644 --- a/calendar/gui/e-meeting-store.h +++ b/calendar/gui/e-meeting-store.h @@ -121,6 +121,9 @@ void e_meeting_store_remove_attendee (EMeetingStore *meeting_store, EMeetingAttendee *attendee); void e_meeting_store_remove_all_attendees (EMeetingStore *meeting_store); +EMeetingAttendee * + e_meeting_store_find_self (EMeetingStore *meeting_store, + gint *row); EMeetingAttendee * e_meeting_store_find_attendee (EMeetingStore *meeting_store, const gchar *address, -- cgit v1.2.3