@@ -5,10 +5,19 @@ import transform_v2 from './transform-v2';
5
5
import { log } from './logger' ;
6
6
import repository from './repository' ;
7
7
const { getUserData, getPreferenceData, setPreferenceData } = repository ;
8
- import { updateSlurList } from './slur-replace' ;
9
8
import transformGeneral from './transform-general' ;
10
9
import Api from './ui-components/pages/Api' ;
10
+ import {
11
+ initializeSlurs ,
12
+ getSlursBySource ,
13
+ addSlur ,
14
+ deleteSlur ,
15
+ slurExists ,
16
+ bulkAddSlurs ,
17
+ convertSlurMetadataFromDBtoJSON
18
+ } from './slur-store' ;
11
19
import { createCrowdsourceSlur } from './api/crowdsource-slurs' ;
20
+ import { getPublicSlurs } from './api/public-slurs' ;
12
21
13
22
const { createSlurAndCategory } = Api ;
14
23
@@ -79,85 +88,141 @@ function processPage(newUrl) {
79
88
* eg : When a user clicks on a tweet on their home timeline, they
80
89
* go from the home page to the user status page.
81
90
*/
82
- chrome . runtime . onMessage . addListener ( async function ( request ) {
83
- if ( request . type === 'updateData' ) {
84
- console . log ( 'data changed. time to update slurs' ) ;
85
- const preference = await getPreferenceData ( ) ;
86
- console . log ( preference ) ;
87
- if ( preference . slurList != undefined ) {
88
- updateSlurList ( preference . slurList ) ;
89
- processPage ( location . href ) ;
90
- }
91
- return true ;
92
- }
93
- if ( request . message === 'URL_CHANGED' ) {
94
- const newUrl = request . url ;
95
- log ( 'Url Changed' , newUrl ) ;
96
- processPage ( location . href ) ;
97
- return true ;
98
- }
99
- if ( request . type === 'SLUR_ADDED' ) {
100
- const slur = request . slur ;
101
- log ( 'slur added from bg' , slur ) ;
102
- const pref = await getPreferenceData ( ) ;
103
- let slurList ;
104
-
105
- const user = await getUserData ( ) ;
106
- // console.log('USER in content-script', user);
107
- const crowdsourceData = {
108
- label : slur ,
109
- } ;
110
-
111
- // Adding Slur to Prefrences
112
- if ( ! pref || ! pref . slurList ) {
113
- slurList = slur ;
114
- } else {
115
- slurList = pref . slurList ;
116
- if ( ! slurList || slurList === '' ) {
117
- slurList = slur ;
118
- } else {
119
- slurList += `,${ slur } ` ;
91
+ chrome . runtime . onMessage . addListener (
92
+ async function ( request , sender , sendResponse ) {
93
+ if ( request . type === 'updateData' ) {
94
+ try {
95
+ const newSlurs = request . data ;
96
+ console . log ( 'New slurs received:' , newSlurs ) ;
97
+ // fetch exisiting slurs
98
+ const existingSlurs = ( await getSlursBySource ( 'personal' ) ) . map (
99
+ ( slur ) => slur . word
100
+ ) ;
101
+ // Add new slurs to the database
102
+ for ( const slur of newSlurs ) {
103
+ if ( ! existingSlurs . includes ( slur ) ) {
104
+ await addSlur ( slur , 'personal' ) ;
105
+ }
106
+ }
107
+ // Remove slurs from the database that no longer exist in the new list
108
+ for ( const slur of existingSlurs ) {
109
+ if ( ! newSlurs . includes ( slur ) ) {
110
+ await deleteSlur ( slur , 'personal' ) ;
111
+ }
112
+ }
113
+ processPage ( location . href ) ;
114
+ } catch ( error ) {
115
+ console . error ( 'Error during updating slur list:' , error ) ;
120
116
}
117
+ return true ;
121
118
}
122
- try {
123
- await setPreferenceData ( { ...pref , slurList } ) ;
124
- } catch ( error ) {
125
- console . error ( 'error updating pref data' , error ) ;
119
+ if ( request . type === 'fetchPersonalSlurs' ) {
120
+ try {
121
+ const personalSlurs = await getSlursBySource ( 'personal' ) ;
122
+ const slurArr = personalSlurs . map ( ( slur ) => slur . word ) ;
123
+ console . log ( 'Sending slurs back to pref:' , slurArr ) ;
124
+ return slurArr ;
125
+ } catch ( error ) {
126
+ console . error (
127
+ 'Error fetching personal slurs in content script:' ,
128
+ error
129
+ ) ;
130
+ // sendResponse({ success: false, error: error.message });
131
+ }
126
132
}
133
+ if ( request . type === 'syncApprovedCrowdsourcedSlurs' ) {
134
+ const source = 'public_crowdsourced_slurs' ;
135
+ try {
136
+ const publicSlurs = await getPublicSlurs ( ) ;
137
+ const publicSlursArray = publicSlurs . map ( ( slur ) => slur . label ) ;
138
+ // console.log(publicSlursArray);
127
139
128
- //Crowdsourcing Slur
129
- try {
130
- // await createSlurAndCategory(user.accessToken, crowdsourceData);
131
- await createCrowdsourceSlur ( crowdsourceData , user . token )
132
- console . log ( 'finsihed POST req' ) ;
133
- window . alert ( `Slur word "${ slur } " added to Uli` ) ;
134
- } catch ( error ) {
135
- console . log ( error ) ;
140
+ const filteredSlurs = [ ] ;
141
+ for ( const slur of publicSlursArray ) {
142
+ const exists = await slurExists ( slur , source ) ;
143
+ if ( ! exists ) {
144
+ filteredSlurs . push ( slur ) ;
145
+ }
146
+ }
147
+ // If there are slurs to add, bulk add them to the database
148
+ if ( filteredSlurs . length > 0 ) {
149
+ await bulkAddSlurs ( filteredSlurs , source ) ;
150
+ } else {
151
+ console . log ( 'No new slurs to add.' ) ;
152
+ }
153
+ } catch ( error ) {
154
+ console . error ( 'Error fetch public crowsrouced slurs' ) ;
155
+ }
136
156
}
157
+ if ( request . message === 'URL_CHANGED' ) {
158
+ const newUrl = request . url ;
159
+ log ( 'Url Changed' , newUrl ) ;
160
+ processPage ( location . href ) ;
161
+ return true ;
162
+ }
163
+ if ( request . type === 'SLUR_ADDED' ) {
164
+ const slur = request . slur ;
165
+ log ( 'slur added from bg' , slur ) ;
166
+ let slurList ;
137
167
138
- return true ;
139
- }
168
+ const user = await getUserData ( ) ;
169
+ // console.log('USER in content-script', user);
170
+ const crowdsourceData = {
171
+ label : slur
172
+ } ;
173
+
174
+ // Adding Slur to IndexedDB
175
+ try {
176
+ const exists = await slurExists ( slur , 'personal' ) ;
177
+
178
+ if ( ! exists ) {
179
+ await addSlur ( slur , 'personal' ) ;
180
+ log ( 'Slur added to IndexedDB:' , slur ) ;
181
+ } else {
182
+ log ( 'Slur already exists in IndexedDB, skipping:' , slur ) ;
183
+ }
184
+ } catch ( error ) {
185
+ console . error ( 'Error handling SLUR_ADDED request:' , error ) ;
186
+ }
187
+
188
+ //Crowdsourcing Slur
189
+ try {
190
+ // await createSlurAndCategory(user.accessToken, crowdsourceData);
191
+ await createCrowdsourceSlur ( crowdsourceData , user . token ) ;
192
+ console . log ( 'finsihed POST req' ) ;
193
+ window . alert ( `Slur word "${ slur } " added to Uli` ) ;
194
+ } catch ( error ) {
195
+ console . log ( error ) ;
196
+ }
197
+
198
+ return true ;
199
+ }
140
200
141
- if ( request . type === 'ULI_ENABLE_SLUR_REPLACEMENT' ) {
142
- console . log ( 'Toggle change event received' , request . payload ) ;
143
- if ( ! request . payload ) {
144
- clearInterval ( mainLoadedChecker ) ;
201
+ if ( request . type === 'ULI_ENABLE_SLUR_REPLACEMENT' ) {
202
+ console . log ( 'Toggle change event received' , request . payload ) ;
203
+ if ( ! request . payload ) {
204
+ clearInterval ( mainLoadedChecker ) ;
205
+ }
145
206
}
146
207
}
147
- } ) ;
208
+ ) ;
148
209
149
210
window . addEventListener (
150
211
'load' ,
151
212
async ( ) => {
152
213
console . log ( 'content loaded' ) ;
153
214
const pref = await getPreferenceData ( ) ;
154
- const { enableSlurReplacement , enableSlurMetadata } = pref ;
215
+ const { enableSlurReplacement, enableSlurMetadata } = pref ;
216
+
217
+ // Initialize Slurs on content load
218
+ await initializeSlurs ( ) ;
219
+
155
220
if ( enableSlurMetadata ) {
156
221
let body = document . getElementsByTagName ( 'body' ) ;
157
222
let first_body = body [ 0 ] ;
158
- transformGeneral . processNewlyAddedNodesGeneral2 ( first_body ) ;
159
- }
160
- else if ( enableSlurReplacement ) {
223
+ const jsonData = await convertSlurMetadataFromDBtoJSON ( ) ;
224
+ transformGeneral . processNewlyAddedNodesGeneral2 ( first_body , jsonData ) ;
225
+ } else if ( enableSlurReplacement ) {
161
226
processPage ( location . href ) ;
162
227
}
163
228
} ,
0 commit comments