aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ui/view-main.go28
1 files changed, 17 insertions, 11 deletions
diff --git a/ui/view-main.go b/ui/view-main.go
index a35c35e..fd05492 100644
--- a/ui/view-main.go
+++ b/ui/view-main.go
@@ -386,26 +386,32 @@ func sendNotification(room *rooms.Room, sender, text string, critical, sound boo
}
func (view *MainView) NotifyMessage(room *rooms.Room, message *types.Message, should pushrules.PushActionArrayShould) {
+ // Whether or not the room where the message came is the currently shown room.
isCurrent := room.ID == view.CurrentRoomID()
+ // Whether or not the terminal window is focused.
+ isFocused := view.lastFocusTime.Add(30 * time.Second).Before(time.Now())
+
+ // Whether or not the push rules say this message should be notified about.
+ shouldNotify := (should.Notify || !should.NotifySpecified) && message.Sender != view.config.Session.UserID
+
if !isCurrent {
+ // The message is not in the current room, show new message status in room list.
room.HasNewMessages = true
+ room.Highlighted = should.Highlight || room.Highlighted
+ if shouldNotify {
+ room.UnreadMessages++
+ }
}
- shouldNotify := (should.Notify || !should.NotifySpecified) && message.Sender != view.config.Session.UserID
- if shouldNotify {
+
+ if shouldNotify && !isFocused {
+ // Push rules say notify and the terminal is not focused, send desktop notification.
shouldPlaySound := should.PlaySound && should.SoundName == "default"
sendNotification(room, message.Sender, message.Text, should.Highlight, shouldPlaySound)
- if !isCurrent {
- room.UnreadMessages++
- }
}
+
if should.Highlight {
+ // Message is highlight, set color.
message.TextColor = tcell.ColorYellow
- if !isCurrent {
- room.Highlighted = true
- }
- }
- if should.PlaySound {
- // TODO play sound
}
}