Support account-notify and extended-join capabilities

This commit is contained in:
TingPing
2013-04-03 17:10:09 -04:00
parent 4c217d4ba3
commit b4c8d53394
8 changed files with 138 additions and 30 deletions

View File

@@ -137,7 +137,7 @@ static void
inbound_make_idtext (server *serv, char *idtext, int max, int id)
{
idtext[0] = 0;
if (serv->have_idmsg)
if (serv->have_idmsg || serv->have_accnotify)
{
if (id)
{
@@ -157,6 +157,7 @@ inbound_privmsg (server *serv, char *from, char *ip, char *text, int id)
session *sess;
struct User *user;
char idtext[64];
gboolean nodiag = FALSE;
sess = find_dialog (serv, from);
@@ -189,21 +190,24 @@ inbound_privmsg (server *serv, char *from, char *ip, char *text, int id)
return;
}
inbound_make_idtext (serv, idtext, sizeof (idtext), id);
sess = find_session_from_nick (from, serv);
if (!sess)
{
sess = serv->front_session;
EMIT_SIGNAL (XP_TE_PRIVMSG, sess, from, text, idtext, NULL, 0);
return;
nodiag = TRUE; /* We don't want it to look like a normal message in front sess */
}
user = userlist_find (sess, from);
if (user)
{
user->lasttalk = time (0);
if (user->account)
id = TRUE;
}
inbound_make_idtext (serv, idtext, sizeof (idtext), id);
if (sess->type == SESS_DIALOG)
if (sess->type == SESS_DIALOG && !nodiag)
EMIT_SIGNAL (XP_TE_DPRIVMSG, sess, from, text, idtext, NULL, 0);
else
EMIT_SIGNAL (XP_TE_PRIVMSG, sess, from, text, idtext, NULL, 0);
@@ -380,6 +384,8 @@ inbound_action (session *sess, char *chan, char *from, char *ip, char *text, int
{
nickchar[0] = user->prefix[0];
user->lasttalk = time (0);
if (user->account)
id = TRUE;
}
inbound_make_idtext (serv, idtext, sizeof (idtext), id);
@@ -436,6 +442,8 @@ inbound_chanmsg (server *serv, session *sess, char *chan, char *from, char *text
user = userlist_find (sess, from);
if (user)
{
if (user->account)
id = TRUE;
nickchar[0] = user->prefix[0];
user->lasttalk = time (0);
}
@@ -655,12 +663,12 @@ inbound_nameslist (server *serv, char *chan, char *names)
case 0:
name[pos] = 0;
if (pos != 0)
userlist_add (sess, name, 0);
userlist_add (sess, name, 0, NULL, NULL);
return;
case ' ':
name[pos] = 0;
pos = 0;
userlist_add (sess, name, 0);
userlist_add (sess, name, 0, NULL, NULL);
break;
default:
name[pos] = *names;
@@ -705,13 +713,13 @@ inbound_topicnew (server *serv, char *nick, char *chan, char *topic)
}
void
inbound_join (server *serv, char *chan, char *user, char *ip)
inbound_join (server *serv, char *chan, char *user, char *ip, char *account, char *realname)
{
session *sess = find_channel (serv, chan);
if (sess)
{
EMIT_SIGNAL (XP_TE_JOIN, sess, user, chan, ip, NULL, 0);
userlist_add (sess, user, ip);
userlist_add (sess, user, ip, account, realname);
}
}
@@ -783,6 +791,22 @@ inbound_quit (server *serv, char *nick, char *ip, char *reason)
notify_set_offline (serv, nick, was_on_front_session);
}
void
inbound_account (server *serv, char *nick, char *account)
{
session *sess = NULL;
GSList *list;
list = sess_list;
while (list)
{
sess = list->data;
if (sess->server == serv)
userlist_set_account (sess, nick, account);
list = list->next;
}
}
void
inbound_ping_reply (session *sess, char *timestring, char *from)
{
@@ -1252,7 +1276,7 @@ inbound_user_info_start (session *sess, char *nick)
void
inbound_user_info (session *sess, char *chan, char *user, char *host,
char *servname, char *nick, char *realname,
unsigned int away)
char *account, unsigned int away)
{
server *serv = sess->server;
session *who_sess;
@@ -1269,7 +1293,7 @@ inbound_user_info (session *sess, char *chan, char *user, char *host,
{
who_sess = find_channel (serv, chan);
if (who_sess)
userlist_add_hostname (who_sess, nick, uhost, realname, servname, away);
userlist_add_hostname (who_sess, nick, uhost, realname, servname, account, away);
else
{
if (serv->doing_dns && nick && host)
@@ -1284,7 +1308,7 @@ inbound_user_info (session *sess, char *chan, char *user, char *host,
sess = list->data;
if (sess->type == SESS_CHANNEL && sess->server == serv)
{
userlist_add_hostname (sess, nick, uhost, realname, servname, away);
userlist_add_hostname (sess, nick, uhost, realname, servname, account, away);
}
}
}