|
1 | | -import Browser from "webextension-polyfill"; |
2 | | -import { isValidPage } from "./compositions/valid-page"; |
3 | | -import { extractHostname } from "./compositions/extract-hostname"; |
4 | | -import { injectTabsRepository } from "./repository/inject-tabs-repository"; |
5 | | -import { isInBlackList } from "./compositions/black-list"; |
6 | | -import { useBadge } from "./compositions/set-badge"; |
7 | | -import { INTERVAL_INACTIVITY_DEFAULT, INTERVAL_SAVE_STORAGE_DEFAULT, StorageParams, VIEW_TIME_IN_BADGE_DEFAULT, } from "./storage/storage-params"; |
8 | | -import { BadgeColor } from "./compositions/set-badge"; |
9 | | -import { injecStorage } from "./storage/inject-storage"; |
10 | | -import { addInterval, closeInterval } from "./compositions/daily-intervals"; |
11 | | -import { ActiveTab } from "./compositions/activeTab"; |
12 | | -import { isLimitExceeded } from "./compositions/limit-list"; |
13 | | -import { Tab } from "./entity/tab"; |
14 | | -import { useBlockPage } from "./compositions/block-page"; |
15 | | -import { convertSummaryTimeToBadgeString } from "./utils/converter"; |
| 1 | +import Browser from 'webextension-polyfill'; |
| 2 | +import { isValidPage } from './compositions/valid-page'; |
| 3 | +import { extractHostname } from './compositions/extract-hostname'; |
| 4 | +import { injectTabsRepository } from './repository/inject-tabs-repository'; |
| 5 | +import { isInBlackList } from './compositions/black-list'; |
| 6 | +import { useBadge } from './compositions/set-badge'; |
| 7 | +import { |
| 8 | + INTERVAL_INACTIVITY_DEFAULT, |
| 9 | + INTERVAL_SAVE_STORAGE_DEFAULT, |
| 10 | + StorageParams, |
| 11 | + VIEW_TIME_IN_BADGE_DEFAULT, |
| 12 | +} from './storage/storage-params'; |
| 13 | +import { BadgeColor } from './compositions/set-badge'; |
| 14 | +import { injecStorage } from './storage/inject-storage'; |
| 15 | +import { addInterval, closeInterval } from './compositions/daily-intervals'; |
| 16 | +import { ActiveTab } from './compositions/activeTab'; |
| 17 | +import { isLimitExceeded } from './compositions/limit-list'; |
| 18 | +import { Tab } from './entity/tab'; |
| 19 | +import { useBlockPage } from './compositions/block-page'; |
| 20 | +import { convertSummaryTimeToBadgeString } from './utils/converter'; |
16 | 21 |
|
17 | 22 | const activeTabInstance = ActiveTab.getInstance(); |
18 | 23 | const storage = injecStorage(); |
19 | 24 |
|
20 | 25 | export async function initTracker() { |
21 | | - setInterval(trackTime, 1000); |
22 | | - setInterval(saveTabs, INTERVAL_SAVE_STORAGE_DEFAULT); |
| 26 | + setInterval(trackTime, 1000); |
| 27 | + setInterval(saveTabs, INTERVAL_SAVE_STORAGE_DEFAULT); |
23 | 28 | } |
24 | 29 |
|
25 | | -async function trackTime(){ |
26 | | - const repo = await injectTabsRepository(); |
27 | | - const window = await Browser.windows.getLastFocused({ populate: true }); |
28 | | - if (window.focused) { |
29 | | - const activeTab = window.tabs?.find((t) => t.active === true); |
30 | | - if (isValidPage(activeTab)) { |
31 | | - const activeDomain = extractHostname(activeTab!.url); |
| 30 | +async function trackTime() { |
| 31 | + const repo = await injectTabsRepository(); |
| 32 | + const window = await Browser.windows.getLastFocused({ populate: true }); |
| 33 | + if (window.focused) { |
| 34 | + const activeTab = window.tabs?.find(t => t.active === true); |
| 35 | + if (isValidPage(activeTab)) { |
| 36 | + const activeDomain = extractHostname(activeTab!.url); |
32 | 37 |
|
33 | | - if (await isInBlackList(activeDomain)) { |
34 | | - useBadge({ |
35 | | - tabId: activeTab!.id!, |
36 | | - text: "n/a", |
37 | | - color: BadgeColor.red, |
38 | | - }); |
39 | | - } else { |
40 | | - let tab = repo.getTab(activeDomain); |
41 | | - if (tab == undefined) { |
42 | | - tab = await repo.addTab(activeDomain, activeTab?.favIconUrl); |
43 | | - } |
44 | | - if (tab != undefined){ |
45 | | - const inactivityInterval = (await storage.getValue( |
46 | | - StorageParams.INTERVAL_INACTIVITY, |
47 | | - INTERVAL_INACTIVITY_DEFAULT |
48 | | - )) as number; |
49 | | - const state = await Browser.idle.queryState(inactivityInterval); |
50 | | - mainTracker(state, activeTab!, activeDomain, tab); |
51 | | - } |
52 | | - } |
| 38 | + if (await isInBlackList(activeDomain)) { |
| 39 | + useBadge({ |
| 40 | + tabId: activeTab!.id!, |
| 41 | + text: 'n/a', |
| 42 | + color: BadgeColor.red, |
| 43 | + }); |
| 44 | + } else { |
| 45 | + let tab = repo.getTab(activeDomain); |
| 46 | + if (tab == undefined) { |
| 47 | + tab = await repo.addTab(activeDomain, activeTab?.favIconUrl); |
53 | 48 | } |
54 | | - } else { |
55 | | - await closeInterval(activeTabInstance.getActiveTabDomain()); |
56 | | - activeTabInstance.setActiveTab(null); |
| 49 | + 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); |
| 56 | + } |
| 57 | + } |
57 | 58 | } |
| 59 | + } else { |
| 60 | + await closeInterval(activeTabInstance.getActiveTabDomain()); |
| 61 | + activeTabInstance.setActiveTab(null); |
| 62 | + } |
58 | 63 | } |
59 | 64 |
|
60 | | -async function mainTracker(state: Browser.Idle.IdleState, activeTab: Browser.Tabs.Tab, activeDomain: string, tab: Tab){ |
61 | | - function isAudible(){ |
62 | | - return state === 'idle' && activeTab.audible; |
63 | | - } |
| 65 | +async function mainTracker( |
| 66 | + state: Browser.Idle.IdleState, |
| 67 | + activeTab: Browser.Tabs.Tab, |
| 68 | + activeDomain: string, |
| 69 | + tab: Tab, |
| 70 | +) { |
| 71 | + function isAudible() { |
| 72 | + return state === 'idle' && activeTab.audible; |
| 73 | + } |
64 | 74 |
|
65 | | - function isActiveTabWasChanged(){ |
66 | | - return activeDomain != activeTabInstance.getActiveTabDomain(); |
| 75 | + function isActiveTabWasChanged() { |
| 76 | + return activeDomain != activeTabInstance.getActiveTabDomain(); |
| 77 | + } |
| 78 | + |
| 79 | + const isAudibleValue = isAudible(); |
| 80 | + if (state === 'active' || isAudibleValue) { |
| 81 | + if (await isLimitExceeded(activeDomain, tab)) { |
| 82 | + const summaryTime = tab.days.at(-1)!.summary; |
| 83 | + const summaryCounter = tab.days.at(-1)!.counter; |
| 84 | + await useBlockPage(activeDomain, summaryTime, summaryCounter); |
| 85 | + return; |
67 | 86 | } |
68 | 87 |
|
69 | | - const isAudibleValue = isAudible(); |
70 | | - if (state === 'active' || isAudibleValue){ |
71 | | - if (await isLimitExceeded(activeDomain, tab)){ |
72 | | - const summaryTime = tab.days.at(-1)!.summary; |
73 | | - const summaryCounter = tab.days.at(-1)!.counter; |
74 | | - await useBlockPage(activeDomain, summaryTime, summaryCounter); |
75 | | - return; |
76 | | - } |
| 88 | + if (isActiveTabWasChanged()) { |
| 89 | + tab.incCounter(); |
| 90 | + await closeInterval(activeTabInstance.getActiveTabDomain()); |
| 91 | + activeTabInstance.setActiveTab(activeTab.url!); |
| 92 | + await addInterval(activeTabInstance.getActiveTabDomain()); |
| 93 | + } |
| 94 | + if (tab.favicon == '' && activeTab.favIconUrl != undefined) |
| 95 | + tab.setFavicon(activeTab.favIconUrl); |
77 | 96 |
|
78 | | - if (isActiveTabWasChanged()){ |
79 | | - tab.incCounter(); |
80 | | - await closeInterval(activeTabInstance.getActiveTabDomain()); |
81 | | - activeTabInstance.setActiveTab(activeTab.url!); |
82 | | - await addInterval(activeTabInstance.getActiveTabDomain()); |
83 | | - } |
84 | | - tab.incSummaryTime(); |
| 97 | + tab.incSummaryTime(); |
85 | 98 |
|
86 | | - const storage = injecStorage(); |
87 | | - const viewInBadge = (await storage.getValue( |
88 | | - StorageParams.VIEW_TIME_IN_BADGE, |
89 | | - VIEW_TIME_IN_BADGE_DEFAULT |
90 | | - )) as boolean; |
| 99 | + const viewInBadge = (await storage.getValue( |
| 100 | + StorageParams.VIEW_TIME_IN_BADGE, |
| 101 | + VIEW_TIME_IN_BADGE_DEFAULT, |
| 102 | + )) as boolean; |
91 | 103 |
|
92 | | - if (viewInBadge) |
93 | | - useBadge({ |
94 | | - tabId: activeTab!.id!, |
95 | | - text: convertSummaryTimeToBadgeString(tab.days.at(-1)!.summary), |
96 | | - color: BadgeColor.green, |
97 | | - }); |
98 | | - else |
99 | | - useBadge({ |
100 | | - tabId: activeTab!.id!, |
101 | | - text: "", |
102 | | - color: BadgeColor.red, |
103 | | - }); |
104 | | - } |
| 104 | + if (viewInBadge) |
| 105 | + useBadge({ |
| 106 | + tabId: activeTab!.id!, |
| 107 | + text: convertSummaryTimeToBadgeString(tab.days.at(-1)!.summary), |
| 108 | + color: BadgeColor.green, |
| 109 | + }); |
| 110 | + else |
| 111 | + useBadge({ |
| 112 | + tabId: activeTab!.id!, |
| 113 | + text: '', |
| 114 | + color: BadgeColor.red, |
| 115 | + }); |
| 116 | + } |
105 | 117 | } |
106 | 118 |
|
107 | | -async function saveTabs(){ |
108 | | - const storage = injecStorage(); |
109 | | - const repo = await injectTabsRepository(); |
110 | | - const tabs = repo.getTabs(); |
111 | | - await storage.saveTabs(tabs); |
| 119 | +async function saveTabs() { |
| 120 | + const storage = injecStorage(); |
| 121 | + const repo = await injectTabsRepository(); |
| 122 | + const tabs = repo.getTabs(); |
| 123 | + await storage.saveTabs(tabs); |
112 | 124 | } |
0 commit comments