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:
Not Zed
2003-02-24 02:51:01 +00:00
committed by Michael Zucci
parent 87f2abd1f0
commit 9491a06552
3 changed files with 197 additions and 5 deletions

View File

@ -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):

View File

@ -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;
}

View File

@ -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__ */