From c260b8b231399309df9a544353c00b41d16ecf26 Mon Sep 17 00:00:00 2001 From: sunglocto Date: Tue, 3 Feb 2026 10:07:33 +0000 Subject: [PATCH] add more support for other message types --- assets/cancel.png | Bin 0 -> 607 bytes gtk-helpers.go | 7 +++++-- gtk-message.go | 22 +++++++++++++++++++++- main.go | 12 ++++++++++++ 4 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 assets/cancel.png diff --git a/assets/cancel.png b/assets/cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..ef96f89202d733e2936e0e4219596fb8361d623c GIT binary patch literal 607 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!to)I41rLo80$PQL3ck|=WQ z{5!MFwGWPOQ3;t86)8DwLTtzm&!2oeuUy3s&gu{-5fyqNFYwOyLN3eQH@VaAerG?y z6*b|~k+2sbOMJ_2uIp=j{?=yqX3I6n`g2x4ET8v$&S##$A9Y$Q6^)h#Z8;zPZo!l( zJ4>{lEw*>L)_;3Syu8Zq-wdkB50*513$lKCf38CJqEij^y{TMJ(+?j!_V@C=>)9vY zJl}U$tzr6Zp_@~s&)z$BcXH$HT(NsHs@V%$v$iednem+a*ZI|wd*@|;xBEIN_?4n_ zg7XyF0|yt|oiz^My58tulJ?W3jh$?oH`i)Xq@0EC-zc}|@dtMOJ>Zz}N^PWCb zW!qy}=r;YF{1=vOOS66-InCMKNi%;DT!cj{YW zwI6yhFV8UP5!h?It+y3y+=IE@nSZS(CtO!pKV!)onO0u`e-)jo=dZS9a|eUmT+>j} z>akz_(~?Hrsf)6``aS(Yumh@%^e= z964uQzc=Kxf86r;UC&JC+X36Y#W32lZThP}&ye5va9PMt{gr#2GPj-i`GtXjfx*+& K&t;ucLK6VYnJa4m literal 0 HcmV?d00001 diff --git a/gtk-helpers.go b/gtk-helpers.go index 232b90f..984ef0b 100644 --- a/gtk-helpers.go +++ b/gtk-helpers.go @@ -196,8 +196,11 @@ func switchToTab(jid string, w *gtk.Window) { win.Present() }) userbox.AddController(gesture) - - gen.Append(userbox) + if mu.MucUserItem.Role == "moderator" { + gen.Prepend(userbox) + } else { + gen.Append(userbox) + } return true }) diff --git a/gtk-message.go b/gtk-message.go index 1293129..94bf417 100644 --- a/gtk-message.go +++ b/gtk-message.go @@ -49,7 +49,27 @@ func generateMessageWidget(p stanza.Packet) gtk.Widgetter { readmarker := Marker{} ok = m.Get(&readmarker) if ok { - return gtk.NewLabel(fmt.Sprintf("%s has read to this point", JidMustParse(m.From).Resource)) + b := gtk.NewBox(gtk.OrientationHorizontal, 0) + b.Append(gtk.NewLabel(fmt.Sprintf("%s has read to this point", JidMustParse(m.From).Resource))) + return b + } + + indicator := stanza.StateComposing{} + ok = m.Get(&indicator) + if ok { // TODO: Display typing indicator in a stat bar or something similar + b := gtk.NewBox(gtk.OrientationHorizontal, 0) + b.Append(gtk.NewLabel(fmt.Sprintf("%s is typing...", JidMustParse(m.From).Resource))) + return b + } + + if m.Error.Type != "" { + error_box := gtk.NewBox(gtk.OrientationHorizontal, 0) + cancel_img := gtk.NewImageFromPaintable(clientAssets["cancel"]) + error_label := gtk.NewLabel(m.Error.Text) + + error_box.Append(cancel_img) + error_box.Append(error_label) + return error_box } diff --git a/main.go b/main.go index 3628574..e4b3df6 100644 --- a/main.go +++ b/main.go @@ -81,6 +81,9 @@ var noneMedalB64 string = base64.StdEncoding.EncodeToString(noneMedalBytes) 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) var clientAssets map[string]gdk.Paintabler = make(map[string]gdk.Paintabler) @@ -113,6 +116,14 @@ func init() { loader = gdkpixbuf.NewPixbufLoader() + cancelData, _ := base64.StdEncoding.DecodeString(cancelB64) + loader.Write(cancelData) + loader.Close() + + clientAssets["cancel"] = gdk.NewTextureForPixbuf(loader.Pixbuf()) + + loader = gdkpixbuf.NewPixbufLoader() + adminMedalData, _ := base64.StdEncoding.DecodeString(adminMedalB64) loader.Write(adminMedalData) loader.Close() @@ -364,6 +375,7 @@ func main() { userdevices.Store(user, typed_unit) } + time.Sleep(1 * time.Second) }) c, err := xmpp.NewClient(&config, router, func(err error) {