forked from padenot/up-to-eleven
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbackground.js
More file actions
104 lines (92 loc) · 3.26 KB
/
background.js
File metadata and controls
104 lines (92 loc) · 3.26 KB
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
function showProps(obj, objName, depth = 0) {
let result = ``
for (let i in obj) {
// obj.hasOwnProperty() is used to filter out properties from the object's prototype chain
if (obj.hasOwnProperty(i)) {
if (typeof obj[i] === 'object' && depth < 3) {
showProps(obj[i], `${objName}.${i}`, depth + 1)
} else {
result += `${objName}.${i} = ${obj[i]}\n`
}
}
}
console.log(result)
}
let optionPort
let contentPorts = []
function pushSettings(tabId, settings) {
// console.log(`Sending settings to ${tabId}, settings:`, settings)
// showProps(settings, 'settings')
for (let port of contentPorts) {
// console.log(port.sender.tab.id)
// showProps(port.sender, "port.sender")
if (port.sender.tab.id === tabId) {
// console.log(`Tab id ${tabId} is correct`)
port.postMessage({ command: 'settings', settings: settings })
}
}
}
function pushReset(tabId) {
for (let port of contentPorts) {
if (port.sender.tab.id === tabId) {
// console.log(`Tab id ${tabId} is correct`)
port.postMessage({ command: 'reset' })
}
}
}
function onError(error) {
console.warn(`Error: ${error}`)
}
function optionsMessage(message, sender, sendResponse) {
// showProps(message, "message")
// showProps(sender, "sender")
// showProps(sendResponse, "sendResponse")
if (message.command === 'reset') {
pushReset(message.tab)
} else if (message.command === 'settings') {
pushSettings(message.tab, message.settings)
}
}
function disconnected(p) {
let tabId = p.sender.tab.id
console.log('Tab disconnected: ', tabId)
contentPorts = contentPorts.filter(port => port.sender.tab.id !== tabId)
browser.storage.local.remove(`${tabId}`)
}
function connected(p) {
if (p.name === 'options-port') {
optionPort = p
optionPort.onMessage.addListener(optionsMessage)
} else {
p.onDisconnect.addListener(disconnected)
contentPorts.push(p)
browser.storage.local.get('defaults')
.then((settings) => pushSettings(p.sender.tab.id, settings.defaults), onError)
}
}
browser.runtime.onConnect.addListener(connected)
function handleInstalled(details) {
showProps(details, 'OnInstalled')
browser.storage.local.get('defaults')
.then(store => {
let defaults = store.defaults
if (typeof defaults === 'undefined' || (Object.keys(defaults).length === 0 && defaults.constructor === Object)) {
let settings = {}
settings.enabled = true
settings.threshold = -60
settings.knee = 30.0
settings.attack = 0.150
settings.release = 0.25
settings.ratio = 10.0
settings.gain = 1.0
console.log('Setting new defaults', settings)
let save = browser.storage.local.set({ defaults: settings })
save.then((res) => {
console.log('Defaults set')
})
} else {
console.log('Defaults already set:', defaults)
}
})
}
browser.runtime.onInstalled.addListener(handleInstalled)