homer drops his donut, doh, homer spills his soda, doh, homer hits the doorway, doh, homer ruins his whole day, doh!
This commit is contained in:
@@ -71,6 +71,16 @@ func newImageFromPath(path string) (*gtk.Image, error) {
|
||||
return gtk.NewImageFromPaintable(tex), nil
|
||||
}
|
||||
|
||||
func setImageFromPath(path string, i *gtk.Image) (error) {
|
||||
tex, err := getTexture(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
i.SetFromPaintable(tex)
|
||||
return nil
|
||||
}
|
||||
|
||||
func newPictureFromWeb(url string) (*gtk.Picture, error) {
|
||||
pa, _ := ensureCache()
|
||||
// step 1: get a sha256 sum of the URL
|
||||
|
||||
+21
-9
@@ -208,24 +208,26 @@ func showUserWindow(u stanza.Presence, custom_nick string) {
|
||||
mm := mo.(mucUnit)
|
||||
mmm := mm.Members
|
||||
mmmm, ok := mmm.Load(id)
|
||||
|
||||
im := gtk.NewImage()
|
||||
if ok {
|
||||
pres := mmmm.(stanza.Presence)
|
||||
|
||||
var vu VCardUpdate
|
||||
pres.Get(&vu)
|
||||
if vu.Photo != "" {
|
||||
im := getAvatar(u.From, vu.Photo)
|
||||
getAvatar(u.From, vu.Photo, im)
|
||||
im.SetPixelSize(80)
|
||||
im.AddCSSClass("author_img")
|
||||
profile_box.Prepend(im)
|
||||
} else {
|
||||
im := createIdenticon(u.From, false)
|
||||
createIdenticon(u.From, false, im)
|
||||
im.SetPixelSize(80)
|
||||
im.AddCSSClass("author_img")
|
||||
profile_box.Prepend(im)
|
||||
}
|
||||
} else {
|
||||
im := createIdenticon(u.From, false)
|
||||
createIdenticon(u.From, false, im)
|
||||
im.SetPixelSize(80)
|
||||
im.AddCSSClass("author_img")
|
||||
profile_box.Prepend(im)
|
||||
@@ -457,18 +459,19 @@ func switchToTab(jid string, w *gtk.Window) {
|
||||
userbox.Append(medal)
|
||||
|
||||
if loadedConfig.ShowAvatarsInMemberList {
|
||||
default_av := createIdenticon(u.From, false)
|
||||
default_av := gtk.NewImage()
|
||||
createIdenticon(u.From, false, default_av)
|
||||
userbox.Prepend(default_av)
|
||||
var vcu VCardUpdate
|
||||
ok = u.Get(&vcu)
|
||||
if ok {
|
||||
photo := vcu.Photo
|
||||
go func() {
|
||||
new_im := getAvatar(u.From, photo)
|
||||
|
||||
glib.IdleAdd(func() {
|
||||
new_im := gtk.NewImage()
|
||||
userbox.Remove(default_av)
|
||||
userbox.Prepend(new_im)
|
||||
go getAvatar(u.From, photo, new_im)
|
||||
})
|
||||
}()
|
||||
|
||||
@@ -642,11 +645,14 @@ func switchToTab(jid string, w *gtk.Window) {
|
||||
gen.Prepend(headerBox)
|
||||
|
||||
muc_presence := typed_tab.muc_presence
|
||||
muci := gtk.NewImage()
|
||||
|
||||
createIdenticon(jid, true, muci)
|
||||
if muc_presence != nil {
|
||||
vc := &VCardUpdate{}
|
||||
ok = muc_presence.Get(vc)
|
||||
if ok {
|
||||
muci := getAvatar(jid, vc.Photo)
|
||||
getAvatar(jid, vc.Photo, muci)
|
||||
muci.SetPixelSize(80)
|
||||
gen.Prepend(muci)
|
||||
}
|
||||
@@ -683,9 +689,11 @@ func showErrorDialog(err error, w *gtk.Window) {
|
||||
err_win.Present()
|
||||
}
|
||||
|
||||
func createIdenticon(word string, always_create bool) *gtk.Image { // This function generates an identicon
|
||||
func createIdenticon(word string, always_create bool, i *gtk.Image) { // This function generates an identicon
|
||||
if !loadedConfig.Identicons && !always_create {
|
||||
return gtk.NewImageFromPaintable(clientAssetsLoad("DefaultAvatar"))
|
||||
// return gtk.NewImageFromPaintable(clientAssetsLoad("DefaultAvatar"))
|
||||
i.SetFromPaintable(clientAssetsLoad("DefaultAvatar"))
|
||||
return
|
||||
}
|
||||
|
||||
identicon.SetBackgroundColorFunction(func([]byte, color.Color) color.Color {
|
||||
@@ -707,10 +715,14 @@ func createIdenticon(word string, always_create bool) *gtk.Image { // This funct
|
||||
loader.Close()
|
||||
p := loader.Pixbuf()
|
||||
gt := gdk.NewTextureForPixbuf(p)
|
||||
/*
|
||||
i := gtk.NewImageFromPaintable(gt)
|
||||
i.AddCSSClass(loadedConfig.CVD.String() + "_CVD")
|
||||
return i
|
||||
*/
|
||||
|
||||
i.SetFromPaintable(gt)
|
||||
i.AddCSSClass(loadedConfig.CVD.String() + "_CVD")
|
||||
}
|
||||
|
||||
func jidBuilder(en *gtk.Entry) { // This function spawns a window that allows the user to interactively build a JID
|
||||
|
||||
+33
-26
@@ -7,7 +7,7 @@ import (
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"github.com/diamondburned/gotk4/pkg/gdk/v4"
|
||||
"github.com/diamondburned/gotk4/pkg/glib/v2"
|
||||
_ "github.com/diamondburned/gotk4/pkg/glib/v2"
|
||||
"github.com/diamondburned/gotk4/pkg/gtk/v4"
|
||||
"github.com/google/uuid"
|
||||
"github.com/jasonlovesdoggo/gopen"
|
||||
@@ -290,28 +290,22 @@ func generateMessageWidget(p stanza.Packet, blocked bool) (gtk.Widgetter, bool)
|
||||
if !ok {
|
||||
can_generate = false
|
||||
}
|
||||
im := gtk.NewImage()
|
||||
if can_generate {
|
||||
pres := mmmm.(stanza.Presence)
|
||||
var vu VCardUpdate
|
||||
pres.Get(&vu)
|
||||
im := createIdenticon(m.From, false)
|
||||
createIdenticon(m.From, false, im)
|
||||
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)
|
||||
})
|
||||
}()
|
||||
go getAvatar(m.From, vu.Photo, im)
|
||||
}
|
||||
|
||||
} else {
|
||||
im := createIdenticon(m.From, false)
|
||||
createIdenticon(m.From, false, im)
|
||||
im.SetPixelSize(40)
|
||||
im.AddCSSClass("author_img")
|
||||
authorBox.Append(im)
|
||||
@@ -323,7 +317,8 @@ func generateMessageWidget(p stanza.Packet, blocked bool) (gtk.Widgetter, bool)
|
||||
authorBox.Append(al)
|
||||
|
||||
if m.Thread != "" {
|
||||
im := createIdenticon(m.Thread, true)
|
||||
im := gtk.NewImage()
|
||||
createIdenticon(m.Thread, true, im)
|
||||
im.SetPixelSize(10)
|
||||
authorBox.Append(im)
|
||||
}
|
||||
@@ -437,33 +432,39 @@ func getVAdjustment(scrolledWindow *gtk.ScrolledWindow) *gtk.Adjustment {
|
||||
return val
|
||||
}
|
||||
|
||||
func getAvatar(j, hash string) *gtk.Image { // TODO: This function probably shouldn't be here, and should probably be in xmpp-helpers or somewhere similar.
|
||||
func getAvatar(j, hash string, i *gtk.Image) { // TODO: This function probably shouldn't be here, and should probably be in xmpp-helpers or somewhere similar.
|
||||
oghash := hash
|
||||
p, err := ensureCache()
|
||||
if err != nil {
|
||||
return createIdenticon(j, false)
|
||||
createIdenticon(j, false, i)
|
||||
return
|
||||
}
|
||||
|
||||
if hash == "" {
|
||||
return createIdenticon(j, false)
|
||||
createIdenticon(j, false, i)
|
||||
return
|
||||
}
|
||||
|
||||
_, ok := invalidImages.Load(hash)
|
||||
if ok {
|
||||
return createIdenticon(j, false)
|
||||
createIdenticon(j, false, i)
|
||||
return
|
||||
}
|
||||
|
||||
hash = filepath.Join(p, hash)
|
||||
|
||||
_, err = os.ReadFile(hash)
|
||||
if err == nil {
|
||||
i, err := newImageFromPath(hash)
|
||||
/*
|
||||
i, err = newImageFromPath(hash)
|
||||
if err != nil {
|
||||
invalidImages.Store(oghash, true)
|
||||
return createIdenticon(j, false)
|
||||
createIdenticon(j, false, i)
|
||||
}
|
||||
// i.AddCSSClass(loadedConfig.CVD.String() + "_CVD")
|
||||
return i
|
||||
*/
|
||||
|
||||
setImageFromPath(hash, i)
|
||||
return
|
||||
}
|
||||
|
||||
iqResp, err := stanza.NewIQ(stanza.Attrs{
|
||||
@@ -488,13 +489,15 @@ func getAvatar(j, hash string) *gtk.Image { // TODO: This function probably shou
|
||||
result := <-mychan
|
||||
card, ok := result.Payload.(*VCard)
|
||||
if !ok {
|
||||
return createIdenticon(j, false)
|
||||
createIdenticon(j, false, i)
|
||||
return
|
||||
}
|
||||
|
||||
base64_data := card.Photo.Binval
|
||||
if card.Photo.Binval == "" || ((card.Photo.Type == "image/svg+xml" || card.Photo.Type == "image/webp") && (runtime.GOOS == "windows" || runtime.GOOS == "netbsd")) {
|
||||
invalidImages.Store(oghash, true)
|
||||
return createIdenticon(j, false)
|
||||
createIdenticon(j, false, i)
|
||||
return
|
||||
}
|
||||
|
||||
data, err := base64.StdEncoding.DecodeString(base64_data)
|
||||
@@ -507,11 +510,15 @@ func getAvatar(j, hash string) *gtk.Image { // TODO: This function probably shou
|
||||
panic(err)
|
||||
}
|
||||
|
||||
i, err := newImageFromPath(hash)
|
||||
err = setImageFromPath(hash, i)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
invalidImages.Store(oghash, true)
|
||||
return createIdenticon(j, false)
|
||||
createIdenticon(j, false, i)
|
||||
}
|
||||
|
||||
fmt.Println("Everything is OK. There should be an avatar!")
|
||||
|
||||
i.AddCSSClass(loadedConfig.CVD.String() + "_CVD")
|
||||
return i
|
||||
// return i
|
||||
}
|
||||
|
||||
@@ -550,13 +550,10 @@ func main() {
|
||||
})
|
||||
|
||||
box.Append(b)
|
||||
go func() {
|
||||
new_im := getAvatar(jid, jid) // TODO: Use PEP avatar and do not use JID as hash
|
||||
glib.IdleAdd(func() {
|
||||
new_im.SetPixelSize(40)
|
||||
box.Prepend(new_im)
|
||||
})
|
||||
}()
|
||||
im := gtk.NewImage()
|
||||
im.SetPixelSize(40)
|
||||
go getAvatar(jid, jid, im)
|
||||
box.Prepend(im)
|
||||
|
||||
box.AddController(gesture1)
|
||||
menu.Append(box)
|
||||
@@ -602,7 +599,15 @@ func main() {
|
||||
box.SetVisible(false)
|
||||
})
|
||||
|
||||
im := gtk.NewImage()
|
||||
im.SetPixelSize(40)
|
||||
|
||||
box.Append(im)
|
||||
box.Append(b)
|
||||
|
||||
go getAvatar(jid, jid, im)
|
||||
/*
|
||||
|
||||
go func() {
|
||||
new_im := getAvatar(jid, jid) // TODO: Use PEP avatar and do not use JID as hash
|
||||
glib.IdleAdd(func() {
|
||||
@@ -610,6 +615,7 @@ func main() {
|
||||
box.Prepend(new_im)
|
||||
})
|
||||
}()
|
||||
*/
|
||||
|
||||
box.AddController(gesture1)
|
||||
menu.Append(box)
|
||||
@@ -690,7 +696,15 @@ func main() {
|
||||
removeTab(jid, &window.Window)
|
||||
box.SetVisible(false)
|
||||
})
|
||||
|
||||
im := gtk.NewImage()
|
||||
im.SetPixelSize(40)
|
||||
|
||||
box.Append(b)
|
||||
box.Prepend(im)
|
||||
|
||||
go getAvatar(jid, jid, im)
|
||||
/*
|
||||
go func() {
|
||||
new_im := getAvatar(jid, jid)
|
||||
glib.IdleAdd(func() {
|
||||
@@ -698,6 +712,7 @@ func main() {
|
||||
box.Prepend(new_im)
|
||||
})
|
||||
}()
|
||||
*/
|
||||
|
||||
box.AddController(gesture1)
|
||||
box.AddController(gesture2)
|
||||
@@ -990,6 +1005,11 @@ func activate(app *gtk.Application) {
|
||||
|
||||
createTab(t, true, n)
|
||||
box := gtk.NewBox(gtk.OrientationHorizontal, 10)
|
||||
im := gtk.NewImage()
|
||||
im.SetPixelSize(40)
|
||||
|
||||
go getAvatar(t, t, im)
|
||||
/*
|
||||
go func() {
|
||||
new_im := getAvatar(t, t)
|
||||
glib.IdleAdd(func() {
|
||||
@@ -997,7 +1017,10 @@ func activate(app *gtk.Application) {
|
||||
box.Prepend(new_im)
|
||||
})
|
||||
}()
|
||||
*/
|
||||
b := gtk.NewLabel(n)
|
||||
|
||||
box.Append(im)
|
||||
box.Append(b)
|
||||
gesture1 := gtk.NewGestureClick()
|
||||
gesture1.SetButton(1)
|
||||
|
||||
Reference in New Issue
Block a user