projects
/
NeonServV5.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
18753ca
)
fixed cache update when a bot disconnects from the network / parts a channel
author
pk910
<philipp@zoelle1.de>
Mon, 20 Aug 2012 22:00:33 +0000
(
00:00
+0200)
committer
pk910
<philipp@zoelle1.de>
Mon, 20 Aug 2012 22:00:33 +0000
(
00:00
+0200)
src/IRCParser.c
patch
|
blob
|
history
diff --git
a/src/IRCParser.c
b/src/IRCParser.c
index aeb0e6d40eb9480f09b8f894d5cbd464cb57435a..0188de9b6798918c21b6a300a9b121ad403120c6 100644
(file)
--- a/
src/IRCParser.c
+++ b/
src/IRCParser.c
@@
-126,6
+126,19
@@
static void increase_viscount_butone(struct ChanNode *chan, struct ChanUser *ign
}
}
}
}
+static void decrease_viscount_butone(struct ChanNode *chan, struct ChanUser *ignore) {
+ struct ChanUser *chanuser, *next_chanuser;
+
+ for(chanuser = getChannelUsers(chan, NULL); chanuser; chanuser = next_chanuser) {
+ next_chanuser = getChannelUsers(chan, chanuser);
+ if(chanuser == ignore)
+ continue;
+ chanuser->visCount--;
+ if(chanuser->visCount <= 0)
+ delChanUser(chanuser, 1);
+ }
+}
+
static USERLIST_CALLBACK(got_channel_userlist) {
struct ChanUser *chanuser = data;
static USERLIST_CALLBACK(got_channel_userlist) {
struct ChanUser *chanuser = data;
@@
-267,6
+280,8
@@
static IRC_CMD(raw_part) {
DESYNCHRONIZE(cache_sync);
return 0;
}
DESYNCHRONIZE(cache_sync);
return 0;
}
+ if(isBot(user) && user == client->user)
+ decrease_viscount_butone(chan, chanuser);
chanuser->visCount--;
if(chanuser->visCount == 0) {
delChanUser(chanuser, 0); //not free, yet!
chanuser->visCount--;
if(chanuser->visCount == 0) {
delChanUser(chanuser, 0); //not free, yet!
@@
-323,6
+338,8
@@
static IRC_CMD(raw_kick) {
DESYNCHRONIZE(cache_sync);
return 0;
}
DESYNCHRONIZE(cache_sync);
return 0;
}
+ if(isBot(target) && target == client->user)
+ decrease_viscount_butone(chan, chanuser);
chanuser->visCount--;
if(chanuser->visCount == 0) {
delChanUser(chanuser, 0); //not free, yet!
chanuser->visCount--;
if(chanuser->visCount == 0) {
delChanUser(chanuser, 0); //not free, yet!
@@
-427,12
+444,13
@@
void bot_disconnect(struct ClientSocket *client) {
struct ChanUser *chanuser, *next_chanuser;
for(chanuser = getUserChannels(user, NULL); chanuser; chanuser = next_chanuser) {
next_chanuser = getUserChannels(user, chanuser);
struct ChanUser *chanuser, *next_chanuser;
for(chanuser = getUserChannels(user, NULL); chanuser; chanuser = next_chanuser) {
next_chanuser = getUserChannels(user, chanuser);
+ decrease_viscount_butone(chanuser->chan, chanuser);
chanuser->visCount--;
if(chanuser->visCount <= 0) {
delChanUser(chanuser, 0); //not free, yet!
event_part(chanuser, 1, "QUIT");
chanuser->visCount--;
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)
)
- check
_full_rejoin
(chanuser->chan);
+ if(
chanuser->chan->flags & CHANFLAG_RECEIVED_USERLIST
)
+ check
ChannelVisibility
(chanuser->chan);
freeChanUser(chanuser);
}
}
freeChanUser(chanuser);
}
}