From 5dee414596a0694d339fa1801a228d36c6c8842d Mon Sep 17 00:00:00 2001 From: Harvey Tindall Date: Sun, 16 May 2021 17:40:03 +0100 Subject: [PATCH] add "autostart on login" option to tray --- go.mod | 1 + go.sum | 2 ++ tray.go | 44 ++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index b8ffdb2..4634638 100644 --- a/go.mod +++ b/go.mod @@ -12,6 +12,7 @@ replace github.com/hrfee/jfa-go/logger => ./logger require ( github.com/dgrijalva/jwt-go v3.2.0+incompatible + github.com/emersion/go-autostart v0.0.0-20210130080809-00ed301c8e9a // indirect github.com/fatih/color v1.10.0 github.com/fsnotify/fsnotify v1.4.9 github.com/getlantern/systray v1.1.0 // indirect diff --git a/go.sum b/go.sum index acb961a..4b50060 100644 --- a/go.sum +++ b/go.sum @@ -26,6 +26,8 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumC github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/elazarl/go-bindata-assetfs v1.0.0 h1:G/bYguwHIzWq9ZoyUQqrjTmJbbYn3j3CKKpKinvZLFk= github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4= +github.com/emersion/go-autostart v0.0.0-20210130080809-00ed301c8e9a h1:M88ob4TyDnEqNuL3PgsE/p3bDujfspnulR+0dQWNYZs= +github.com/emersion/go-autostart v0.0.0-20210130080809-00ed301c8e9a/go.mod h1:buzQsO8HHkZX2Q45fdfGH1xejPjuDQaXH8btcYMFzPM= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473 h1:4cmBvAEBNJaGARUEs3/suWRyfyBfhf7I60WBZq+bv2w= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A= diff --git a/tray.go b/tray.go index e9fa7c4..cd52f15 100644 --- a/tray.go +++ b/tray.go @@ -3,11 +3,14 @@ package main import ( + "fmt" "log" "os" "os/signal" + "path/filepath" "syscall" + "github.com/emersion/go-autostart" "github.com/getlantern/systray" ) @@ -30,14 +33,34 @@ func onReady() { if err != nil { log.Fatalf("Failed to load favicon: %v", err) } - + command := os.Args + command[0], _ = filepath.Abs(command[0]) + // Make sure to replace any relative paths with absolute ones + pathArgs := []string{"-d", "-data", "-c", "-config"} + for i := 1; i < len(command); i++ { + isPath := false + for _, p := range pathArgs { + if command[i-1] == p { + isPath = true + break + } + } + if isPath { + command[i], _ = filepath.Abs(command[i]) + } + } + as := &autostart.App{ + Name: "jfa-go", + DisplayName: "A user management system for Jellyfin", + Exec: command, + } systray.SetIcon(icon) systray.SetTitle("jfa-go") mStart := systray.AddMenuItem("Start", "Start jfa-go") mStop := systray.AddMenuItem("Stop", "Stop jfa-go") mRestart := systray.AddMenuItem("Restart", "Restart jfa-go") mQuit := systray.AddMenuItem("Quit", "Quit jfa-go") - mOnBoot := systray.AddMenuItemCheckbox("Run on login", "Run jfa-go on user login.", false) + mOnLogin := systray.AddMenuItemCheckbox("Run on login", "Run jfa-go on user login.", as.IsEnabled()) c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt, syscall.SIGTERM) @@ -89,6 +112,23 @@ func onReady() { } case <-mQuit.ClickedCh: systray.Quit() + case <-mOnLogin.ClickedCh: + fmt.Printf("Checked: %t, Enabled: %t\n", mOnLogin.Checked(), as.IsEnabled()) + if !mOnLogin.Checked() { + if err := as.Enable(); err != nil { + log.Printf("Failed to enable autostart on login: %v", err) + } else { + mOnLogin.Check() + log.Printf("Enabled autostart") + } + } else { + if err := as.Disable(); err != nil { + log.Printf("Failed to disable autostart on login: %v", err) + } else { + mOnLogin.Uncheck() + log.Printf("Disabled autostart") + } + } } } }