@@ -22,6 +22,13 @@ import { convertSummaryTimeToBadgeString } from './utils/converter';
2222const activeTabInstance = ActiveTab . getInstance ( ) ;
2323const storage = injecStorage ( ) ;
2424
25+ interface CurrentObj {
26+ tab : Tab ;
27+ activeDomain : string ;
28+ }
29+
30+ let currentObj : CurrentObj | null ;
31+
2532export 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+
119145async function saveTabs ( ) {
120146 const storage = injecStorage ( ) ;
121147 const repo = await injectTabsRepositorySingleton ( ) ;
0 commit comments