From 873d38b3ac36420eb33068d54b10078dbe0d2692 Mon Sep 17 00:00:00 2001 From: sunglocto Date: Fri, 28 Nov 2025 09:58:48 +0000 Subject: [PATCH 1/2] Fix some crashes and use forked oasisSdk --- go.mod | 2 +- go.sum | 4 ++-- main.go | 11 ++++++++--- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index be6831c..021d5bb 100644 --- a/go.mod +++ b/go.mod @@ -8,8 +8,8 @@ require ( github.com/makeworld-the-better-one/go-isemoji v1.3.0 github.com/rrivera/identicon v0.0.0-20240116195454-d5ba35832c0d github.com/shreve/musicwand v0.0.1 + github.com/sunglocto/oasis-sdk v0.0.0-20251128095406-3c003b830815 mellium.im/xmpp v0.22.0 - pain.agency/oasis-sdk v0.0.0-20250918002549-5a45c8afedcd ) require ( diff --git a/go.sum b/go.sum index c790e59..d33f04b 100644 --- a/go.sum +++ b/go.sum @@ -78,6 +78,8 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/sunglocto/oasis-sdk v0.0.0-20251128095406-3c003b830815 h1:HsI7kxYauygjRK15Iwf3FlZnU8XJwRPSmbtoNfeyBYk= +github.com/sunglocto/oasis-sdk v0.0.0-20251128095406-3c003b830815/go.mod h1:Y5iPruMLvqNwGVqB+n/+wylQjCTPKQx37I/PyLWhuzk= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/yuin/goldmark v1.7.8 h1:iERMLn0/QJeHFhxSt3p6PeN9mGnvIKSpG9YYorDMnic= github.com/yuin/goldmark v1.7.8/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= @@ -113,5 +115,3 @@ mellium.im/xmlstream v0.15.4 h1:gLKxcWl4rLMUpKgtzrTBvr4OexPeO/edYus+uK3F6ZI= mellium.im/xmlstream v0.15.4/go.mod h1:yXaCW2++fmVO4L9piKVkyLDqnCmictVYF7FDQW8prb4= mellium.im/xmpp v0.22.0 h1:UthQVSwEAr7SNrmyc90c2ykGpVHxjn/3yw8Ey4+Im8s= mellium.im/xmpp v0.22.0/go.mod h1:WSjq12nhREFD88Vy/0WD6Q8inE8t6a8w7QjzwivWitw= -pain.agency/oasis-sdk v0.0.0-20250918002549-5a45c8afedcd h1:oLKI4XqaHpJeegwRxRYH9hepFO4GYKCr6C7cLwqXTK8= -pain.agency/oasis-sdk v0.0.0-20250918002549-5a45c8afedcd/go.mod h1:eyvDgfpHo+9bdB/AkMEMZ3ETeoSONTULVx9X4w9kGAU= diff --git a/main.go b/main.go index 7c756d1..af5186c 100644 --- a/main.go +++ b/main.go @@ -33,7 +33,7 @@ import ( "mellium.im/xmpp/bookmarks" "mellium.im/xmpp/jid" "mellium.im/xmpp/muc" - oasisSdk "pain.agency/oasis-sdk" + oasisSdk "github.com/sunglocto/oasis-sdk" // TODO: integrated theme switcher ) @@ -171,6 +171,8 @@ func CreateUITab(chatJidStr string) ChatTabUI { replytext.Hide() replytext.Importance = widget.SuccessImportance replytext.Selectable = true + // replytext.Wrapping = fyne.TextWrapWord + replytext.Truncation = fyne.TextTruncateEllipsis btn := widget.NewButtonWithIcon("View media", icon, func() { }) @@ -555,7 +557,7 @@ func main() { var ImageID string = "" mucJidStr := msg.From.Bare().String() if tab, ok := chatTabs[mucJidStr]; ok { - chatInfo.Objects[0] = widget.NewLabel(fmt.Sprintf("[!] %s", mucJidStr)) + //chatInfo.Objects[0] = widget.NewLabel(fmt.Sprintf("[!] %s", mucJidStr)) chatTabs[mucJidStr].Muc = muc str := *msg.CleanedBody if strings.Contains(str, login.DisplayName) { @@ -631,7 +633,10 @@ func main() { fyne.Do(func() { UITabs[mucJidStr].Scroller.Refresh() if scrollDownOnNewMessage { - UITabs[mucJidStr].Scroller.ScrollToBottom() + tab, ok := UITabs[mucJidStr] + if ok { + tab.Scroller.ScrollToBottom() + } } }) } From 22fe1cac4622bb8f6f01fff0c520d6203e1186d7 Mon Sep 17 00:00:00 2001 From: sunglocto Date: Fri, 2 Jan 2026 11:35:26 +0000 Subject: [PATCH 2/2] Respect JoinBookmarks config field, add name changing to bookmarks and fix a crash --- go.mod | 2 +- go.sum | 4 ++++ main.go | 45 ++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 021d5bb..1a18481 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/makeworld-the-better-one/go-isemoji v1.3.0 github.com/rrivera/identicon v0.0.0-20240116195454-d5ba35832c0d github.com/shreve/musicwand v0.0.1 - github.com/sunglocto/oasis-sdk v0.0.0-20251128095406-3c003b830815 + github.com/sunglocto/oasis-sdk v0.0.0-20251128101950-083ea4658d9c mellium.im/xmpp v0.22.0 ) diff --git a/go.sum b/go.sum index d33f04b..e710a4e 100644 --- a/go.sum +++ b/go.sum @@ -80,6 +80,10 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/sunglocto/oasis-sdk v0.0.0-20251128095406-3c003b830815 h1:HsI7kxYauygjRK15Iwf3FlZnU8XJwRPSmbtoNfeyBYk= github.com/sunglocto/oasis-sdk v0.0.0-20251128095406-3c003b830815/go.mod h1:Y5iPruMLvqNwGVqB+n/+wylQjCTPKQx37I/PyLWhuzk= +github.com/sunglocto/oasis-sdk v0.0.0-20251128100941-f53b1dabbcac h1:pVarwnSbjNSDpeQer/SERztTEpkl6Cnb5xuyxXmb50k= +github.com/sunglocto/oasis-sdk v0.0.0-20251128100941-f53b1dabbcac/go.mod h1:Y5iPruMLvqNwGVqB+n/+wylQjCTPKQx37I/PyLWhuzk= +github.com/sunglocto/oasis-sdk v0.0.0-20251128101950-083ea4658d9c h1:peWSGIl0xBvx3sJR3+kHV1xOe1X8dbQ9xtvEXyXogCo= +github.com/sunglocto/oasis-sdk v0.0.0-20251128101950-083ea4658d9c/go.mod h1:Y5iPruMLvqNwGVqB+n/+wylQjCTPKQx37I/PyLWhuzk= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/yuin/goldmark v1.7.8 h1:iERMLn0/QJeHFhxSt3p6PeN9mGnvIKSpG9YYorDMnic= github.com/yuin/goldmark v1.7.8/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= diff --git a/main.go b/main.go index af5186c..a5d9d0d 100644 --- a/main.go +++ b/main.go @@ -259,7 +259,12 @@ func CreateUITab(chatJidStr string) ChatTabUI { content.SetText(msgContent) if chatTabs[chatJidStr].Messages[i].ReplyID != "PICLIENT:UNAVAILABLE" { reply := chatTabs[chatJidStr].Messages[i].Raw.Reply - guy := jid.MustParse(reply.To).Resourcepart() + j, err := jid.Parse(reply.To) + if err != nil { + log.Println("ERR: " + err.Error()) // FIXME + return + } + guy := j.Resourcepart() // TODO: EXPERIMENTALLY GET REPLIED TO TEXT for i := len(chatTabs[chatJidStr].Messages) - 1; i >= 0; i-- { @@ -669,6 +674,7 @@ func main() { }) client.SetPresenceHandler(func(client *oasisSdk.XmppClient, from jid.JID, p oasisSdk.UserPresence) { + log.Println(p.Type) bareAcc := from.Bare() tab, ok := chatTabs[bareAcc.String()] if !ok { @@ -683,6 +689,9 @@ func main() { }) client.SetBookmarkHandler(false, func(client *oasisSdk.XmppClient, bookmark bookmarks.Channel) { + if !config.JoinBookmarks { + return + } // FIXME if bookmark.JID.String() == "conversations-offtopic-reloaded@conference.trashserver.net" { return @@ -1048,8 +1057,9 @@ func main() { bookmarks := client.BookmarkCache() box := container.NewVBox() box.Add(widget.NewRichTextFromMarkdown("# Manage Bookmarks")) + box.Add(widget.NewLabel(fmt.Sprintf("%d bookmarks", len(bookmarks)))) for address, bookmark := range bookmarks { - bookmarkWidget := container.NewGridWithColumns(5) + bookmarkWidget := container.NewGridWithColumns(7) nameLabel := widget.NewLabel(bookmark.Name) nameLabel.Wrapping = fyne.TextWrapBreak @@ -1064,6 +1074,7 @@ func main() { var autojoinCheck *widget.Check var deleteBookmarkButton *widget.Button var joinRoomButton *widget.Button + var setNick *widget.Button joinRoomButton = widget.NewButtonWithIcon("Join", theme.AccountIcon(), func() { fyne.Do(func() { joinRoomButton.Disable() }) go func() { @@ -1117,9 +1128,32 @@ func main() { }() }) + nickEntry := widget.NewEntry() + nickEntry.SetText(bookmark.Nick) + + setNick = widget.NewButton("Set nick", func() { + go func() { + fyne.Do(func() {setNick.Disable()}) + newNick := nickEntry.Text + bookmark.Nick = newNick + err := client.PublishBookmark(bookmark, context.TODO()) + if err != nil { + fyne.Do(func() { + setNick.Enable() + dialog.ShowError(err, w) + }) + return + } + client.RefreshBookmarks(false) + fyne.Do(func() {setNick.Enable()}) + }() + }) + bookmarkWidget.Add(autojoinCheck) bookmarkWidget.Add(deleteBookmarkButton) bookmarkWidget.Add(joinRoomButton) + bookmarkWidget.Add(nickEntry) + bookmarkWidget.Add(setNick) box.Add(bookmarkWidget) } @@ -1485,10 +1519,13 @@ func main() { if tab.isMuc { nameLabel := widget.NewRichTextFromMarkdown("# " + activeChatJid) nameLabel.Truncation = fyne.TextTruncateEllipsis - box := container.NewVBox(nameLabel, widget.NewLabel(fmt.Sprintf("%d members ", len(tab.Members)))) + memberLabel := widget.NewLabel(fmt.Sprintf("%d members ", len(tab.Members))) + memberLabel.Truncation = fyne.TextTruncateEllipsis + box := container.NewVBox(nameLabel, ) chatSidebar.Objects = []fyne.CanvasObject{} for name, p := range tab.Members { + log.Println(string(p.Type)) gen, _ := identicon.New("github", 5, 3) userjid, err := jid.Parse(name) if err != nil { @@ -1503,6 +1540,7 @@ func main() { mention := func() { entry.SetText(fmt.Sprintf("%s %s", entry.Text, nickname)) } + if err != nil { fmt.Println("ERROR: " + err.Error()) box.Add(container.NewHBox(widget.NewLabel(nickname), widget.NewButton("Mention", mention))) @@ -1513,6 +1551,7 @@ func main() { imageWidget.Refresh() nickLabel := widget.NewLabel(nickname) nickLabel.Selectable = true + nickLabel.Truncation = fyne.TextTruncateClip box.Add(container.NewHBox(imageWidget, nickLabel)) if p.Status != "" {