Skip to content

Commit a1a4ff9

Browse files
committed
Fix time
1 parent 5c45b03 commit a1a4ff9

File tree

5 files changed

+96
-44
lines changed

5 files changed

+96
-44
lines changed

src/background.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import { StorageParams } from './storage/storage-params';
77
import { injecStorage } from './storage/inject-storage';
88
import { todayLocalDate } from './utils/date';
99
import { checkPomodoro } from './functions/pomodoro';
10+
import { Messages } from './utils/messages';
11+
import { injectTabsRepositorySingleton } from './repository/inject-tabs-repository';
1012

1113
logger.log('Start background script');
1214
let pomodoroTimer: number;
@@ -73,3 +75,18 @@ async function pomodoro(value?: boolean) {
7375
pomodoro();
7476
scheduleJobs();
7577
initTracker();
78+
79+
Browser.runtime.onMessage.addListener(async message => {
80+
if (message == Messages.ClearAllData) {
81+
const storage = injecStorage();
82+
const repo = await injectTabsRepositorySingleton();
83+
repo.removeAllTabs();
84+
await storage.saveTabs([]);
85+
}
86+
if (message.message == Messages.Restore) {
87+
const storage = injecStorage();
88+
await storage.saveTabs(message.data);
89+
const repo = await injectTabsRepositorySingleton();
90+
repo.initAsync();
91+
}
92+
});

src/functions/pomodoro.ts

Lines changed: 67 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,44 +5,78 @@ import { useBadge, BadgeIcon, BadgeColor } from './useBadge';
55
import { Settings } from './settings';
66
import Browser from 'webextension-polyfill';
77
import { 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

1012
export 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
};

src/tracker.ts

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -166,18 +166,3 @@ async function saveTabs() {
166166
async function canChangeBadge() {
167167
return !(await Settings.getInstance().getSetting(StorageParams.IS_POMODORO_ENABLED)) as boolean;
168168
}
169-
170-
Browser.runtime.onMessage.addListener(async message => {
171-
if (message == Messages.ClearAllData) {
172-
const storage = injecStorage();
173-
const repo = await injectTabsRepositorySingleton();
174-
repo.removeAllTabs();
175-
await storage.saveTabs([]);
176-
}
177-
if (message.message == Messages.Restore) {
178-
const storage = injecStorage();
179-
await storage.saveTabs(message.data);
180-
const repo = await injectTabsRepositorySingleton();
181-
repo.initAsync();
182-
}
183-
});

src/utils/date.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,14 @@ export function ranges() {
2929
},
3030
];
3131
}
32+
33+
export function isDateEqual(first: Date, second: Date) {
34+
return (
35+
first.getFullYear() == second.getFullYear() &&
36+
first.getMonth() == second.getMonth() &&
37+
first.getDate() == second.getDate() &&
38+
first.getHours() == second.getHours() &&
39+
first.getMinutes() == second.getMinutes() &&
40+
first.getSeconds() == second.getSeconds()
41+
);
42+
}

src/utils/messages.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@ export enum Messages {
22
RescheduleJobs = 'reschedule-jobs',
33
ClearAllData = 'clear-data',
44
Restore = 'restore-data',
5+
PlayAudio = 'play-audio',
56
}

0 commit comments

Comments
 (0)