aboutsummaryrefslogtreecommitdiff
path: root/matrix/matrix.go
diff options
context:
space:
mode:
authorTulir Asokan <tulir@maunium.net>2018-03-21 19:46:49 +0200
committerTulir Asokan <tulir@maunium.net>2018-03-21 19:47:35 +0200
commitefbce4c363b743817b4a368d6011c7aac9b8b176 (patch)
tree176c72dd870064cdaba9e3d22b27a849efb600e0 /matrix/matrix.go
parent0e90972fe8e0e93d67091bab3abdbeb8bdc066e1 (diff)
Finish push rule parser and use it. Fixes #7
Diffstat (limited to 'matrix/matrix.go')
-rw-r--r--matrix/matrix.go35
1 files changed, 14 insertions, 21 deletions
diff --git a/matrix/matrix.go b/matrix/matrix.go
index 7dbbbe1..4ec6d96 100644
--- a/matrix/matrix.go
+++ b/matrix/matrix.go
@@ -21,6 +21,7 @@ import (
"strings"
"time"
+ "github.com/gdamore/tcell"
"maunium.net/go/gomatrix"
"maunium.net/go/gomuks/config"
"maunium.net/go/gomuks/interface"
@@ -28,7 +29,6 @@ import (
"maunium.net/go/gomuks/matrix/room"
"maunium.net/go/gomuks/notification"
"maunium.net/go/gomuks/ui/debug"
- "maunium.net/go/gomuks/ui/types"
"maunium.net/go/gomuks/ui/widget"
)
@@ -196,33 +196,26 @@ func (c *Container) Start() {
}
}
-func (c *Container) NotifyMessage(room *rooms.Room, message *types.Message) {
- sender := fmt.Sprintf("%s (%s)", message.Sender, room.GetTitle())
- if room.GetTitle() == message.Sender {
- // 1:1 room, title is same as display name of other user.
- sender = message.Sender
+func (c *Container) NotifyMessage(room *rooms.Room, sender, text string, critical bool) {
+ if room.GetTitle() != sender {
+ sender = fmt.Sprintf("%s (%s)", sender, room.GetTitle())
}
- notification.Send(sender, message.Text, false)
+ notification.Send(sender, text, critical)
}
func (c *Container) HandleMessage(evt *gomatrix.Event) {
room, message := c.ui.MainView().ProcessMessageEvent(evt)
if room != nil {
- match := c.PushRules().GetActions(room.Room, evt)
-
- var buf strings.Builder
- buf.WriteRune('[')
- for i, rule := range match {
- fmt.Fprintf(&buf, "{%s, %s, %s}", rule.Action, rule.Tweak, rule.Value)
- if i < len(match)-1 {
- buf.WriteRune(',')
- buf.WriteRune(' ')
- }
+ pushRules := c.PushRules().GetActions(room.Room, evt).Should()
+ if (pushRules.Notify || !pushRules.NotifySpecified) && evt.Sender != c.config.Session.MXID {
+ c.NotifyMessage(room.Room, message.Sender, message.Text, pushRules.Highlight)
+ }
+ if pushRules.Highlight {
+ message.TextColor = tcell.ColorYellow
+ }
+ if pushRules.PlaySound {
+ // TODO play sound
}
- buf.WriteRune(']')
- debug.Print(buf.String())
-
- c.NotifyMessage(room.Room, message)
room.AddMessage(message, widget.AppendMessage)
c.ui.Render()
}