cold blows the wind over my true love, cold blows the drops of rain
This commit is contained in:
BIN
assets/connect.png
Normal file
BIN
assets/connect.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 748 B |
BIN
assets/hourglass.png
Normal file
BIN
assets/hourglass.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 744 B |
BIN
assets/ok.png
Normal file
BIN
assets/ok.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 460 B |
204
main.go
204
main.go
@@ -7,7 +7,6 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/diamondburned/gotk4/pkg/gdk/v4"
|
"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/gio/v2"
|
||||||
"github.com/diamondburned/gotk4/pkg/glib/v2"
|
"github.com/diamondburned/gotk4/pkg/glib/v2"
|
||||||
"github.com/diamondburned/gotk4/pkg/gtk/v4"
|
"github.com/diamondburned/gotk4/pkg/gtk/v4"
|
||||||
@@ -21,7 +20,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
_ "embed"
|
_ "embed"
|
||||||
"encoding/base64"
|
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"github.com/kr/pretty"
|
"github.com/kr/pretty"
|
||||||
"math/rand/v2"
|
"math/rand/v2"
|
||||||
@@ -33,6 +31,7 @@ var loadedConfig lambdaConfig
|
|||||||
var empty_dialog *gtk.Image
|
var empty_dialog *gtk.Image
|
||||||
|
|
||||||
var connectionStatus *gtk.Label
|
var connectionStatus *gtk.Label
|
||||||
|
var connectionIcon *gtk.Image
|
||||||
var pingStatus *gtk.Label
|
var pingStatus *gtk.Label
|
||||||
|
|
||||||
// var msgs *gtk.ListBox
|
// var msgs *gtk.ListBox
|
||||||
@@ -61,72 +60,8 @@ var mucmembers sync.Map
|
|||||||
// stores devices of users
|
// stores devices of users
|
||||||
var userdevices sync.Map
|
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 clientAssets map[string]gdk.Paintabler = make(map[string]gdk.Paintabler)
|
||||||
var lockedJIDs map[string]bool = make(map[string]bool)
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
beeep.AppName = "Lambda"
|
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() {
|
func main() {
|
||||||
@@ -492,7 +301,7 @@ func main() {
|
|||||||
_, mok := mucmembers.Load(user)
|
_, mok := mucmembers.Load(user)
|
||||||
if !ok && !mok { // FIXME: The initial muc presence gets picked up from this check
|
if !ok && !mok { // FIXME: The initial muc presence gets picked up from this check
|
||||||
ok := createTab(user, false)
|
ok := createTab(user, false)
|
||||||
if ok && !lockedJIDs[user] {
|
if ok {
|
||||||
userdevices.Store(user, userUnit{})
|
userdevices.Store(user, userUnit{})
|
||||||
|
|
||||||
b := gtk.NewButtonWithLabel(user)
|
b := gtk.NewButtonWithLabel(user)
|
||||||
@@ -520,7 +329,6 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
userdevices.Store(user, typed_unit)
|
userdevices.Store(user, typed_unit)
|
||||||
lockedJIDs[user] = true
|
|
||||||
}
|
}
|
||||||
time.Sleep(1 * time.Second)
|
time.Sleep(1 * time.Second)
|
||||||
})
|
})
|
||||||
@@ -561,6 +369,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
connectionStatus.SetText(fmt.Sprintf("Connected as %s", JidMustParse(clientroot.Session.BindJid).Bare()))
|
connectionStatus.SetText(fmt.Sprintf("Connected as %s", JidMustParse(clientroot.Session.BindJid).Bare()))
|
||||||
|
connectionIcon.SetFromPaintable(clientAssets["connect"])
|
||||||
// Join rooms in bookmarks
|
// Join rooms in bookmarks
|
||||||
if loadedConfig.JoinBookmarks {
|
if loadedConfig.JoinBookmarks {
|
||||||
books, err := stanza.NewItemsRequest("", "urn:xmpp:bookmarks:1", 0)
|
books, err := stanza.NewItemsRequest("", "urn:xmpp:bookmarks:1", 0)
|
||||||
@@ -614,6 +423,8 @@ func main() {
|
|||||||
go func() {
|
go func() {
|
||||||
time.Sleep(3 * time.Second)
|
time.Sleep(3 * time.Second)
|
||||||
connectionStatus.SetText("Connecting...")
|
connectionStatus.SetText("Connecting...")
|
||||||
|
connectionIcon.SetFromPaintable(clientAssets["hourglass"])
|
||||||
|
|
||||||
err = cm.Run()
|
err = cm.Run()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err.Error())
|
fmt.Println(err.Error())
|
||||||
@@ -832,9 +643,12 @@ func activate(app *gtk.Application) {
|
|||||||
statBar := gtk.NewBox(gtk.OrientationHorizontal, 0)
|
statBar := gtk.NewBox(gtk.OrientationHorizontal, 0)
|
||||||
|
|
||||||
cBox := 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")
|
connectionStatus = gtk.NewLabel("Disconnected")
|
||||||
|
|
||||||
|
cBox.Append(connectionIcon)
|
||||||
cBox.Append(connectionStatus)
|
cBox.Append(connectionStatus)
|
||||||
|
|
||||||
statBar.Append(cBox)
|
statBar.Append(cBox)
|
||||||
|
|
||||||
pBox := gtk.NewBox(gtk.OrientationHorizontal, 0)
|
pBox := gtk.NewBox(gtk.OrientationHorizontal, 0)
|
||||||
|
|||||||
Reference in New Issue
Block a user