diff --git a/go.mod b/go.mod index 48c6905..b0cac3a 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( fyne.io/x/fyne v0.0.0-20250418202416-58a230ad1acb github.com/rrivera/identicon v0.0.0-20240116195454-d5ba35832c0d mellium.im/xmpp v0.22.0 - pain.agency/oasis-sdk v0.0.0-20250805052243-df6be3f9f629 + pain.agency/oasis-sdk v0.0.0-20250805092722-ede7355bc2e8 ) require ( @@ -37,14 +37,14 @@ require ( github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef // indirect github.com/stretchr/testify v1.10.0 // indirect github.com/yuin/goldmark v1.7.13 // indirect - golang.org/x/crypto v0.40.0 // indirect - golang.org/x/image v0.29.0 // indirect - golang.org/x/mod v0.26.0 // indirect - golang.org/x/net v0.42.0 // indirect + golang.org/x/crypto v0.41.0 // indirect + golang.org/x/image v0.30.0 // indirect + golang.org/x/mod v0.27.0 // indirect + golang.org/x/net v0.43.0 // indirect golang.org/x/sync v0.16.0 // indirect - golang.org/x/sys v0.34.0 // indirect - golang.org/x/text v0.27.0 // indirect - golang.org/x/tools v0.35.0 // indirect + golang.org/x/sys v0.35.0 // indirect + golang.org/x/text v0.28.0 // indirect + golang.org/x/tools v0.36.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect mellium.im/reader v0.1.0 // indirect mellium.im/sasl v0.3.2 // indirect diff --git a/go.sum b/go.sum index f668a2a..a0196b2 100644 --- a/go.sum +++ b/go.sum @@ -72,20 +72,34 @@ github.com/yuin/goldmark v1.7.13 h1:GPddIs617DnBLFFVJFgpo1aBfe/4xcvMc3SB5t/D0pA= github.com/yuin/goldmark v1.7.13/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM= golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= +golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= +golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= golang.org/x/image v0.29.0 h1:HcdsyR4Gsuys/Axh0rDEmlBmB68rW1U9BUdB3UVHsas= golang.org/x/image v0.29.0/go.mod h1:RVJROnf3SLK8d26OW91j4FrIHGbsJ8QnbEocVTOWQDA= +golang.org/x/image v0.30.0 h1:jD5RhkmVAnjqaCUXfbGBrn3lpxbknfN9w2UhHHU+5B4= +golang.org/x/image v0.30.0/go.mod h1:SAEUTxCCMWSrJcCy/4HwavEsfZZJlYxeHLc6tTiAe/c= golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= +golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ= +golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4= golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= +golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg= +golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -101,3 +115,5 @@ 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-20250805052243-df6be3f9f629 h1:NE+Z2HQzc77nw7l7DsSDSi0x9l+YfLfXBYerK+GsPrQ= pain.agency/oasis-sdk v0.0.0-20250805052243-df6be3f9f629/go.mod h1:eyvDgfpHo+9bdB/AkMEMZ3ETeoSONTULVx9X4w9kGAU= +pain.agency/oasis-sdk v0.0.0-20250805092722-ede7355bc2e8 h1:veXelXiQdENbezz06+mpbvmq5FvZibCISuKh14D77iw= +pain.agency/oasis-sdk v0.0.0-20250805092722-ede7355bc2e8/go.mod h1:eyvDgfpHo+9bdB/AkMEMZ3ETeoSONTULVx9X4w9kGAU= diff --git a/main.go b/main.go index f9bd55b..5772b6d 100644 --- a/main.go +++ b/main.go @@ -7,6 +7,7 @@ import ( "image/color" "io" "log" + "math/rand/v2" "net/url" "os" "strings" @@ -24,6 +25,7 @@ import ( "github.com/rrivera/identicon" // xmpp - required + "mellium.im/xmpp/bookmarks" "mellium.im/xmpp/disco" "mellium.im/xmpp/jid" "mellium.im/xmpp/muc" @@ -198,8 +200,7 @@ func CreateUITab(chatJidStr string) ChatTabUI { author.SetText(chatTabs[chatJidStr].Messages[i].Author) } - - if strings.Split(msgContent," ")[0] == "/me" { + if strings.Split(msgContent, " ")[0] == "/me" { sl := strings.Split(msgContent, " ") sl[0] = "" author.SetText(author.Text + strings.Join(sl, " ")) @@ -218,11 +219,11 @@ func CreateUITab(chatJidStr string) ChatTabUI { scroller.CreateItem() myUITab.Scroller = scroller - gen, _ := identicon.New("github", 50, 20) - ii, _ := gen.Draw(chatJidStr) - im := ii.Image(250) - imw := canvas.NewImageFromImage(im) - imw.FillMode = canvas.ImageFillOriginal + gen, _ := identicon.New("github", 50, 20) + ii, _ := gen.Draw(chatJidStr) + im := ii.Image(250) + imw := canvas.NewImageFromImage(im) + imw.FillMode = canvas.ImageFillOriginal myUITab.Sidebar = container.NewVBox(imw) return myUITab @@ -549,6 +550,7 @@ func main() { entry := widget.NewMultiLineEntry() entry.SetPlaceHolder("Say something, you know you want to.") + entry.Wrapping = fyne.TextWrapBreak entry.OnChanged = func(s string) { } @@ -589,7 +591,8 @@ func main() { url, uerr := url.Parse(strings.Split(text, " ")[0]) if uerr == nil && strings.HasPrefix(strings.Split(text, " ")[0], "https://") { - err = client.SendImage(jid.MustParse(activeMucJid).Bare(), text, url.String(), &text) + //err = client.SendImage(jid.MustParse(activeMucJid).Bare(), text, url.String(), &text) + err = client.SendSingleFileMessage(jid.MustParse(activeMucJid).Bare(), url.String(), nil) if err != nil { dialog.ShowError(err, w) } @@ -815,7 +818,25 @@ func main() { os.WriteFile("text.xml", b, os.ModeAppend) }) menu_help := fyne.NewMenu("π", mit, reconnect, savedata) - menu_changeroom := fyne.NewMenu("Α", mic, servDisc) + + joinroom := fyne.NewMenuItem("Join a room", func() { + go func() { + itr := bookmarks.Fetch(client.Ctx, client.Session) + t := false + for t { + m := itr.Bookmark() + if m.Autojoin && strings.Contains(m.JID.String(), "conversations-offtopic") { + a.SendNotification(fyne.NewNotification("DEBUG", "yay!")) + client.MucClient.Join(client.Ctx, m.JID, client.Session, muc.MaxHistory(0)) + } else { + a.SendNotification(fyne.NewNotification("DEBUG", "nay!")) + } + t = itr.Next() + } + }() + }) + + menu_changeroom := fyne.NewMenu("Α", mic, servDisc, joinroom) menu_configureview := fyne.NewMenu("Β", mia, mis, jtt, jtb) hafjag := fyne.NewMenuItem("Hafjag", func() { entry.Text = "Hafjag" @@ -829,11 +850,18 @@ func main() { entry.Text = "Oh Yeah." }) + agree := fyne.NewMenuItem("Agree", func() { + old := entry.Text + entry.Text = strings.Repeat("^", rand.IntN(30)) + SendCallback() + entry.Text = old + }) + mycurrenttime := fyne.NewMenuItem("Current time", func() { entry.Text = fmt.Sprintf("It is currently %s", time.Now().Format(time.RFC850)) SendCallback() }) - menu_jokes := fyne.NewMenu("Δ", mycurrenttime, hafjag, hotfuck) + menu_jokes := fyne.NewMenu("Δ", mycurrenttime, hafjag, hotfuck, agree) bit := fyne.NewMenuItem("mark selected message as read", func() { selectedScroller, ok := AppTabs.Selected().Content.(*widget.List) if !ok {