mirror of
https://github.com/hrfee/jfa-go.git
synced 2024-12-22 17:10:10 +00:00
Harvey Tindall
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()
|
|
}
|
|
}
|
|
}
|