summaryrefslogtreecommitdiff
path: root/app.go
diff options
context:
space:
mode:
authorHubert Hirtz <hubert@hirtz.pm>2021-12-09 13:07:12 +0100
committerHubert Hirtz <hubert@hirtz.pm>2021-12-09 13:07:12 +0100
commitb7bfc0e28b8d5437faa5443d106ae95878114bf4 (patch)
tree70f2eb7846896bbe14378c6ce96085726c4ea1b3 /app.go
parentRemove old init (diff)
Take NICKs into account when reducing join/part lines
So that 1/ redundant events are removed even if people change nick in the mean time and 2/ events that are actually not redundant are not removed, e.g. +val val->jw +dan dan->val -val should be reduced to +val val->jw instead of val->jw +dan dan->val
Diffstat (limited to 'app.go')
-rw-r--r--app.go20
1 files changed, 12 insertions, 8 deletions
diff --git a/app.go b/app.go
index 9d84b05..1144560 100644
--- a/app.go
+++ b/app.go
@@ -1140,7 +1140,6 @@ Outer:
}
}
}
- former.Data = append(former.Data, addedEvent)
case irc.UserJoinEvent:
for i := len(former.Data) - 1; i >= 0; i-- {
switch ev := former.Data[i].(type) {
@@ -1152,23 +1151,28 @@ Outer:
}
}
}
- former.Data = append(former.Data, addedEvent)
case irc.UserQuitEvent, irc.UserPartEvent:
+ user := partQuitUser(addedEvent)
+ var toRemove []int
for i := len(former.Data) - 1; i >= 0; i-- {
switch ev := former.Data[i].(type) {
+ case irc.UserNickEvent:
+ if ev.User == user {
+ user = ev.FormerNick
+ toRemove = append(toRemove, i)
+ }
case irc.UserJoinEvent:
- if ev.User == partQuitUser(addedEvent) {
- former.Data = append(former.Data[:i], former.Data[i+1:]...)
+ if ev.User == user {
+ for _, i := range append(toRemove, i) {
+ former.Data = append(former.Data[:i], former.Data[i+1:]...)
+ }
changed = true
continue Outer
}
}
}
- former.Data = append(former.Data, addedEvent)
- //case irc.ModeChangeEvent: //TODO
- default:
- former.Data = append(former.Data, addedEvent)
}
+ former.Data = append(former.Data, addedEvent)
}
if changed {
if len(former.Data) == 0 {