diff options
author | Marius Halden <marius.h@lden.org> | 2016-04-12 17:04:07 +0200 |
---|---|---|
committer | Marius Halden <marius.h@lden.org> | 2016-05-07 14:31:03 +0200 |
commit | aaf30d6cdb11667ccf8f1eeb523e81272fa8066c (patch) | |
tree | 374dc937f954601c8a7e56c938c6e352ea31fccf | |
parent | 290f2f974a0f933fd94629bdb1263c462e2bd961 (diff) |
Revert "Add support for multiple accounts in set account"
This reverts commit 56fd7212a75237669de37589fc18e2e02444b3d2.
-rw-r--r-- | irc.h | 2 | ||||
-rw-r--r-- | irc_channel.c | 40 | ||||
-rw-r--r-- | protocols/account.c | 90 |
3 files changed, 7 insertions, 125 deletions
@@ -241,7 +241,7 @@ typedef enum { struct irc_control_channel { irc_control_channel_type_t type; struct bee_group *group; - GSList *account; + struct account *account; struct prpl *protocol; char modes[5]; }; diff --git a/irc_channel.c b/irc_channel.c index 097476dd..34ed54a9 100644 --- a/irc_channel.c +++ b/irc_channel.c @@ -866,39 +866,17 @@ static char *set_eval_by_account(set_t *set, char *value) struct irc_channel *ic = set->data; struct irc_control_channel *icc = ic->data; account_t *acc; - GSList *accl, *new_acc = NULL; - char **accounts, **account; - accounts = g_strsplit(value, ",", 0); - if (accounts == NULL) { - goto fail; - } - - for (account = accounts; *account; account++) { - if (!(acc = account_get(ic->irc->b, *account))) { - goto fail; - } else { - new_acc = g_slist_append(new_acc, acc); - } + if (!(acc = account_get(ic->irc->b, value))) { + return SET_INVALID; } - accl = icc->account; - g_slist_free(accl); - - icc->account = new_acc; + icc->account = acc; if ((icc->type & IRC_CC_TYPE_MASK) == IRC_CC_TYPE_ACCOUNT) { bee_irc_channel_update(ic->irc, ic, NULL); } - g_strfreev(accounts); - - return g_strdup(value); - -fail: - g_slist_free(new_acc); - g_strfreev(accounts); - - return SET_INVALID; + return g_strdup(acc->tag); } static char *set_eval_fill_by(set_t *set, char *value) @@ -1022,7 +1000,6 @@ fail: gboolean irc_channel_wants_user(irc_channel_t *ic, irc_user_t *iu) { struct irc_control_channel *icc = ic->data; - GSList *accl; gboolean ret = FALSE; if (iu->bu == NULL) { @@ -1034,13 +1011,7 @@ gboolean irc_channel_wants_user(irc_channel_t *ic, irc_user_t *iu) ret = iu->bu->group == icc->group; break; case IRC_CC_TYPE_ACCOUNT: - for (accl = icc->account; accl; accl = accl->next) { - account_t *acc = accl->data; - if (iu->bu->ic->acc == acc) { - ret = TRUE; - break; - } - } + ret = iu->bu->ic->acc == icc->account; break; case IRC_CC_TYPE_PROTOCOL: ret = iu->bu->ic->acc->prpl == icc->protocol; @@ -1068,7 +1039,6 @@ static gboolean control_channel_free(irc_channel_t *ic) set_del(&ic->set, "protocol"); set_del(&ic->set, "show_users"); - g_slist_free(icc->account); g_free(icc); ic->data = NULL; diff --git a/protocols/account.c b/protocols/account.c index 685d15ec..e25e40c7 100644 --- a/protocols/account.c +++ b/protocols/account.c @@ -122,36 +122,6 @@ account_t *account_add(bee_t *bee, struct prpl *prpl, char *user, char *pass) return a; } -void account_update_channel_set(irc_channel_t *ic, char *old_tag, char *new_tag) -{ - gboolean found = FALSE; - char **account, **accounts; - char *saccount = set_getstr(&ic->set, "account"); - - if (saccount == NULL || *saccount == '\0') { - return; - } - - accounts = g_strsplit(saccount, ",", 0); - for (account = accounts; *account; account++) { - if (g_strcasecmp(*account, old_tag) == 0) { - found = TRUE; - break; - } - } - - if (found) { - g_free(*account); - *account = g_strdup(new_tag); - - saccount = g_strjoinv(",", accounts); - set_setstr(&ic->set, "account", saccount); - g_free(saccount); - } - - g_strfreev(accounts); -} - char *set_eval_account(set_t *set, char *value) { account_t *acc = set->data; @@ -193,28 +163,14 @@ char *set_eval_account(set_t *set, char *value) return NULL; /* password shouldn't be visible in plaintext! */ } else if (strcmp(set->key, "tag") == 0) { account_t *oa; - irc_t *irc; - GSList *l; - char *old; /* Enforce uniqueness. */ if ((oa = account_by_tag(acc->bee, value)) && oa != acc) { return SET_INVALID; } - old = acc->tag; + g_free(acc->tag); acc->tag = g_strdup(value); - - irc = acc->bee->ui_data; - for (l = irc->channels; l; l = l->next) { - irc_channel_t *ic = l->data; - - if (g_strcasecmp(set_getstr(&ic->set, "type"), "control") == 0) { - account_update_channel_set(ic, old, value); - } - } - - g_free(old); return value; } else if (strcmp(set->key, "auto_connect") == 0) { if (!is_bool(value)) { @@ -335,43 +291,9 @@ account_t *account_by_tag(bee_t *bee, const char *tag) return NULL; } -void account_remove_from_channel_set(irc_channel_t *ic, char *tag) -{ - gboolean found = FALSE; - char **account, **accounts; - char *saccount = set_getstr(&ic->set, "account"); - - if (saccount == NULL || *saccount == '\0') { - return; - } - - accounts = g_strsplit(saccount, ",", 0); - for (account = accounts; *account; account++) { - if (g_strcasecmp(*account, tag) == 0) { - found = TRUE; - break; - } - } - - if (found) { - g_free(*account); - - do { - *account = *(account + 1); - } while (*(++account) != NULL); - - saccount = g_strjoinv(",", accounts); - set_setstr(&ic->set, "account", saccount); - } - - g_strfreev(accounts); -} - void account_del(bee_t *bee, account_t *acc) { account_t *a, *l = NULL; - GSList *accl; - irc_t *irc; if (acc->ic) { /* Caller should have checked, accounts still in use can't be deleted. */ @@ -395,16 +317,6 @@ void account_del(bee_t *bee, account_t *acc) } */ - /* Remove from channel set account */ - irc = acc->bee->ui_data; - for (accl = irc->channels; accl; accl = accl->next) { - irc_channel_t *ic = accl->data; - - if (g_strcasecmp(set_getstr(&ic->set, "type"), "control") == 0) { - account_remove_from_channel_set(ic, acc->tag); - } - } - while (a->set) { set_del(&a->set, a->set->key); } |