Release 1.8.0: auto-update with restart and AmneziaWG 2.0 support.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Navis
2026-07-29 06:45:57 +03:00
co-authored by Cursor
parent cd0b3f4707
commit 672979be4c
27 changed files with 1396 additions and 228 deletions
+35 -1
View File
@@ -21,6 +21,7 @@ import (
"vpnclient/internal/config"
"vpnclient/internal/core"
"vpnclient/internal/netcheck"
"vpnclient/internal/protocols/awg"
"vpnclient/internal/protocols/hysteria2"
"vpnclient/internal/protocols/naive"
"vpnclient/internal/update"
@@ -57,6 +58,10 @@ type uiState struct {
}
func main() {
if update.MaybeFinishUpdate(os.Args[1:]) {
return
}
log.SetFlags(log.LstdFlags | log.Lshortfile)
cfgPath, err := config.LocateConfig()
@@ -134,6 +139,8 @@ func main() {
mustBind(w, "saveHy2", a.saveHy2)
mustBind(w, "importSubscription", a.importSubscription)
go a.autoCheckUpdate()
w.SetHtml(appui.IndexHTML)
w.Run()
}
@@ -164,6 +171,10 @@ func (a *app) getState() (uiState, error) {
if path, err := hysteria2.ResolveBinary(a.mgr.BinDir()); err == nil {
corePath, coreReady = path, true
}
case config.ProtocolAWG:
if path, err := awg.ResolveBinary(a.mgr.BinDir()); err == nil {
corePath, coreReady = path, true
}
default:
if path, err := naive.ResolveBinary(a.mgr.BinDir()); err == nil {
corePath, coreReady = path, true
@@ -326,7 +337,30 @@ func (a *app) checkUpdate() (update.Status, error) {
func (a *app) applyUpdate() (string, error) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Minute)
defer cancel()
return update.Apply(ctx, update.DefaultManifestURL)
latest, err := update.Apply(ctx, update.DefaultManifestURL)
if err != nil {
return "", err
}
_ = a.mgr.Disconnect()
go func() {
time.Sleep(400 * time.Millisecond)
if a.webview != nil {
a.webview.Terminate()
}
os.Exit(0)
}()
return "Устанавливается v" + latest + "… Navis перезапустится.", nil
}
func (a *app) autoCheckUpdate() {
time.Sleep(3 * time.Second)
st, err := a.checkUpdate()
if err != nil || !st.Available {
return
}
// Auto-apply + relaunch when a newer build is published.
time.Sleep(1500 * time.Millisecond)
_, _ = a.applyUpdate()
}
func openURL(raw string) error {