49c7d83840
"-H=windowsgui" disables stdout on Windows, and the io.Multiwriter used
for logging had stdout as it's first entry, which failed and caused
logging and line caching to be skipped. stdout is now removed from
the multiwriter in this situation. Other portion of the issue was
because crash reports had colons in their names, which Windows
doesn't like. Fixes #168.
111 lines
2.0 KiB
Go
111 lines
2.0 KiB
Go
//go:build tray
|
|
// +build tray
|
|
|
|
package main
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
"github.com/getlantern/systray"
|
|
)
|
|
|
|
var TRAY = true
|
|
|
|
func RunTray() {
|
|
systray.Run(onReady, onExit)
|
|
}
|
|
|
|
func QuitTray() {
|
|
systray.Quit()
|
|
}
|
|
|
|
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:
|
|
log.Printf("Opening %s\n", logPath)
|
|
OpenFile(logPath)
|
|
case <-mQuit.ClickedCh:
|
|
systray.Quit()
|
|
}
|
|
}
|
|
}
|