fix(display): cloud connecting animation

This commit is contained in:
Siyuan Miao 2025-04-13 15:54:24 +02:00
parent fd3a8cb553
commit d136a90106
1 changed files with 15 additions and 21 deletions

View File

@ -1,7 +1,6 @@
package kvm package kvm
import ( import (
"context"
"errors" "errors"
"fmt" "fmt"
"os" "os"
@ -89,9 +88,9 @@ func switchToScreenIfDifferent(screenName string) {
} }
var ( var (
cloudBlinkCtx context.Context cloudBlinkLock sync.Mutex = sync.Mutex{}
cloudBlinkCancel context.CancelFunc cloudBlinkStopped bool
cloudBlinkTicker *time.Ticker cloudBlinkTicker *time.Ticker
) )
func updateDisplay() { func updateDisplay() {
@ -141,33 +140,28 @@ func updateDisplay() {
func startCloudBlink() { func startCloudBlink() {
if cloudBlinkTicker == nil { if cloudBlinkTicker == nil {
cloudBlinkTicker = time.NewTicker(2 * time.Second) cloudBlinkTicker = time.NewTicker(2 * time.Second)
} } else {
// do nothing if the blink isn't stopped
if cloudBlinkStopped {
cloudBlinkLock.Lock()
defer cloudBlinkLock.Unlock()
if cloudBlinkCtx != nil { cloudBlinkStopped = false
cloudBlinkCancel() cloudBlinkTicker.Reset(2 * time.Second)
}
} }
cloudBlinkCtx, cloudBlinkCancel = context.WithCancel(appCtx)
cloudBlinkTicker.Reset(2 * time.Second)
go func() { go func() {
defer cloudBlinkTicker.Stop()
for { for {
select { select {
case <-cloudBlinkTicker.C: case <-cloudBlinkTicker.C:
if cloudConnectionState != CloudConnectionStateConnecting { if cloudConnectionState != CloudConnectionStateConnecting {
return continue
} }
_, _ = lvObjFadeIn("ui_Home_Header_Cloud_Status_Icon", 1000)
time.Sleep(1000 * time.Millisecond)
_, _ = lvObjFadeOut("ui_Home_Header_Cloud_Status_Icon", 1000) _, _ = lvObjFadeOut("ui_Home_Header_Cloud_Status_Icon", 1000)
time.Sleep(1000 * time.Millisecond) time.Sleep(1000 * time.Millisecond)
case <-cloudBlinkCtx.Done():
time.Sleep(1000 * time.Millisecond)
_, _ = lvObjFadeIn("ui_Home_Header_Cloud_Status_Icon", 1000) _, _ = lvObjFadeIn("ui_Home_Header_Cloud_Status_Icon", 1000)
time.Sleep(1000 * time.Millisecond) time.Sleep(1000 * time.Millisecond)
_, _ = lvObjSetOpacity("ui_Home_Header_Cloud_Status_Icon", 255)
return
} }
} }
}() }()
@ -178,9 +172,9 @@ func stopCloudBlink() {
cloudBlinkTicker.Stop() cloudBlinkTicker.Stop()
} }
if cloudBlinkCtx != nil { cloudBlinkLock.Lock()
cloudBlinkCancel() defer cloudBlinkLock.Unlock()
} cloudBlinkStopped = true
} }
var ( var (