diff options
author | Hubert Hirtz <hubert@hirtz.pm> | 2021-12-09 13:07:12 +0100 |
---|---|---|
committer | Hubert Hirtz <hubert@hirtz.pm> | 2021-12-09 13:07:12 +0100 |
commit | b7bfc0e28b8d5437faa5443d106ae95878114bf4 (patch) | |
tree | 70f2eb7846896bbe14378c6ce96085726c4ea1b3 /app.go | |
parent | Remove 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.go | 20 |
1 files changed, 12 insertions, 8 deletions
@@ -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 { |