mirror of
https://github.com/tulir/gomuks.git
synced 2025-04-20 10:33:41 -05:00
Flash Beepberry LED on message receive
Colors are mapped symbolically as follows: White -> Default Green -> Service Red -> Redaction Yellow -> Edit Purple -> Reaction
This commit is contained in:
parent
0714fec38b
commit
86659503f3
2 changed files with 28 additions and 0 deletions
|
@ -908,6 +908,7 @@ func (view *RoomView) UpdateUserList() {
|
||||||
|
|
||||||
func (view *RoomView) AddServiceMessage(text string) {
|
func (view *RoomView) AddServiceMessage(text string) {
|
||||||
view.content.AddMessage(messages.NewServiceMessage(text), AppendMessage)
|
view.content.AddMessage(messages.NewServiceMessage(text), AppendMessage)
|
||||||
|
go view.parent.FlashLED(0x00, 0xFF, 0x00)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (view *RoomView) parseEvent(evt *muksevt.Event) *messages.UIMessage {
|
func (view *RoomView) parseEvent(evt *muksevt.Event) *messages.UIMessage {
|
||||||
|
@ -923,6 +924,7 @@ func (view *RoomView) AddHistoryEvent(evt *muksevt.Event) {
|
||||||
func (view *RoomView) AddEvent(evt *muksevt.Event) ifc.Message {
|
func (view *RoomView) AddEvent(evt *muksevt.Event) ifc.Message {
|
||||||
if msg := view.parseEvent(evt); msg != nil {
|
if msg := view.parseEvent(evt); msg != nil {
|
||||||
view.content.AddMessage(msg, AppendMessage)
|
view.content.AddMessage(msg, AppendMessage)
|
||||||
|
go view.parent.FlashLED(0xFF, 0xFF, 0xFF)
|
||||||
return msg
|
return msg
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -930,17 +932,20 @@ func (view *RoomView) AddEvent(evt *muksevt.Event) ifc.Message {
|
||||||
|
|
||||||
func (view *RoomView) AddRedaction(redactedEvt *muksevt.Event) {
|
func (view *RoomView) AddRedaction(redactedEvt *muksevt.Event) {
|
||||||
view.AddEvent(redactedEvt)
|
view.AddEvent(redactedEvt)
|
||||||
|
go view.parent.FlashLED(0xFF, 0x00, 0x00)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (view *RoomView) AddEdit(evt *muksevt.Event) {
|
func (view *RoomView) AddEdit(evt *muksevt.Event) {
|
||||||
if msg := view.parseEvent(evt); msg != nil {
|
if msg := view.parseEvent(evt); msg != nil {
|
||||||
view.content.AddMessage(msg, IgnoreMessage)
|
view.content.AddMessage(msg, IgnoreMessage)
|
||||||
|
go view.parent.FlashLED(0xFF, 0xFF, 0x00)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (view *RoomView) AddReaction(evt *muksevt.Event, key string) {
|
func (view *RoomView) AddReaction(evt *muksevt.Event, key string) {
|
||||||
msgView := view.MessageView()
|
msgView := view.MessageView()
|
||||||
msg := msgView.getMessageByID(evt.ID)
|
msg := msgView.getMessageByID(evt.ID)
|
||||||
|
go view.parent.FlashLED(0xFF, 0x00, 0xFF)
|
||||||
if msg == nil {
|
if msg == nil {
|
||||||
// Message not in view, nothing to do
|
// Message not in view, nothing to do
|
||||||
return
|
return
|
||||||
|
|
|
@ -36,6 +36,7 @@ import (
|
||||||
ifc "maunium.net/go/gomuks/interface"
|
ifc "maunium.net/go/gomuks/interface"
|
||||||
"maunium.net/go/gomuks/lib/notification"
|
"maunium.net/go/gomuks/lib/notification"
|
||||||
"maunium.net/go/gomuks/matrix/rooms"
|
"maunium.net/go/gomuks/matrix/rooms"
|
||||||
|
"maunium.net/go/gomuks/ui/beepberry"
|
||||||
"maunium.net/go/gomuks/ui/messages"
|
"maunium.net/go/gomuks/ui/messages"
|
||||||
"maunium.net/go/gomuks/ui/widget"
|
"maunium.net/go/gomuks/ui/widget"
|
||||||
)
|
)
|
||||||
|
@ -56,6 +57,9 @@ type MainView struct {
|
||||||
|
|
||||||
lastFocusTime time.Time
|
lastFocusTime time.Time
|
||||||
|
|
||||||
|
led *beepberry.LED
|
||||||
|
ledLock sync.RWMutex
|
||||||
|
|
||||||
matrix ifc.MatrixContainer
|
matrix ifc.MatrixContainer
|
||||||
gmx ifc.Gomuks
|
gmx ifc.Gomuks
|
||||||
config *config.Config
|
config *config.Config
|
||||||
|
@ -77,6 +81,10 @@ func (ui *GomuksUI) NewMainView() mauview.Component {
|
||||||
mainView.rosterView = NewRosterView(mainView)
|
mainView.rosterView = NewRosterView(mainView)
|
||||||
mainView.cmdProcessor = NewCommandProcessor(mainView)
|
mainView.cmdProcessor = NewCommandProcessor(mainView)
|
||||||
|
|
||||||
|
if led, err := beepberry.NewLED(); err == nil {
|
||||||
|
mainView.led = led
|
||||||
|
}
|
||||||
|
|
||||||
mainView.flex.
|
mainView.flex.
|
||||||
AddFixedComponent(mainView.roomList, 25).
|
AddFixedComponent(mainView.roomList, 25).
|
||||||
AddFixedComponent(widget.NewBorder(), 1).
|
AddFixedComponent(widget.NewBorder(), 1).
|
||||||
|
@ -92,6 +100,21 @@ func (view *MainView) CmdProcessor() *CommandProcessor {
|
||||||
return view.cmdProcessor
|
return view.cmdProcessor
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (view *MainView) FlashLED(r, g, b uint16) {
|
||||||
|
if view.led == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
view.ledLock.Lock()
|
||||||
|
defer view.ledLock.Unlock()
|
||||||
|
|
||||||
|
view.led.SetColor(r, g, b)
|
||||||
|
view.led.On()
|
||||||
|
time.Sleep(time.Second)
|
||||||
|
view.led.Off()
|
||||||
|
view.led.SetColor(0xFF, 0xFF, 0xFF)
|
||||||
|
}
|
||||||
|
|
||||||
func (view *MainView) ShowModal(modal mauview.Component) {
|
func (view *MainView) ShowModal(modal mauview.Component) {
|
||||||
view.modal = modal
|
view.modal = modal
|
||||||
var ok bool
|
var ok bool
|
||||||
|
|
Loading…
Add table
Reference in a new issue