commit b7bfc0e

Hubert Hirtz  ·  2021-12-09 12:07:12 +0000 UTC
parent ed65a82
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
1 files changed,  +12, -8
M app.go
M app.go
+12, -8
 1@@ -1140,7 +1140,6 @@ Outer:
 2 					}
 3 				}
 4 			}
 5-			former.Data = append(former.Data, addedEvent)
 6 		case irc.UserJoinEvent:
 7 			for i := len(former.Data) - 1; i >= 0; i-- {
 8 				switch ev := former.Data[i].(type) {
 9@@ -1152,23 +1151,28 @@ Outer:
10 					}
11 				}
12 			}
13-			former.Data = append(former.Data, addedEvent)
14 		case irc.UserQuitEvent, irc.UserPartEvent:
15+			user := partQuitUser(addedEvent)
16+			var toRemove []int
17 			for i := len(former.Data) - 1; i >= 0; i-- {
18 				switch ev := former.Data[i].(type) {
19+				case irc.UserNickEvent:
20+					if ev.User == user {
21+						user = ev.FormerNick
22+						toRemove = append(toRemove, i)
23+					}
24 				case irc.UserJoinEvent:
25-					if ev.User == partQuitUser(addedEvent) {
26-						former.Data = append(former.Data[:i], former.Data[i+1:]...)
27+					if ev.User == user {
28+						for _, i := range append(toRemove, i) {
29+							former.Data = append(former.Data[:i], former.Data[i+1:]...)
30+						}
31 						changed = true
32 						continue Outer
33 					}
34 				}
35 			}
36-			former.Data = append(former.Data, addedEvent)
37-		//case irc.ModeChangeEvent: //TODO
38-		default:
39-			former.Data = append(former.Data, addedEvent)
40 		}
41+		former.Data = append(former.Data, addedEvent)
42 	}
43 	if changed {
44 		if len(former.Data) == 0 {