commit 916a9c8
delthas
·
2021-11-16 17:19:19 +0000 UTC
parent 56fce9e
Add support for user buffers
3 files changed,
+44,
-22
M
app.go
+7,
-6
1@@ -748,6 +748,9 @@ func (app *App) handleIRCEvent(netID string, ev interface{}) {
2 })
3 case irc.MessageEvent:
4 buffer, line, notification := app.formatMessage(s, ev)
5+ if buffer != "" && !s.IsChannel(buffer) {
6+ app.win.AddBuffer(netID, "", buffer)
7+ }
8 app.win.AddLine(netID, buffer, notification, line)
9 if notification == ui.NotifyHighlight {
10 app.notifyHighlight(buffer, ev.User, line.Body.String())
11@@ -936,6 +939,7 @@ func (app *App) completions(cursorIdx int, text []rune) []ui.Completion {
12 // - what kind of notification senpai should send.
13 func (app *App) formatMessage(s *irc.Session, ev irc.MessageEvent) (buffer string, line ui.Line, notification ui.NotifyType) {
14 isFromSelf := s.IsMe(ev.User)
15+ isToSelf := s.IsMe(ev.Target)
16 isHighlight := app.isHighlight(s, ev.Content)
17 isAction := strings.HasPrefix(ev.Content, "\x01ACTION")
18 isQuery := !ev.TargetIsChannel && ev.Command == "PRIVMSG"
19@@ -948,8 +952,8 @@ func (app *App) formatMessage(s *irc.Session, ev irc.MessageEvent) (buffer strin
20 } else {
21 isHighlight = true
22 }
23- } else if !ev.TargetIsChannel {
24- buffer = ""
25+ } else if isToSelf {
26+ buffer = ev.User
27 } else {
28 buffer = ev.Target
29 }
30@@ -965,10 +969,7 @@ func (app *App) formatMessage(s *irc.Session, ev irc.MessageEvent) (buffer strin
31
32 head := ev.User
33 headColor := tcell.ColorWhite
34- if isFromSelf && isQuery {
35- head = "\u2192 " + ev.Target
36- headColor = identColor(ev.Target)
37- } else if isAction || isNotice {
38+ if isAction || isNotice {
39 head = "*"
40 } else {
41 headColor = identColor(head)
+14,
-5
1@@ -152,7 +152,7 @@ func noCommand(app *App, content string) error {
2 buffer, line, _ := app.formatMessage(s, irc.MessageEvent{
3 User: s.Nick(),
4 Target: buffer,
5- TargetIsChannel: true,
6+ TargetIsChannel: s.IsChannel(buffer),
7 Command: "PRIVMSG",
8 Content: content,
9 Time: time.Now(),
10@@ -280,7 +280,7 @@ func commandDoMe(app *App, args []string) (err error) {
11 buffer, line, _ := app.formatMessage(s, irc.MessageEvent{
12 User: s.Nick(),
13 Target: buffer,
14- TargetIsChannel: true,
15+ TargetIsChannel: s.IsChannel(buffer),
16 Command: "PRIVMSG",
17 Content: content,
18 Time: time.Now(),
19@@ -303,11 +303,15 @@ func commandDoMsg(app *App, args []string) (err error) {
20 buffer, line, _ := app.formatMessage(s, irc.MessageEvent{
21 User: s.Nick(),
22 Target: target,
23- TargetIsChannel: true,
24+ TargetIsChannel: s.IsChannel(target),
25 Command: "PRIVMSG",
26 Content: content,
27 Time: time.Now(),
28 })
29+ if buffer != "" && !s.IsChannel(target) {
30+ app.win.AddBuffer(netID, "", buffer)
31+ }
32+
33 app.win.AddLine(netID, buffer, ui.NotifyNone, line)
34 }
35 return nil
36@@ -397,7 +401,12 @@ func commandDoPart(app *App, args []string) (err error) {
37 if channel == "" {
38 return fmt.Errorf("cannot part this buffer")
39 }
40- s.Part(channel, reason)
41+
42+ if s.IsChannel(channel) {
43+ s.Part(channel, reason)
44+ } else {
45+ app.win.RemoveBuffer(netID, channel)
46+ }
47 return nil
48 }
49
50@@ -432,7 +441,7 @@ func commandDoR(app *App, args []string) (err error) {
51 buffer, line, _ := app.formatMessage(s, irc.MessageEvent{
52 User: s.Nick(),
53 Target: app.lastQuery,
54- TargetIsChannel: true,
55+ TargetIsChannel: s.IsChannel(app.lastQuery),
56 Command: "PRIVMSG",
57 Content: args[0],
58 Time: time.Now(),
+23,
-11
1@@ -218,20 +218,32 @@ func (s *Session) Users() []string {
2 return users
3 }
4
5-// Names returns the list of users in the given channel, or nil if this channel
6-// is not known by the session.
7+// Names returns the list of users in the given target, or nil if the target
8+// is not a known channel or nick in the session.
9 // The list is sorted according to member name.
10-func (s *Session) Names(channel string) []Member {
11+func (s *Session) Names(target string) []Member {
12 var names []Member
13- if c, ok := s.channels[s.Casemap(channel)]; ok {
14- names = make([]Member, 0, len(c.Members))
15- for u, pl := range c.Members {
16- names = append(names, Member{
17- PowerLevel: pl,
18- Name: u.Name.Copy(),
19- Away: u.Away,
20- })
21+ if s.IsChannel(target) {
22+ if c, ok := s.channels[s.Casemap(target)]; ok {
23+ names = make([]Member, 0, len(c.Members))
24+ for u, pl := range c.Members {
25+ names = append(names, Member{
26+ PowerLevel: pl,
27+ Name: u.Name.Copy(),
28+ Away: u.Away,
29+ })
30+ }
31 }
32+ } else if u, ok := s.users[s.Casemap(target)]; ok {
33+ names = append(names, Member{
34+ Name: u.Name.Copy(),
35+ Away: u.Away,
36+ })
37+ names = append(names, Member{
38+ Name: &Prefix{
39+ Name: s.nick,
40+ },
41+ })
42 }
43 sort.Sort(members(names))
44 return names