helper to get the dfault account. (e_account_list_set_default): helper to
2003-02-20 Not Zed <NotZed@Ximian.com> * e-account-list.c (e_account_list_get_default): helper to get the dfault account. (e_account_list_set_default): helper to set the default account. (e_account_list_find): Helper to find accounts based on differnet key types. (e_account_list_add): helper to add account + emit added event. (e_account_list_change): helper to emit changed event. (e_account_list_remove): herlper to remove account + emit changed event. svn path=/trunk/; revision=20015
This commit is contained in:
@ -1,3 +1,14 @@
|
||||
2003-02-20 Not Zed <NotZed@Ximian.com>
|
||||
|
||||
* e-account-list.c (e_account_list_get_default): helper to get the
|
||||
dfault account.
|
||||
(e_account_list_set_default): helper to set the default account.
|
||||
(e_account_list_find): Helper to find accounts based on differnet
|
||||
key types.
|
||||
(e_account_list_add): helper to add account + emit added event.
|
||||
(e_account_list_change): helper to emit changed event.
|
||||
(e_account_list_remove): herlper to remove account + emit changed event.
|
||||
|
||||
2003-02-22 Hans Petter Jansson <hpj@ximian.com>
|
||||
|
||||
* e-categories-config.c (e_categories_config_open_dialog_for_entry):
|
||||
|
@ -286,3 +286,169 @@ e_account_list_save (EAccountList *account_list)
|
||||
|
||||
gconf_client_suggest_sync (account_list->priv->gconf, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* e_account_list_add:
|
||||
* @accounts:
|
||||
* @account:
|
||||
*
|
||||
* Add an account to the account list. Will emit the account-changed
|
||||
* event.
|
||||
**/
|
||||
void
|
||||
e_account_list_add(EAccountList *accounts, EAccount *account)
|
||||
{
|
||||
/* FIXME: should we check for duplicate accounts? */
|
||||
|
||||
e_list_append ((EList *)accounts, account);
|
||||
g_signal_emit(accounts, signals[ACCOUNT_ADDED], 0, account);
|
||||
}
|
||||
|
||||
/**
|
||||
* e_account_list_change:
|
||||
* @accounts:
|
||||
* @account:
|
||||
*
|
||||
* Signal that the details of an account have changed.
|
||||
**/
|
||||
void
|
||||
e_account_list_change(EAccountList *accounts, EAccount *account)
|
||||
{
|
||||
/* maybe the account should do this itself ... */
|
||||
g_signal_emit(accounts, signals[ACCOUNT_CHANGED], 0, account);
|
||||
}
|
||||
|
||||
/**
|
||||
* e_account_list_remove:
|
||||
* @accounts:
|
||||
* @account:
|
||||
*
|
||||
* Remove an account from the account list, and emit the
|
||||
* account-removed signal. If the account was the default account,
|
||||
* then reset the default to the first account.
|
||||
**/
|
||||
void
|
||||
e_account_list_remove(EAccountList *accounts, EAccount *account)
|
||||
{
|
||||
if (account == e_account_list_get_default(accounts))
|
||||
gconf_client_unset (accounts->priv->gconf, "/apps/evolution/mail/default_account", NULL);
|
||||
|
||||
/* not sure if need to ref but no harm */
|
||||
g_object_ref (account);
|
||||
e_list_remove ((EList *) accounts, account);
|
||||
g_signal_emit(accounts, signals[ACCOUNT_REMOVED], 0, account);
|
||||
g_object_unref (account);
|
||||
}
|
||||
|
||||
/**
|
||||
* e_account_list_get_default:
|
||||
* @accounts:
|
||||
*
|
||||
* Get the default account. If no default is specified, or the default
|
||||
* has become stale, then the first account is made the default.
|
||||
*
|
||||
* Return value: The account or NULL if no accounts are defined.
|
||||
**/
|
||||
const EAccount *
|
||||
e_account_list_get_default(EAccountList *accounts)
|
||||
{
|
||||
char *uid;
|
||||
EIterator *it;
|
||||
const EAccount *account = NULL;
|
||||
|
||||
uid = gconf_client_get_string (accounts->priv->gconf, "/apps/evolution/mail/default_account", NULL);
|
||||
it = e_list_get_iterator ((EList *)accounts);
|
||||
|
||||
if (uid) {
|
||||
for (;e_iterator_is_valid (it);e_iterator_next (it)) {
|
||||
account = (const EAccount *)e_iterator_get (it);
|
||||
|
||||
if (!strcmp(uid, account->uid))
|
||||
break;
|
||||
account = NULL;
|
||||
}
|
||||
e_iterator_reset(it);
|
||||
}
|
||||
|
||||
/* no uid or uid not found, @it will be at the first account */
|
||||
if (account == NULL && e_iterator_is_valid(it)) {
|
||||
account = (const EAccount *) e_iterator_get (it);
|
||||
gconf_client_set_string (accounts->priv->gconf, "/apps/evolution/mail/default_account", account->uid, NULL);
|
||||
}
|
||||
|
||||
g_object_unref(it);
|
||||
g_free(uid);
|
||||
|
||||
return account;
|
||||
}
|
||||
|
||||
/**
|
||||
* e_account_list_set_default:
|
||||
* @accounts:
|
||||
* @account:
|
||||
*
|
||||
* Set the account @account to be the default account.
|
||||
**/
|
||||
void
|
||||
e_account_list_set_default(EAccountList *accounts, EAccount *account)
|
||||
{
|
||||
gconf_client_set_string (accounts->priv->gconf, "/apps/evolution/mail/default_account", account->uid, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* e_account_list_find:
|
||||
* @accounts:
|
||||
* @type: Type of search.
|
||||
* @key: Search key.
|
||||
*
|
||||
* Perform a search of the account list on a single key.
|
||||
*
|
||||
* @type must be set from one of the following search types:
|
||||
* E_ACCOUNT_FIND_NAME - Find an account by account name.
|
||||
* E_ACCOUNT_FIND_ID_NAME - Find an account by the owner's identity name.
|
||||
* E_ACCOUNT_FIND_ID_ADDRESS - Find an account by the owner's identity address.
|
||||
*
|
||||
* Return value: The account or NULL if it doesn't exist.
|
||||
**/
|
||||
const EAccount *
|
||||
e_account_list_find(EAccountList *accounts, e_account_find_t type, const char *key)
|
||||
{
|
||||
char *val;
|
||||
EIterator *it;
|
||||
const EAccount *account = NULL;
|
||||
|
||||
/* this could use a callback for more flexibility ...
|
||||
... but this makes the common cases easier */
|
||||
|
||||
for (it = e_list_get_iterator ((EList *)accounts);
|
||||
e_iterator_is_valid (it);
|
||||
e_iterator_next (it)) {
|
||||
int found = 0;
|
||||
|
||||
account = (const EAccount *)e_iterator_get (it);
|
||||
|
||||
val = NULL;
|
||||
switch(type) {
|
||||
case E_ACCOUNT_FIND_NAME:
|
||||
found = strcmp(account->name, key) == 0;
|
||||
break;
|
||||
case E_ACCOUNT_FIND_ID_NAME:
|
||||
if (account->id)
|
||||
found = strcmp(account->id->name, key) == 0;
|
||||
break;
|
||||
case E_ACCOUNT_FIND_ID_ADDRESS:
|
||||
if (account->id)
|
||||
found = g_ascii_strcasecmp(account->id->address, key) == 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (found)
|
||||
break;
|
||||
|
||||
account = NULL;
|
||||
}
|
||||
g_object_unref(it);
|
||||
|
||||
return account;
|
||||
}
|
||||
|
||||
|
@ -32,6 +32,13 @@
|
||||
|
||||
typedef struct EAccountListPrivate EAccountListPrivate;
|
||||
|
||||
/* search options for the find command */
|
||||
typedef enum _e_account_find_t {
|
||||
E_ACCOUNT_FIND_NAME,
|
||||
E_ACCOUNT_FIND_ID_NAME,
|
||||
E_ACCOUNT_FIND_ID_ADDRESS,
|
||||
} e_account_find_t;
|
||||
|
||||
typedef struct {
|
||||
EList parent_object;
|
||||
|
||||
@ -48,12 +55,20 @@ typedef struct {
|
||||
} EAccountListClass;
|
||||
|
||||
|
||||
GType e_account_list_get_type (void);
|
||||
GType e_account_list_get_type (void);
|
||||
|
||||
EAccountList *e_account_list_new (GConfClient *gconf);
|
||||
void e_account_list_construct (EAccountList *account_list,
|
||||
GConfClient *gconf);
|
||||
EAccountList *e_account_list_new (GConfClient *gconf);
|
||||
void e_account_list_construct (EAccountList *account_list,
|
||||
GConfClient *gconf);
|
||||
|
||||
void e_account_list_save (EAccountList *account_list);
|
||||
void e_account_list_save (EAccountList *account_list);
|
||||
|
||||
void e_account_list_add (EAccountList *, EAccount *);
|
||||
void e_account_list_change (EAccountList *, EAccount *);
|
||||
void e_account_list_remove (EAccountList *, EAccount *);
|
||||
|
||||
const EAccount *e_account_list_get_default(EAccountList *);
|
||||
void e_account_list_set_default(EAccountList *, EAccount *);
|
||||
const EAccount *e_account_list_find (EAccountList *, e_account_find_t type, const char *key);
|
||||
|
||||
#endif /* __E_ACCOUNT_LIST__ */
|
||||
|
Reference in New Issue
Block a user