commit 54ee468
Valentin Lorentz
·
2023-05-28 16:14:35 +0000 UTC
parent ee425b3
Use 'CHATHISTORY LATEST' instead of 'CHATHISTORY BEFORE' when possible 1. it works on servers which don't support timestamp= anchors 2. it will make it easier to add support for msgid= anchors in a future commit (it's not possible to use 'CHATHISTORY BEFORE' if we don't already have a msgid) 3. It avoids duplicating or missing messages if the server's clock differs from the client's.
3 files changed,
+33,
-13
M
app.go
+26,
-12
1@@ -517,7 +517,7 @@ func (app *App) handleMouseEvent(ev *tcell.EventMouse) {
2 if added {
3 s.MonitorAdd(buffer)
4 s.ReadGet(buffer)
5- s.NewHistoryRequest(buffer).WithLimit(500).Before(time.Now())
6+ s.NewHistoryRequest(buffer).WithLimit(500).Latest()
7 }
8 }
9 }
10@@ -672,13 +672,15 @@ func (app *App) requestHistory() {
11 return
12 }
13 if app.win.IsAtTop() && buffer != "" {
14- t := time.Now()
15 if bound, ok := app.messageBounds[boundKey{netID, buffer}]; ok {
16- t = bound.first
17+ s.NewHistoryRequest(buffer).
18+ WithLimit(200).
19+ Before(bound.first)
20+ } else {
21+ s.NewHistoryRequest(buffer).
22+ WithLimit(200).
23+ Latest()
24 }
25- s.NewHistoryRequest(buffer).
26- WithLimit(200).
27- Before(t)
28 }
29 }
30
31@@ -785,9 +787,15 @@ func (app *App) handleIRCEvent(netID string, ev interface{}) {
32 i, added := app.win.AddBuffer(netID, "", ev.Channel)
33 bounds, ok := app.messageBounds[boundKey{netID, ev.Channel}]
34 if added || !ok {
35- s.NewHistoryRequest(ev.Channel).
36- WithLimit(500).
37- Before(msg.TimeOrNow())
38+ if t, ok := msg.Time(); ok {
39+ s.NewHistoryRequest(ev.Channel).
40+ WithLimit(500).
41+ Before(t)
42+ } else {
43+ s.NewHistoryRequest(ev.Channel).
44+ WithLimit(500).
45+ Latest()
46+ }
47 } else {
48 s.NewHistoryRequest(ev.Channel).
49 WithLimit(1000).
50@@ -866,9 +874,15 @@ func (app *App) handleIRCEvent(netID string, ev interface{}) {
51 app.monitor[netID][buffer] = struct{}{}
52 s.MonitorAdd(buffer)
53 s.ReadGet(buffer)
54- s.NewHistoryRequest(buffer).
55- WithLimit(500).
56- Before(msg.TimeOrNow())
57+ if t, ok := msg.Time(); ok {
58+ s.NewHistoryRequest(buffer).
59+ WithLimit(500).
60+ Before(t)
61+ } else {
62+ s.NewHistoryRequest(buffer).
63+ WithLimit(500).
64+ Latest()
65+ }
66 }
67 }
68 app.win.AddLine(netID, buffer, line)
+1,
-1
1@@ -509,7 +509,7 @@ func commandDoQuery(app *App, args []string) (err error) {
2 if added {
3 s.MonitorAdd(target)
4 s.ReadGet(target)
5- s.NewHistoryRequest(target).WithLimit(200).Before(time.Now())
6+ s.NewHistoryRequest(target).WithLimit(200).Latest()
7 }
8 return nil
9 }
+6,
-0
1@@ -574,6 +574,12 @@ func (r *HistoryRequest) Before(t time.Time) {
2 r.doRequest()
3 }
4
5+func (r *HistoryRequest) Latest() {
6+ r.command = "LATEST"
7+ r.bounds = []string{"*"}
8+ r.doRequest()
9+}
10+
11 func (r *HistoryRequest) Targets(start time.Time, end time.Time) {
12 r.command = "TARGETS"
13 r.bounds = []string{formatTimestamp(start), formatTimestamp(end)}