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
+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