commit 8e01ade
Hubert Hirtz
·
2020-11-19 16:21:47 +0000 UTC
parent 83e0e82
Basic display of errors
4 files changed,
+80,
-5
M
app.go
+16,
-0
1@@ -143,6 +143,22 @@ func (app *App) handleIRCEvent(ev irc.Event) {
2 Head: head,
3 Body: ev.Message,
4 })
5+ case irc.ErrorEvent:
6+ var severity string
7+ switch ev.Severity {
8+ case irc.SeverityNote:
9+ severity = "Note"
10+ case irc.SeverityWarn:
11+ severity = "Warning"
12+ case irc.SeverityFail:
13+ severity = "Error"
14+ }
15+ app.win.AddLine(app.win.CurrentBuffer(), false, ui.Line{
16+ At: time.Now(),
17+ Head: "!!",
18+ HeadColor: ui.ColorRed,
19+ Body: fmt.Sprintf("%s (code %s): %s", severity, ev.Code, ev.Message),
20+ })
21 case irc.RegisteredEvent:
22 body := "Connected to the server"
23 if app.s.Nick() != app.cfg.Nick {
+6,
-0
1@@ -12,6 +12,12 @@ type RawMessageEvent struct {
2 IsValid bool
3 }
4
5+type ErrorEvent struct {
6+ Severity Severity
7+ Code string
8+ Message string
9+}
10+
11 type RegisteredEvent struct{}
12
13 type SelfNickEvent struct {
+24,
-3
1@@ -909,9 +909,22 @@ func (s *Session) handle(msg Message) (err error) {
2 }
3 }
4 case "FAIL":
5- s.evts <- RawMessageEvent{
6- Message: msg.String(),
7- IsValid: true,
8+ s.evts <- ErrorEvent{
9+ Severity: SeverityFail,
10+ Code: msg.Params[1],
11+ Message: msg.Params[len(msg.Params)-1],
12+ }
13+ case "WARN":
14+ s.evts <- ErrorEvent{
15+ Severity: SeverityWarn,
16+ Code: msg.Params[1],
17+ Message: msg.Params[len(msg.Params)-1],
18+ }
19+ case "NOTE":
20+ s.evts <- ErrorEvent{
21+ Severity: SeverityNote,
22+ Code: msg.Params[1],
23+ Message: msg.Params[len(msg.Params)-1],
24 }
25 case "PING":
26 err = s.send("PONG :%s\r\n", msg.Params[0])
27@@ -925,6 +938,14 @@ func (s *Session) handle(msg Message) (err error) {
28 }
29 _ = s.conn.Close()
30 default:
31+ // reply handling
32+ if ReplySeverity(msg.Command) == SeverityFail {
33+ s.evts <- ErrorEvent{
34+ Severity: SeverityFail,
35+ Code: msg.Command,
36+ Message: msg.Params[len(msg.Params)-1],
37+ }
38+ }
39 }
40
41 return
+34,
-2
1@@ -303,7 +303,7 @@ func (msg *Message) IsValid() bool {
2 return 1 <= len(msg.Params)
3 case rplEndofnames, rplLoggedout, rplMotd, errNicknameinuse, rplNotopic, rplWelcome, rplYourhost:
4 return 2 <= len(msg.Params)
5- case rplIsupport, rplLoggedin, rplTopic:
6+ case rplIsupport, rplLoggedin, rplTopic, "FAIL", "WARN", "NOTE":
7 return 3 <= len(msg.Params)
8 case rplNamreply:
9 return 4 <= len(msg.Params)
10@@ -349,7 +349,11 @@ func (msg *Message) IsValid() bool {
11 }
12 return msg.Params[0][0] == '-'
13 default:
14- return false
15+ if len(msg.Command) != 3 || len(msg.Params) < 2 {
16+ return false
17+ }
18+ _, err := strconv.Atoi(msg.Command)
19+ return err == nil
20 }
21 }
22
23@@ -382,6 +386,34 @@ func (msg *Message) TimeOrNow() time.Time {
24 return time.Now().UTC()
25 }
26
27+type Severity int
28+
29+const (
30+ SeverityNote Severity = iota
31+ SeverityWarn
32+ SeverityFail
33+)
34+
35+func ReplySeverity(reply string) Severity {
36+ switch reply[0] {
37+ case '4', '5':
38+ if reply == "422" {
39+ return SeverityNote
40+ } else {
41+ return SeverityFail
42+ }
43+ case '9':
44+ switch reply[2] {
45+ case '2', '4', '5', '6', '7':
46+ return SeverityFail
47+ default:
48+ return SeverityNote
49+ }
50+ default:
51+ return SeverityNote
52+ }
53+}
54+
55 type Cap struct {
56 Name string
57 Value string