forked from sunglocto/lambda
Several changes
This commit is contained in:
72
main.go
72
main.go
@@ -2,6 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"sync"
|
||||
|
||||
"context"
|
||||
"fmt"
|
||||
@@ -18,7 +19,7 @@ import (
|
||||
|
||||
_ "embed"
|
||||
"encoding/xml"
|
||||
"errors"
|
||||
"github.com/kr/pretty"
|
||||
)
|
||||
|
||||
var loadedConfig lambdaConfig
|
||||
@@ -32,6 +33,7 @@ var tabs map[string]*chatTab = make(map[string]*chatTab)
|
||||
var current string
|
||||
|
||||
var scroller *gtk.ScrolledWindow
|
||||
var memberList *gtk.ScrolledWindow
|
||||
|
||||
//go:embed style.css
|
||||
var styleCSS string
|
||||
@@ -40,6 +42,9 @@ var clientroot *xmpp.Client
|
||||
|
||||
var uiQueue = make(chan func(), 100)
|
||||
|
||||
// stores members of mucs
|
||||
var mucmembers sync.Map
|
||||
|
||||
func init() {
|
||||
go func() {
|
||||
for fn := range uiQueue {
|
||||
@@ -66,10 +71,10 @@ func main() {
|
||||
TransportConfiguration: xmpp.TransportConfiguration{
|
||||
Address: loadedConfig.Server,
|
||||
},
|
||||
Jid: loadedConfig.Username,
|
||||
Credential: xmpp.Password(loadedConfig.Password),
|
||||
Insecure: loadedConfig.Insecure,
|
||||
StreamLogger: os.Stdout,
|
||||
Jid: loadedConfig.Username,
|
||||
Credential: xmpp.Password(loadedConfig.Password),
|
||||
Insecure: loadedConfig.Insecure,
|
||||
// StreamLogger: os.Stdout,
|
||||
}
|
||||
router := xmpp.NewRouter()
|
||||
|
||||
@@ -159,6 +164,52 @@ func main() {
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
router.HandleFunc("presence", func(s xmpp.Sender, p stanza.Packet) {
|
||||
presence, ok := p.(stanza.Presence)
|
||||
pretty.Println(presence)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
||||
var mu MucUser
|
||||
var ocu OccupantID
|
||||
|
||||
ok = presence.Get(&mu)
|
||||
|
||||
if ok { // This is a presence stanza from a user in a MUC
|
||||
presence.Get(&ocu)
|
||||
muc := jid.MustParse(presence.From).Bare().String()
|
||||
_, ok = mucmembers.Load(muc)
|
||||
if !ok {
|
||||
mucmembers.Store(muc, mucUnit{})
|
||||
}
|
||||
|
||||
unit, ok := mucmembers.Load(muc)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
||||
typed_unit := unit.(mucUnit)
|
||||
/*
|
||||
if typed_unit.Members == nil {
|
||||
typed_unit.Members = make(map[string]stanza.Presence)
|
||||
mucmembers.Store(muc, typed_unit)
|
||||
}
|
||||
*/
|
||||
|
||||
if presence.Type != "unavailable" {
|
||||
typed_unit.Members.Store(ocu.ID, presence)
|
||||
} else {
|
||||
typed_unit.Members.Delete(ocu.ID)
|
||||
// delete(typed_unit.Members, ocu.ID)
|
||||
}
|
||||
|
||||
mucmembers.Store(muc, typed_unit)
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
c, err := xmpp.NewClient(&config, router, func(err error) {
|
||||
showErrorDialog(err)
|
||||
panic(err)
|
||||
@@ -236,6 +287,10 @@ func activate(app *gtk.Application) {
|
||||
empty_dialog.SetVExpand(true)
|
||||
|
||||
scroller = gtk.NewScrolledWindow()
|
||||
memberList = gtk.NewScrolledWindow()
|
||||
|
||||
scroller.SetHExpand(true)
|
||||
memberList.SetHExpand(true)
|
||||
|
||||
box := gtk.NewBox(gtk.OrientationVertical, 0)
|
||||
// scroller.SetChild(empty_dialog)
|
||||
@@ -243,7 +298,11 @@ func activate(app *gtk.Application) {
|
||||
menu_scroll := gtk.NewScrolledWindow()
|
||||
menu_scroll.SetChild(menu)
|
||||
box.Append(menu_scroll)
|
||||
box.Append(scroller)
|
||||
|
||||
chatbox := gtk.NewBox(gtk.OrientationHorizontal, 0)
|
||||
chatbox.Append(scroller)
|
||||
chatbox.Append(memberList)
|
||||
box.Append(chatbox)
|
||||
|
||||
entry_box := gtk.NewBox(gtk.OrientationHorizontal, 0)
|
||||
|
||||
@@ -281,7 +340,6 @@ func activate(app *gtk.Application) {
|
||||
debug_btn := gtk.NewButtonWithLabel("Join muc")
|
||||
|
||||
debug_btn.ConnectClicked(func() {
|
||||
showErrorDialog(errors.New("test error"))
|
||||
t := en.Text()
|
||||
_, ok := tabs[t]
|
||||
if !ok {
|
||||
|
||||
Reference in New Issue
Block a user