commit e7efe87

Hubert Hirtz  ·  2020-08-16 19:26:11 +0000 UTC
parent 34e3264
Handle RPL_TOPICWHOTIME
3 files changed,  +33, -6
M app.go
M app.go
+8, -2
 1@@ -326,8 +326,14 @@ func (app *App) handleInput(buffer, content string) {
 2 		}
 3 
 4 		if args == "" {
 5-			topic := app.s.Topic(buffer)
 6-			line := fmt.Sprintf("\x0314Topic: %s", topic)
 7+			var line string
 8+
 9+			topic, who, at := app.s.Topic(buffer)
10+			if who == "" {
11+				line = fmt.Sprintf("\x0314Topic: %s", topic)
12+			} else {
13+				line = fmt.Sprintf("\x0314Topic (by %s, %s): %s", who, at.Format("Mon Jan 2 15:04:05"), topic)
14+			}
15 			app.win.AddLine(buffer, ui.NewLineNow("--", line))
16 		} else {
17 			app.s.SetTopic(buffer, args)
+14, -4
 1@@ -7,6 +7,7 @@ import (
 2 	"errors"
 3 	"fmt"
 4 	"io"
 5+	"strconv"
 6 	"strings"
 7 	"sync/atomic"
 8 	"time"
 9@@ -248,13 +249,14 @@ func (s *Session) IsChannel(name string) bool {
10 	return strings.IndexAny(name, "#&") == 0 // TODO compute CHANTYPES
11 }
12 
13-func (s *Session) Topic(channel string) string {
14+func (s *Session) Topic(channel string) (topic string, who string, at time.Time) {
15 	channelCf := strings.ToLower(channel)
16 	if c, ok := s.channels[channelCf]; ok {
17-		return c.Topic
18-	} else {
19-		return ""
20+		topic = c.Topic
21+		who = c.TopicWho
22+		at = c.TopicTime
23 	}
24+	return
25 }
26 
27 func (s *Session) SendRaw(raw string) {
28@@ -697,6 +699,14 @@ func (s *Session) handle(msg Message) (err error) {
29 			c.Topic = msg.Params[2]
30 			s.channels[channelCf] = c
31 		}
32+	case rplTopicwhotime:
33+		channelCf := strings.ToLower(msg.Params[1])
34+		t, _ := strconv.ParseInt(msg.Params[3], 10, 64)
35+		if c, ok := s.channels[channelCf]; ok {
36+			c.TopicWho = msg.Params[2]
37+			c.TopicTime = time.Unix(t, 0)
38+			s.channels[channelCf] = c
39+		}
40 	case rplNotopic:
41 		channelCf := strings.ToLower(msg.Params[1])
42 		if c, ok := s.channels[channelCf]; ok {
+11, -0
 1@@ -3,6 +3,7 @@ package irc
 2 import (
 3 	"errors"
 4 	"fmt"
 5+	"strconv"
 6 	"strings"
 7 	"time"
 8 )
 9@@ -297,6 +298,16 @@ func (msg *Message) Validate() (err error) {
10 		if len(msg.Params) < 3 {
11 			err = errNotEnoughParams
12 		}
13+	case rplTopicwhotime:
14+		if len(msg.Params) < 4 {
15+			err = errNotEnoughParams
16+		} else if _, err := strconv.ParseInt(msg.Params[3], 10, 64); err != nil {
17+			err = errIncompleteMessage
18+		}
19+	case rplNotopic:
20+		if len(msg.Params) < 2 {
21+			err = errNotEnoughParams
22+		}
23 	case "TOPIC":
24 		if len(msg.Params) < 2 {
25 			err = errNotEnoughParams