aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorC. McEnroe <june@causal.agency>2020-02-15 04:54:53 -0500
committerC. McEnroe <june@causal.agency>2020-02-15 04:54:53 -0500
commit42d106260b5e881aad7bc4cf6c73ffb1b30b5abb (patch)
tree3a0ce91447067c10f7b47c3aa3e197545b875639
parentAdd /ns and /cs (diff)
downloadcatgirl-42d106260b5e881aad7bc4cf6c73ffb1b30b5abb.tar.gz
catgirl-42d106260b5e881aad7bc4cf6c73ffb1b30b5abb.zip
Separate network info from self
-rw-r--r--chat.c7
-rw-r--r--chat.h9
-rw-r--r--handle.c16
-rw-r--r--ui.c2
4 files changed, 19 insertions, 15 deletions
diff --git a/chat.c b/chat.c
index fd1d33e..318a379 100644
--- a/chat.c
+++ b/chat.c
@@ -65,6 +65,7 @@ enum Color idColors[IDCap] = {
size_t idNext = Network + 1;
+struct Network network;
struct Self self = { .color = Default };
static const char *save;
@@ -187,10 +188,10 @@ int main(int argc, char *argv[]) {
if (!user) user = nick;
if (!real) real = nick;
+ set(&network.name, host);
+ set(&network.chanTypes, "#&");
+ set(&network.prefixes, "@+");
set(&self.nick, "*");
- set(&self.network, host);
- set(&self.chanTypes, "#&");
- set(&self.prefixes, "@+");
commandComplete();
FILE *certFile = NULL;
diff --git a/chat.h b/chat.h
index c7ab5f7..9976786 100644
--- a/chat.h
+++ b/chat.h
@@ -82,15 +82,18 @@ enum Cap {
#undef X
};
+extern struct Network {
+ char *name;
+ char *chanTypes;
+ char *prefixes;
+} network;
+
extern struct Self {
bool debug;
bool restricted;
char *plain;
const char *join;
enum Cap caps;
- char *network;
- char *chanTypes;
- char *prefixes;
char *nick;
char *user;
enum Color color;
diff --git a/handle.c b/handle.c
index a73ae3e..f29d890 100644
--- a/handle.c
+++ b/handle.c
@@ -212,17 +212,17 @@ static void handleReplyISupport(struct Message *msg) {
char *key = strsep(&msg->params[i], "=");
if (!msg->params[i]) continue;
if (!strcmp(key, "NETWORK")) {
- set(&self.network, msg->params[i]);
+ set(&network.name, msg->params[i]);
uiFormat(
Network, Cold, tagTime(msg),
"You arrive in %s", msg->params[i]
);
} else if (!strcmp(key, "CHANTYPES")) {
- set(&self.chanTypes, msg->params[i]);
+ set(&network.chanTypes, msg->params[i]);
} else if (!strcmp(key, "PREFIX")) {
strsep(&msg->params[i], ")");
if (!msg->params[i]) continue;
- set(&self.prefixes, msg->params[i]);
+ set(&network.prefixes, msg->params[i]);
}
}
}
@@ -348,7 +348,7 @@ static void handleReplyNames(struct Message *msg) {
size_t len = 0;
while (msg->params[3]) {
char *name = strsep(&msg->params[3], " ");
- name += strspn(name, self.prefixes);
+ name += strspn(name, network.prefixes);
char *nick = strsep(&name, "!");
char *user = strsep(&name, "@");
enum Color color = (user ? hash(user) : Default);
@@ -510,7 +510,7 @@ static void handleReplyWhoisChannels(struct Message *msg) {
size_t len = 0;
while (msg->params[2]) {
char *channel = strsep(&msg->params[2], " ");
- channel += strspn(channel, self.prefixes);
+ channel += strspn(channel, network.prefixes);
int n = snprintf(
&buf[len], sizeof(buf) - len,
"%s\3%02d%s\3", (len ? ", " : ""), hash(channel), channel
@@ -642,11 +642,11 @@ static const char *colorMentions(size_t id, struct Message *msg) {
static void handlePrivmsg(struct Message *msg) {
require(msg, true, 2);
- bool query = !strchr(self.chanTypes, msg->params[0][0]);
- bool network = strchr(msg->nick, '.');
+ bool query = !strchr(network.chanTypes, msg->params[0][0]);
+ bool server = strchr(msg->nick, '.');
bool mine = !strcmp(msg->nick, self.nick);
size_t id;
- if (query && network) {
+ if (query && server) {
id = Network;
} else if (query && !mine) {
id = idFor(msg->nick);
diff --git a/ui.c b/ui.c
index 3b1fdc1..9cfc2eb 100644
--- a/ui.c
+++ b/ui.c
@@ -426,7 +426,7 @@ static void statusUpdate(void) {
wclrtoeol(status);
const struct Window *window = windows.ptrs[windows.show];
- snprintf(title, sizeof(title), "%s %s", self.network, idNames[window->id]);
+ snprintf(title, sizeof(title), "%s %s", network.name, idNames[window->id]);
if (window->mark && window->unreadWarm) {
snprintf(
&title[strlen(title)], sizeof(title) - strlen(title),