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)
}
})