diff --git a/assets/connect.png b/assets/connect.png new file mode 100644 index 0000000..024138e Binary files /dev/null and b/assets/connect.png differ diff --git a/assets/hourglass.png b/assets/hourglass.png new file mode 100644 index 0000000..57b03ce Binary files /dev/null and b/assets/hourglass.png differ diff --git a/assets/ok.png b/assets/ok.png new file mode 100644 index 0000000..895bad7 Binary files /dev/null and b/assets/ok.png differ diff --git a/main.go b/main.go index e6f5f2c..c1d10d7 100644 --- a/main.go +++ b/main.go @@ -7,7 +7,6 @@ import ( "context" "fmt" "github.com/diamondburned/gotk4/pkg/gdk/v4" - "github.com/diamondburned/gotk4/pkg/gdkpixbuf/v2" "github.com/diamondburned/gotk4/pkg/gio/v2" "github.com/diamondburned/gotk4/pkg/glib/v2" "github.com/diamondburned/gotk4/pkg/gtk/v4" @@ -21,7 +20,6 @@ import ( "time" _ "embed" - "encoding/base64" "encoding/xml" "github.com/kr/pretty" "math/rand/v2" @@ -33,6 +31,7 @@ var loadedConfig lambdaConfig var empty_dialog *gtk.Image var connectionStatus *gtk.Label +var connectionIcon *gtk.Image var pingStatus *gtk.Label // var msgs *gtk.ListBox @@ -61,72 +60,8 @@ var mucmembers sync.Map // stores devices of users var userdevices sync.Map -//go:embed debug.png -var defaultAvatarBytes []byte -var defaultAvatarB64 string = base64.StdEncoding.EncodeToString(defaultAvatarBytes) - -//go:embed assets/owner.png -var ownerMedalBytes []byte -var ownerMedalB64 string = base64.StdEncoding.EncodeToString(ownerMedalBytes) - -//go:embed assets/admin.png -var adminMedalBytes []byte -var adminMedalB64 string = base64.StdEncoding.EncodeToString(adminMedalBytes) - -//go:embed assets/member.png -var memberMedalBytes []byte -var memberMedalB64 string = base64.StdEncoding.EncodeToString(memberMedalBytes) - -//go:embed assets/noaffiliation.png -var noneMedalBytes []byte -var noneMedalB64 string = base64.StdEncoding.EncodeToString(noneMedalBytes) - -//go:embed assets/outcast.png -var outcastMedalBytes []byte -var outcastMedalB64 string = base64.StdEncoding.EncodeToString(outcastMedalBytes) - -//go:embed assets/cancel.png -var cancelBytes []byte -var cancelB64 string = base64.StdEncoding.EncodeToString(cancelBytes) - -//go:embed assets/tag.png -var tagBytes []byte -var tagB64 string = base64.StdEncoding.EncodeToString(tagBytes) - -//go:embed assets/lambda-disabled.png -var logoDisabledBytes []byte -var logoDisabledB64 string = base64.StdEncoding.EncodeToString(logoDisabledBytes) - -//go:embed assets/group.png -var groupBytes []byte -var groupB64 string = base64.StdEncoding.EncodeToString(groupBytes) - -//go:embed assets/door_in.png -var doorInBytes []byte -var doorInB64 string = base64.StdEncoding.EncodeToString(doorInBytes) - -//go:embed assets/door_out.png -var doorOutBytes []byte -var doorOutB64 string = base64.StdEncoding.EncodeToString(doorOutBytes) - -//go:embed assets/large_group.png -var largeGroupBytes []byte -var largeGroupB64 string = base64.StdEncoding.EncodeToString(largeGroupBytes) - -//go:embed assets/world.png -var worldBytes []byte -var worldB64 string = base64.StdEncoding.EncodeToString(worldBytes) - -//go:embed assets/disconnect.png -var disconnectBytes []byte -var disconnectB64 string = base64.StdEncoding.EncodeToString(disconnectBytes) - -//go:embed assets/chart_bar.png -var barBytes []byte -var barB64 string = base64.StdEncoding.EncodeToString(barBytes) var clientAssets map[string]gdk.Paintabler = make(map[string]gdk.Paintabler) -var lockedJIDs map[string]bool = make(map[string]bool) func init() { beeep.AppName = "Lambda" @@ -141,132 +76,6 @@ func init() { } }() - loader := gdkpixbuf.NewPixbufLoader() - - defaultAvatarData, _ := base64.StdEncoding.DecodeString(defaultAvatarB64) - loader.Write(defaultAvatarData) - loader.Close() - clientAssets["DefaultAvatar"] = gdk.NewTextureForPixbuf(loader.Pixbuf()) - - loader = gdkpixbuf.NewPixbufLoader() - - ownerMedalData, _ := base64.StdEncoding.DecodeString(ownerMedalB64) - loader.Write(ownerMedalData) - loader.Close() - - clientAssets["owner"] = gdk.NewTextureForPixbuf(loader.Pixbuf()) - - loader = gdkpixbuf.NewPixbufLoader() - - cancelData, _ := base64.StdEncoding.DecodeString(cancelB64) - loader.Write(cancelData) - loader.Close() - - clientAssets["cancel"] = gdk.NewTextureForPixbuf(loader.Pixbuf()) - - loader = gdkpixbuf.NewPixbufLoader() - - tagData, _ := base64.StdEncoding.DecodeString(tagB64) - loader.Write(tagData) - loader.Close() - - clientAssets["tag"] = gdk.NewTextureForPixbuf(loader.Pixbuf()) - - loader = gdkpixbuf.NewPixbufLoader() - - adminMedalData, _ := base64.StdEncoding.DecodeString(adminMedalB64) - loader.Write(adminMedalData) - loader.Close() - - clientAssets["admin"] = gdk.NewTextureForPixbuf(loader.Pixbuf()) - - loader = gdkpixbuf.NewPixbufLoader() - - memberMedalData, _ := base64.StdEncoding.DecodeString(memberMedalB64) - loader.Write(memberMedalData) - loader.Close() - - clientAssets["member"] = gdk.NewTextureForPixbuf(loader.Pixbuf()) - - loader = gdkpixbuf.NewPixbufLoader() - - noneMedalData, _ := base64.StdEncoding.DecodeString(noneMedalB64) - loader.Write(noneMedalData) - loader.Close() - - clientAssets["none"] = gdk.NewTextureForPixbuf(loader.Pixbuf()) - - loader = gdkpixbuf.NewPixbufLoader() - - outcastMedalData, _ := base64.StdEncoding.DecodeString(outcastMedalB64) - loader.Write(outcastMedalData) - loader.Close() - - clientAssets["outcast"] = gdk.NewTextureForPixbuf(loader.Pixbuf()) - - loader = gdkpixbuf.NewPixbufLoader() - - disabledLogoData, _ := base64.StdEncoding.DecodeString(logoDisabledB64) - loader.Write(disabledLogoData) - loader.Close() - - clientAssets["disabled_logo"] = gdk.NewTextureForPixbuf(loader.Pixbuf()) - - loader = gdkpixbuf.NewPixbufLoader() - - groupData, _ := base64.StdEncoding.DecodeString(groupB64) - loader.Write(groupData) - loader.Close() - - clientAssets["group"] = gdk.NewTextureForPixbuf(loader.Pixbuf()) - - loader = gdkpixbuf.NewPixbufLoader() - - doorInData, _ := base64.StdEncoding.DecodeString(doorInB64) - loader.Write(doorInData) - loader.Close() - - clientAssets["door_in"] = gdk.NewTextureForPixbuf(loader.Pixbuf()) - - loader = gdkpixbuf.NewPixbufLoader() - - doorOutData, _ := base64.StdEncoding.DecodeString(doorOutB64) - loader.Write(doorOutData) - loader.Close() - - clientAssets["door_out"] = gdk.NewTextureForPixbuf(loader.Pixbuf()) - - loader = gdkpixbuf.NewPixbufLoader() - - largeGroupData, _ := base64.StdEncoding.DecodeString(largeGroupB64) - loader.Write(largeGroupData) - loader.Close() - - clientAssets["large_group"] = gdk.NewTextureForPixbuf(loader.Pixbuf()) - - loader = gdkpixbuf.NewPixbufLoader() - - worldData, _ := base64.StdEncoding.DecodeString(worldB64) - loader.Write(worldData) - loader.Close() - - clientAssets["world"] = gdk.NewTextureForPixbuf(loader.Pixbuf()) - - loader = gdkpixbuf.NewPixbufLoader() - - disconnectData, _ := base64.StdEncoding.DecodeString(disconnectB64) - loader.Write(disconnectData) - loader.Close() - - clientAssets["disconnect"] = gdk.NewTextureForPixbuf(loader.Pixbuf()) - - loader = gdkpixbuf.NewPixbufLoader() - - barData, _ := base64.StdEncoding.DecodeString(barB64) - loader.Write(barData) - loader.Close() - - clientAssets["chart_bar"] = gdk.NewTextureForPixbuf(loader.Pixbuf()) } func main() { @@ -492,7 +301,7 @@ func main() { _, mok := mucmembers.Load(user) if !ok && !mok { // FIXME: The initial muc presence gets picked up from this check ok := createTab(user, false) - if ok && !lockedJIDs[user] { + if ok { userdevices.Store(user, userUnit{}) b := gtk.NewButtonWithLabel(user) @@ -520,7 +329,6 @@ func main() { } userdevices.Store(user, typed_unit) - lockedJIDs[user] = true } time.Sleep(1 * time.Second) }) @@ -561,6 +369,7 @@ func main() { } }() connectionStatus.SetText(fmt.Sprintf("Connected as %s", JidMustParse(clientroot.Session.BindJid).Bare())) + connectionIcon.SetFromPaintable(clientAssets["connect"]) // Join rooms in bookmarks if loadedConfig.JoinBookmarks { books, err := stanza.NewItemsRequest("", "urn:xmpp:bookmarks:1", 0) @@ -614,6 +423,8 @@ func main() { go func() { time.Sleep(3 * time.Second) connectionStatus.SetText("Connecting...") + connectionIcon.SetFromPaintable(clientAssets["hourglass"]) + err = cm.Run() if err != nil { fmt.Println(err.Error()) @@ -832,9 +643,12 @@ func activate(app *gtk.Application) { statBar := gtk.NewBox(gtk.OrientationHorizontal, 0) cBox := gtk.NewBox(gtk.OrientationHorizontal, 0) - cBox.Append(gtk.NewImageFromPaintable(clientAssets["disconnect"])) + connectionIcon = gtk.NewImageFromPaintable((clientAssets["disconnect"])) connectionStatus = gtk.NewLabel("Disconnected") + + cBox.Append(connectionIcon) cBox.Append(connectionStatus) + statBar.Append(cBox) pBox := gtk.NewBox(gtk.OrientationHorizontal, 0)