Several changes

This commit is contained in:
2026-01-30 10:40:38 +00:00
parent 1ef42695f0
commit 92b01844c4
9 changed files with 155 additions and 15 deletions

72
main.go
View File

@@ -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 {