Compare commits
5 Commits
22fe1cac46
...
3.1i
| Author | SHA1 | Date | |
|---|---|---|---|
| 04083a5ec4 | |||
| 02dcd4b453 | |||
| 85b82b2d3b | |||
| a847ba5cdd | |||
| d5ec58be68 |
16
go.mod
16
go.mod
@@ -3,25 +3,25 @@ module pi-im
|
|||||||
go 1.25.1
|
go 1.25.1
|
||||||
|
|
||||||
require (
|
require (
|
||||||
fyne.io/fyne/v2 v2.6.3
|
fyne.io/fyne/v2 v2.7.1
|
||||||
fyne.io/x/fyne v0.0.0-20250910205345-ecc79984d005
|
fyne.io/x/fyne v0.0.0-20250910205345-ecc79984d005
|
||||||
github.com/makeworld-the-better-one/go-isemoji v1.3.0
|
github.com/makeworld-the-better-one/go-isemoji v1.3.0
|
||||||
github.com/rrivera/identicon v0.0.0-20240116195454-d5ba35832c0d
|
github.com/rrivera/identicon v0.0.0-20240116195454-d5ba35832c0d
|
||||||
github.com/shreve/musicwand v0.0.1
|
github.com/shreve/musicwand v0.0.1
|
||||||
github.com/sunglocto/oasis-sdk v0.0.0-20251128101950-083ea4658d9c
|
github.com/sunglocto/oasis-sdk v0.0.0-20260103142308-7f1848e2aac0
|
||||||
mellium.im/xmpp v0.22.0
|
mellium.im/xmpp v0.22.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
fyne.io/systray v1.11.0 // indirect
|
fyne.io/systray v1.11.1-0.20250603113521-ca66a66d8b58 // indirect
|
||||||
github.com/BurntSushi/toml v1.4.0 // indirect
|
github.com/BurntSushi/toml v1.5.0 // indirect
|
||||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||||
github.com/fredbi/uri v1.1.0 // indirect
|
github.com/fredbi/uri v1.1.1 // indirect
|
||||||
github.com/fsnotify/fsnotify v1.9.0 // indirect
|
github.com/fsnotify/fsnotify v1.9.0 // indirect
|
||||||
github.com/fyne-io/gl-js v0.2.0 // indirect
|
github.com/fyne-io/gl-js v0.2.0 // indirect
|
||||||
github.com/fyne-io/glfw-js v0.3.0 // indirect
|
github.com/fyne-io/glfw-js v0.3.0 // indirect
|
||||||
github.com/fyne-io/image v0.1.1 // indirect
|
github.com/fyne-io/image v0.1.1 // indirect
|
||||||
github.com/fyne-io/oksvg v0.1.0 // indirect
|
github.com/fyne-io/oksvg v0.2.0 // indirect
|
||||||
github.com/go-gl/gl v0.0.0-20231021071112-07e5d0ea2e71 // indirect
|
github.com/go-gl/gl v0.0.0-20231021071112-07e5d0ea2e71 // indirect
|
||||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a // indirect
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a // indirect
|
||||||
github.com/go-text/render v0.2.0 // indirect
|
github.com/go-text/render v0.2.0 // indirect
|
||||||
@@ -34,10 +34,10 @@ require (
|
|||||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
|
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
|
||||||
github.com/nicksnyder/go-i18n/v2 v2.5.1 // indirect
|
github.com/nicksnyder/go-i18n/v2 v2.5.1 // indirect
|
||||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||||
github.com/rymdport/portal v0.4.1 // indirect
|
github.com/rymdport/portal v0.4.2 // indirect
|
||||||
github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c // indirect
|
github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c // indirect
|
||||||
github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef // indirect
|
github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef // indirect
|
||||||
github.com/stretchr/testify v1.10.0 // indirect
|
github.com/stretchr/testify v1.11.1 // indirect
|
||||||
github.com/yuin/goldmark v1.7.8 // indirect
|
github.com/yuin/goldmark v1.7.8 // indirect
|
||||||
golang.org/x/crypto v0.36.0 // indirect
|
golang.org/x/crypto v0.36.0 // indirect
|
||||||
golang.org/x/image v0.24.0 // indirect
|
golang.org/x/image v0.24.0 // indirect
|
||||||
|
|||||||
46
go.sum
46
go.sum
@@ -1,20 +1,20 @@
|
|||||||
fyne.io/fyne/v2 v2.6.3 h1:cvtM2KHeRuH+WhtHiA63z5wJVBkQ9+Ay0UMl9PxFHyA=
|
fyne.io/fyne/v2 v2.7.1 h1:ja7rNHWWEooha4XBIZNnPP8tVFwmTfwMJdpZmLxm2Zc=
|
||||||
fyne.io/fyne/v2 v2.6.3/go.mod h1:NGSurpRElVoI1G3h+ab2df3O5KLGh1CGbsMMcX0bPIs=
|
fyne.io/fyne/v2 v2.7.1/go.mod h1:xClVlrhxl7D+LT+BWYmcrW4Nf+dJTvkhnPgji7spAwE=
|
||||||
fyne.io/systray v1.11.0 h1:D9HISlxSkx+jHSniMBR6fCFOUjk1x/OOOJLa9lJYAKg=
|
fyne.io/systray v1.11.1-0.20250603113521-ca66a66d8b58 h1:eA5/u2XRd8OUkoMqEv3IBlFYSruNlXD8bRHDiqm0VNI=
|
||||||
fyne.io/systray v1.11.0/go.mod h1:RVwqP9nYMo7h5zViCBHri2FgjXF7H2cub7MAq4NSoLs=
|
fyne.io/systray v1.11.1-0.20250603113521-ca66a66d8b58/go.mod h1:RVwqP9nYMo7h5zViCBHri2FgjXF7H2cub7MAq4NSoLs=
|
||||||
fyne.io/x/fyne v0.0.0-20250910205345-ecc79984d005 h1:CmdApAnt07juL0dhcFReFGpADUdRjjm0eDVJDS01uKE=
|
fyne.io/x/fyne v0.0.0-20250910205345-ecc79984d005 h1:CmdApAnt07juL0dhcFReFGpADUdRjjm0eDVJDS01uKE=
|
||||||
fyne.io/x/fyne v0.0.0-20250910205345-ecc79984d005/go.mod h1:kQFmF5meMIXnyCioLoCrXol5opruSS/PHYGKMBIE3SU=
|
fyne.io/x/fyne v0.0.0-20250910205345-ecc79984d005/go.mod h1:kQFmF5meMIXnyCioLoCrXol5opruSS/PHYGKMBIE3SU=
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
|
github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
|
||||||
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g=
|
github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g=
|
||||||
github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw=
|
github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw=
|
||||||
github.com/fredbi/uri v1.1.0 h1:OqLpTXtyRg9ABReqvDGdJPqZUxs8cyBDOMXBbskCaB8=
|
github.com/fredbi/uri v1.1.1 h1:xZHJC08GZNIUhbP5ImTHnt5Ya0T8FI2VAwI/37kh2Ko=
|
||||||
github.com/fredbi/uri v1.1.0/go.mod h1:aYTUoAXBOq7BLfVJ8GnKmfcuURosB1xyHDIfWeC/iW4=
|
github.com/fredbi/uri v1.1.1/go.mod h1:4+DZQ5zBjEwQCDmXW5JdIjz0PUA+yJbvtBv+u+adr5o=
|
||||||
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
|
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
|
||||||
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
|
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
|
||||||
github.com/fyne-io/gl-js v0.2.0 h1:+EXMLVEa18EfkXBVKhifYB6OGs3HwKO3lUElA0LlAjs=
|
github.com/fyne-io/gl-js v0.2.0 h1:+EXMLVEa18EfkXBVKhifYB6OGs3HwKO3lUElA0LlAjs=
|
||||||
@@ -23,8 +23,8 @@ github.com/fyne-io/glfw-js v0.3.0 h1:d8k2+Y7l+zy2pc7wlGRyPfTgZoqDf3AI4G+2zOWhWUk
|
|||||||
github.com/fyne-io/glfw-js v0.3.0/go.mod h1:Ri6te7rdZtBgBpxLW19uBpp3Dl6K9K/bRaYdJ22G8Jk=
|
github.com/fyne-io/glfw-js v0.3.0/go.mod h1:Ri6te7rdZtBgBpxLW19uBpp3Dl6K9K/bRaYdJ22G8Jk=
|
||||||
github.com/fyne-io/image v0.1.1 h1:WH0z4H7qfvNUw5l4p3bC1q70sa5+YWVt6HCj7y4VNyA=
|
github.com/fyne-io/image v0.1.1 h1:WH0z4H7qfvNUw5l4p3bC1q70sa5+YWVt6HCj7y4VNyA=
|
||||||
github.com/fyne-io/image v0.1.1/go.mod h1:xrfYBh6yspc+KjkgdZU/ifUC9sPA5Iv7WYUBzQKK7JM=
|
github.com/fyne-io/image v0.1.1/go.mod h1:xrfYBh6yspc+KjkgdZU/ifUC9sPA5Iv7WYUBzQKK7JM=
|
||||||
github.com/fyne-io/oksvg v0.1.0 h1:7EUKk3HV3Y2E+qypp3nWqMXD7mum0hCw2KEGhI1fnBw=
|
github.com/fyne-io/oksvg v0.2.0 h1:mxcGU2dx6nwjJsSA9PCYZDuoAcsZ/OuJlvg/Q9Njfo8=
|
||||||
github.com/fyne-io/oksvg v0.1.0/go.mod h1:dJ9oEkPiWhnTFNCmRgEze+YNprJF7YRbpjgpWS4kzoI=
|
github.com/fyne-io/oksvg v0.2.0/go.mod h1:dJ9oEkPiWhnTFNCmRgEze+YNprJF7YRbpjgpWS4kzoI=
|
||||||
github.com/go-gl/gl v0.0.0-20231021071112-07e5d0ea2e71 h1:5BVwOaUSBTlVZowGO6VZGw2H/zl9nrd3eCZfYV+NfQA=
|
github.com/go-gl/gl v0.0.0-20231021071112-07e5d0ea2e71 h1:5BVwOaUSBTlVZowGO6VZGw2H/zl9nrd3eCZfYV+NfQA=
|
||||||
github.com/go-gl/gl v0.0.0-20231021071112-07e5d0ea2e71/go.mod h1:9YTyiznxEY1fVinfM7RvRcjRHbw2xLBJ3AAGIT0I4Nw=
|
github.com/go-gl/gl v0.0.0-20231021071112-07e5d0ea2e71/go.mod h1:9YTyiznxEY1fVinfM7RvRcjRHbw2xLBJ3AAGIT0I4Nw=
|
||||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a h1:vxnBhFDDT+xzxf1jTJKMKZw3H0swfWk9RpWbBbDK5+0=
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a h1:vxnBhFDDT+xzxf1jTJKMKZw3H0swfWk9RpWbBbDK5+0=
|
||||||
@@ -65,8 +65,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
|
|||||||
github.com/rrivera/identicon v0.0.0-20240116195454-d5ba35832c0d h1:l3+2LWCbVxn5itfvXAfH9n4YL9jh8l1g5zcncbIc1cs=
|
github.com/rrivera/identicon v0.0.0-20240116195454-d5ba35832c0d h1:l3+2LWCbVxn5itfvXAfH9n4YL9jh8l1g5zcncbIc1cs=
|
||||||
github.com/rrivera/identicon v0.0.0-20240116195454-d5ba35832c0d/go.mod h1:TbpErkob6SY7cyozRVSGoB3OlO2qOAgVN8O3KAJ4fMI=
|
github.com/rrivera/identicon v0.0.0-20240116195454-d5ba35832c0d/go.mod h1:TbpErkob6SY7cyozRVSGoB3OlO2qOAgVN8O3KAJ4fMI=
|
||||||
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
github.com/rymdport/portal v0.4.1 h1:2dnZhjf5uEaeDjeF/yBIeeRo6pNI2QAKm7kq1w/kbnA=
|
github.com/rymdport/portal v0.4.2 h1:7jKRSemwlTyVHHrTGgQg7gmNPJs88xkbKcIL3NlcmSU=
|
||||||
github.com/rymdport/portal v0.4.1/go.mod h1:kFF4jslnJ8pD5uCi17brj/ODlfIidOxlgUDTO5ncnC4=
|
github.com/rymdport/portal v0.4.2/go.mod h1:kFF4jslnJ8pD5uCi17brj/ODlfIidOxlgUDTO5ncnC4=
|
||||||
github.com/shreve/musicwand v0.0.1 h1:uF1GDmk6b9xZPAGJU3iWBSqKruyVeyVs/cqM6YzaJ3k=
|
github.com/shreve/musicwand v0.0.1 h1:uF1GDmk6b9xZPAGJU3iWBSqKruyVeyVs/cqM6YzaJ3k=
|
||||||
github.com/shreve/musicwand v0.0.1/go.mod h1:y7oBkMLTfGmpIxoKQFwXlzWLtffcQIpX/1no+iNPxwQ=
|
github.com/shreve/musicwand v0.0.1/go.mod h1:y7oBkMLTfGmpIxoKQFwXlzWLtffcQIpX/1no+iNPxwQ=
|
||||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||||
@@ -76,14 +76,24 @@ github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef h1:Ch6Q+AZUxDBCVqd
|
|||||||
github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef/go.mod h1:nXTWP6+gD5+LUJ8krVhhoeHjvHTutPxMYl5SvkcnJNE=
|
github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef/go.mod h1:nXTWP6+gD5+LUJ8krVhhoeHjvHTutPxMYl5SvkcnJNE=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
||||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||||
github.com/sunglocto/oasis-sdk v0.0.0-20251128095406-3c003b830815 h1:HsI7kxYauygjRK15Iwf3FlZnU8XJwRPSmbtoNfeyBYk=
|
|
||||||
github.com/sunglocto/oasis-sdk v0.0.0-20251128095406-3c003b830815/go.mod h1:Y5iPruMLvqNwGVqB+n/+wylQjCTPKQx37I/PyLWhuzk=
|
|
||||||
github.com/sunglocto/oasis-sdk v0.0.0-20251128100941-f53b1dabbcac h1:pVarwnSbjNSDpeQer/SERztTEpkl6Cnb5xuyxXmb50k=
|
|
||||||
github.com/sunglocto/oasis-sdk v0.0.0-20251128100941-f53b1dabbcac/go.mod h1:Y5iPruMLvqNwGVqB+n/+wylQjCTPKQx37I/PyLWhuzk=
|
|
||||||
github.com/sunglocto/oasis-sdk v0.0.0-20251128101950-083ea4658d9c h1:peWSGIl0xBvx3sJR3+kHV1xOe1X8dbQ9xtvEXyXogCo=
|
github.com/sunglocto/oasis-sdk v0.0.0-20251128101950-083ea4658d9c h1:peWSGIl0xBvx3sJR3+kHV1xOe1X8dbQ9xtvEXyXogCo=
|
||||||
github.com/sunglocto/oasis-sdk v0.0.0-20251128101950-083ea4658d9c/go.mod h1:Y5iPruMLvqNwGVqB+n/+wylQjCTPKQx37I/PyLWhuzk=
|
github.com/sunglocto/oasis-sdk v0.0.0-20251128101950-083ea4658d9c/go.mod h1:Y5iPruMLvqNwGVqB+n/+wylQjCTPKQx37I/PyLWhuzk=
|
||||||
|
github.com/sunglocto/oasis-sdk v0.0.0-20260103140045-0405de0dd080 h1:29bQpS8K/agBsO2fkXXyId3aDBweVIA+USUNmQpwdac=
|
||||||
|
github.com/sunglocto/oasis-sdk v0.0.0-20260103140045-0405de0dd080/go.mod h1:Y5iPruMLvqNwGVqB+n/+wylQjCTPKQx37I/PyLWhuzk=
|
||||||
|
github.com/sunglocto/oasis-sdk v0.0.0-20260103140638-616fcb543bcf h1:yC8TNIiaJtxzP2hIABRe7EdhcSAODUVkjzsici5Fohw=
|
||||||
|
github.com/sunglocto/oasis-sdk v0.0.0-20260103140638-616fcb543bcf/go.mod h1:Y5iPruMLvqNwGVqB+n/+wylQjCTPKQx37I/PyLWhuzk=
|
||||||
|
github.com/sunglocto/oasis-sdk v0.0.0-20260103140748-3a5af37a9707 h1:r7CKzHIBlp2Cq28WrCe2VaKdZCD4dCd1BmxXLno7Mcg=
|
||||||
|
github.com/sunglocto/oasis-sdk v0.0.0-20260103140748-3a5af37a9707/go.mod h1:Y5iPruMLvqNwGVqB+n/+wylQjCTPKQx37I/PyLWhuzk=
|
||||||
|
github.com/sunglocto/oasis-sdk v0.0.0-20260103140915-72af6e4c3604 h1:yD8c7E3FECQ45Amrn4FnxBw30XbBgfQ+exgbA5IisEU=
|
||||||
|
github.com/sunglocto/oasis-sdk v0.0.0-20260103140915-72af6e4c3604/go.mod h1:Y5iPruMLvqNwGVqB+n/+wylQjCTPKQx37I/PyLWhuzk=
|
||||||
|
github.com/sunglocto/oasis-sdk v0.0.0-20260103142016-f599b73f44e3 h1:S1miV9gK4GKqr+RdmqW71JnpYhoFZehe9NkABbM2XW4=
|
||||||
|
github.com/sunglocto/oasis-sdk v0.0.0-20260103142016-f599b73f44e3/go.mod h1:Y5iPruMLvqNwGVqB+n/+wylQjCTPKQx37I/PyLWhuzk=
|
||||||
|
github.com/sunglocto/oasis-sdk v0.0.0-20260103142127-cc8ce586b6dc h1:7KKRazjvG5I1l+hyvTvM8XLIWewGQ2PAaKr4sN1Oi7E=
|
||||||
|
github.com/sunglocto/oasis-sdk v0.0.0-20260103142127-cc8ce586b6dc/go.mod h1:Y5iPruMLvqNwGVqB+n/+wylQjCTPKQx37I/PyLWhuzk=
|
||||||
|
github.com/sunglocto/oasis-sdk v0.0.0-20260103142308-7f1848e2aac0 h1:7zNLaQVg8jYYrNZ6KqBv23k/RYu58p3wL9YS72B+eNM=
|
||||||
|
github.com/sunglocto/oasis-sdk v0.0.0-20260103142308-7f1848e2aac0/go.mod h1:Y5iPruMLvqNwGVqB+n/+wylQjCTPKQx37I/PyLWhuzk=
|
||||||
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
|
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
|
||||||
github.com/yuin/goldmark v1.7.8 h1:iERMLn0/QJeHFhxSt3p6PeN9mGnvIKSpG9YYorDMnic=
|
github.com/yuin/goldmark v1.7.8 h1:iERMLn0/QJeHFhxSt3p6PeN9mGnvIKSpG9YYorDMnic=
|
||||||
github.com/yuin/goldmark v1.7.8/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E=
|
github.com/yuin/goldmark v1.7.8/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E=
|
||||||
|
|||||||
103
main.go
103
main.go
@@ -13,6 +13,9 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
_ "embed"
|
||||||
|
_ "image/png"
|
||||||
|
_ "image/jpeg"
|
||||||
|
|
||||||
// gui - required
|
// gui - required
|
||||||
"fyne.io/fyne/v2"
|
"fyne.io/fyne/v2"
|
||||||
@@ -33,10 +36,15 @@ import (
|
|||||||
"mellium.im/xmpp/bookmarks"
|
"mellium.im/xmpp/bookmarks"
|
||||||
"mellium.im/xmpp/jid"
|
"mellium.im/xmpp/jid"
|
||||||
"mellium.im/xmpp/muc"
|
"mellium.im/xmpp/muc"
|
||||||
|
"mellium.im/xmpp/stanza"
|
||||||
|
"mellium.im/xmpp/pubsub"
|
||||||
oasisSdk "github.com/sunglocto/oasis-sdk"
|
oasisSdk "github.com/sunglocto/oasis-sdk"
|
||||||
// TODO: integrated theme switcher
|
// TODO: integrated theme switcher
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//go:embed pi.png
|
||||||
|
var iconBytes []byte
|
||||||
|
|
||||||
var version string = "3.1i"
|
var version string = "3.1i"
|
||||||
var statBar widget.Label
|
var statBar widget.Label
|
||||||
var chatInfo fyne.Container
|
var chatInfo fyne.Container
|
||||||
@@ -45,6 +53,7 @@ var replyNameIcon string = ">"
|
|||||||
var replyBodyIcon string = ">"
|
var replyBodyIcon string = ">"
|
||||||
var newlineIcon string = " |-> "
|
var newlineIcon string = " |-> "
|
||||||
var agreesToSendingHotFuckIntoChannel bool = false
|
var agreesToSendingHotFuckIntoChannel bool = false
|
||||||
|
var OccupantIdsToBlock = make(map[string]string)
|
||||||
|
|
||||||
// by sunglocto
|
// by sunglocto
|
||||||
// license AGPL
|
// license AGPL
|
||||||
@@ -176,12 +185,14 @@ func CreateUITab(chatJidStr string) ChatTabUI {
|
|||||||
btn := widget.NewButtonWithIcon("View media", icon, func() {
|
btn := widget.NewButtonWithIcon("View media", icon, func() {
|
||||||
|
|
||||||
})
|
})
|
||||||
|
btn.Hide()
|
||||||
|
|
||||||
reactions := container.NewHBox()
|
reactions := container.NewHBox()
|
||||||
|
|
||||||
return container.NewVBox(replytext, container.NewHBox(ico, author), content, btn, reactions)
|
return container.NewVBox(replytext, container.NewHBox(ico, author), content, btn, reactions)
|
||||||
},
|
},
|
||||||
func(i widget.ListItemID, co fyne.CanvasObject) {
|
func(i widget.ListItemID, co fyne.CanvasObject) {
|
||||||
|
|
||||||
vbox := co.(*fyne.Container)
|
vbox := co.(*fyne.Container)
|
||||||
authorBox := vbox.Objects[1].(*fyne.Container)
|
authorBox := vbox.Objects[1].(*fyne.Container)
|
||||||
replytext := vbox.Objects[0].(*widget.Label)
|
replytext := vbox.Objects[0].(*widget.Label)
|
||||||
@@ -198,6 +209,21 @@ func CreateUITab(chatJidStr string) ChatTabUI {
|
|||||||
|
|
||||||
author := authorBox.Objects[1].(*widget.Label)
|
author := authorBox.Objects[1].(*widget.Label)
|
||||||
content := vbox.Objects[2].(*widget.Label)
|
content := vbox.Objects[2].(*widget.Label)
|
||||||
|
unknown_tags := chatTabs[chatJidStr].Messages[i].Raw.Unknown
|
||||||
|
for _, v := range unknown_tags {
|
||||||
|
if v.XMLName.Local == "occupant-id" {
|
||||||
|
for _, attr := range v.Attrs {
|
||||||
|
if attr.Name.Local == "id" {
|
||||||
|
reason, ok := OccupantIdsToBlock[attr.Value]
|
||||||
|
if ok {
|
||||||
|
author.SetText("Ignored user")
|
||||||
|
content.SetText("This user is ignored due to: " + reason)
|
||||||
|
return // message is from blocked user
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
btn := vbox.Objects[3].(*widget.Button)
|
btn := vbox.Objects[3].(*widget.Button)
|
||||||
reactions := vbox.Objects[4].(*fyne.Container)
|
reactions := vbox.Objects[4].(*fyne.Container)
|
||||||
reactions = container.NewVBox()
|
reactions = container.NewVBox()
|
||||||
@@ -425,7 +451,9 @@ func dropToSignInPage(reason string) {
|
|||||||
func main() {
|
func main() {
|
||||||
muc.Since(time.Now())
|
muc.Since(time.Now())
|
||||||
config = piConfig{}
|
config = piConfig{}
|
||||||
|
res := fyne.NewStaticResource("image", iconBytes)
|
||||||
a = app.NewWithID("pi-im")
|
a = app.NewWithID("pi-im")
|
||||||
|
a.SetIcon(res)
|
||||||
reader, err := a.Storage().Open("pi.xml")
|
reader, err := a.Storage().Open("pi.xml")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
dropToSignInPage(err.Error())
|
dropToSignInPage(err.Error())
|
||||||
@@ -674,7 +702,7 @@ func main() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
client.SetPresenceHandler(func(client *oasisSdk.XmppClient, from jid.JID, p oasisSdk.UserPresence) {
|
client.SetPresenceHandler(func(client *oasisSdk.XmppClient, from jid.JID, p oasisSdk.UserPresence) {
|
||||||
log.Println(p.Type)
|
fmt.Println(p.Header.Type == stanza.UnavailablePresence)
|
||||||
bareAcc := from.Bare()
|
bareAcc := from.Bare()
|
||||||
tab, ok := chatTabs[bareAcc.String()]
|
tab, ok := chatTabs[bareAcc.String()]
|
||||||
if !ok {
|
if !ok {
|
||||||
@@ -684,6 +712,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if tab.isMuc {
|
if tab.isMuc {
|
||||||
|
fmt.Println(p.Type)
|
||||||
tab.Members[from.String()] = p
|
tab.Members[from.String()] = p
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -757,7 +786,7 @@ func main() {
|
|||||||
w = a.NewWindow("pi")
|
w = a.NewWindow("pi")
|
||||||
w.SetCloseIntercept(func() {
|
w.SetCloseIntercept(func() {
|
||||||
w.RequestFocus()
|
w.RequestFocus()
|
||||||
dialog.ShowConfirm("Close pi", "You hit the close button. Do you want Pi to close completely (confirm) or minimize to the tray? (cancel)", func(b bool) {
|
dialog.ShowConfirm("Close pi", "You hit the close button. Do you want Pi to close completely?", func(b bool) {
|
||||||
if b {
|
if b {
|
||||||
w.Close()
|
w.Close()
|
||||||
a.Quit()
|
a.Quit()
|
||||||
@@ -838,6 +867,9 @@ func main() {
|
|||||||
text = fmt.Sprintf("%s %s", text, jid.MustParse(name).Resourcepart())
|
text = fmt.Sprintf("%s %s", text, jid.MustParse(name).Resourcepart())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a := pubsub.Fetch(context.TODO(), client.Session, pubsub.Query{})
|
||||||
|
log.Println(a.Item())
|
||||||
|
|
||||||
err = client.SendText(jid.MustParse(activeMucJid).Bare(), text)
|
err = client.SendText(jid.MustParse(activeMucJid).Bare(), text)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
dialog.ShowError(err, w)
|
dialog.ShowError(err, w)
|
||||||
@@ -1061,7 +1093,13 @@ func main() {
|
|||||||
for address, bookmark := range bookmarks {
|
for address, bookmark := range bookmarks {
|
||||||
bookmarkWidget := container.NewGridWithColumns(7)
|
bookmarkWidget := container.NewGridWithColumns(7)
|
||||||
|
|
||||||
nameLabel := widget.NewLabel(bookmark.Name)
|
var nameLabel *widget.RichText
|
||||||
|
|
||||||
|
if bookmark.Name != "" {
|
||||||
|
nameLabel = widget.NewRichTextFromMarkdown(bookmark.Name)
|
||||||
|
} else {
|
||||||
|
nameLabel = widget.NewRichTextFromMarkdown("_no name_")
|
||||||
|
}
|
||||||
nameLabel.Wrapping = fyne.TextWrapBreak
|
nameLabel.Wrapping = fyne.TextWrapBreak
|
||||||
|
|
||||||
bookmarkWidget.Add(nameLabel)
|
bookmarkWidget.Add(nameLabel)
|
||||||
@@ -1081,9 +1119,8 @@ func main() {
|
|||||||
if bookmark.Nick == "" {
|
if bookmark.Nick == "" {
|
||||||
bookmark.Nick = client.Login.DisplayName
|
bookmark.Nick = client.Login.DisplayName
|
||||||
}
|
}
|
||||||
var zero uint64 = uint64(0)
|
|
||||||
addChatTab(true, bookmark.JID, bookmark.Nick)
|
addChatTab(true, bookmark.JID, bookmark.Nick)
|
||||||
_, err := client.ConnectMuc(bookmark, oasisSdk.MucLegacyHistoryConfig{MaxCount: &zero}, context.TODO())
|
_, err := client.ConnectMuc(bookmark, oasisSdk.MucLegacyHistoryConfig{}, context.TODO())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fyne.Do(func() {
|
fyne.Do(func() {
|
||||||
joinRoomButton.Enable()
|
joinRoomButton.Enable()
|
||||||
@@ -1191,8 +1228,7 @@ func main() {
|
|||||||
mychannel.Nick = login.DisplayName
|
mychannel.Nick = login.DisplayName
|
||||||
//ch, err := client.MucClient.Join(client.Ctx, joinjid, client.Session)
|
//ch, err := client.MucClient.Join(client.Ctx, joinjid, client.Session)
|
||||||
addChatTab(true, myjid, login.DisplayName)
|
addChatTab(true, myjid, login.DisplayName)
|
||||||
num := uint64(0)
|
_, err = client.ConnectMuc(*mychannel, oasisSdk.MucLegacyHistoryConfig{}, context.TODO())
|
||||||
_, err = client.ConnectMuc(*mychannel, oasisSdk.MucLegacyHistoryConfig{MaxCount: &num}, context.TODO())
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
d.Hide()
|
d.Hide()
|
||||||
dialog.ShowError(err, w)
|
dialog.ShowError(err, w)
|
||||||
@@ -1204,7 +1240,7 @@ func main() {
|
|||||||
}, w)
|
}, w)
|
||||||
})
|
})
|
||||||
|
|
||||||
beginADM := fyne.NewMenuItem("Start a DM", func() {
|
beginADM := fyne.NewMenuItem("start a DM", func() {
|
||||||
dialog.ShowEntryDialog("Start a DM", "JID:", func(s string) {
|
dialog.ShowEntryDialog("Start a DM", "JID:", func(s string) {
|
||||||
i := resourcePiloadingGif
|
i := resourcePiloadingGif
|
||||||
gif, err := extraWidgets.NewAnimatedGifFromResource(i)
|
gif, err := extraWidgets.NewAnimatedGifFromResource(i)
|
||||||
@@ -1403,6 +1439,48 @@ func main() {
|
|||||||
dialog.ShowCustom("Message", "Close", pre, w)
|
dialog.ShowCustom("Message", "Close", pre, w)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
blck := fyne.NewMenuItem("ignore messages from this user", func() {
|
||||||
|
|
||||||
|
selectedScroller, ok := AppTabs.Selected().Content.(*widget.List)
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var activeChatJid string
|
||||||
|
for jid, tabData := range UITabs {
|
||||||
|
if tabData.Scroller == selectedScroller {
|
||||||
|
activeChatJid = jid
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m := chatTabs[activeChatJid].Messages[selectedId]
|
||||||
|
unknown_tags := m.Raw.Unknown
|
||||||
|
for _, v := range unknown_tags {
|
||||||
|
if v.XMLName.Local == "occupant-id" {
|
||||||
|
for _, attr := range v.Attrs {
|
||||||
|
if attr.Name.Local == "id" {
|
||||||
|
occupant_id := attr.Value
|
||||||
|
reason, ok := OccupantIdsToBlock[occupant_id]
|
||||||
|
if !ok {
|
||||||
|
dialog.ShowConfirm("ignore user", "All messages sent by users with an occupant ID of\n"+occupant_id+"\nwill be ignored. Continue?", func(b bool) {
|
||||||
|
if b {
|
||||||
|
OccupantIdsToBlock[occupant_id] = "User requested"
|
||||||
|
}
|
||||||
|
}, w)
|
||||||
|
} else {
|
||||||
|
dialog.ShowConfirm("unignore user", "This user is currently ignored due to:\n"+reason+"\nWould you like to unignore them?", func(b bool) {
|
||||||
|
if b {
|
||||||
|
delete(OccupantIdsToBlock, occupant_id)
|
||||||
|
}
|
||||||
|
}, w)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
red := fyne.NewMenuItem("show read receipts on message", func() {
|
red := fyne.NewMenuItem("show read receipts on message", func() {
|
||||||
pre := container.NewVBox()
|
pre := container.NewVBox()
|
||||||
|
|
||||||
@@ -1439,13 +1517,13 @@ func main() {
|
|||||||
dialog.ShowCustom("Message", "Close", pre, w)
|
dialog.ShowCustom("Message", "Close", pre, w)
|
||||||
})
|
})
|
||||||
|
|
||||||
menu_messageoptions := fyne.NewMenu("Γ", bit, bia, bic, red)
|
menu_messageoptions := fyne.NewMenu("Γ", bit, bia, bic, red, blck)
|
||||||
ma := fyne.NewMainMenu(menu_help, menu_changeroom, menu_configureview, menu_messageoptions, menu_jokes)
|
ma := fyne.NewMainMenu(menu_help, menu_changeroom, menu_configureview, menu_messageoptions, menu_jokes)
|
||||||
w.SetMainMenu(ma)
|
w.SetMainMenu(ma)
|
||||||
|
|
||||||
desk, ok := a.(desktop.App)
|
desk, ok := a.(desktop.App)
|
||||||
if ok {
|
if ok {
|
||||||
desk.SetSystemTrayMenu(fyne.NewMenu("", fyne.NewMenuItem("show", w.Show)))
|
desk.SetSystemTrayMenu(fyne.NewMenu("", fyne.NewMenuItem("Show window", w.Show)))
|
||||||
}
|
}
|
||||||
|
|
||||||
AppTabs = container.NewDocTabs(
|
AppTabs = container.NewDocTabs(
|
||||||
@@ -1479,10 +1557,11 @@ func main() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
dialog.ShowError(err, w)
|
dialog.ShowError(err, w)
|
||||||
}
|
}
|
||||||
|
fyne.Do(func() {
|
||||||
AppTabs.Selected().Text = fmt.Sprintf("%s (disconnected)", AppTabs.Selected().Text)
|
AppTabs.Selected().Text = fmt.Sprintf("%s (disconnected)", AppTabs.Selected().Text)
|
||||||
AppTabs.Remove(ti)
|
AppTabs.Remove(ti)
|
||||||
delete(UITabs, activeChatJid)
|
delete(UITabs, activeChatJid)
|
||||||
|
})
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1495,6 +1574,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
AppTabs.OnSelected = func(ti *container.TabItem) {
|
AppTabs.OnSelected = func(ti *container.TabItem) {
|
||||||
|
chatSidebar.Resize(chatSidebar.Size())
|
||||||
if AppTabs.Selected() == AppTabs.Items[0] {
|
if AppTabs.Selected() == AppTabs.Items[0] {
|
||||||
chatSidebar.Hidden = true
|
chatSidebar.Hidden = true
|
||||||
return
|
return
|
||||||
@@ -1574,6 +1654,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
chatSidebar.Hidden = false
|
chatSidebar.Hidden = false
|
||||||
chatSidebar.Refresh()
|
chatSidebar.Refresh()
|
||||||
|
chatSidebar.Resize(chatSidebar.Size())
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user