aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Halden <marius.h@lden.org>2016-04-12 17:04:07 +0200
committerMarius Halden <marius.h@lden.org>2016-05-07 14:31:03 +0200
commitaaf30d6cdb11667ccf8f1eeb523e81272fa8066c (patch)
tree374dc937f954601c8a7e56c938c6e352ea31fccf
parent290f2f974a0f933fd94629bdb1263c462e2bd961 (diff)
Revert "Add support for multiple accounts in set account"
This reverts commit 56fd7212a75237669de37589fc18e2e02444b3d2.
-rw-r--r--irc.h2
-rw-r--r--irc_channel.c40
-rw-r--r--protocols/account.c90
3 files changed, 7 insertions, 125 deletions
diff --git a/irc.h b/irc.h
index deb11edf..cca90bf7 100644
--- a/irc.h
+++ b/irc.h
@@ -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);
}