This commit is contained in:
2026-01-30 19:08:18 +00:00
parent 63ad9247bc
commit 69bee8766e
6 changed files with 55 additions and 17 deletions

4
go.mod
View File

@@ -9,14 +9,14 @@ require (
github.com/jacoblockett/sanitizefilename v1.0.1 github.com/jacoblockett/sanitizefilename v1.0.1
github.com/jasonlovesdoggo/gopen v0.0.0-20250130105607-39c98c645030 github.com/jasonlovesdoggo/gopen v0.0.0-20250130105607-39c98c645030
github.com/kirsle/configdir v0.0.0-20170128060238-e45d2f54772f github.com/kirsle/configdir v0.0.0-20170128060238-e45d2f54772f
github.com/sqweek/dialog v0.0.0-20260123140253-64c163d53aac github.com/kr/pretty v0.1.0
gosrc.io/xmpp v0.5.1 gosrc.io/xmpp v0.5.1
mellium.im/xmpp v0.22.0 mellium.im/xmpp v0.22.0
) )
require ( require (
github.com/KarpelesLab/weak v0.1.1 // indirect github.com/KarpelesLab/weak v0.1.1 // indirect
github.com/TheTitanrain/w32 v0.0.0-20180517000239-4f5cfb03fabf // indirect github.com/kr/text v0.1.0 // indirect
go4.org/unsafe/assume-no-moving-gc v0.0.0-20231121144256-b99613f794b6 // indirect go4.org/unsafe/assume-no-moving-gc v0.0.0-20231121144256-b99613f794b6 // indirect
golang.org/x/net v0.29.0 // indirect golang.org/x/net v0.29.0 // indirect
golang.org/x/sync v0.8.0 // indirect golang.org/x/sync v0.8.0 // indirect

6
go.sum
View File

@@ -2,8 +2,6 @@ github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk
github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
github.com/KarpelesLab/weak v0.1.1 h1:fNnlPo3aypS9tBzoEQluY13XyUfd/eWaSE/vMvo9s4g= github.com/KarpelesLab/weak v0.1.1 h1:fNnlPo3aypS9tBzoEQluY13XyUfd/eWaSE/vMvo9s4g=
github.com/KarpelesLab/weak v0.1.1/go.mod h1:pzXsWs5f2bf+fpgHayTlBE1qJpO3MpJKo5sRaLu1XNw= github.com/KarpelesLab/weak v0.1.1/go.mod h1:pzXsWs5f2bf+fpgHayTlBE1qJpO3MpJKo5sRaLu1XNw=
github.com/TheTitanrain/w32 v0.0.0-20180517000239-4f5cfb03fabf h1:FPsprx82rdrX2jiKyS17BH6IrTmUBYqZa/CXT4uvb+I=
github.com/TheTitanrain/w32 v0.0.0-20180517000239-4f5cfb03fabf/go.mod h1:peYoMncQljjNS6tZwI9WVyQB3qZS6u79/N3mBOcnd3I=
github.com/agnivade/wasmbrowsertest v0.3.1/go.mod h1:zQt6ZTdl338xxRaMW395qccVE2eQm0SjC/SDz0mPWQI= github.com/agnivade/wasmbrowsertest v0.3.1/go.mod h1:zQt6ZTdl338xxRaMW395qccVE2eQm0SjC/SDz0mPWQI=
github.com/chromedp/cdproto v0.0.0-20190614062957-d6d2f92b486d/go.mod h1:S8mB5wY3vV+vRIzf39xDXsw3XKYewW9X6rW2aEmkrSw= github.com/chromedp/cdproto v0.0.0-20190614062957-d6d2f92b486d/go.mod h1:S8mB5wY3vV+vRIzf39xDXsw3XKYewW9X6rW2aEmkrSw=
github.com/chromedp/cdproto v0.0.0-20190621002710-8cbd498dd7a0/go.mod h1:S8mB5wY3vV+vRIzf39xDXsw3XKYewW9X6rW2aEmkrSw= github.com/chromedp/cdproto v0.0.0-20190621002710-8cbd498dd7a0/go.mod h1:S8mB5wY3vV+vRIzf39xDXsw3XKYewW9X6rW2aEmkrSw=
@@ -45,8 +43,10 @@ github.com/kirsle/configdir v0.0.0-20170128060238-e45d2f54772f/go.mod h1:4rEELDS
github.com/knq/sysutil v0.0.0-20181215143952-f05b59f0f307/go.mod h1:BjPj+aVjl9FW/cCGiF3nGh5v+9Gd3VCgBQbod/GlMaQ= github.com/knq/sysutil v0.0.0-20181215143952-f05b59f0f307/go.mod h1:BjPj+aVjl9FW/cCGiF3nGh5v+9Gd3VCgBQbod/GlMaQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/mailru/easyjson v0.0.0-20190403194419-1ea4449da983/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190403194419-1ea4449da983/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
@@ -68,8 +68,6 @@ github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjM
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/sqweek/dialog v0.0.0-20260123140253-64c163d53aac h1:/QqP+ajFMma4hNWQyBDVaQQhz9Z1kDyXScNWMO3owx0=
github.com/sqweek/dialog v0.0.0-20260123140253-64c163d53aac/go.mod h1:/qNPSY91qTz/8TgHEMioAUc6q7+3SOybeKczHMXFcXw=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=

View File

@@ -43,16 +43,13 @@ func switchToTab(jid string) {
u := v.(stanza.Presence) u := v.(stanza.Presence)
var mu MucUser var mu MucUser
var ocu OccupantID
u.Get(&mu) u.Get(&mu)
u.Get(&ocu)
nick_label := gtk.NewLabel(Jid.MustParse(u.From).Resourcepart()) nick_label := gtk.NewLabel(Jid.MustParse(u.From).Resourcepart())
affil_label := gtk.NewLabel(mu.MucUserItem.Affiliation)
// nick_label.SetHAlign(gtk.AlignStart)
// affil_label.SetHAlign(gtk.AlignEnd)
userbox.Append(nick_label) userbox.Append(nick_label)
userbox.Append(affil_label)
gen.Append(userbox) gen.Append(userbox)
return true return true

View File

@@ -71,6 +71,7 @@ func generateMessageWidget(p stanza.Packet) gtk.Widgetter {
} }
ocu := OccupantID{} ocu := OccupantID{}
m.Get(&ocu) m.Get(&ocu)
authorBox := gtk.NewBox(gtk.OrientationHorizontal, 10) authorBox := gtk.NewBox(gtk.OrientationHorizontal, 10)
@@ -78,10 +79,32 @@ func generateMessageWidget(p stanza.Packet) gtk.Widgetter {
// im := newImageFromPath("debug.png") // im := newImageFromPath("debug.png")
// authorBox.Append(im) // authorBox.Append(im)
im := getAvatar(m.From, ocu.ID)
mo, _ := mucmembers.Load(jid.MustParse(m.From).Bare().String())
mm := mo.(mucUnit)
mmm := mm.Members
mmmm, ok := mmm.Load(ocu.ID)
if ok {
pres := mmmm.(stanza.Presence)
var vu VCardUpdate
pres.Get(&vu)
if vu.Photo != "" {
im := getAvatar(m.From, vu.Photo)
im.SetPixelSize(40) im.SetPixelSize(40)
im.AddCSSClass("author_img") im.AddCSSClass("author_img")
authorBox.Append(im) authorBox.Append(im)
} else {
im := newImageFromPath("debug.png")
im.SetPixelSize(40)
im.AddCSSClass("author_img")
}
} else {
im := newImageFromPath("debug.png")
im.SetPixelSize(40)
im.AddCSSClass("author_img")
}
al := gtk.NewLabel(jid.MustParse(m.From).Resourcepart()) al := gtk.NewLabel(jid.MustParse(m.From).Resourcepart())
al.AddCSSClass("author") al.AddCSSClass("author")
@@ -128,6 +151,11 @@ func getAvatar(j, hash string) *gtk.Image { // TODO: This function probably shou
return newImageFromPath("debug.png") return newImageFromPath("debug.png")
} }
if hash == "" {
fmt.Println("Hash is nil!")
return newImageFromPath("debug.png")
}
hash = filepath.Join(p, sanitizefilename.Sanitize(hash)) hash = filepath.Join(p, sanitizefilename.Sanitize(hash))
_, err = os.ReadFile(hash) _, err = os.ReadFile(hash)

12
main.go
View File

@@ -20,6 +20,8 @@ import (
_ "embed" _ "embed"
"encoding/xml" "encoding/xml"
"runtime" "runtime"
"github.com/kr/pretty"
) )
var loadedConfig lambdaConfig var loadedConfig lambdaConfig
@@ -170,6 +172,8 @@ func main() {
return return
} }
pretty.Println(presence)
var mu MucUser var mu MucUser
var ocu OccupantID var ocu OccupantID
@@ -252,7 +256,7 @@ func activate(app *gtk.Application) {
app.SetMenubar(gio.NewMenu()) app.SetMenubar(gio.NewMenu())
window.SetTitle("Lambda") window.SetTitle("Lambda")
window.AddCSSClass("ssd") window.Window.AddCSSClass("ssd")
menu := gtk.NewBox(gtk.OrientationHorizontal, 0) menu := gtk.NewBox(gtk.OrientationHorizontal, 0)
/* /*
f_menu := gtk.NewMenuButton() f_menu := gtk.NewMenuButton()
@@ -333,16 +337,20 @@ func activate(app *gtk.Application) {
en.SetHExpand(true) en.SetHExpand(true)
m_entry := gtk.NewEntry()
entry_box.Append(en) entry_box.Append(en)
entry_box.Append(b) entry_box.Append(b)
entry_box.Append(m_entry)
debug_btn := gtk.NewButtonWithLabel("Join muc") debug_btn := gtk.NewButtonWithLabel("Join muc")
debug_btn.ConnectClicked(func() { debug_btn.ConnectClicked(func() {
t := en.Text() t := en.Text()
_, ok := tabs[t] _, ok := tabs[t]
if !ok { if !ok {
err := joinMuc(client, clientroot.Session.BindJid, t, loadedConfig.Nick) err := joinMuc(client, clientroot.Session.BindJid, t, m_entry.Text())
if err != nil { if err != nil {
panic(err) panic(err)
} }

View File

@@ -14,6 +14,12 @@ type VCard struct {
ResultSet *stanza.ResultSet `xml:"set,omitempty"` ResultSet *stanza.ResultSet `xml:"set,omitempty"`
} }
type VCardUpdate struct {
stanza.PresExtension
XMLName xml.Name `xml:"vcard-temp:x:update x"`
Photo string `xml:"photo"`
}
func (v *VCard) Namespace() string { func (v *VCard) Namespace() string {
return v.XMLName.Space return v.XMLName.Space
} }
@@ -29,4 +35,5 @@ type Photo struct {
func init() { func init() {
stanza.TypeRegistry.MapExtension(stanza.PKTIQ, xml.Name{Space: "vcard-temp", Local: "vCard"}, VCard{}) stanza.TypeRegistry.MapExtension(stanza.PKTIQ, xml.Name{Space: "vcard-temp", Local: "vCard"}, VCard{})
stanza.TypeRegistry.MapExtension(stanza.PKTPresence, xml.Name{Space: "vcard-temp:x:update", Local: "x"}, VCardUpdate{})
} }