From 6a2da1056d32b751c6d947b0bcb9f7e96fd93230 Mon Sep 17 00:00:00 2001 From: maxb Date: Fri, 13 Mar 2020 14:19:18 -0700 Subject: [PATCH] Use temp directory for walk resource manager (#129) * Use temp directory for walk resource manager * Use appdir for temp dir Co-authored-by: Ox Cart --- go.mod | 3 +++ go.sum | 6 ++++++ systray_windows.go | 20 +++++++++++++++++--- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 86cd151..e53e856 100644 --- a/go.mod +++ b/go.mod @@ -3,9 +3,12 @@ module github.com/getlantern/systray go 1.12 require ( + github.com/getlantern/appdir v0.0.0-20180320102544-7c0f9d241ea7 github.com/getlantern/golog v0.0.0-20190830074920-4ef2e798c2d7 + github.com/getlantern/uuid v1.2.0 github.com/lxn/walk v0.0.0-20191113135339-bf589de20b3c github.com/lxn/win v0.0.0-20191106123917-121afc750dd3 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect golang.org/x/sys v0.0.0-20190919044723-0c1ff786ef13 // indirect gopkg.in/Knetic/govaluate.v3 v3.0.0 // indirect ) diff --git a/go.sum b/go.sum index 48795fe..3bdd53e 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/getlantern/appdir v0.0.0-20180320102544-7c0f9d241ea7 h1:4b2ht7EWptzPz/e6shqGZn3p5dXh4E3VETyKMTTPfGo= +github.com/getlantern/appdir v0.0.0-20180320102544-7c0f9d241ea7/go.mod h1:3vR6+jQdWfWojZ77w+htCqEF5MO/Y2twJOpAvFuM9po= github.com/getlantern/context v0.0.0-20190109183933-c447772a6520 h1:NRUJuo3v3WGC/g5YiyF790gut6oQr5f3FBI88Wv0dx4= github.com/getlantern/context v0.0.0-20190109183933-c447772a6520/go.mod h1:L+mq6/vvYHKjCX2oez0CgEAJmbq1fbb/oNJIWQkBybY= github.com/getlantern/errors v0.0.0-20190325191628-abdb3e3e36f7 h1:6uJ+sZ/e03gkbqZ0kUG6mfKoqDb4XMAzMIwlajq19So= @@ -12,12 +14,16 @@ github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55 h1:XYzSdCbkzOC0F github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55/go.mod h1:6mmzY2kW1TOOrVy+r41Za2MxXM+hhqTtY3oBKd2AgFA= github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f h1:wrYrQttPS8FHIRSlsrcuKazukx/xqO/PpLZzZXsF+EA= github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f/go.mod h1:D5ao98qkA6pxftxoqzibIBBrLSUli+kYnJqrgBf9cIA= +github.com/getlantern/uuid v1.2.0 h1:pGrGaCV7XEaG6lvjWkwf8Y92BjB/9yFmkKsNFpRQ7rc= +github.com/getlantern/uuid v1.2.0/go.mod h1:uX10hOzZUUDR+oYNSIks+RcozOEiwTNC/K2rw9SUi1k= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/lxn/walk v0.0.0-20191113135339-bf589de20b3c h1:4pJw1uBKndwiBBJpcbqP1Bf90YfqTJUsHG9DVoAfIQ8= github.com/lxn/walk v0.0.0-20191113135339-bf589de20b3c/go.mod h1:E23UucZGqpuUANJooIbHWCufXvOcT6E7Stq81gU+CSQ= github.com/lxn/win v0.0.0-20191106123917-121afc750dd3 h1:DvGEvKK/Qnhph/EgdBN9zXA7pEosgJ0k57ojII51JAo= github.com/lxn/win v0.0.0-20191106123917-121afc750dd3/go.mod h1:ouWl4wViUNh8tPSIwxTVMuS014WakR1hqvBc2I0bMoA= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw= github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= diff --git a/systray_windows.go b/systray_windows.go index 03dc032..6e8e3de 100644 --- a/systray_windows.go +++ b/systray_windows.go @@ -6,10 +6,12 @@ import ( "crypto/md5" "fmt" "io/ioutil" - "path/filepath" "os" + "path/filepath" "sync/atomic" + "github.com/getlantern/appdir" + "github.com/getlantern/uuid" "github.com/lxn/walk" ) @@ -26,6 +28,18 @@ var ( ) func nativeLoop(title string, width int, height int) { + if randomPath, uuidErr := uuid.NewRandom(); uuidErr != nil { + fail("Unable to generate guid for creating temp dir (this should never happen): %v", uuidErr) + } else { + tmpDir := filepath.Join(appdir.General("systray"), randomPath.String()) + if dirErr := os.MkdirAll(tmpDir, 0755); dirErr != nil { + fail("Error creating temp dir: %s", dirErr) + } else { + walk.Resources.SetRootDirPath(tmpDir) + defer os.RemoveAll(tmpDir) + } + } + var err error mainWindow, err = walk.NewMainWindow() if err != nil { @@ -78,7 +92,7 @@ func quit() { // for other platforms. func SetIcon(iconBytes []byte) { md5 := md5.Sum(iconBytes) - filename := fmt.Sprintf("systray.%x.ico", md5) + filename := fmt.Sprintf("%x.ico", md5) iconpath := filepath.Join(walk.Resources.RootDirPath(), filename) // First, try to find a previously loaded icon in walk cache icon, err := walk.Resources.Icon(filename) @@ -172,7 +186,7 @@ func addOrUpdateMenuItem(item *MenuItem) { // iconBytes should be the content of .ico/.jpg/.png func (item *MenuItem) SetIcon(iconBytes []byte) { md5 := md5.Sum(iconBytes) - filename := fmt.Sprintf("systray.%x.ico", md5) + filename := fmt.Sprintf("%x.ico", md5) iconpath := filepath.Join(walk.Resources.RootDirPath(), filename) // First, try to find a previously loaded icon in walk cache icon, err := walk.Resources.Image(filename)