From 7c19abb6aecc7d19380d7149ecb4885751317202 Mon Sep 17 00:00:00 2001 From: sunglocto Date: Tue, 14 Jul 2026 07:51:46 +0100 Subject: [PATCH] Add update check, upgrade dependencies and format code and change ver --- assets.go | 4 ++ assets/update.png | Bin 0 -> 3051 bytes go.mod | 33 +++++------ go.sum | 40 ++++++++++++++ gtk-helpers.go | 8 ++- gtk-update.go | 136 ++++++++++++++++++++++++++++++++++++++++++++++ l18n.go | 30 +++++++--- main.go | 24 ++++++-- types.go | 1 + version.go | 2 +- 10 files changed, 247 insertions(+), 31 deletions(-) create mode 100644 assets/update.png create mode 100644 gtk-update.go diff --git a/assets.go b/assets.go index 5149abc..57c3556 100644 --- a/assets.go +++ b/assets.go @@ -147,6 +147,9 @@ var failBytes []byte //go:embed assets/please_wait.gif var pleaseWaitBytes []byte +//go:embed assets/update.png +var updateBytes []byte + // var clientAssets map[string]gdk.Paintabler = make(map[string]gdk.Paintabler) var clientAssets sync.Map @@ -219,6 +222,7 @@ func init() { "jabber": jabberBytes, "fail": failBytes, "please_wait": pleaseWaitBytes, + "update": updateBytes, } { loadAsset(key, data) } diff --git a/assets/update.png b/assets/update.png new file mode 100644 index 0000000000000000000000000000000000000000..985e822844d905d66f2872d772d669e24867b538 GIT binary patch literal 3051 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 literal 0 HcmV?d00001 diff --git a/go.mod b/go.mod index 8168425..822a4a0 100644 --- a/go.mod +++ b/go.mod @@ -8,43 +8,44 @@ require ( github.com/crazy3lf/colorconv v1.2.0 github.com/diamondburned/gotk4/pkg v0.3.1 github.com/gen2brain/beeep v0.11.2 - github.com/go-analyze/charts v0.5.24 - github.com/google/uuid v1.1.1 + github.com/go-analyze/charts v0.6.0 + github.com/google/uuid v1.6.0 github.com/jacoblockett/sanitizefilename v1.0.1 github.com/jasonlovesdoggo/gopen v0.0.0-20250130105607-39c98c645030 github.com/kirsle/configdir v0.0.0-20170128060238-e45d2f54772f - github.com/kr/pretty v0.2.0 + github.com/kr/pretty v0.3.1 github.com/mskrha/svg2png v0.0.0-20240706085601-64fa78f4eb07 github.com/rrivera/identicon v0.0.0-20240116195454-d5ba35832c0d github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef - golang.org/x/net v0.29.0 + golang.org/x/net v0.57.0 gosrc.io/xmpp v0.5.1 - mellium.im/xmpp v0.22.0 + mellium.im/xmpp v0.23.0 ) require ( git.sr.ht/~jackmordaunt/go-toast v1.1.2 // indirect github.com/KarpelesLab/weak v0.1.1 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/esiqveland/notify v0.13.3 // indirect - github.com/go-analyze/bulk v0.1.3 // indirect + github.com/esiqveland/notify v0.14.0 // indirect + github.com/go-analyze/bulk v0.1.4 // indirect github.com/go-ole/go-ole v1.3.0 // indirect - github.com/godbus/dbus/v5 v5.1.0 // indirect + github.com/godbus/dbus/v5 v5.2.2 // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect github.com/jackmordaunt/icns/v3 v3.0.1 // indirect - github.com/kr/text v0.1.0 // indirect + github.com/kr/text v0.2.0 // indirect github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect + github.com/rogpeppe/go-internal v1.15.0 // indirect github.com/sergeymakinen/go-bmp v1.0.0 // indirect - github.com/sergeymakinen/go-ico v1.0.0-beta.0 // indirect + github.com/sergeymakinen/go-ico v1.0.0 // indirect github.com/tadvi/systray v0.0.0-20190226123456-11a2b8fa57af // indirect go4.org/unsafe/assume-no-moving-gc v0.0.0-20231121144256-b99613f794b6 // indirect - golang.org/x/image v0.36.0 // indirect - golang.org/x/sync v0.19.0 // indirect - golang.org/x/sys v0.30.0 // indirect - golang.org/x/text v0.34.0 // indirect - golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 // indirect + golang.org/x/image v0.44.0 // indirect + golang.org/x/sync v0.22.0 // indirect + golang.org/x/sys v0.47.0 // indirect + golang.org/x/text v0.40.0 // indirect + golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect mellium.im/reader v0.1.0 // indirect mellium.im/xmlstream v0.15.4 // indirect - nhooyr.io/websocket v1.6.5 // indirect + nhooyr.io/websocket v1.8.17 // indirect ) diff --git a/go.sum b/go.sum index d42bef5..082a666 100644 --- a/go.sum +++ b/go.sum @@ -15,6 +15,7 @@ github.com/chromedp/chromedp v0.3.1-0.20190619195644-fd957a4d2901/go.mod h1:mJdv github.com/chromedp/chromedp v0.4.0/go.mod h1:DC3QUn4mJ24dwjcaGQLoZrhm4X/uPHZ6spDbS2uFhm4= github.com/crazy3lf/colorconv v1.2.0 h1:UM7kSZWnwFMGiC+PpYrjxQSOd6sEyWb+dRKKTd3KslA= github.com/crazy3lf/colorconv v1.2.0/go.mod h1:2jTJ7QCWCj2sSLOhF4Gzi0J5/hoX8/VY8VzNvXAlD1I= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= 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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -25,6 +26,8 @@ github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+m github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/esiqveland/notify v0.13.3 h1:QCMw6o1n+6rl+oLUfg8P1IIDSFsDEb2WlXvVvIJbI/o= github.com/esiqveland/notify v0.13.3/go.mod h1:hesw/IRYTO0x99u1JPweAl4+5mwXJibQVUcP0Iu5ORE= +github.com/esiqveland/notify v0.14.0 h1:LgIT/vYnziiw3d4ykaeyytc7jBUhD+Nvv3U7GIuPFj4= +github.com/esiqveland/notify v0.14.0/go.mod h1:hesw/IRYTO0x99u1JPweAl4+5mwXJibQVUcP0Iu5ORE= github.com/fatih/color v1.6.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -32,8 +35,12 @@ github.com/gen2brain/beeep v0.11.2 h1:+KfiKQBbQCuhfJFPANZuJ+oxsSKAYNe88hIpJuyKWD github.com/gen2brain/beeep v0.11.2/go.mod h1:jQVvuwnLuwOcdctHn/uyh8horSBNJ8uGb9Cn2W4tvoc= github.com/go-analyze/bulk v0.1.3 h1:pzRdBqzHDAT9PyROt0SlWE0YqPtdmTcEpIJY0C3vF0c= github.com/go-analyze/bulk v0.1.3/go.mod h1:afon/KtFJYnekIyN20H/+XUvcLFjE8sKR1CfpqfClgM= +github.com/go-analyze/bulk v0.1.4 h1:PIlVl+KA73nW2KKr8eGiF3fhwfI1yAkTsur/3hzBM10= +github.com/go-analyze/bulk v0.1.4/go.mod h1:afon/KtFJYnekIyN20H/+XUvcLFjE8sKR1CfpqfClgM= github.com/go-analyze/charts v0.5.24 h1:HamvYWEgbANbLb/P6uijygtG9qeSYev34ki1RelA1Lw= github.com/go-analyze/charts v0.5.24/go.mod h1:s1YvQhjiSwtLx1f2dOKfiV9x2TT49nVSL6v2rlRpTbY= +github.com/go-analyze/charts v0.6.0 h1:aBE2cbdr58faYGwPk3RUzGQMyg5fGsSAxepwYTYmvhg= +github.com/go-analyze/charts v0.6.0/go.mod h1:m8hqGNSpYYdMMc0Im/RCowY9CIA7705jiltuOVQZWuI= github.com/go-interpreter/wagon v0.5.1-0.20190713202023-55a163980b6c/go.mod h1:5+b/MBYkclRZngKF5s6qrgWxSLgE9F5dFdO1hAueZLc= github.com/go-interpreter/wagon v0.6.0/go.mod h1:5+b/MBYkclRZngKF5s6qrgWxSLgE9F5dFdO1hAueZLc= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= @@ -43,6 +50,8 @@ github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6Wezm github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.2.2 h1:TUR3TgtSVDmjiXOgAAyaZbYmIeP3DPkld3jgKGV8mXQ= +github.com/godbus/dbus/v5 v5.2.2/go.mod h1:3AAv2+hPq5rdnr5txxxRwiGjPXamgoIHgz9FPBfOp3c= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -55,6 +64,8 @@ github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OI github.com/google/pprof v0.0.0-20190908185732-236ed259b199/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/jackmordaunt/icns/v3 v3.0.1 h1:xxot6aNuGrU+lNgxz5I5H0qSeCjNKp8uTXB1j8D4S3o= github.com/jackmordaunt/icns/v3 v3.0.1/go.mod h1:5sHL59nqTd2ynTnowxB/MDQFhKNqkK8X687uKNygaSQ= @@ -71,9 +82,13 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxv github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/mailru/easyjson v0.0.0-20190403194419-1ea4449da983/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190620125010-da37f6c1e481/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -91,16 +106,22 @@ github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.15.0 h1:D0RCU5rMAp+SpgkiNdrjfJ+LX4J1M32V2NeCY7EJ6hc= +github.com/rogpeppe/go-internal v1.15.0/go.mod h1:DrUVZyrJU+txYW5/1kwtXQSMFio52ZOxX7yM1VHvnxs= 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/sergeymakinen/go-bmp v1.0.0 h1:SdGTzp9WvCV0A1V0mBeaS7kQAwNLdVJbmHlqNWq0R+M= github.com/sergeymakinen/go-bmp v1.0.0/go.mod h1:/mxlAQZRLxSvJFNIEGGLBE/m40f3ZnUifpgVDlcUIEY= github.com/sergeymakinen/go-ico v1.0.0-beta.0 h1:m5qKH7uPKLdrygMWxbamVn+tl2HfiA3K6MFJw4GfZvQ= github.com/sergeymakinen/go-ico v1.0.0-beta.0/go.mod h1:wQ47mTczswBO5F0NoDt7O0IXgnV4Xy3ojrroMQzyhUk= +github.com/sergeymakinen/go-ico v1.0.0 h1:uL3khgvKkY6WfAetA+RqsguClBuu7HpvBB/nq/Jvr80= +github.com/sergeymakinen/go-ico v1.0.0/go.mod h1:wQ47mTczswBO5F0NoDt7O0IXgnV4Xy3ojrroMQzyhUk= github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= @@ -135,22 +156,30 @@ golang.org/x/crypto v0.0.0-20180426230345-b49d69b5da94/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= +golang.org/x/crypto v0.54.0 h1:YLIA59K4fiNzHzjnZt2tUJQjQtUWfWbeHBqKtk3eScw= golang.org/x/image v0.36.0 h1:Iknbfm1afbgtwPTmHnS2gTM/6PPZfH+z2EFuOkSbqwc= golang.org/x/image v0.36.0/go.mod h1:YsWD2TyyGKiIX1kZlu9QfKIsQ4nAAK9bdgdrIsE7xy4= +golang.org/x/image v0.44.0 h1:+tDekMZED9+LrtB3G5xzRggpVh9CARjZqROla3R3R+I= +golang.org/x/image v0.44.0/go.mod h1:V8K3KE9KKKE+pLpQDOeN18w9oacNSvy1tDOirTu4xtY= golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c= golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU= +golang.org/x/mod v0.37.0 h1:vF1DjpVEshcIqoEaauuHebaLk1O1forxjxBaVn884JQ= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181102091132-c10e9556a7bc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= +golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= +golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= +golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -163,17 +192,24 @@ golang.org/x/sys v0.0.0-20190927073244-c990c680b611/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= +golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= +golang.org/x/text v0.40.0 h1:Ub2Z6/xjgF1WrYQz2nuITOEegKFtiIy+rieRJ5lHZKs= +golang.org/x/text v0.40.0/go.mod h1:hpnzDAfGV753zIKo+wk3u1bVKCGPbrnF7+7LBF/UHVY= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc= golang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg= +golang.org/x/tools v0.47.0 h1:7Kn5x/d1svx/PzryTsqeoZN4TZwqeH5pGWjefhLi/1Q= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY= +golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -197,6 +233,10 @@ mellium.im/xmlstream v0.15.4 h1:gLKxcWl4rLMUpKgtzrTBvr4OexPeO/edYus+uK3F6ZI= mellium.im/xmlstream v0.15.4/go.mod h1:yXaCW2++fmVO4L9piKVkyLDqnCmictVYF7FDQW8prb4= mellium.im/xmpp v0.22.0 h1:UthQVSwEAr7SNrmyc90c2ykGpVHxjn/3yw8Ey4+Im8s= mellium.im/xmpp v0.22.0/go.mod h1:WSjq12nhREFD88Vy/0WD6Q8inE8t6a8w7QjzwivWitw= +mellium.im/xmpp v0.23.0 h1:rvKvOvMdIURCLaAWEJN8J0QpO3AJYCDKjxLsqtTPSjY= +mellium.im/xmpp v0.23.0/go.mod h1:GHDKlKKQe0LNmD9YqExyxnFEEBiz84KGqnfiA2VNzb8= mvdan.cc/sh v2.6.4+incompatible/go.mod h1:IeeQbZq+x2SUGBensq/jge5lLQbS3XT2ktyp3wrt4x8= nhooyr.io/websocket v1.6.5 h1:8TzpkldRfefda5JST+CnOH135bzVPz5uzfn/AF+gVKg= nhooyr.io/websocket v1.6.5/go.mod h1:F259lAzPRAH0htX2y3ehpJe09ih1aSHN7udWki1defY= +nhooyr.io/websocket v1.8.17 h1:KEVeLJkUywCKVsnLIDlD/5gtayKp8VoCkksHCGGfT9Y= +nhooyr.io/websocket v1.8.17/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= diff --git a/gtk-helpers.go b/gtk-helpers.go index c11034f..c6475c7 100644 --- a/gtk-helpers.go +++ b/gtk-helpers.go @@ -442,7 +442,13 @@ func switchToTab(jid string, w *gtk.Window) { profile_box.Append(ji) } profile_box.Append(gtk.NewLabel(loadedLocale["connectedWithRole"] + mu.MucUserItem.Role)) - profile_box.Append(gtk.NewLabel(loadedLocale["affiliatedAs"] + mu.MucUserItem.Affiliation)) + var affil string + if mu.MucUserItem.Affiliation == "none" { + affil = loadedLocale["unaffiliated"] + } else { + affil = loadedLocale["affiliatedAs"] + mu.MucUserItem.Affiliation + } + profile_box.Append(gtk.NewLabel(affil)) } if ocu.ID != "" { diff --git a/gtk-update.go b/gtk-update.go new file mode 100644 index 0000000..c123648 --- /dev/null +++ b/gtk-update.go @@ -0,0 +1,136 @@ +package main + +import ( + "bytes" + "fmt" + "os" + "path/filepath" + + "io" + "net/http" + "strconv" + + "github.com/BurntSushi/toml" + "github.com/diamondburned/gotk4/pkg/gtk/v4" + "github.com/gen2brain/beeep" + "github.com/jasonlovesdoggo/gopen" +) + +func updateCheck() error { + req, err := http.Get("https://sunglocto.net/lambda_update") + if err != nil { + return err + } + + defer req.Body.Close() + + p, err := io.ReadAll(req.Body) + if err != nil { + return err + } + + newest_version, err := strconv.Atoi(string(p)) + if err != nil { + return err + } + + current_version, err := strconv.Atoi(string(lambda_version)) + if err != nil { + return err + } + + if newest_version > current_version { + win := gtk.NewWindow() + win.SetDefaultSize(1, 1) + box := gtk.NewBox(gtk.OrientationVertical, 5) + header := gtk.NewLabel(loadedLocale["updateAvailable"]) + txt := gtk.NewLabel(fmt.Sprintf(loadedLocale["versionAvailable"], newest_version)) + btn := gtk.NewButtonWithLabel(loadedLocale["seeSite"]) + btn.ConnectClicked(func() { + gopen.Open("https://sunglocto.net/lambda") + win.SetVisible(false) + }) + + header.AddCSSClass("author") + + box.Append(header) + box.Append(txt) + box.Append(btn) + + win.SetChild(box) + win.SetResizable(false) + win.SetVisible(true) + } + + return nil +} + +func showInitialConsent() { + win := gtk.NewWindow() + win.SetDefaultSize(600, 1) + win.SetTitle(loadedLocale["updateCheck"]) + box := gtk.NewBox(gtk.OrientationVertical, 5) + textbox := gtk.NewBox(gtk.OrientationVertical, 5) + subtextbox := gtk.NewBox(gtk.OrientationHorizontal, 5) + header := gtk.NewLabel(loadedLocale["updateCheck"]) + header.AddCSSClass("author") + text := gtk.NewLabel(loadedLocale["updateWarning"]) + text.SetHAlign(gtk.AlignCenter) + textbox.Append(header) + + i := gtk.NewImageFromPaintable(clientAssetsLoad("update")) + i.SetPixelSize(50) + + subtextbox.Append(i) + subtextbox.Append(text) + textbox.Append(subtextbox) + + buttonbox := gtk.NewBox(gtk.OrientationHorizontal, 0) + yes := gtk.NewButtonWithLabel(loadedLocale["yes"]) + yes.SetHExpand(true) + + yes.ConnectClicked(func() { + win.SetVisible(false) + save("yes") + }) + no := gtk.NewButtonWithLabel(loadedLocale["no"]) + no.SetHExpand(true) + + no.ConnectClicked(func() { + win.SetVisible(false) + save("no") + }) + buttonbox.Append(yes) + buttonbox.Append(no) + + box.Append(textbox) + box.Append(buttonbox) + win.SetChild(box) + win.SetResizable(false) + win.SetVisible(true) + +} + +func save(choice string) { + loadedConfig.CheckUpdate = choice + var b bytes.Buffer + e := toml.NewEncoder(&b) + e.Encode(loadedConfig) + + p, err := ensureConfig() + if err != nil { + panic(err) + } + os.WriteFile(filepath.Join(p, "lambda.toml"), b.Bytes(), 0644) + + fmt.Println("a") + // Please add tenary operators to go istg this is painful + + // TODO: This approach may not work for RTL languages OR languages with different structure like CJK + willwont := make(map[string]string) + willwont["yes"] = loadedLocale["updateWill"] + willwont["no"] = loadedLocale["updateWont"] + + beeep.Notify(loadedLocale["attention"], fmt.Sprintf(loadedLocale["updateSave"], willwont[choice]), commentBytes) + +} diff --git a/l18n.go b/l18n.go index 28cba5c..9c343da 100644 --- a/l18n.go +++ b/l18n.go @@ -13,6 +13,8 @@ var enGB = map[string]string{ // British English "send": "Send", "error": "Error", "close": "Close", + "yes": "Yes", + "no": "No", "userRequested": "User requested", "configResourceEmptyWarning": "Config resource is empty! Generating a random one", "attention": "Attention", @@ -61,15 +63,15 @@ var enGB = map[string]string{ // British English // gtk-message.go - "unsupportedMessage": "Unsupported message.", - "bannedWidget": " has been banned by ", + "unsupportedMessage": "Unsupported message.", + "bannedWidget": " has been banned by ", "bannedWidgetNoActor": "has been banned", - "readWidget": " has read to this point", - "isTyping": " is typing...", - "whispers": " whispers", - "noBodySet": "No body set", - "affilChange": "'s affiliation has been changed to ", - "linkPreviewWarning": "This link preview was generated by the client sending it and may not be accurate of the actual website content", + "readWidget": " has read to this point", + "isTyping": " is typing...", + "whispers": " whispers", + "noBodySet": "No body set", + "affilChange": "'s affiliation has been changed to ", + "linkPreviewWarning": "This link preview was generated by the client sending it and may not be accurate of the actual website content", // gtk-helpers.go @@ -87,6 +89,7 @@ var enGB = map[string]string{ // British English "gettingVersion": "Getting version...", "connectedWithRole": "Connected with role ", "affiliatedAs": "Affiliated as ", + "unaffiliated": "Unaffiliated", "participants": "participant(s)", "versionQueryEmpty": "Client responded with empty version", "versionQueryError": "Got error trying to get version", @@ -99,6 +102,17 @@ var enGB = map[string]string{ // British English "SINicknameLabel": "Nickname: ", "SIInsecureLabel": "Insecure: (?)", "SIInsecureLabelTooltip": "Tick this if you need to connect without TLS, usually for connecting to Tor XMPP servers", + + // gtk-update.go + "updateAvailable": "Dear user, there's an update available!!", + "versionAvailable": "Version %d is available now.", + "seeSite": "See website", + + "updateCheck": "Check for updates", + "updateWarning": "Lambda can contact a server in order to check if your version is out of date.\nNo information other than your IP address will be collected.", + "updateSave": "Lambda %s check the upstream server for updates. You can change this at any time via preferences.", + "updateWill": "will", + "updateWont": "won't", } var kaGE = map[string]string{ // Georgian (Georgia) diff --git a/main.go b/main.go index 2d49dc3..c087837 100644 --- a/main.go +++ b/main.go @@ -7,6 +7,8 @@ import ( "context" "fmt" + "path/filepath" + "github.com/diamondburned/gotk4/pkg/gdk/v4" "github.com/diamondburned/gotk4/pkg/gdkpixbuf/v2" "github.com/diamondburned/gotk4/pkg/gio/v2" @@ -16,18 +18,19 @@ import ( "github.com/go-analyze/charts" "github.com/google/uuid" "golang.org/x/net/html/charset" - "path/filepath" + + "time" "github.com/BurntSushi/toml" "gosrc.io/xmpp" "gosrc.io/xmpp/stanza" - "time" _ "embed" "encoding/xml" - "github.com/kr/pretty" "io" "runtime" + + "github.com/kr/pretty" ) var loadedConfig lambdaConfig @@ -310,7 +313,7 @@ func main() { } if presence.Error.Reason != "" { - beeep.Notify(fmt.Sprintf("%s : %s", presence.From, presence.Error.Reason), presence.Error.Text, cancelBytes) + // beeep.Notify(fmt.Sprintf("%s : %s", presence.From, presence.Error.Reason), presence.Error.Text, cancelBytes) return } @@ -482,7 +485,7 @@ func main() { ic = clientAssets["car_high"] } - glib.IdleAdd(func() { + glib.IdleAdd(func() { sStatus.SetText(fmt.Sprintf("%.2f%s", diff, loadedLocale["KBPerSecond"])) sIcon.SetFromPaintable(ic) }) @@ -496,6 +499,17 @@ func main() { connectionStatus.SetText(fmt.Sprintf("%s%s", loadedLocale["connectedAs"], JidMustParse(clientroot.Session.BindJid).Bare())) connectionStatus.SetTooltipText(fmt.Sprintf("%s%s\n%s%t", loadedLocale["bindedJid"], clientroot.Session.BindJid, loadedLocale["usingTLS"], clientroot.Session.TlsEnabled)) connectionIcon.SetFromPaintable(clientAssetsLoad("connect")) + + if loadedConfig.CheckUpdate == "" { + showInitialConsent() + } + + if loadedConfig.CheckUpdate == "yes" { + err := updateCheck() + if err != nil { + panic(err) + } + } }) // Enable carbons client.SendRaw(fmt.Sprintf( diff --git a/types.go b/types.go index aa62de2..99b5f96 100644 --- a/types.go +++ b/types.go @@ -30,6 +30,7 @@ type lambdaConfig struct { CompactMode bool ShowAvatarsInMemberList bool CustomNicks map[string]string + CheckUpdate string } type mucUnit struct { diff --git a/version.go b/version.go index d1f4ba5..97015df 100644 --- a/version.go +++ b/version.go @@ -1,3 +1,3 @@ package main -var lambda_version string = "26w17a" +var lambda_version string = "1"