compact mode

This commit is contained in:
2026-05-09 09:00:44 +01:00
parent 39cdd5e6c1
commit 1aa14f9fd5
2 changed files with 140 additions and 117 deletions
+139 -117
View File
@@ -17,6 +17,7 @@ import (
"path/filepath"
"runtime"
"strings"
xmpp_color "mellium.im/xmpp/color"
)
func generatePresenceWidget(p stanza.Packet) gtk.Widgetter {
@@ -84,7 +85,13 @@ func generateMessageWidget(p stanza.Packet) gtk.Widgetter {
sid := StanzaID{}
m.Get(&sid)
mainBox := gtk.NewBox(gtk.OrientationVertical, 10)
padding := 10
orientation := gtk.OrientationVertical
if loadedConfig.CompactMode {
padding = 5
orientation = gtk.OrientationHorizontal
}
mainBox := gtk.NewBox(orientation, padding)
gesture := gtk.NewGestureClick()
gesture.SetButton(3) // Right click
@@ -141,143 +148,158 @@ func generateMessageWidget(p stanza.Packet) gtk.Widgetter {
ocu := OccupantID{}
m.Get(&ocu)
//id := ocu.ID
// if id == "" {
id := JidMustParse(m.From).Resource
// }
authorBox := gtk.NewBox(gtk.OrientationHorizontal, 10)
if loadedConfig.CompactMode {
al := gtk.NewLabel(id)
ycbcr := xmpp_color.String(id, 255, loadedConfig.CVD)
r, g, b, _ := ycbcr.RGBA()
hexcolor := fmt.Sprintf("#%02x%02x%02x", r, g, b)
contentBox := gtk.NewBox(gtk.OrientationHorizontal, 0)
// im := newImageFromPath("debug.png")
al.SetMarkup(fmt.Sprintf("<span foreground='%s'>%s</span>", hexcolor, id))
al.SetSelectable(true)
al.SetVAlign(gtk.AlignStart)
mainBox.Append(al)
// authorBox.Append(im)
mlabel := gtk.NewLabel(m.Body)
n := JidMustParse(m.From).Resource
if n == "" {
n = JidMustParse(m.From).Resource
}
al := gtk.NewLabel(n)
al.AddCSSClass("author")
al.SetSelectable(true)
if m.Body == "" {
mlabel.SetText(loadedLocale["noBodySet"])
mlabel.AddCSSClass("visitor")
}
mlabel.SetWrap(true)
mlabel.SetSelectable(true)
// mlabel.SetHAlign(gtk.AlignFill)
mainBox.Append(mlabel)
} else {
authorBox := gtk.NewBox(gtk.OrientationHorizontal, 10)
contentBox := gtk.NewBox(gtk.OrientationHorizontal, 0)
n := JidMustParse(m.From).Resource
if n == "" {
n = JidMustParse(m.From).Resource
}
al := gtk.NewLabel(n)
al.AddCSSClass("author")
al.SetSelectable(true)
if m.Type == stanza.MessageTypeGroupchat {
mo, _ := mucmembers.Load(JidMustParse(m.From).Bare())
mm := mo.(mucUnit)
mmm := mm.Members
mmmm, ok := mmm.Load(id)
if ok {
pres := mmmm.(stanza.Presence)
var vu VCardUpdate
pres.Get(&vu)
im := createIdenticon(m.From, false)
im.SetPixelSize(40)
im.AddCSSClass("author_img")
authorBox.Append(im)
if vu.Photo != "" {
go func() {
new_im := getAvatar(m.From, vu.Photo)
glib.IdleAdd(func() {
new_im.SetPixelSize(40)
new_im.AddCSSClass("author_img")
authorBox.Remove(im)
authorBox.Prepend(new_im)
})
}()
if m.Type == stanza.MessageTypeGroupchat {
mo, _ := mucmembers.Load(JidMustParse(m.From).Bare())
mm := mo.(mucUnit)
mmm := mm.Members
mmmm, ok := mmm.Load(id)
if ok {
pres := mmmm.(stanza.Presence)
var vu VCardUpdate
pres.Get(&vu)
im := createIdenticon(m.From, false)
im.SetPixelSize(40)
im.AddCSSClass("author_img")
authorBox.Append(im)
if vu.Photo != "" {
go func() {
new_im := getAvatar(m.From, vu.Photo)
glib.IdleAdd(func() {
new_im.SetPixelSize(40)
new_im.AddCSSClass("author_img")
authorBox.Remove(im)
authorBox.Prepend(new_im)
})
}()
}
} else {
im := createIdenticon(m.From, false)
im.SetPixelSize(40)
im.AddCSSClass("author_img")
authorBox.Append(im)
}
} else if m.Type == stanza.MessageTypeChat {
al.SetText(al.Text() + loadedLocale["whispers"])
}
} else {
im := createIdenticon(m.From, false)
im.SetPixelSize(40)
im.AddCSSClass("author_img")
authorBox.Append(al)
if m.Thread != "" {
im := createIdenticon(m.Thread, true)
im.SetPixelSize(10)
authorBox.Append(im)
}
} else if m.Type == stanza.MessageTypeChat {
al.SetText(al.Text() + loadedLocale["whispers"])
}
authorBox.Append(al)
if m.Thread != "" {
im := createIdenticon(m.Thread, true)
im.SetPixelSize(10)
authorBox.Append(im)
}
wxdc := XDCEl{}
ok = m.Get(&wxdc)
if ok {
authorBox.Append(gtk.NewLabel("🎮"))
}
mlabel := gtk.NewLabel(m.Body)
if m.Body == "" {
mlabel.SetText(loadedLocale["noBodySet"])
mlabel.AddCSSClass("visitor")
}
mlabel.SetWrap(true)
mlabel.SetSelectable(true)
mlabel.SetHAlign(gtk.AlignFill)
/*
mum := MucUser{}
ok = m.Get(&mum)
wxdc := XDCEl{}
ok = m.Get(&wxdc)
if ok {
mlabel.SetText(fmt.Sprintf("%s%s%s", mum.MucUserItem.JID, loadedLocale["affilChange"], mum.MucUserItem.Affiliation))
authorBox.Append(gtk.NewLabel("🎮"))
}
*/
contentBox.Append(mlabel)
mlabel := gtk.NewLabel(m.Body)
if m.Body == "" {
mlabel.SetText(loadedLocale["noBodySet"])
mlabel.AddCSSClass("visitor")
}
mlabel.SetWrap(true)
mlabel.SetSelectable(true)
mlabel.SetHAlign(gtk.AlignFill)
mainBox.Append(authorBox)
mainBox.Append(contentBox)
/*
mum := MucUser{}
ok = m.Get(&mum)
if ok {
mlabel.SetText(fmt.Sprintf("%s%s%s", mum.MucUserItem.JID, loadedLocale["affilChange"], mum.MucUserItem.Affiliation))
}
*/
oob := stanza.OOB{}
ok = m.Get(&oob)
if ok {
// media := newPictureFromWeb(oob.URL)
// media.SetCanShrink(false)
// mainBox.Append(media)
// media.AddCSSClass("chat_image")
mbtn := gtk.NewButtonWithLabel("🖼️")
// mbtn.SetChild(newImageFromWeb(oob.URL))
mbtn.ConnectClicked(func() {
gopen.Open(oob.URL)
})
authorBox.Append(mbtn)
}
contentBox.Append(mlabel)
if m.Subject != "" {
subjectlabel := gtk.NewLabel(m.Subject)
subjectlabel.SetWrap(true)
subjectlabel.SetSelectable(true)
subjectlabel.SetHAlign(gtk.AlignFill)
subjectlabel.AddCSSClass("subject")
mainBox.Append(subjectlabel)
}
mainBox.Append(authorBox)
mainBox.Append(contentBox)
link_preview := LinkPreview{}
ok = m.Get(&link_preview)
if ok {
lp_box := gtk.NewBox(gtk.OrientationVertical, 10)
lp_box.AddCSSClass("link_preview")
lp_title := gtk.NewLabel(link_preview.Title)
lp_title.SetSelectable(true)
lp_title.SetWrap(true)
lp_title.SetHAlign(gtk.AlignFill)
lp_desc := gtk.NewLabel(link_preview.URL + "\n" + link_preview.Description)
lp_desc.SetSelectable(true)
lp_desc.SetWrap(true)
lp_desc.SetHAlign(gtk.AlignFill)
oob := stanza.OOB{}
ok = m.Get(&oob)
if ok {
// media := newPictureFromWeb(oob.URL)
// media.SetCanShrink(false)
// mainBox.Append(media)
// media.AddCSSClass("chat_image")
mbtn := gtk.NewButtonWithLabel("🖼️")
// mbtn.SetChild(newImageFromWeb(oob.URL))
mbtn.ConnectClicked(func() {
gopen.Open(oob.URL)
})
authorBox.Append(mbtn)
}
lp_box.Append(lp_title)
lp_box.Append(lp_desc)
if m.Subject != "" {
subjectlabel := gtk.NewLabel(m.Subject)
subjectlabel.SetWrap(true)
subjectlabel.SetSelectable(true)
subjectlabel.SetHAlign(gtk.AlignFill)
subjectlabel.AddCSSClass("subject")
mainBox.Append(subjectlabel)
}
warning := gtk.NewLabel("⚠️")
warning.SetTooltipText(loadedLocale["linkPreviewWarning"])
lp_box.Append(warning)
link_preview := LinkPreview{}
ok = m.Get(&link_preview)
if ok {
lp_box := gtk.NewBox(gtk.OrientationVertical, 10)
lp_box.AddCSSClass("link_preview")
lp_title := gtk.NewLabel(link_preview.Title)
lp_title.SetSelectable(true)
lp_title.SetWrap(true)
lp_title.SetHAlign(gtk.AlignFill)
lp_desc := gtk.NewLabel(link_preview.URL + "\n" + link_preview.Description)
lp_desc.SetSelectable(true)
lp_desc.SetWrap(true)
lp_desc.SetHAlign(gtk.AlignFill)
mainBox.Append(lp_box)
lp_box.Append(lp_title)
lp_box.Append(lp_desc)
warning := gtk.NewLabel("⚠️")
warning.SetTooltipText(loadedLocale["linkPreviewWarning"])
lp_box.Append(warning)
mainBox.Append(lp_box)
}
}
return mainBox
+1
View File
@@ -25,6 +25,7 @@ type lambdaConfig struct {
Identicons bool
Debug bool
ShowPresenceUpdates bool
CompactMode bool
}
type mucUnit struct {