cold blows the wind over my true love, cold blows the drops of rain
This commit is contained in:
204
main.go
204
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)
|
||||
|
||||
Reference in New Issue
Block a user