Add experimental functionality to join bookmarks

This commit is contained in:
2025-09-01 20:05:06 +01:00
parent 21564cc70e
commit 853bed70e7

116
main.go
View File

@@ -29,7 +29,6 @@ import (
_ "mellium.im/xmpp/disco" _ "mellium.im/xmpp/disco"
"mellium.im/xmpp/jid" "mellium.im/xmpp/jid"
"mellium.im/xmpp/muc" "mellium.im/xmpp/muc"
"mellium.im/xmpp/stanza"
_ "mellium.im/xmpp/stanza" _ "mellium.im/xmpp/stanza"
oasisSdk "pain.agency/oasis-sdk" oasisSdk "pain.agency/oasis-sdk"
// gui - optional // gui - optional
@@ -679,12 +678,15 @@ func main() {
url, uerr := url.Parse(strings.Split(text, " ")[0]) url, uerr := url.Parse(strings.Split(text, " ")[0])
if uerr == nil && strings.HasPrefix(strings.Split(text, " ")[0], "https://") { if uerr == nil && strings.HasPrefix(strings.Split(text, " ")[0], "https://") {
//err = client.SendImage(jid.MustParse(activeMucJid).Bare(), text, url.String(), &text) dialog.ShowConfirm("Confirm", "Do you want to embed this link into your message?", func(b bool) {
err = client.SendSingleFileMessage(jid.MustParse(activeMucJid).Bare(), url.String(), nil) if b {
if err != nil { err = client.SendSingleFileMessage(jid.MustParse(activeMucJid).Bare(), url.String(), nil)
dialog.ShowError(err, w) if err != nil {
} dialog.ShowError(err, w)
return }
return
}
}, w)
} }
err = client.SendText(jid.MustParse(activeMucJid).Bare(), text) err = client.SendText(jid.MustParse(activeMucJid).Bare(), text)
@@ -950,65 +952,66 @@ func main() {
}) })
servDisc := fyne.NewMenuItem("Disco features", func() { /*
//var search jid.JID servDisc := fyne.NewMenuItem("Disco features", func() {
dialog.ShowEntryDialog("Disco features", "JID: ", func(s string) { // TODO: replace with undeprecated widgetd //var search jid.JID
d := dialog.NewCustom("Please wait", "Close", widget.NewLabel("..."), w) dialog.ShowEntryDialog("Disco features", "JID: ", func(s string) { // TODO: replace with undeprecated widgetd
d.Show() d := dialog.NewCustom("Please wait", "Close", widget.NewLabel("..."), w)
go func() { d.Show()
//search, err = jid.Parse(s) go func() {
//if err != nil { //search, err = jid.Parse(s)
// d.Hide() //if err != nil {
// dialog.ShowError(err, w) // d.Hide()
// return // dialog.ShowError(err, w)
//} // return
txt := `<iq from='ringen@muc.isekai.rocks/sunglocto' //}
to='ringen@muc.iskai.rocks/snit' txt := `<iq from='ringen@muc.isekai.rocks/sunglocto'
type='get' to='ringen@muc.iskai.rocks/snit'
id='vc2'> type='get'
<vCard xmlns='vcard-temp'/> id='vc2'>
</iq>` <vCard xmlns='vcard-temp'/>
var stan stanza.IQ </iq>`
xml.Unmarshal([]byte(txt), &stan) var stan stanza.IQ
if err != nil { xml.Unmarshal([]byte(txt), &stan)
d.Hide()
dialog.ShowError(err, w)
return
}
r, err := client.Session.EncodeIQ(client.Ctx, stan)
if err != nil {
d.Hide()
dialog.ShowError(err, w)
return
}
ra, _ := r.Token()
t, _ := xml.MarshalIndent(ra, "", "\t")
fmt.Println(string(t))
d.Hide()
/*
myBox := container.NewGridWithColumns(1, widget.NewLabel("Items"))
info, err := disco.GetInfo(client.Ctx, "", search, client.Session)
if err != nil { if err != nil {
d.Hide() d.Hide()
dialog.ShowError(err, w) dialog.ShowError(err, w)
return return
} }
m := info.Identity r, err := client.Session.EncodeIQ(client.Ctx, stan)
bytes, err := xml.MarshalIndent(m, "", "\t")
if err != nil { if err != nil {
d.Hide() d.Hide()
dialog.ShowError(err, w) dialog.ShowError(err, w)
return return
} }
fyne.Do(func() {d.Hide()}) ra, _ := r.Token()
myBox.Objects = append(myBox.Objects, widget.NewLabel(string(bytes))) t, _ := xml.MarshalIndent(ra, "", "\t")
dialog.ShowCustom("Service discovery", "cancel", myBox, w) fmt.Println(string(t))
*/ d.Hide()
}() /*
}, w) myBox := container.NewGridWithColumns(1, widget.NewLabel("Items"))
}) info, err := disco.GetInfo(client.Ctx, "", search, client.Session)
if err != nil {
d.Hide()
dialog.ShowError(err, w)
return
}
m := info.Identity
bytes, err := xml.MarshalIndent(m, "", "\t")
if err != nil {
d.Hide()
dialog.ShowError(err, w)
return
}
fyne.Do(func() {d.Hide()})
myBox.Objects = append(myBox.Objects, widget.NewLabel(string(bytes)))
dialog.ShowCustom("Service discovery", "cancel", myBox, w)
}()
}, w)
})
*/
savedata := fyne.NewMenuItem("DEBUG: Save tab data to disk", func() { savedata := fyne.NewMenuItem("DEBUG: Save tab data to disk", func() {
d := []ChatTab{} d := []ChatTab{}
@@ -1024,6 +1027,7 @@ func main() {
os.WriteFile("text.xml", b, os.ModeAppend) os.WriteFile("text.xml", b, os.ModeAppend)
}) })
menu_help := fyne.NewMenu("π", mit, reconnect, savedata, fyne.NewMenuItem("Join rooms in bookmarks", func() { menu_help := fyne.NewMenu("π", mit, reconnect, savedata, fyne.NewMenuItem("Join rooms in bookmarks", func() {
// FIXME: Race condition
client.FetchBookmarks() client.FetchBookmarks()
rooms := client.BookmarkCache() rooms := client.BookmarkCache()
for _, v := range rooms { for _, v := range rooms {
@@ -1046,7 +1050,7 @@ func main() {
} }
})) }))
menu_changeroom := fyne.NewMenu("Α", mic, servDisc, beginADM, joinARoom, leaveRoom) menu_changeroom := fyne.NewMenu("Α", mic, beginADM, joinARoom, leaveRoom)
menu_configureview := fyne.NewMenu("Β", mia, mis, jtt, jtb) menu_configureview := fyne.NewMenu("Β", mia, mis, jtt, jtb)
hafjag := fyne.NewMenuItem("Hafjag", func() { hafjag := fyne.NewMenuItem("Hafjag", func() {
entry.Text = "Hafjag" entry.Text = "Hafjag"