diff --git a/go.mod b/go.mod index e4199d5..d24510f 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.24.6 require ( fyne.io/fyne/v2 v2.6.3 fyne.io/x/fyne v0.0.0-20250827163406-39fd826f385e + 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 mellium.im/xmpp v0.22.0 diff --git a/go.sum b/go.sum index f869b39..99195c5 100644 --- a/go.sum +++ b/go.sum @@ -8,6 +8,7 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g= @@ -49,6 +50,8 @@ github.com/jsummers/gobmp v0.0.0-20230614200233-a9de23ed2e25 h1:YLvr1eE6cdCqjOe9 github.com/jsummers/gobmp v0.0.0-20230614200233-a9de23ed2e25/go.mod h1:kLgvv7o6UM+0QSf0QjAse3wReFDsb9qbZJdfexWlrQw= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/makeworld-the-better-one/go-isemoji v1.3.0 h1:vrxfd0W0Xs8t7BnIYXkvSK7m+GDk/0x1ClXPbWjQ5A0= +github.com/makeworld-the-better-one/go-isemoji v1.3.0/go.mod h1:FBjkPl9rr0G4vlZCc+Mr+QcnOfGCTbGWYW8/1sp06I0= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= github.com/nicksnyder/go-i18n/v2 v2.5.1 h1:IxtPxYsR9Gp60cGXjfuR/llTqV8aYMsC472zD0D1vHk= @@ -71,6 +74,8 @@ github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c h1:km8GpoQut05eY3GiY github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c/go.mod h1:cNQ3dwVJtS5Hmnjxy6AgTPd0Inb3pW05ftPSX7NZO7Q= github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef h1:Ch6Q+AZUxDBCVqdkI8FSpFyZDtCVBc2VmejdNrm5rRQ= github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef/go.mod h1:nXTWP6+gD5+LUJ8krVhhoeHjvHTutPxMYl5SvkcnJNE= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +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/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= @@ -96,6 +101,8 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 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= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= mellium.im/reader v0.1.0 h1:UUEMev16gdvaxxZC7fC08j7IzuDKh310nB6BlwnxTww= diff --git a/main.go b/main.go index f7aa54d..e346511 100644 --- a/main.go +++ b/main.go @@ -3,6 +3,7 @@ package main import ( //core - required "encoding/xml" + "errors" "fmt" _ "image/color" "io" @@ -23,8 +24,8 @@ import ( "fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/widget" extraWidgets "fyne.io/x/fyne/widget" + "github.com/makeworld-the-better-one/go-isemoji" "github.com/rrivera/identicon" - "github.com/shreve/musicwand/pkg/mpris" // xmpp - required @@ -261,6 +262,12 @@ func CreateUITab(chatJidStr string) ChatTabUI { } sl := strings.Split(msgContent, " ") + + if len(sl) == 1 && isemoji.IsEmoji(sl[0]) { + content.SizeName = fyne.ThemeSizeName(theme.SizeNameHeadingText) + content.Refresh() + } + if sl[0] == "/me" { author.SetText(author.Text + " " + strings.Join(sl[1:], " ")) content.SetText(" ") @@ -975,64 +982,64 @@ func main() { }) /* - servDisc := fyne.NewMenuItem("Disco features", func() { - //var search jid.JID - dialog.ShowEntryDialog("Disco features", "JID: ", func(s string) { // TODO: replace with undeprecated widgetd - d := dialog.NewCustom("Please wait", "Close", widget.NewLabel("..."), w) - d.Show() - go func() { - //search, err = jid.Parse(s) - //if err != nil { - // d.Hide() - // dialog.ShowError(err, w) - // return - //} - txt := ` - - ` - var stan stanza.IQ - xml.Unmarshal([]byte(txt), &stan) - if err != nil { - 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) + servDisc := fyne.NewMenuItem("Disco features", func() { + //var search jid.JID + dialog.ShowEntryDialog("Disco features", "JID: ", func(s string) { // TODO: replace with undeprecated widgetd + d := dialog.NewCustom("Please wait", "Close", widget.NewLabel("..."), w) + d.Show() + go func() { + //search, err = jid.Parse(s) + //if err != nil { + // d.Hide() + // dialog.ShowError(err, w) + // return + //} + txt := ` + + ` + var stan stanza.IQ + xml.Unmarshal([]byte(txt), &stan) if err != nil { d.Hide() dialog.ShowError(err, w) return } - m := info.Identity - bytes, err := xml.MarshalIndent(m, "", "\t") + r, err := client.Session.EncodeIQ(client.Ctx, stan) 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) - }() + ra, _ := r.Token() + t, _ := xml.MarshalIndent(ra, "", "\t") + 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() { @@ -1048,7 +1055,8 @@ func main() { os.Create("test.xml") os.WriteFile("text.xml", b, os.ModeAppend) }) - menu_help := fyne.NewMenu("π", mit, reconnect, savedata, fyne.NewMenuItem("Join rooms in bookmarks", func() { + + jbookmarks := fyne.NewMenuItem("Join rooms in bookmarks", func() { // FIXME: Race condition client.FetchBookmarks() rooms := client.BookmarkCache() @@ -1070,9 +1078,11 @@ func main() { } }() } - })) + }) - menu_changeroom := fyne.NewMenu("Α", mic, beginADM, joinARoom, leaveRoom) + menu_help := fyne.NewMenu("π", mit, reconnect, savedata) + + menu_changeroom := fyne.NewMenu("Α", mic, beginADM, joinARoom, leaveRoom, jbookmarks) menu_configureview := fyne.NewMenu("Β", mia, mis, jtt, jtb) hafjag := fyne.NewMenuItem("Hafjag", func() { entry.Text = "Hafjag" @@ -1118,16 +1128,29 @@ func main() { } present := false for _, player := range client.Players() { + fmt.Println(player.RawMetadata()) old := entry.Text - entry.SetText(fmt.Sprintf("I'm currently listening to \"%v\" by %v", player.RawMetadata()["xesam:title"].Value(), player.RawMetadata()["xesam:artist"])) + newtext := "" + title, t_ok := player.RawMetadata()["xesam:title"] + artist, a_ok := player.RawMetadata()["xesam:artist"] + if t_ok && a_ok { + newtext = fmt.Sprintf("I'm currently listening to %s by %s", title.String(), artist.String()) + } else if t_ok { + newtext = fmt.Sprintf("I'm currently listening to %s", title.String()) + } else if a_ok { + newtext = fmt.Sprintf("I'm currently listening to a song by %s", artist.String()) + } else { + dialog.ShowError(errors.New("error: There's a playing song, but we could not get the artist or title information."), w) + return + } + entry.SetText(newtext) SendCallback() entry.SetText(old) present = true - break } if !present { - dialog.ShowInformation("Failed", "Could not find any players. You might need an MPRIS plugin for players such as mpv.\nSee the MPRIS ArchWiki article for more information:\nhttps://wiki.archlinux.org/title/MPRIS\nMPRIS is not supported on Windows or MacOS.",w) + dialog.ShowInformation("Failed", "Could not find any open players. You might need an MPRIS plugin for players such as mpv.\nSee the MPRIS ArchWiki article for more information:\nhttps://wiki.archlinux.org/title/MPRIS", w) } })