mirror of
https://github.com/tulir/gomuks.git
synced 2025-04-19 18:13: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) {
|
||||
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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue