@@ -2,6 +2,7 @@ package viewer
22
33import (
44 "errors"
5+ "fmt"
56 "io/fs"
67 "net/http"
78 "os"
@@ -54,6 +55,25 @@ func (v *Viewer) newFileHandler(fn func(w http.ResponseWriter, r *http.Request,
5455 }
5556}
5657
58+ func maybeReverse (mm []slack.Message ) error {
59+ if len (mm ) == 0 {
60+ return nil
61+ }
62+
63+ first , err := fasttime .TS2int (mm [0 ].Timestamp )
64+ if err != nil {
65+ return fmt .Errorf ("TS2int at 0: %w" , err )
66+ }
67+ last , err := fasttime .TS2int (mm [len (mm )- 1 ].Timestamp )
68+ if err != nil {
69+ return fmt .Errorf ("TS2int at -1: %w" , err )
70+ }
71+ if first > last {
72+ slices .Reverse (mm )
73+ }
74+ return nil
75+ }
76+
5777func (v * Viewer ) channelHandler (w http.ResponseWriter , r * http.Request , id string ) {
5878 ctx := r .Context ()
5979 lg := v .lg .With ("in" , "channelHandler" , "channel" , id )
@@ -67,22 +87,11 @@ func (v *Viewer) channelHandler(w http.ResponseWriter, r *http.Request, id strin
6787 http .Error (w , err .Error (), http .StatusInternalServerError )
6888 return
6989 }
70- if len (mm ) > 0 {
71- first , err := fasttime .TS2int (mm [0 ].Timestamp )
72- if err != nil {
73- lg .ErrorContext (ctx , "TS2int" , "idx" , 0 , "error" , err )
74- http .Error (w , err .Error (), http .StatusInternalServerError )
75- return
76- }
77- last , err := fasttime .TS2int (mm [len (mm )- 1 ].Timestamp )
78- if err != nil {
79- lg .ErrorContext (ctx , "TS2int" , "idx" , - 1 , "error" , err )
80- http .Error (w , err .Error (), http .StatusInternalServerError )
81- return
82- }
83- if first > last {
84- slices .Reverse (mm )
85- }
90+
91+ if err := maybeReverse (mm ); err != nil {
92+ lg .ErrorContext (ctx , "maybeReverse" , "error" , err )
93+ http .Error (w , err .Error (), http .StatusInternalServerError )
94+ return
8695 }
8796
8897 lg .DebugContext (ctx , "conversation" , "id" , id , "message_count" , len (mm ))
@@ -159,6 +168,11 @@ func (v *Viewer) threadHandler(w http.ResponseWriter, r *http.Request, id string
159168 lg .ErrorContext (ctx , "AllMessages" , "error" , err , "template" , template )
160169 http .Error (w , err .Error (), http .StatusInternalServerError )
161170 }
171+ if err := maybeReverse (msg ); err != nil {
172+ lg .ErrorContext (ctx , "maybeReverse" , "error" , err )
173+ http .Error (w , err .Error (), http .StatusInternalServerError )
174+ return
175+ }
162176 page .Messages = msg
163177 }
164178 if err := v .tmpl .ExecuteTemplate (w , template , page ); err != nil {
0 commit comments