Release 3.8.2.2: macOS Dock icon turns sea-wave N when connected.

Swap application icon on connect/disconnect via AppKit; ship arm64 build.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
M4
2026-07-30 02:52:55 +03:00
co-authored by Cursor
parent 621c847cb3
commit 838f9e340b
21 changed files with 165 additions and 30 deletions
+24 -2
View File
@@ -18,6 +18,7 @@ import (
"vpnclient/internal/config"
"vpnclient/internal/core"
"vpnclient/internal/corebin"
"vpnclient/internal/dockicon"
"vpnclient/internal/logbuf"
"vpnclient/internal/netcheck"
"vpnclient/internal/protocols/awg"
@@ -264,18 +265,23 @@ func (a *App) ConnectProfile(name string) error {
perr := a.Mgr.Probe(pctx, "")
pcancel()
if perr == nil {
dockicon.SetConnected(true)
return nil
}
last = fmt.Errorf("туннель не прошёл проверку: %w", perr)
a.Mgr.SetLastError(last.Error())
_ = a.Mgr.Disconnect()
dockicon.SetConnected(false)
time.Sleep(400 * time.Millisecond)
}
dockicon.SetConnected(false)
return last
}
func (a *App) Disconnect() error {
return a.Mgr.Disconnect()
err := a.Mgr.Disconnect()
dockicon.SetConnected(false)
return err
}
func (a *App) GetLogs() string {
@@ -303,9 +309,10 @@ func (a *App) SavePrefs(connectOnLaunch, autoReconnect, systemProxy bool) error
})
}
// StartBackground runs reconnect-on-crash and optional connect-on-launch.
// StartBackground runs reconnect-on-crash, optional connect-on-launch, and Dock icon sync.
func (a *App) StartBackground() {
go a.watchdogLoop()
go a.dockIconLoop()
prefs := a.Mgr.Prefs()
if prefs.ConnectOnLaunch {
go func() {
@@ -318,6 +325,21 @@ func (a *App) StartBackground() {
}
}
func (a *App) dockIconLoop() {
dockicon.SetConnected(false)
var last bool
first := true
for {
time.Sleep(400 * time.Millisecond)
up := a.Mgr.Status().Connected
if first || up != last {
first = false
last = up
dockicon.SetConnected(up)
}
}
}
func (a *App) watchdogLoop() {
for {
time.Sleep(2 * time.Second)