11const kDefaultSettings = require ( './default-settings' ) ;
2- let gSettings = Object . assign ( { } , kDefaultSettings ) ;
32
43// return true if valid; otherwise return false
54function validateSettings ( settings ) {
65 const keys = Object . keys ( kDefaultSettings ) ;
76 return keys . every ( key => ( key in settings ) ) ;
87}
98
10- chrome . storage . local . get ( [ 'settings' ] , ( result ) => {
11- console . log ( 'Loaded: settings=' , result . settings ) ;
12- if ( result . settings && validateSettings ( result . settings ) )
13- gSettings = result . settings ;
14- else
15- saveSettings ( ) ;
16- } ) ;
9+ const loadSettings = async ( ) => {
10+ return new Promise ( ( resolve , reject ) => {
11+ chrome . storage . local . get ( [ 'settings' ] , function ( result ) {
12+ console . log ( 'Loaded: settings=' , result . settings ) ;
13+ if ( result . settings && validateSettings ( result . settings ) ) {
14+ resolve ( result . settings )
15+ }
16+ else {
17+ saveSettings ( kDefaultSettings ) ;
18+ resolve ( kDefaultSettings ) ;
19+ }
20+ } ) ;
21+ } ) ;
22+ } ;
1723
18- function saveSettings ( ) {
24+ function saveSettings ( settings ) {
1925 // hack to update opacity for existing users
20- gSettings . primaryImageOpacity = 1
21- gSettings . primaryTextOpacity = 1
22- gSettings . secondaryImageOpacity = 1
23- gSettings . secondaryTextOpacity = 1
24- chrome . storage . local . set ( { settings : gSettings } , ( ) => {
25- console . log ( 'Settings: saved into local storage' ) ;
26+ settings . primaryImageOpacity = 1
27+ settings . primaryTextOpacity = 1
28+ settings . secondaryImageOpacity = 1
29+ settings . secondaryTextOpacity = 1
30+ chrome . storage . local . set ( { settings : settings } , ( ) => {
31+ console . log ( 'Settings: saved into local storage' , settings ) ;
2632 } ) ;
2733}
2834
35+ // TODO: revisit this logic.
36+ // The port is ephemeral in manifest v3, so keeping a map of ports is probably not useful.
37+ let gExtPorts = { } ; // tabId -> msgPort; for config dispatching
38+ function dispatchSettings ( settings ) {
39+ try {
40+ const keys = Object . keys ( gExtPorts ) ;
41+ keys . map ( k => gExtPorts [ k ] ) . forEach ( port => {
42+ try {
43+ port . postMessage ( { settings : settings } ) ;
44+ }
45+ catch ( err ) {
46+ console . error ( 'Error: cannot dispatch settings,' , err ) ;
47+ }
48+ } ) ;
49+ } catch ( err ) { }
50+ }
51+
2952function saturateActionIconForTab ( tabId ) {
3053 try {
3154 // v2
@@ -68,31 +91,15 @@ function desaturateActionIconForTab(tabId) {
6891 }
6992}
7093
71- // TODO: revisit this logic.
72- // The port is ephemeral in manifest v3, so keeping a map of ports is probably not useful.
73- let gExtPorts = { } ; // tabId -> msgPort; for config dispatching
74- function dispatchSettings ( ) {
75- try {
76- const keys = Object . keys ( gExtPorts ) ;
77- keys . map ( k => gExtPorts [ k ] ) . forEach ( port => {
78- try {
79- port . postMessage ( { settings : gSettings } ) ;
80- }
81- catch ( err ) {
82- console . error ( 'Error: cannot dispatch settings,' , err ) ;
83- }
84- } ) ;
85- } catch ( err ) { }
86- }
87-
8894// connected from target website (our injected agent)
89- function handleExternalConnection ( port ) {
95+ async function handleExternalConnection ( port ) {
9096 const tabId = port . sender && port . sender . tab && port . sender . tab . id ;
9197 if ( ! tabId ) return ;
9298
9399 gExtPorts [ tabId ] = port ;
94100 console . log ( `Connected: ${ tabId } (tab)` ) ;
95101
102+ var gSettings = await loadSettings ( ) ;
96103 port . postMessage ( { settings : gSettings } ) ;
97104
98105 port . onMessage . addListener ( msg => {
@@ -107,8 +114,8 @@ function handleExternalConnection(port) {
107114 else {
108115 gSettings = settings ;
109116 }
110- saveSettings ( ) ;
111- dispatchSettings ( ) ;
117+ saveSettings ( gSettings ) ;
118+ dispatchSettings ( gSettings ) ;
112119 }
113120 else if ( msg . startPlayback ) {
114121 console . log ( 'Saturate icon' )
@@ -130,37 +137,41 @@ function handleExternalConnection(port) {
130137}
131138
132139// connected from our pop-up page
133- function handleInternalConnection ( port ) {
140+ async function handleInternalConnection ( port ) {
134141 const portName = port . name ;
135142 console . log ( `Connected: ${ portName } (internal)` ) ;
136143
137- if ( portName === 'settings' ) {
138- port . postMessage ( { settings : gSettings } ) ;
144+ port . onDisconnect . addListener ( ( ) => {
145+ console . log ( `Disconnected: ${ portName } (internal)` ) ;
146+ } ) ;
147+
148+ if ( portName !== 'settings' ) return ;
149+
150+ var gSettings = await loadSettings ( ) ;
151+ console . log ( 'Dispatching settings to pop-up' , gSettings ) ;
152+ port . postMessage ( { settings : gSettings } ) ;
139153
140- port . onMessage . addListener ( msg => {
141- if ( ! msg . settings ) {
154+ port . onMessage . addListener ( msg => {
155+ // this logic is a mess, a leftover from when gSettings was a global variable
156+ // TODO: could use a refactor
157+ if ( ! msg . settings ) {
158+ gSettings = Object . assign ( { } , kDefaultSettings ) ;
159+ port . postMessage ( { settings : gSettings } ) ;
160+ }
161+ else {
162+ console . log ( 'Received: settings=' , msg . settings ) ;
163+ let settings = Object . assign ( { } , gSettings ) ;
164+ settings = Object . assign ( settings , msg . settings ) ;
165+ if ( ! validateSettings ( settings ) ) {
142166 gSettings = Object . assign ( { } , kDefaultSettings ) ;
143167 port . postMessage ( { settings : gSettings } ) ;
144168 }
145169 else {
146- console . log ( 'Received: settings=' , msg . settings ) ;
147- let settings = Object . assign ( { } , gSettings ) ;
148- settings = Object . assign ( settings , msg . settings ) ;
149- if ( ! validateSettings ( settings ) ) {
150- gSettings = Object . assign ( { } , kDefaultSettings ) ;
151- port . postMessage ( { settings : gSettings } ) ;
152- }
153- else {
154- gSettings = settings ;
155- }
170+ gSettings = settings ;
156171 }
157- saveSettings ( ) ;
158- dispatchSettings ( ) ;
159- } ) ;
160- }
161-
162- port . onDisconnect . addListener ( ( ) => {
163- console . log ( `Disconnected: ${ portName } (internal)` ) ;
172+ }
173+ saveSettings ( gSettings ) ;
174+ dispatchSettings ( gSettings ) ;
164175 } ) ;
165176}
166177
0 commit comments