Skip to content

Commit a4a9e4d

Browse files
committed
Refact tracker (cache current tab for checking every seconds)
1 parent 09d75b6 commit a4a9e4d

File tree

1 file changed

+36
-10
lines changed

1 file changed

+36
-10
lines changed

src/tracker.ts

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ import { convertSummaryTimeToBadgeString } from './utils/converter';
2222
const activeTabInstance = ActiveTab.getInstance();
2323
const storage = injecStorage();
2424

25+
interface CurrentObj {
26+
tab: Tab;
27+
activeDomain: string;
28+
}
29+
30+
let currentObj: CurrentObj | null;
31+
2532
export async function initTracker() {
2633
setInterval(trackTime, 1000);
2734
setInterval(saveTabs, INTERVAL_SAVE_STORAGE_DEFAULT);
@@ -35,6 +42,15 @@ async function trackTime() {
3542
if (isValidPage(activeTab)) {
3643
const activeDomain = extractHostname(activeTab!.url);
3744

45+
if (
46+
currentObj != null &&
47+
currentObj.activeDomain == activeDomain &&
48+
!isActiveTabWasChanged(activeDomain)
49+
) {
50+
await mainTrackerWrapper(activeTab!, activeDomain, currentObj.tab);
51+
return;
52+
}
53+
3854
if (await isInBlackList(activeDomain)) {
3955
useBadge({
4056
tabId: activeTab!.id!,
@@ -47,18 +63,14 @@ async function trackTime() {
4763
tab = await repo.addTab(activeDomain, activeTab?.favIconUrl);
4864
}
4965
if (tab != undefined) {
50-
const inactivityInterval = (await storage.getValue(
51-
StorageParams.INTERVAL_INACTIVITY,
52-
INTERVAL_INACTIVITY_DEFAULT,
53-
)) as number;
54-
const state = await Browser.idle.queryState(inactivityInterval);
55-
mainTracker(state, activeTab!, activeDomain, tab);
66+
await mainTrackerWrapper(activeTab!, activeDomain, tab);
5667
}
5768
}
5869
}
5970
} else {
6071
await closeInterval(activeTabInstance.getActiveTabDomain());
6172
activeTabInstance.setActiveTab(null);
73+
currentObj = null;
6274
}
6375
}
6476

@@ -72,9 +84,10 @@ async function mainTracker(
7284
return state === 'idle' && activeTab.audible;
7385
}
7486

75-
function isActiveTabWasChanged() {
76-
return activeDomain != activeTabInstance.getActiveTabDomain();
77-
}
87+
currentObj = {
88+
tab: tab,
89+
activeDomain: activeDomain,
90+
};
7891

7992
const isAudibleValue = isAudible();
8093
if (state === 'active' || isAudibleValue) {
@@ -85,7 +98,7 @@ async function mainTracker(
8598
return;
8699
}
87100

88-
if (isActiveTabWasChanged()) {
101+
if (isActiveTabWasChanged(activeDomain)) {
89102
tab.incCounter();
90103
await closeInterval(activeTabInstance.getActiveTabDomain());
91104
activeTabInstance.setActiveTab(activeTab.url!);
@@ -116,6 +129,19 @@ async function mainTracker(
116129
}
117130
}
118131

132+
async function mainTrackerWrapper(activeTab: Browser.Tabs.Tab, activeDomain: string, tab: Tab) {
133+
const inactivityInterval = (await storage.getValue(
134+
StorageParams.INTERVAL_INACTIVITY,
135+
INTERVAL_INACTIVITY_DEFAULT,
136+
)) as number;
137+
const state = await Browser.idle.queryState(inactivityInterval);
138+
await mainTracker(state, activeTab!, activeDomain, tab);
139+
}
140+
141+
function isActiveTabWasChanged(activeDomain: string) {
142+
return activeDomain != activeTabInstance.getActiveTabDomain();
143+
}
144+
119145
async function saveTabs() {
120146
const storage = injecStorage();
121147
const repo = await injectTabsRepositorySingleton();

0 commit comments

Comments
 (0)