@@ -7,7 +7,7 @@ import { useBadge } from "./compositions/set-badge";
77import { BadgeColor } from "./compositions/types" ;
88import { INTERVAL_INACTIVITY_DEFAULT , INTERVAL_SAVE_STORAGE_DEFAULT , StorageParams , VIEW_TIME_IN_BADGE_DEFAULT , } from "./storage/storage-params" ;
99import { injecStorage } from "./storage/inject-storage" ;
10- import { closeInterval } from "./compositions/daily-intervals" ;
10+ import { addInterval , closeInterval } from "./compositions/daily-intervals" ;
1111import { ActiveTab } from "./compositions/activeTab" ;
1212import { isLimitExceeded } from "./compositions/limit-list" ;
1313import { Tab } from "./entity/tab" ;
@@ -28,48 +28,59 @@ async function trackTime(){
2828 if ( window . focused ) {
2929 const activeTab = window . tabs ?. find ( ( t ) => t . active === true ) ;
3030 if ( isValidPage ( activeTab ) ) {
31- const activeUrl = extractHostname ( activeTab ! . url ) ;
32- activeTabInstance . setActiveTab ( activeUrl ) ;
31+ const activeDomain = extractHostname ( activeTab ! . url ) ;
3332
34- if ( await isInBlackList ( activeUrl ) ) {
33+ if ( await isInBlackList ( activeDomain ) ) {
3534 useBadge ( {
3635 tabId : activeTab ! . id ! ,
3736 text : "n/a" ,
3837 color : BadgeColor . red ,
3938 } ) ;
4039 } else {
41- const tab = repo . getTab ( activeUrl ) ;
40+ let tab = repo . getTab ( activeDomain ) ;
4241 if ( tab == undefined ) {
43- await repo . addTab ( activeTab ! ) ;
44- } else {
42+ tab = await repo . addTab ( activeTab ! ) ;
43+ }
44+ if ( tab != undefined ) {
4545 const inactivityInterval = ( await storage . getValue (
4646 StorageParams . INTERVAL_INACTIVITY ,
4747 INTERVAL_INACTIVITY_DEFAULT
4848 ) ) as number ;
4949 const state = await Browser . idle . queryState ( inactivityInterval ) ;
50- mainTracker ( state , activeTab ! , activeUrl , tab ) ;
50+ mainTracker ( state , activeTab ! , activeDomain , tab ) ;
5151 }
5252 }
5353 }
5454 } else {
55- await closeInterval ( activeTabInstance . getActiveTab ( ) ) ;
55+ await closeInterval ( activeTabInstance . getActiveTabDomain ( ) ) ;
5656 activeTabInstance . setActiveTab ( null ) ;
5757 }
5858}
5959
60- async function mainTracker ( state : Browser . Idle . IdleState , activeTab : Browser . Tabs . Tab , activeUrl : string , tab : Tab ) {
60+ async function mainTracker ( state : Browser . Idle . IdleState , activeTab : Browser . Tabs . Tab , activeDomain : string , tab : Tab ) {
6161 function isAudible ( ) {
6262 return state === 'idle' && activeTab . audible ;
6363 }
6464
65- if ( state === 'active' || isAudible ( ) ) {
66- if ( await isLimitExceeded ( activeUrl , tab ) ) {
65+ function isActiveTabWasChanged ( ) {
66+ return activeDomain != activeTabInstance . getActiveTabDomain ( ) ;
67+ }
68+
69+ const isAudibleValue = isAudible ( ) ;
70+ if ( state === 'active' || isAudibleValue ) {
71+ if ( await isLimitExceeded ( activeDomain , tab ) ) {
6772 const summaryTime = tab . days . at ( - 1 ) ! . summary ;
6873 const summaryCounter = tab . days . at ( - 1 ) ! . counter ;
69- await useBlockPage ( activeUrl , summaryTime , summaryCounter ) ;
74+ await useBlockPage ( activeDomain , summaryTime , summaryCounter ) ;
7075 return ;
7176 }
7277
78+ if ( isActiveTabWasChanged ( ) ) {
79+ tab . incCounter ( ) ;
80+ await closeInterval ( activeTabInstance . getActiveTabDomain ( ) ) ;
81+ activeTabInstance . setActiveTab ( activeTab . url ! ) ;
82+ await addInterval ( activeTabInstance . getActiveTabDomain ( ) ) ;
83+ }
7384 tab . incSummaryTime ( ) ;
7485
7586 const storage = injecStorage ( ) ;
0 commit comments