-
Notifications
You must be signed in to change notification settings - Fork 32
/
Copy pathtabsInfo.js
88 lines (69 loc) · 2.22 KB
/
tabsInfo.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
"use strict";
class TabsInfo {
constructor() {
this.tabs = new Map();
this.nbDuplicateTabs = new Map();
this.initialize();
}
async initialize() {
const openedTabs = await getTabs({ windowType: "normal" });
for (const openedTab of openedTabs) {
this.setOpenedTab(openedTab);
}
}
setNewTab(tabId) {
const tab = { url: null, lastComplete: null, ignored: false };
this.tabs.set(tabId, tab);
}
setOpenedTab(openedTab) {
const tab = { url: openedTab.url, lastComplete: Date.now(), ignored: false };
this.tabs.set(openedTab.id, tab);
}
ignoreTab(tabId, state) {
const tab = this.tabs.get(tabId);
tab.ignored = state;
this.tabs.set(tabId, tab);
}
isIgnoredTab(tabId) {
const tab = this.tabs.get(tabId);
return (!tab || tab.ignored) ? true : false;
}
getLastComplete(tabId) {
const tab = this.tabs.get(tabId);
return tab.lastComplete;
}
updateTab(openedTab) {
const tab = this.tabs.get(openedTab.id);
tab.url = openedTab.url;
tab.lastComplete = Date.now();
this.tabs.set(openedTab.id, tab);
}
resetTab(tabId) {
this.setNewTab(tabId);
}
hasUrlChanged(openedTab) {
const tab = this.tabs.get(openedTab.id);
return tab.url !== openedTab.url;
}
removeTab(tabId) {
this.tabs.delete(tabId);
}
hasTab(tabId) {
return this.tabs.has(tabId);
}
hasDuplicateTabs(windowId) {
// Even nothing set, return true so it will force the refresh and set the badge.
return this.nbDuplicateTabs.get(windowId) !== "0";
}
getNbDuplicateTabs(windowId) {
return this.nbDuplicateTabs.get(windowId) || "0";
}
setNbDuplicateTabs(windowId, nbDuplicateTabs) {
this.nbDuplicateTabs.set(windowId, nbDuplicateTabs.toString());
}
clearDuplicateTabsInfo(windowId) {
if (this.nbDuplicateTabs.has(windowId)) this.nbDuplicateTabs.delete(windowId);
}
}
// eslint-disable-next-line no-unused-vars
const tabsInfo = new TabsInfo();