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:
FIGBERT 2023-07-05 00:45:50 +03:00
parent 0714fec38b
commit 86659503f3
No known key found for this signature in database
GPG key ID: 67F1598D607A844B
2 changed files with 28 additions and 0 deletions

View file

@ -908,6 +908,7 @@ func (view *RoomView) UpdateUserList() {
func (view *RoomView) AddServiceMessage(text string) {
view.content.AddMessage(messages.NewServiceMessage(text), AppendMessage)
go view.parent.FlashLED(0x00, 0xFF, 0x00)
}
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 {
if msg := view.parseEvent(evt); msg != nil {
view.content.AddMessage(msg, AppendMessage)
go view.parent.FlashLED(0xFF, 0xFF, 0xFF)
return msg
}
return nil
@ -930,17 +932,20 @@ func (view *RoomView) AddEvent(evt *muksevt.Event) ifc.Message {
func (view *RoomView) AddRedaction(redactedEvt *muksevt.Event) {
view.AddEvent(redactedEvt)
go view.parent.FlashLED(0xFF, 0x00, 0x00)
}
func (view *RoomView) AddEdit(evt *muksevt.Event) {
if msg := view.parseEvent(evt); msg != nil {
view.content.AddMessage(msg, IgnoreMessage)
go view.parent.FlashLED(0xFF, 0xFF, 0x00)
}
}
func (view *RoomView) AddReaction(evt *muksevt.Event, key string) {
msgView := view.MessageView()
msg := msgView.getMessageByID(evt.ID)
go view.parent.FlashLED(0xFF, 0x00, 0xFF)
if msg == nil {
// Message not in view, nothing to do
return

View file

@ -36,6 +36,7 @@ import (
ifc "maunium.net/go/gomuks/interface"
"maunium.net/go/gomuks/lib/notification"
"maunium.net/go/gomuks/matrix/rooms"
"maunium.net/go/gomuks/ui/beepberry"
"maunium.net/go/gomuks/ui/messages"
"maunium.net/go/gomuks/ui/widget"
)
@ -56,6 +57,9 @@ type MainView struct {
lastFocusTime time.Time
led *beepberry.LED
ledLock sync.RWMutex
matrix ifc.MatrixContainer
gmx ifc.Gomuks
config *config.Config
@ -77,6 +81,10 @@ func (ui *GomuksUI) NewMainView() mauview.Component {
mainView.rosterView = NewRosterView(mainView)
mainView.cmdProcessor = NewCommandProcessor(mainView)
if led, err := beepberry.NewLED(); err == nil {
mainView.led = led
}
mainView.flex.
AddFixedComponent(mainView.roomList, 25).
AddFixedComponent(widget.NewBorder(), 1).
@ -92,6 +100,21 @@ func (view *MainView) CmdProcessor() *CommandProcessor {
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) {
view.modal = modal
var ok bool