Skip to content

Commit 60c664f

Browse files
Stop sleep monitor on disconnect and restart on connect
1 parent cb6b086 commit 60c664f

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-4
lines changed

client/ui/client_ui.go

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,9 @@ type serviceClient struct {
320320
logFile string
321321
wLoginURL fyne.Window
322322

323+
sleepService *sleep.Service
324+
sleepLock sync.Mutex
325+
323326
connectCancel context.CancelFunc
324327
}
325328

@@ -1165,6 +1168,14 @@ func (s *serviceClient) getSrvClient(timeout time.Duration) (proto.DaemonService
11651168

11661169
// startSleepListener initializes the sleep detection service and listens for sleep events
11671170
func (s *serviceClient) startSleepListener() {
1171+
s.sleepLock.Lock()
1172+
defer s.sleepLock.Unlock()
1173+
1174+
if s.sleepService != nil {
1175+
log.Debug("sleep detection service already initialized")
1176+
return
1177+
}
1178+
11681179
sleepService, err := sleep.New()
11691180
if err != nil {
11701181
log.Warnf("%v", err)
@@ -1176,18 +1187,32 @@ func (s *serviceClient) startSleepListener() {
11761187
return
11771188
}
11781189

1190+
s.sleepService = sleepService
11791191
log.Info("sleep detection service initialized")
11801192

11811193
// Cleanup on context cancellation
11821194
go func() {
11831195
<-s.ctx.Done()
1184-
log.Info("stopping sleep event listener")
1185-
if err := sleepService.Deregister(); err != nil {
1186-
log.Errorf("failed to deregister sleep detection: %v", err)
1187-
}
1196+
s.stopSleepListener()
11881197
}()
11891198
}
11901199

1200+
// stopSleepListener stops the sleep detection service
1201+
func (s *serviceClient) stopSleepListener() {
1202+
s.sleepLock.Lock()
1203+
defer s.sleepLock.Unlock()
1204+
1205+
if s.sleepService == nil {
1206+
return
1207+
}
1208+
1209+
log.Info("stopping sleep event listener")
1210+
if err := s.sleepService.Deregister(); err != nil {
1211+
log.Errorf("failed to deregister sleep detection: %v", err)
1212+
}
1213+
s.sleepService = nil
1214+
}
1215+
11911216
// handleSleepEvents sends a sleep notification to the daemon via gRPC
11921217
func (s *serviceClient) handleSleepEvents(event sleep.EventType) {
11931218
conn, err := s.getSrvClient(0)

client/ui/event_handler.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ func (h *eventHandler) handleConnectClick() {
7979

8080
go func() {
8181
defer connectCancel()
82+
defer h.client.startSleepListener()
8283

8384
if err := h.client.menuUpClick(connectCtx); err != nil {
8485
st, ok := status.FromError(err)
@@ -105,6 +106,8 @@ func (h *eventHandler) handleDisconnectClick() {
105106
h.client.connectCancel = nil
106107
}
107108

109+
h.client.stopSleepListener()
110+
108111
go func() {
109112
if err := h.client.menuDownClick(); err != nil {
110113
st, ok := status.FromError(err)

0 commit comments

Comments
 (0)