@@ -4,21 +4,36 @@ import path from "path";
4
4
import packageJson from "../../../package.json" ;
5
5
import { Settings } from "../../types/settings" ;
6
6
import {
7
- checkIdle ,
8
- checkInWorkingHours ,
9
- createBreak ,
10
- getBreakTime ,
11
- startBreakNow ,
7
+ checkIdle ,
8
+ checkInWorkingHours ,
9
+ createBreak ,
10
+ getBreakTime ,
11
+ startBreakNow
12
12
} from "./breaks" ;
13
- import { getSettings , setSettings } from "./store" ;
13
+ import {
14
+ getDisableEndTime ,
15
+ getSettings ,
16
+ setDisableEndTime ,
17
+ setSettings
18
+ } from "./store" ;
14
19
import { createSettingsWindow } from "./windows" ;
15
20
16
21
let tray : Tray ;
17
22
let lastMinsLeft = 0 ;
18
- let disableTimeout : NodeJS . Timeout | null = null ;
19
- let disableEndTime : number | null = null ;
23
+
24
+ function checkDisableTimeout ( ) {
25
+ const disableEndTime = getDisableEndTime ( ) ;
26
+
27
+ if ( disableEndTime && Date . now ( ) >= disableEndTime ) {
28
+ setDisableEndTime ( null ) ;
29
+ const settings = getSettings ( ) ;
30
+ setSettings ( { ...settings , breaksEnabled : true } ) ;
31
+ buildTray ( ) ;
32
+ }
33
+ }
20
34
21
35
function getDisableTimeRemaining ( ) : string {
36
+ const disableEndTime = getDisableEndTime ( ) ;
22
37
if ( ! disableEndTime ) {
23
38
return "" ;
24
39
}
@@ -68,30 +83,18 @@ export function buildTray(): void {
68
83
const breaksEnabled = settings . breaksEnabled ;
69
84
70
85
const setBreaksEnabled = ( breaksEnabled : boolean ) : void => {
71
- if ( breaksEnabled && disableTimeout ) {
72
- clearTimeout ( disableTimeout ) ;
73
- disableTimeout = null ;
74
- disableEndTime = null ;
86
+ if ( breaksEnabled ) {
87
+ setDisableEndTime ( null ) ;
75
88
}
76
-
77
89
settings = getSettings ( ) ;
78
90
setSettings ( { ...settings , breaksEnabled } ) ;
79
91
buildTray ( ) ;
80
92
} ;
81
93
82
94
const disableBreaksFor = ( duration : number ) : void => {
83
95
setBreaksEnabled ( false ) ;
84
- disableEndTime = Date . now ( ) + duration ;
85
-
86
- if ( disableTimeout ) {
87
- clearTimeout ( disableTimeout ) ;
88
- }
89
-
90
- disableTimeout = setTimeout ( ( ) => {
91
- disableEndTime = null ;
92
- setBreaksEnabled ( true ) ;
93
- } , duration ) ;
94
-
96
+ const endTime = Date . now ( ) + duration ;
97
+ setDisableEndTime ( endTime ) ;
95
98
buildTray ( ) ;
96
99
} ;
97
100
@@ -127,6 +130,8 @@ export function buildTray(): void {
127
130
}
128
131
}
129
132
133
+ const disableEndTime = getDisableEndTime ( ) ;
134
+
130
135
const contextMenu = Menu . buildFromTemplate ( [
131
136
{
132
137
label : nextBreak ,
@@ -135,7 +140,7 @@ export function buildTray(): void {
135
140
} ,
136
141
{
137
142
label : `Disabled for ${ getDisableTimeRemaining ( ) } ` ,
138
- visible : disableTimeout !== null && ! breaksEnabled ,
143
+ visible : disableEndTime !== null && ! breaksEnabled ,
139
144
enabled : false ,
140
145
} ,
141
146
{
@@ -202,7 +207,17 @@ export function buildTray(): void {
202
207
203
208
export function initTray ( ) : void {
204
209
buildTray ( ) ;
210
+ let lastDisableText = getDisableTimeRemaining ( ) ;
211
+
205
212
setInterval ( ( ) => {
213
+ checkDisableTimeout ( ) ;
214
+
215
+ const currentDisableText = getDisableTimeRemaining ( ) ;
216
+ if ( currentDisableText !== lastDisableText ) {
217
+ buildTray ( ) ;
218
+ lastDisableText = currentDisableText ;
219
+ }
220
+
206
221
const breakTime = getBreakTime ( ) ;
207
222
if ( breakTime === null ) {
208
223
return ;
0 commit comments