mirror of
https://github.com/hrfee/jfa-go.git
synced 2024-12-22 17:10:10 +00:00
Harvey Tindall
e49996c401
Since an invalid example config was created on first run, if the app restarted before setup was completed, it would crash on the next start. The example now has a "first_run" flag in it, which is only set to false when the config is modified. Also fixed restart at the end of setup for tray builds.
106 lines
2.0 KiB
Go
106 lines
2.0 KiB
Go
// +build tray
|
|
|
|
package main
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
"github.com/getlantern/systray"
|
|
"github.com/skratchdot/open-golang/open"
|
|
// "github.com/getlantern/systray"
|
|
)
|
|
|
|
var TRAY = true
|
|
|
|
func RunTray() {
|
|
systray.Run(onReady, onExit)
|
|
}
|
|
|
|
func onExit() {
|
|
if RUNNING {
|
|
QUIT = true
|
|
RESTART <- true
|
|
}
|
|
os.Remove(SOCK)
|
|
}
|
|
|
|
func onReady() {
|
|
icon, err := localFS.ReadFile("web/favicon.ico")
|
|
if err != nil {
|
|
log.Fatalf("Failed to load favicon: %v", err)
|
|
}
|
|
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")
|
|
mOpenLogs := systray.AddMenuItem("Open logs", "Open jfa-go log file.")
|
|
as := NewAutostart("jfa-go", "A user management system for Jellyfin", "Run on login", "Run jfa-go on user login.")
|
|
mQuit := systray.AddMenuItem("Quit", "Quit jfa-go")
|
|
|
|
c := make(chan os.Signal, 1)
|
|
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
|
|
go func() {
|
|
<-c
|
|
systray.Quit()
|
|
os.Exit(1)
|
|
}()
|
|
defer func() {
|
|
systray.Quit()
|
|
}()
|
|
|
|
RESTART = make(chan bool, 1)
|
|
TRAYRESTART = make(chan bool, 1)
|
|
go start(false, true)
|
|
mStart.Disable()
|
|
mStop.Enable()
|
|
mRestart.Enable()
|
|
go as.HandleCheck()
|
|
trayRestart := func() {
|
|
if RUNNING {
|
|
RESTART <- true
|
|
mStop.Disable()
|
|
mStart.Enable()
|
|
mRestart.Disable()
|
|
for {
|
|
if !RUNNING {
|
|
break
|
|
}
|
|
}
|
|
go start(false, false)
|
|
mStart.Disable()
|
|
mStop.Enable()
|
|
mRestart.Enable()
|
|
}
|
|
}
|
|
for {
|
|
select {
|
|
case <-mStart.ClickedCh:
|
|
if !RUNNING {
|
|
go start(false, false)
|
|
mStart.Disable()
|
|
mStop.Enable()
|
|
mRestart.Enable()
|
|
}
|
|
case <-mStop.ClickedCh:
|
|
if RUNNING {
|
|
RESTART <- true
|
|
mStop.Disable()
|
|
mStart.Enable()
|
|
mRestart.Disable()
|
|
}
|
|
case <-TRAYRESTART:
|
|
trayRestart()
|
|
case <-mRestart.ClickedCh:
|
|
trayRestart()
|
|
case <-mOpenLogs.ClickedCh:
|
|
open.Start(logPath)
|
|
case <-mQuit.ClickedCh:
|
|
systray.Quit()
|
|
}
|
|
}
|
|
}
|