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
|
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) {
|
func newPictureFromWeb(url string) (*gtk.Picture, error) {
|
||||||
pa, _ := ensureCache()
|
pa, _ := ensureCache()
|
||||||
// step 1: get a sha256 sum of the URL
|
// 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)
|
mm := mo.(mucUnit)
|
||||||
mmm := mm.Members
|
mmm := mm.Members
|
||||||
mmmm, ok := mmm.Load(id)
|
mmmm, ok := mmm.Load(id)
|
||||||
|
|
||||||
|
im := gtk.NewImage()
|
||||||
if ok {
|
if ok {
|
||||||
pres := mmmm.(stanza.Presence)
|
pres := mmmm.(stanza.Presence)
|
||||||
|
|
||||||
var vu VCardUpdate
|
var vu VCardUpdate
|
||||||
pres.Get(&vu)
|
pres.Get(&vu)
|
||||||
if vu.Photo != "" {
|
if vu.Photo != "" {
|
||||||
im := getAvatar(u.From, vu.Photo)
|
getAvatar(u.From, vu.Photo, im)
|
||||||
im.SetPixelSize(80)
|
im.SetPixelSize(80)
|
||||||
im.AddCSSClass("author_img")
|
im.AddCSSClass("author_img")
|
||||||
profile_box.Prepend(im)
|
profile_box.Prepend(im)
|
||||||
} else {
|
} else {
|
||||||
im := createIdenticon(u.From, false)
|
createIdenticon(u.From, false, im)
|
||||||
im.SetPixelSize(80)
|
im.SetPixelSize(80)
|
||||||
im.AddCSSClass("author_img")
|
im.AddCSSClass("author_img")
|
||||||
profile_box.Prepend(im)
|
profile_box.Prepend(im)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
im := createIdenticon(u.From, false)
|
createIdenticon(u.From, false, im)
|
||||||
im.SetPixelSize(80)
|
im.SetPixelSize(80)
|
||||||
im.AddCSSClass("author_img")
|
im.AddCSSClass("author_img")
|
||||||
profile_box.Prepend(im)
|
profile_box.Prepend(im)
|
||||||
@@ -457,18 +459,19 @@ func switchToTab(jid string, w *gtk.Window) {
|
|||||||
userbox.Append(medal)
|
userbox.Append(medal)
|
||||||
|
|
||||||
if loadedConfig.ShowAvatarsInMemberList {
|
if loadedConfig.ShowAvatarsInMemberList {
|
||||||
default_av := createIdenticon(u.From, false)
|
default_av := gtk.NewImage()
|
||||||
|
createIdenticon(u.From, false, default_av)
|
||||||
userbox.Prepend(default_av)
|
userbox.Prepend(default_av)
|
||||||
var vcu VCardUpdate
|
var vcu VCardUpdate
|
||||||
ok = u.Get(&vcu)
|
ok = u.Get(&vcu)
|
||||||
if ok {
|
if ok {
|
||||||
photo := vcu.Photo
|
photo := vcu.Photo
|
||||||
go func() {
|
go func() {
|
||||||
new_im := getAvatar(u.From, photo)
|
|
||||||
|
|
||||||
glib.IdleAdd(func() {
|
glib.IdleAdd(func() {
|
||||||
|
new_im := gtk.NewImage()
|
||||||
userbox.Remove(default_av)
|
userbox.Remove(default_av)
|
||||||
userbox.Prepend(new_im)
|
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)
|
gen.Prepend(headerBox)
|
||||||
|
|
||||||
muc_presence := typed_tab.muc_presence
|
muc_presence := typed_tab.muc_presence
|
||||||
|
muci := gtk.NewImage()
|
||||||
|
|
||||||
|
createIdenticon(jid, true, muci)
|
||||||
if muc_presence != nil {
|
if muc_presence != nil {
|
||||||
vc := &VCardUpdate{}
|
vc := &VCardUpdate{}
|
||||||
ok = muc_presence.Get(vc)
|
ok = muc_presence.Get(vc)
|
||||||
if ok {
|
if ok {
|
||||||
muci := getAvatar(jid, vc.Photo)
|
getAvatar(jid, vc.Photo, muci)
|
||||||
muci.SetPixelSize(80)
|
muci.SetPixelSize(80)
|
||||||
gen.Prepend(muci)
|
gen.Prepend(muci)
|
||||||
}
|
}
|
||||||
@@ -683,9 +689,11 @@ func showErrorDialog(err error, w *gtk.Window) {
|
|||||||
err_win.Present()
|
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 {
|
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 {
|
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()
|
loader.Close()
|
||||||
p := loader.Pixbuf()
|
p := loader.Pixbuf()
|
||||||
gt := gdk.NewTextureForPixbuf(p)
|
gt := gdk.NewTextureForPixbuf(p)
|
||||||
|
/*
|
||||||
i := gtk.NewImageFromPaintable(gt)
|
i := gtk.NewImageFromPaintable(gt)
|
||||||
i.AddCSSClass(loadedConfig.CVD.String() + "_CVD")
|
i.AddCSSClass(loadedConfig.CVD.String() + "_CVD")
|
||||||
return i
|
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
|
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"
|
"encoding/base64"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/diamondburned/gotk4/pkg/gdk/v4"
|
"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/diamondburned/gotk4/pkg/gtk/v4"
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/jasonlovesdoggo/gopen"
|
"github.com/jasonlovesdoggo/gopen"
|
||||||
@@ -290,28 +290,22 @@ func generateMessageWidget(p stanza.Packet, blocked bool) (gtk.Widgetter, bool)
|
|||||||
if !ok {
|
if !ok {
|
||||||
can_generate = false
|
can_generate = false
|
||||||
}
|
}
|
||||||
|
im := gtk.NewImage()
|
||||||
if can_generate {
|
if can_generate {
|
||||||
pres := mmmm.(stanza.Presence)
|
pres := mmmm.(stanza.Presence)
|
||||||
var vu VCardUpdate
|
var vu VCardUpdate
|
||||||
pres.Get(&vu)
|
pres.Get(&vu)
|
||||||
im := createIdenticon(m.From, false)
|
createIdenticon(m.From, false, im)
|
||||||
im.SetPixelSize(40)
|
im.SetPixelSize(40)
|
||||||
im.AddCSSClass("author_img")
|
im.AddCSSClass("author_img")
|
||||||
authorBox.Append(im)
|
authorBox.Append(im)
|
||||||
|
|
||||||
if vu.Photo != "" {
|
if vu.Photo != "" {
|
||||||
go func() {
|
go getAvatar(m.From, vu.Photo, im)
|
||||||
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 {
|
} else {
|
||||||
im := createIdenticon(m.From, false)
|
createIdenticon(m.From, false, im)
|
||||||
im.SetPixelSize(40)
|
im.SetPixelSize(40)
|
||||||
im.AddCSSClass("author_img")
|
im.AddCSSClass("author_img")
|
||||||
authorBox.Append(im)
|
authorBox.Append(im)
|
||||||
@@ -323,7 +317,8 @@ func generateMessageWidget(p stanza.Packet, blocked bool) (gtk.Widgetter, bool)
|
|||||||
authorBox.Append(al)
|
authorBox.Append(al)
|
||||||
|
|
||||||
if m.Thread != "" {
|
if m.Thread != "" {
|
||||||
im := createIdenticon(m.Thread, true)
|
im := gtk.NewImage()
|
||||||
|
createIdenticon(m.Thread, true, im)
|
||||||
im.SetPixelSize(10)
|
im.SetPixelSize(10)
|
||||||
authorBox.Append(im)
|
authorBox.Append(im)
|
||||||
}
|
}
|
||||||
@@ -437,33 +432,39 @@ func getVAdjustment(scrolledWindow *gtk.ScrolledWindow) *gtk.Adjustment {
|
|||||||
return val
|
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
|
oghash := hash
|
||||||
p, err := ensureCache()
|
p, err := ensureCache()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return createIdenticon(j, false)
|
createIdenticon(j, false, i)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if hash == "" {
|
if hash == "" {
|
||||||
return createIdenticon(j, false)
|
createIdenticon(j, false, i)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_, ok := invalidImages.Load(hash)
|
_, ok := invalidImages.Load(hash)
|
||||||
if ok {
|
if ok {
|
||||||
return createIdenticon(j, false)
|
createIdenticon(j, false, i)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
hash = filepath.Join(p, hash)
|
hash = filepath.Join(p, hash)
|
||||||
|
|
||||||
_, err = os.ReadFile(hash)
|
_, err = os.ReadFile(hash)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
i, err := newImageFromPath(hash)
|
/*
|
||||||
|
i, err = newImageFromPath(hash)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
invalidImages.Store(oghash, true)
|
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{
|
iqResp, err := stanza.NewIQ(stanza.Attrs{
|
||||||
@@ -488,13 +489,15 @@ func getAvatar(j, hash string) *gtk.Image { // TODO: This function probably shou
|
|||||||
result := <-mychan
|
result := <-mychan
|
||||||
card, ok := result.Payload.(*VCard)
|
card, ok := result.Payload.(*VCard)
|
||||||
if !ok {
|
if !ok {
|
||||||
return createIdenticon(j, false)
|
createIdenticon(j, false, i)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
base64_data := card.Photo.Binval
|
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")) {
|
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)
|
invalidImages.Store(oghash, true)
|
||||||
return createIdenticon(j, false)
|
createIdenticon(j, false, i)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
data, err := base64.StdEncoding.DecodeString(base64_data)
|
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)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
i, err := newImageFromPath(hash)
|
err = setImageFromPath(hash, i)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
invalidImages.Store(oghash, true)
|
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")
|
i.AddCSSClass(loadedConfig.CVD.String() + "_CVD")
|
||||||
return i
|
// return i
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -550,13 +550,10 @@ func main() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
box.Append(b)
|
box.Append(b)
|
||||||
go func() {
|
im := gtk.NewImage()
|
||||||
new_im := getAvatar(jid, jid) // TODO: Use PEP avatar and do not use JID as hash
|
im.SetPixelSize(40)
|
||||||
glib.IdleAdd(func() {
|
go getAvatar(jid, jid, im)
|
||||||
new_im.SetPixelSize(40)
|
box.Prepend(im)
|
||||||
box.Prepend(new_im)
|
|
||||||
})
|
|
||||||
}()
|
|
||||||
|
|
||||||
box.AddController(gesture1)
|
box.AddController(gesture1)
|
||||||
menu.Append(box)
|
menu.Append(box)
|
||||||
@@ -602,7 +599,15 @@ func main() {
|
|||||||
box.SetVisible(false)
|
box.SetVisible(false)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
im := gtk.NewImage()
|
||||||
|
im.SetPixelSize(40)
|
||||||
|
|
||||||
|
box.Append(im)
|
||||||
box.Append(b)
|
box.Append(b)
|
||||||
|
|
||||||
|
go getAvatar(jid, jid, im)
|
||||||
|
/*
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
new_im := getAvatar(jid, jid) // TODO: Use PEP avatar and do not use JID as hash
|
new_im := getAvatar(jid, jid) // TODO: Use PEP avatar and do not use JID as hash
|
||||||
glib.IdleAdd(func() {
|
glib.IdleAdd(func() {
|
||||||
@@ -610,6 +615,7 @@ func main() {
|
|||||||
box.Prepend(new_im)
|
box.Prepend(new_im)
|
||||||
})
|
})
|
||||||
}()
|
}()
|
||||||
|
*/
|
||||||
|
|
||||||
box.AddController(gesture1)
|
box.AddController(gesture1)
|
||||||
menu.Append(box)
|
menu.Append(box)
|
||||||
@@ -690,7 +696,15 @@ func main() {
|
|||||||
removeTab(jid, &window.Window)
|
removeTab(jid, &window.Window)
|
||||||
box.SetVisible(false)
|
box.SetVisible(false)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
im := gtk.NewImage()
|
||||||
|
im.SetPixelSize(40)
|
||||||
|
|
||||||
box.Append(b)
|
box.Append(b)
|
||||||
|
box.Prepend(im)
|
||||||
|
|
||||||
|
go getAvatar(jid, jid, im)
|
||||||
|
/*
|
||||||
go func() {
|
go func() {
|
||||||
new_im := getAvatar(jid, jid)
|
new_im := getAvatar(jid, jid)
|
||||||
glib.IdleAdd(func() {
|
glib.IdleAdd(func() {
|
||||||
@@ -698,6 +712,7 @@ func main() {
|
|||||||
box.Prepend(new_im)
|
box.Prepend(new_im)
|
||||||
})
|
})
|
||||||
}()
|
}()
|
||||||
|
*/
|
||||||
|
|
||||||
box.AddController(gesture1)
|
box.AddController(gesture1)
|
||||||
box.AddController(gesture2)
|
box.AddController(gesture2)
|
||||||
@@ -990,6 +1005,11 @@ func activate(app *gtk.Application) {
|
|||||||
|
|
||||||
createTab(t, true, n)
|
createTab(t, true, n)
|
||||||
box := gtk.NewBox(gtk.OrientationHorizontal, 10)
|
box := gtk.NewBox(gtk.OrientationHorizontal, 10)
|
||||||
|
im := gtk.NewImage()
|
||||||
|
im.SetPixelSize(40)
|
||||||
|
|
||||||
|
go getAvatar(t, t, im)
|
||||||
|
/*
|
||||||
go func() {
|
go func() {
|
||||||
new_im := getAvatar(t, t)
|
new_im := getAvatar(t, t)
|
||||||
glib.IdleAdd(func() {
|
glib.IdleAdd(func() {
|
||||||
@@ -997,7 +1017,10 @@ func activate(app *gtk.Application) {
|
|||||||
box.Prepend(new_im)
|
box.Prepend(new_im)
|
||||||
})
|
})
|
||||||
}()
|
}()
|
||||||
|
*/
|
||||||
b := gtk.NewLabel(n)
|
b := gtk.NewLabel(n)
|
||||||
|
|
||||||
|
box.Append(im)
|
||||||
box.Append(b)
|
box.Append(b)
|
||||||
gesture1 := gtk.NewGestureClick()
|
gesture1 := gtk.NewGestureClick()
|
||||||
gesture1.SetButton(1)
|
gesture1.SetButton(1)
|
||||||
|
|||||||
Reference in New Issue
Block a user