mirror of
https://github.com/Mikescher/kpsync.git
synced 2025-08-25 08:38:03 +02:00
140 lines
3.0 KiB
Go
140 lines
3.0 KiB
Go
package app
|
|
|
|
import (
|
|
"fyne.io/systray"
|
|
"mikescher.com/kpsync/assets"
|
|
)
|
|
|
|
func (app *Application) initTray() {
|
|
|
|
sigBGStop := make(chan bool, 128)
|
|
|
|
trayOnReady := func() {
|
|
|
|
app.masterLock.Lock()
|
|
defer app.masterLock.Unlock()
|
|
|
|
systray.SetIcon(assets.IconInit)
|
|
systray.SetTitle("KeepassXC Sync")
|
|
app.currSysTrayTooltip = "Initializing..."
|
|
systray.SetTooltip(app.currSysTrayTooltip)
|
|
|
|
miSync := systray.AddMenuItem("Sync Now (checked)", "")
|
|
miSyncForce := systray.AddMenuItem("Sync Now (forced)", "")
|
|
miShowLogFifo := systray.AddMenuItem("Show Log (fifo)", "")
|
|
miShowLogFile := systray.AddMenuItem("Show Log (file)", "")
|
|
systray.AddMenuItem("", "")
|
|
app.trayItemChecksum = systray.AddMenuItem("Checksum: {...}", "")
|
|
app.trayItemETag = systray.AddMenuItem("ETag: {...}", "")
|
|
app.trayItemLastModified = systray.AddMenuItem("LastModified: {...}", "")
|
|
systray.AddMenuItem("", "")
|
|
miQuit := systray.AddMenuItem("Quit", "")
|
|
|
|
app.LogDebug("SysTray initialized")
|
|
app.LogLine()
|
|
|
|
go func() {
|
|
for {
|
|
select {
|
|
case <-miSync.ClickedCh:
|
|
app.LogDebug("SysTray: [Sync Now (checked)] clicked")
|
|
app.LogLine()
|
|
go func() { app.runExplicitSync(false) }()
|
|
case <-miSyncForce.ClickedCh:
|
|
app.LogDebug("SysTray: [Sync Now (forced)] clicked")
|
|
app.LogLine()
|
|
go func() { app.runExplicitSync(true) }()
|
|
case <-miShowLogFifo.ClickedCh:
|
|
app.LogDebug("SysTray: [Show Log Fifo] clicked")
|
|
app.LogLine()
|
|
go func() { app.openLogFifo() }()
|
|
case <-miShowLogFile.ClickedCh:
|
|
app.LogDebug("SysTray: [Show Log File] clicked")
|
|
app.LogLine()
|
|
go func() { app.openLogFile() }()
|
|
case <-miQuit.ClickedCh:
|
|
app.LogDebug("SysTray: [Quit] clicked")
|
|
app.LogLine()
|
|
app.sigManualStopChan <- true
|
|
case <-sigBGStop:
|
|
app.LogDebug("SysTray: Click-Listener goroutine stopped")
|
|
app.LogLine()
|
|
return
|
|
|
|
}
|
|
}
|
|
}()
|
|
|
|
app.trayReady.Set(true)
|
|
}
|
|
|
|
systray.Run(trayOnReady, nil)
|
|
|
|
sigBGStop <- true
|
|
|
|
app.LogDebug("SysTray stopped")
|
|
app.LogLine()
|
|
|
|
app.trayReady.Set(false)
|
|
}
|
|
|
|
func (app *Application) setTrayState(txt string, icon []byte) func() {
|
|
if !app.trayReady.Get() {
|
|
return func() {}
|
|
}
|
|
|
|
app.masterLock.Lock()
|
|
defer app.masterLock.Unlock()
|
|
|
|
systray.SetIcon(icon)
|
|
systray.SetTooltip(txt)
|
|
|
|
var finDone = false
|
|
|
|
fin := func() {
|
|
app.masterLock.Lock()
|
|
defer app.masterLock.Unlock()
|
|
|
|
if finDone {
|
|
return
|
|
}
|
|
|
|
if !app.trayReady.Get() {
|
|
return
|
|
}
|
|
|
|
systray.SetIcon(assets.IconDefault)
|
|
app.currSysTrayTooltip = "Sleeping..."
|
|
systray.SetTooltip(app.currSysTrayTooltip)
|
|
|
|
finDone = true
|
|
}
|
|
|
|
return fin
|
|
}
|
|
|
|
func (app *Application) setTrayStateDirect(txt string, icon []byte) {
|
|
if !app.trayReady.Get() {
|
|
return
|
|
}
|
|
|
|
app.masterLock.Lock()
|
|
defer app.masterLock.Unlock()
|
|
|
|
systray.SetIcon(icon)
|
|
systray.SetTooltip(txt)
|
|
}
|
|
|
|
func (app *Application) setTrayTooltip(txt string) {
|
|
if !app.trayReady.Get() {
|
|
return
|
|
}
|
|
|
|
app.masterLock.Lock()
|
|
defer app.masterLock.Unlock()
|
|
|
|
systray.SetTooltip(txt)
|
|
app.currSysTrayTooltip = txt
|
|
systray.SetTooltip(app.currSysTrayTooltip)
|
|
}
|