@@ -5,44 +5,78 @@ import { useBadge, BadgeIcon, BadgeColor } from './useBadge';
55import { Settings } from './settings' ;
66import Browser from 'webextension-polyfill' ;
77import { logger } from '../utils/logger' ;
8- import { playSound } from './playSound' ;
8+ import { Messages } from '../utils/messages' ;
9+ import { isDateEqual } from '../utils/date' ;
10+ import { createOffscreen } from '../offscreen/index' ;
911
1012export async function checkPomodoro ( ) {
1113 type PomodoroPeriod = {
14+ period : Period ;
1215 isTargetPeriod : boolean ;
1316 isTargetPeriodFinishedNow : boolean ;
1417 } ;
1518
16- function isTargetPeriod ( ) : PomodoroPeriod {
19+ enum Period {
20+ work = 'WORK' ,
21+ rest = 'REST' ,
22+ finished = 'FINISH' ,
23+ }
24+
25+ function isTargetPeriod ( period : Period ) : PomodoroPeriod {
26+ let isPomodoroTargetPeriodEnd ;
1727 for ( let index = 1 ; index <= frequency ; index ++ ) {
18- const plusWorkingTime = workTime * ( index - 1 ) ;
19- const plusRestTime = restTime * ( index - 1 ) ;
28+ let ind = period == Period . work ? index - 1 : index ;
29+ const plusWorkingTime = workTime * ind ;
30+ const plusRestTime = ( restTime + 1 ) * ( index - 1 ) ;
2031 const isPomodoroTargetPeriodStart = addSeconds ( startTime , plusWorkingTime + plusRestTime ) ;
21- const isPomodoroTargetPeriodEnd = addSeconds (
22- startTime ,
23- plusWorkingTime + plusRestTime + workTime ,
24- ) ;
32+ isPomodoroTargetPeriodEnd = addSeconds ( startTime , plusWorkingTime + plusRestTime + workTime ) ;
2533 const isTargetPeriod =
26- now . getTime ( ) >= isPomodoroTargetPeriodStart . getTime ( ) &&
27- now . getTime ( ) <= isPomodoroTargetPeriodEnd . getTime ( ) ;
34+ now >= isPomodoroTargetPeriodStart &&
35+ ( now <= isPomodoroTargetPeriodEnd || addSeconds ( now , - 1 ) <= isPomodoroTargetPeriodEnd ) ;
2836
29- if ( isTargetPeriod )
37+ if ( isTargetPeriod ) {
38+ console . log (
39+ now ,
40+ isPomodoroTargetPeriodEnd ,
41+ isDateEqual ( now , isPomodoroTargetPeriodEnd ) ||
42+ isDateEqual ( addSeconds ( now , - 1 ) , isPomodoroTargetPeriodEnd ) ,
43+ period ,
44+ ) ;
3045 return {
31- isTargetPeriod : true ,
32- isTargetPeriodFinishedNow : now . getTime ( ) == isPomodoroTargetPeriodEnd . getTime ( ) ,
46+ period : period ,
47+ isTargetPeriod : isTargetPeriod ,
48+ isTargetPeriodFinishedNow :
49+ isDateEqual ( now , isPomodoroTargetPeriodEnd ) ||
50+ isDateEqual ( addSeconds ( now , - 1 ) , isPomodoroTargetPeriodEnd ) ,
3351 } ;
52+ }
3453 }
3554 return {
55+ period : Period . finished ,
3656 isTargetPeriod : false ,
3757 isTargetPeriodFinishedNow : false ,
3858 } ;
3959 }
4060
41- async function play ( param : StorageParams ) {
42- if ( target . isTargetPeriodFinishedNow ) {
43- const sound = await storage . getValue ( param ) ;
44- playSound ( sound ) ;
61+ async function play ( period : Period ) {
62+ function getSound ( ) {
63+ switch ( period ) {
64+ case Period . work :
65+ return StorageParams . POMODORO_AUDIO_AFTER_WORK ;
66+ case Period . rest :
67+ return StorageParams . POMODORO_AUDIO_AFTER_REST ;
68+ case Period . finished :
69+ return StorageParams . POMODORO_AUDIO_AFTER_FINISHED ;
70+ }
4571 }
72+ logger . log ( `[Pomodoro] ${ period } ` ) ;
73+ const sound = await storage . getValue ( getSound ( ) ) ;
74+ await createOffscreen ( ) ;
75+ await Browser . runtime . sendMessage ( {
76+ message : Messages . PlayAudio ,
77+ sound : sound ,
78+ offscreen : true ,
79+ } ) ;
4680 }
4781
4882 const storage = injecStorage ( ) ;
@@ -72,7 +106,10 @@ export async function checkPomodoro() {
72106 const activeTab = await Browser . tabs . query ( { active : true } ) ;
73107
74108 if ( now >= pomodoroEndTime ) {
75- if ( now == pomodoroEndTime ) await play ( StorageParams . POMODORO_AUDIO_AFTER_FINISHED ) ;
109+ if ( isDateEqual ( now , pomodoroEndTime ) ) {
110+ logger . log ( `[Pomodoro] Pomodoro finished` ) ;
111+ await play ( Period . finished ) ;
112+ }
76113
77114 await storage . saveValue ( StorageParams . IS_POMODORO_ENABLED , false ) ;
78115 await storage . saveValue ( StorageParams . POMODORO_START_TIME , null ) ;
@@ -85,29 +122,30 @@ export async function checkPomodoro() {
85122 return ;
86123 }
87124
88- const target = isTargetPeriod ( ) ;
125+ let target = isTargetPeriod ( Period . work ) ;
89126 const isWork = target . isTargetPeriod ;
90127
91128 if ( isWork ) {
92- logger . log ( '[Pomodoro] Work Time' ) ;
93129 await useBadge ( {
94130 tabId : activeTab [ 0 ] . id ,
95131 text : null ,
96132 color : BadgeColor . none ,
97133 icon : BadgeIcon . pomodoroWorkingTime ,
98134 } ) ;
99- await play ( StorageParams . POMODORO_AUDIO_AFTER_WORK ) ;
100135 } else {
101- logger . log ( '[Pomodoro] Rest Time' ) ;
102- await useBadge ( {
103- tabId : activeTab [ 0 ] . id ,
104- text : null ,
105- color : BadgeColor . none ,
106- icon : BadgeIcon . pomodoroRestTime ,
107- } ) ;
108- await play ( StorageParams . POMODORO_AUDIO_AFTER_REST ) ;
136+ target = isTargetPeriod ( Period . rest ) ;
137+ if ( target . isTargetPeriod ) {
138+ await useBadge ( {
139+ tabId : activeTab [ 0 ] . id ,
140+ text : null ,
141+ color : BadgeColor . none ,
142+ icon : BadgeIcon . pomodoroRestTime ,
143+ } ) ;
144+ }
109145 }
110146
147+ if ( target . isTargetPeriodFinishedNow ) await play ( target . period ) ;
148+
111149 return {
112150 isWork,
113151 } ;
0 commit comments