From: pk910 Date: Tue, 11 Sep 2012 19:24:10 +0000 (+0200) Subject: Merge remote-tracking branch 'origin/development' X-Git-Url: http://git.pk910.de/?p=NeonServV5.git;a=commitdiff_plain;h=eab681e7f891e8a06ee0690e7989a4dca62406eb;hp=86a53c0bc70a1785fd0de9a172c8e3a2701a9e3c Merge remote-tracking branch 'origin/development' --- diff --git a/src/ChanUser.h b/src/ChanUser.h index e98a8cd..62d8361 100644 --- a/src/ChanUser.h +++ b/src/ChanUser.h @@ -18,10 +18,11 @@ #define _ChanUser_h #include "main.h" -#define CHANUSERFLAG_OPPED 0x01 -#define CHANUSERFLAG_VOICED 0x02 +#define CHANUSERFLAG_OPPED 0x01 +#define CHANUSERFLAG_VOICED 0x02 #define CHANUSERFLAG_INVISIBLE 0x04 #define CHANUSERFLAG_HALFOPPED 0x08 +#define CHANUSERFLAG_PARTING 0x10 #define CHANUSERFLAG_OPPED_OR_VOICED (CHANUSERFLAG_OPPED | CHANUSERFLAG_HALFOPPED | CHANUSERFLAG_VOICED) @@ -34,7 +35,8 @@ struct ChanUser { struct ChanNode *chan; struct UserNode *user; - int visCount; //visible counter - if this is 0, the ChanUser gets removed + int visCount : 8; //visible counter - if this is 0, the ChanUser gets removed + int old_visCount : 8; int chageEvents; time_t changeTime; diff --git a/src/ClientSocket.c b/src/ClientSocket.c index eaf43d4..3be7037 100644 --- a/src/ClientSocket.c +++ b/src/ClientSocket.c @@ -226,9 +226,9 @@ static IOHANDLER_CALLBACK(socket_callback) { case IOEVENT_CONNECTED: client->flags |= SOCKET_FLAG_CONNECTED; if(client->pass && strcmp(client->pass, "")) - iohandler_printf(event->iofd, "PASS :%s", client->pass); - iohandler_printf(event->iofd, "USER %s 0 0 :%s", client->ident, client->realname); - iohandler_printf(event->iofd, "NICK %s", client->nick); + putsock(client, "PASS :%s", client->pass); + putsock(client, "USER %s 0 0 :%s", client->ident, client->realname); + putsock(client, "NICK %s", client->nick); break; case IOEVENT_NOTCONNECTED: case IOEVENT_CLOSED: diff --git a/src/IRCParser.c b/src/IRCParser.c index bf77551..fc6b607 100644 --- a/src/IRCParser.c +++ b/src/IRCParser.c @@ -404,11 +404,24 @@ static IRC_CMD(raw_part) { decrease_viscount_butone(chan, chanuser); chan->botcount--; } + if(chanuser->flags & CHANUSERFLAG_PARTING) + chanuser->old_visCount--; chanuser->visCount--; if(chanuser->visCount == 0) { delChanUser(chanuser, 0); //not free, yet! event_part(chanuser, 0, (argc > 1 ? argv[1] : NULL)); freeChanUser(chanuser); + } else if(!(chanuser->flags & CHANUSERFLAG_PARTING)) { + chanuser->flags |= CHANUSERFLAG_PARTING; + chanuser->old_visCount = chanuser->visCount; + } else if(chanuser->old_visCount == 0) { + int visCount = chanuser->visCount; + delChanUser(chanuser, 0); //not free, yet! + event_part(chanuser, 0, (argc > 1 ? argv[1] : NULL)); + freeChanUser(chanuser); + chanuser = addChanUser(chan, user); + chanuser->visCount = visCount; + event_join(chanuser); } //check if channel is still present diff --git a/src/modules/NeonServ.mod/cmd_neonserv_nicklist.c b/src/modules/NeonServ.mod/cmd_neonserv_nicklist.c index 129d79c..1231160 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_nicklist.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_nicklist.c @@ -129,7 +129,7 @@ static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct Cli int chanuser_count; char statebuf[5]; char accessbuf[50]; - char viscountbuf[5]; + char viscountbuf[50]; int uaccess; i = 3; @@ -278,7 +278,10 @@ static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct Cli accessbufpos += sprintf(accessbuf+accessbufpos, ")"); content[2] = accessbuf; if(flags & NEONSERV_CMD_NICKLIST_FLAG_VISCOUNT) { - sprintf(viscountbuf, "%d", chanuser->visCount); + if(chanuser->flags & CHANUSERFLAG_PARTING) + sprintf(viscountbuf, "%d (\003P\003 %d)", chanuser->visCount, chanuser->old_visCount); + else + sprintf(viscountbuf, "%d", chanuser->visCount); content[3] = viscountbuf; } table_add(table, content);