projects
/
NeonServV5.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
e41ecc8
)
fixed initial cache buildup (increase viscount per bot on join)
author
pk910
<philipp@zoelle1.de>
Mon, 20 Aug 2012 21:24:15 +0000
(23:24 +0200)
committer
pk910
<philipp@zoelle1.de>
Mon, 20 Aug 2012 21:24:15 +0000
(23:24 +0200)
src/IRCParser.c
patch
|
blob
|
history
src/WHOHandler.c
patch
|
blob
|
history
diff --git
a/src/IRCParser.c
b/src/IRCParser.c
index efbdbfd525e47ffbca041585976edcc945858668..e2a53aad606d4e858678b1e3c9febd2dd9acfcdc 100644
(file)
--- a/
src/IRCParser.c
+++ b/
src/IRCParser.c
@@
-116,8
+116,21
@@
static void parse_raw(struct ClientSocket *client, char *from, char *cmd, char *
}
}
}
}
+static void increase_viscount_butone(struct ChanNode *chan, struct ChanUser *ignore) {
+ struct ChanUser *chanuser;
+
+ for(chanuser = getChannelUsers(chan, NULL); chanuser; chanuser = getChannelUsers(chan, chanuser)) {
+ if(chanuser == ignore)
+ continue;
+ chanuser2->visCount++;
+ }
+}
+
static USERLIST_CALLBACK(got_channel_userlist) {
struct ChanUser *chanuser = data;
static USERLIST_CALLBACK(got_channel_userlist) {
struct ChanUser *chanuser = data;
+
+ increase_viscount_butone(chanuser->chan, chanuser);
+
event_join(chanuser);
}
event_join(chanuser);
}
@@
-161,13
+174,24
@@
static IRC_CMD(raw_join) {
event_registered(user, from);
user->flags &= ~USERFLAG_WAS_REGISTERING;
event_registered(user, from);
user->flags &= ~USERFLAG_WAS_REGISTERING;
- } else if(!isUserOnChan(user, chan)) {
- //join user to an existing channel
+ } else if(!(chan->flags & CHANFLAG_RECEIVED_USERLIST)) {
chanuser = addChanUser(chan, user);
chanuser->visCount = 1;
chanuser = addChanUser(chan, user);
chanuser->visCount = 1;
+
if(isBot(user) && isModeSet(chan->modes, 'D')) //if the bot joins a channel it could also be invisible
chanuser->flags |= CHANUSERFLAG_INVISIBLE;
if(isBot(user) && isModeSet(chan->modes, 'D')) //if the bot joins a channel it could also be invisible
chanuser->flags |= CHANUSERFLAG_INVISIBLE;
+ get_userlist_with_invisible(chan, 0, got_channel_userlist, chanuser);
+ } else if(!isUserOnChan(user, chan)) {
+ //join user to an existing channel
+ chanuser = addChanUser(chan, user);
+ chanuser->visCount = 1;
+ if(isBot(user)) {
+ if(isModeSet(chan->modes, 'D')) //if the bot joins a channel it could also be invisible
+ chanuser->flags |= CHANUSERFLAG_INVISIBLE;
+ increase_viscount_butone(chan, chanuser);
+ }
+
event_join(chanuser);
if(!(user->flags & USERFLAG_ISBOT) && (chan->flags & CHANFLAG_REJOINING)) {
event_join(chanuser);
if(!(user->flags & USERFLAG_ISBOT) && (chan->flags & CHANFLAG_REJOINING)) {
@@
-184,6
+208,10
@@
static IRC_CMD(raw_join) {
//user is already in the channel
chanuser = getChanUser(user, chan);
chanuser->visCount++;
//user is already in the channel
chanuser = getChanUser(user, chan);
chanuser->visCount++;
+
+ if(isBot(user) && !(chanuser->flags & CHANUSERFLAG_INVISIBLE))
+ increase_viscount_butone(chan, chanuser);
+
//if multiple bots see the user, it can't be invisible
chanuser->flags &= ~CHANUSERFLAG_INVISIBLE;
}
//if multiple bots see the user, it can't be invisible
chanuser->flags &= ~CHANUSERFLAG_INVISIBLE;
}
@@
-363,7
+391,7
@@
static IRC_CMD(raw_quit) {
for(chanuser = getUserChannels(user, NULL); chanuser; chanuser = next_chanuser) {
next_chanuser = getUserChannels(user, chanuser);
chanuser->visCount--;
for(chanuser = getUserChannels(user, NULL); chanuser; chanuser = next_chanuser) {
next_chanuser = getUserChannels(user, chanuser);
chanuser->visCount--;
- if(chanuser->visCount
=
= 0) {
+ if(chanuser->visCount
<
= 0) {
delChanUser(chanuser, 0); //not free, yet!
event_part(chanuser, 1, argv[0]);
if((chanuser->chan->flags & CHANFLAG_RECEIVED_USERLIST) && !(chanuser->chan->flags & CHANFLAG_REJOINING))
delChanUser(chanuser, 0); //not free, yet!
event_part(chanuser, 1, argv[0]);
if((chanuser->chan->flags & CHANFLAG_RECEIVED_USERLIST) && !(chanuser->chan->flags & CHANFLAG_REJOINING))
@@
-400,7
+428,7
@@
void bot_disconnect(struct ClientSocket *client) {
for(chanuser = getUserChannels(user, NULL); chanuser; chanuser = next_chanuser) {
next_chanuser = getUserChannels(user, chanuser);
chanuser->visCount--;
for(chanuser = getUserChannels(user, NULL); chanuser; chanuser = next_chanuser) {
next_chanuser = getUserChannels(user, chanuser);
chanuser->visCount--;
- if(chanuser->visCount
=
= 0) {
+ if(chanuser->visCount
<
= 0) {
delChanUser(chanuser, 0); //not free, yet!
event_part(chanuser, 1, "QUIT");
if((chanuser->chan->flags & CHANFLAG_RECEIVED_USERLIST) && !(chanuser->chan->flags & CHANFLAG_REJOINING))
delChanUser(chanuser, 0); //not free, yet!
event_part(chanuser, 1, "QUIT");
if((chanuser->chan->flags & CHANFLAG_RECEIVED_USERLIST) && !(chanuser->chan->flags & CHANFLAG_REJOINING))
diff --git
a/src/WHOHandler.c
b/src/WHOHandler.c
index 7a8a3548ea359fa5aee74e48fc84e25e1d4ab8f5..13786787b1187f68b4a5ea18d8c8f373fc545554 100644
(file)
--- a/
src/WHOHandler.c
+++ b/
src/WHOHandler.c
@@
-30,7
+30,7
@@
#define WHOQUEUETYPE_CHECKTYPE 0x07
#define WHOQUEUETYPE_FOUND 0x08
#define WHOQUEUETYPE_CHECKTYPE 0x07
#define WHOQUEUETYPE_FOUND 0x08
-#define MAXCALLBACKS
3
+#define MAXCALLBACKS
10
struct WHOQueueEntry {
char type;
struct WHOQueueEntry {
char type;