Add e_meeting_store_find_self().

Convenience function that uses registered mail identities to find the
user among meeting attendees.
This commit is contained in:
Matthew Barnes
2011-04-26 10:26:55 -04:00
parent 8cd2068215
commit 67c0ce8617
4 changed files with 58 additions and 33 deletions

View File

@ -33,7 +33,6 @@
#include <glib/gi18n.h>
#include <misc/e-dateedit.h>
#include <e-util/e-account-utils.h>
#include <e-util/e-plugin-ui.h>
#include <e-util/e-util-private.h>
#include <e-util/e-ui-manager.h>
@ -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;
EMeetingAttendee *ia;
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);
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;

View File

@ -32,7 +32,6 @@
#include <string.h>
#include <glib/gi18n.h>
#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;
EMeetingAttendee *ia;
accounts = e_get_account_list ();
for (it = e_list_get_iterator ((EList *)accounts);
e_iterator_is_valid (it);
e_iterator_next (it)) {
EMeetingAttendee *ia;
ia = e_meeting_store_find_self (priv->model, &row);
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);
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;

View File

@ -35,6 +35,7 @@
#include <libedataserver/e-proxy.h>
#include <libedataserverui/e-passwords.h>
#include <e-util/e-extensible.h>
#include <e-util/e-account-utils.h>
#include <e-util/e-util-enumtypes.h>
#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,

View File

@ -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,