diff --git a/.vscode/settings.json b/.vscode/settings.json index d1afcdf..b2b2786 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,6 +2,7 @@ "cSpell.words": [ "daulog", "Debugf", - "inconsolata" + "inconsolata", + "skratchdot" ] } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d73a54..62f73eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ All notable changes to this project will be documented in this file. - Automatically open your web browser to the `dau` web interface (can be disabled in configuration) +- Add system tray/menubar icon for control ## [v0.12.1] - 2020-05-01 diff --git a/build-release.pl b/build-release.pl index 7af8f7e..123f180 100755 --- a/build-release.pl +++ b/build-release.pl @@ -34,6 +34,7 @@ foreach my $type (keys %build) { add_extras(); foreach my $type (keys %build) { + print "building for $type\n"; local $ENV{GOOS} = $build{$type}->{env}->{GOOS}; local $ENV{GOARCH} = $build{$type}->{env}->{GOARCH}; system "go", "build", "-o", "release/$type/" . $build{$type}->{filename}; diff --git a/dau.go b/dau.go index 04ee2c9..2741925 100644 --- a/dau.go +++ b/dau.go @@ -11,16 +11,17 @@ import ( "strings" "time" + _ "embed" + _ "image/gif" _ "image/jpeg" _ "image/png" - // "github.com/skratchdot/open-golang/open" - "github.com/tardisx/discord-auto-upload/config" daulog "github.com/tardisx/discord-auto-upload/log" "github.com/tardisx/discord-auto-upload/upload" + "github.com/getlantern/systray" "github.com/skratchdot/open-golang/open" // "github.com/tardisx/discord-auto-upload/upload" @@ -35,6 +36,9 @@ type watch struct { uploader *upload.Uploader } +//go:embed dau.ico +var appIcon []byte + func main() { parseOptions() @@ -54,8 +58,7 @@ func main() { web.StartWebServer() if config.Config.OpenBrowserOnStart { - address := fmt.Sprintf("http://localhost:%d", config.Config.Port) - open.Start(address) + openWebBrowser(config.Config.Port) } go func() { @@ -72,7 +75,11 @@ func main() { // create the watchers, restart them if config changes // blocks forever - startWatchers(config, up, configChanged) + go func() { + startWatchers(config, up, configChanged) + }() + + systray.Run(func() { onReady(config) }, onExit) } @@ -195,3 +202,45 @@ func parseOptions() { } } + +func onReady(c *config.ConfigService) { + + systray.SetIcon(appIcon) + //systray.SetTitle("DAU") + systray.SetTooltip(fmt.Sprintf("discord-auto-upload %s", version.CurrentVersion)) + openApp := systray.AddMenuItem("Open", "Open in web browser") + gh := systray.AddMenuItem("Github", "Open project page") + ghr := systray.AddMenuItem("Release Notes", "Open project release notes") + quit := systray.AddMenuItem("Quit", "Quit") + + go func() { + <-quit.ClickedCh + systray.Quit() + }() + + go func() { + for { + select { + case <-openApp.ClickedCh: + openWebBrowser(c.Config.Port) + case <-gh.ClickedCh: + open.Start("https://github.com/tardisx/discord-auto-upload") + case <-ghr.ClickedCh: + open.Start(fmt.Sprintf("https://github.com/tardisx/discord-auto-upload/releases/tag/%s", version.CurrentVersion)) + } + } + }() + + // Sets the icon of a menu item. Only available on Mac and Windows. + // mQuit.SetIcon(icon.Data) +} + +func onExit() { + // clean up here + daulog.Info("quitting on user request") +} + +func openWebBrowser(port int) { + address := fmt.Sprintf("http://localhost:%d", port) + open.Start(address) +} diff --git a/dau.ico b/dau.ico new file mode 100644 index 0000000..11b747d Binary files /dev/null and b/dau.ico differ diff --git a/go.mod b/go.mod index c7513ff..1596547 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.16 require ( github.com/fogleman/gg v1.3.0 + github.com/getlantern/systray v1.2.1 // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect github.com/gorilla/mux v1.8.0 // indirect github.com/mitchellh/go-homedir v1.1.0 diff --git a/go.sum b/go.sum index 002ef7c..5709b1e 100644 --- a/go.sum +++ b/go.sum @@ -1,13 +1,35 @@ +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8= github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +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= +github.com/getlantern/errors v0.0.0-20190325191628-abdb3e3e36f7/go.mod h1:l+xpFBrCtDLpK9qNjxs+cHU6+BAdlBaxHqikB6Lku3A= +github.com/getlantern/golog v0.0.0-20190830074920-4ef2e798c2d7 h1:guBYzEaLz0Vfc/jv0czrr2z7qyzTOGC9hiQ0VC+hKjk= +github.com/getlantern/golog v0.0.0-20190830074920-4ef2e798c2d7/go.mod h1:zx/1xUUeYPy3Pcmet8OSXLbF47l+3y6hIPpyLWoR9oc= +github.com/getlantern/hex v0.0.0-20190417191902-c6586a6fe0b7 h1:micT5vkcr9tOVk1FiH8SWKID8ultN44Z+yzd2y/Vyb0= +github.com/getlantern/hex v0.0.0-20190417191902-c6586a6fe0b7/go.mod h1:dD3CgOrwlzca8ed61CsZouQS5h5jIzkK9ZWrTcf0s+o= +github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55 h1:XYzSdCbkzOC0FDNrgJqGRo8PCMFOBFL9py72DRs7bmc= +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/systray v1.2.1 h1:udsC2k98v2hN359VTFShuQW6GGprRprw6kD6539JikI= +github.com/getlantern/systray v1.2.1/go.mod h1:AecygODWIsBquJCJFop8MEQcJbWFfw/1yWbVabNgpCM= +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/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/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= 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/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 h1:JIAuq3EEf9cgbU6AtGPK4CTG3Zf6CKMNqf0MHTggAUA= github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/image v0.0.0-20210504121937-7319ad40d33e h1:PzJMNfFQx+QO9hrC1GwZ4BoPGeNGhfeQEgcQFArEjPk= @@ -19,6 +41,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9 h1:YTzHMGlqJu67/uEo1lBv0n3wBXhXNeUbB1XfN2vmTm0= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/version/version.go b/version/version.go index 77f3be4..8cf8c5d 100644 --- a/version/version.go +++ b/version/version.go @@ -13,7 +13,7 @@ import ( "golang.org/x/mod/semver" ) -const CurrentVersion string = "v0.12.1" +const CurrentVersion string = "v0.12.2" type GithubRelease struct { HTMLURL string `json:"html_url"`