1+ var list = [ ] ;
2+
3+ var status = "" ;
4+
5+ function startBrowsingCapture ( ) {
6+ statusCreation = false ;
7+ statusRemoval = false ;
8+ statusChanged = false ;
9+ statusMoved = false ;
10+
11+ // CREATION
12+ if ( ! browser . bookmarks . onCreated . hasListener ( captureCreation ) ) {
13+ browser . bookmarks . onCreated . addListener ( captureCreation ) ;
14+ statusCreation = true ;
15+ console . log ( Date ( ) . toLocaleString ( ) + " starting: created log" ) ;
16+ }
17+
18+ // REMOVAL
19+ if ( ! browser . bookmarks . onRemoved . hasListener ( captureRemoval ) ) {
20+ browser . bookmarks . onRemoved . addListener ( captureRemoval ) ;
21+ statusRemoval = true ;
22+ console . log ( Date ( ) . toLocaleString ( ) + " starting: removal log" ) ;
23+ }
24+
25+ // CHANGED
26+ if ( ! browser . bookmarks . onChanged . hasListener ( captureChanged ) ) {
27+ browser . bookmarks . onChanged . addListener ( captureChanged ) ;
28+ statusChanged = true ;
29+ console . log ( Date ( ) . toLocaleString ( ) + " starting: changed log" ) ;
30+ }
31+
32+ // MOVED
33+ if ( ! browser . bookmarks . onMoved . hasListener ( captureMoved ) ) {
34+ browser . bookmarks . onMoved . addListener ( captureMoved ) ;
35+ statusMoved = true ;
36+ console . log ( Date ( ) . toLocaleString ( ) + " starting: changed log" ) ;
37+ }
38+
39+
40+ if ( statusCreation == true && statusRemoval == true && statusChanged == true && statusMoved == true )
41+ {
42+ status = "STARTED" ;
43+ } else
44+ {
45+ stopBrowsingCapture ( ) ;
46+ }
47+
48+ }
49+
50+ function stopBrowsingCapture ( ) {
51+
52+ // CREATION
53+ if ( browser . bookmarks . onCreated . hasListener ( captureCreation ) ) {
54+ browser . bookmarks . onCreated . removeListener ( captureCreation ) ;
55+ status = "STOPPED" ;
56+ console . log ( Date ( ) . toLocaleString ( ) + " stopping: created log" ) ;
57+ }
58+
59+ // REMOVAL
60+ if ( browser . bookmarks . onRemoved . hasListener ( captureRemoval ) ) {
61+ browser . bookmarks . onRemoved . removeListener ( captureRemoval ) ;
62+ status = "STOPPED" ;
63+ console . log ( Date ( ) . toLocaleString ( ) + " stopping: removal log" ) ;
64+ }
65+
66+ // CHANGED
67+ if ( browser . bookmarks . onChanged . hasListener ( captureChanged ) ) {
68+ browser . bookmarks . onChanged . removeListener ( captureChanged ) ;
69+ status = "STOPPED" ;
70+ console . log ( Date ( ) . toLocaleString ( ) + " stopping: changed log" ) ;
71+ }
72+
73+ // MOVED
74+ if ( browser . bookmarks . onMoved . hasListener ( captureMoved ) ) {
75+ browser . bookmarks . onMoved . removeListener ( captureMoved ) ;
76+ status = "STOPPED" ;
77+ console . log ( Date ( ) . toLocaleString ( ) + " stopping: moved log" ) ;
78+ }
79+
80+
81+ downloadBrowsingBookmark ( ) ;
82+ }
83+
84+ function downloadBrowsingBookmark ( ) {
85+
86+ if ( list . length === 0 ) {
87+ console . log ( "empty browsing list - not saving anything !" ) ;
88+
89+ } else {
90+ saveData ( list ) ;
91+ console . log ( "browsing list saved" ) ;
92+ }
93+ }
94+
95+
96+ function captureCreation ( id , bookmarkInfo ) {
97+ console . log ( "Bookmark created" ) ;
98+
99+ if ( bookmarkInfo . type === "bookmark" )
100+ {
101+ logInfo ( bookmarkInfo , id , "creation" ) ;
102+
103+ } else if ( bookmarkInfo . type === "folder" ) {
104+ // don't log when a folder is created because on Firefox, it is weird behavior :
105+ // the folder is always called " new folder" and not by the name the user choose
106+
107+ /* const temp = writeInfo(bookmarkInfo, id, "creation");
108+ list.push(temp); */
109+ console . log ( "FOLDER: DO NOTHING" ) ;
110+ } else
111+ {
112+ console . log ( "SEPARATOR: DO NOTHING" ) ;
113+ }
114+ }
115+
116+ function captureRemoval ( id , removeInfo ) {
117+ console . log ( "Bookmark removed" ) ;
118+
119+ if ( removeInfo . node . type === "bookmark" )
120+ {
121+ logInfo ( removeInfo . node , id , "removal" ) ;
122+
123+ } else if ( removeInfo . node . type === "folder" ) {
124+
125+ logInfo ( removeInfo . node , id , "removal" ) ;
126+ } else
127+ {
128+ console . log ( "SEPARATOR: DO NOTHING" ) ;
129+ }
130+ }
131+
132+
133+ function captureChanged ( id , changeInfo ) {
134+ console . log ( "Bookmark changed" ) ;
135+
136+ logMoreInfo ( id , "change" ) ;
137+
138+ // const temp = writeInfo(changeInfo,id, "change");
139+ // list.push(temp);
140+ }
141+
142+ function captureMoved ( id , moveInfo ) {
143+ console . log ( "Bookmark moved" ) ;
144+
145+ // logMoreInfo(id,"move");
146+
147+ getBookmarkMoveInfos ( id , moveInfo . parentId , moveInfo . oldParentId )
148+ . then ( ( bookmarks ) => {
149+ let temp = {
150+ move : bookmarks [ 0 ] ,
151+ from : bookmarks [ 1 ] ,
152+ to : bookmarks [ 2 ]
153+ }
154+
155+ list . push ( temp ) ;
156+ } ) ;
157+
158+ }
159+
160+ async function getBookmarkMoveInfos ( id , parentId , oldParentId ) {
161+ let bookmarkInfo ;
162+ bookmarkInfo = await getMoreInfo ( id ) ;
163+ let bookmarkMoved = writeInfo ( bookmarkInfo , id , "move" ) ;
164+
165+ bookmarkInfo = await getMoreInfo ( oldParentId ) ;
166+ let bookmarkOldParentMoved = writeInfo ( bookmarkInfo , oldParentId , "move" ) ;
167+
168+ bookmarkInfo = await getMoreInfo ( parentId ) ;
169+ let bookmarkParentMoved = writeInfo ( bookmarkInfo , parentId , "move" ) ;
170+
171+ return [ bookmarkMoved , bookmarkOldParentMoved , bookmarkParentMoved ] ;
172+ }
173+
174+ function logMoreInfo ( id , action ) {
175+ let bookmarkInfo ;
176+ console . log ( "More info for: " + id ) ;
177+ let gettingBookmarks = browser . bookmarks . get ( id ) ;
178+ gettingBookmarks . then ( onFulfilledGetBookmark , error => ( console . log ( "error get bookmark: " + error ) ) )
179+ . then ( bookmarkInfo => { logInfo ( bookmarkInfo [ 0 ] , id , action ) ; } ) ;
180+ }
181+
182+ function getMoreInfo ( id ) {
183+ let bookmarkInfo ;
184+ console . log ( "More info for: " + id ) ;
185+ let gettingBookmarks = browser . bookmarks . get ( id ) ;
186+ gettingBookmarks . then ( onFulfilledGetBookmark , error => ( console . log ( "error get bookmark: " + error ) ) ) ;
187+
188+ return gettingBookmarks . then ( ( results ) => { return results [ 0 ] ; } ) ;
189+ }
190+
191+ function logInfo ( bookmarkInfo , id , action ) {
192+ const temp = writeInfo ( bookmarkInfo , id , action ) ;
193+ list . push ( temp ) ;
194+ }
195+
196+
197+ function onFulfilledGetBookmark ( bookmark ) {
198+ console . log ( bookmark ) ;
199+ return bookmark ;
200+ }
201+
202+
203+ function writeInfo ( bookmarkInfo , id , action )
204+ {
205+ let dateISO = new Date ( ) ;
206+ console . log ( dateISO . toISOString ( ) ) ;
207+
208+ console . log ( bookmarkInfo . title ) ;
209+ console . log ( bookmarkInfo . url ) ;
210+
211+ return {
212+ date : dateISO . toISOString ( ) ,
213+ action : action ,
214+ type : bookmarkInfo . type ,
215+ url : bookmarkInfo . url ,
216+ title : bookmarkInfo . title ,
217+ id : id ,
218+ dateAdded : bookmarkInfo . dateAdded ,
219+ dateGroupModified : bookmarkInfo . dateGroupModified
220+ } ;
221+ }
222+
223+
224+ function getMessage ( ) {
225+ if ( ! browser . runtime . onMessage . hasListener ( processMessage ) ) {
226+ browser . runtime . onMessage . addListener ( processMessage ) ;
227+ }
228+ }
229+
230+ function stopMessage ( ) {
231+ if ( browser . runtime . onMessage . hasListener ( processMessage ) ) {
232+ browser . runtime . onMessage . removeListener ( processMessage ) ;
233+ }
234+ }
235+
236+ function processMessage ( data , sender ) {
237+ console . log ( "MSG Copy " + data . content ) ;
238+
239+ if ( data . content === '#start' ) {
240+ startBrowsingCapture ( ) ;
241+ return Promise . resolve ( { response : "done" } ) ;
242+ }
243+
244+ if ( data . content === '#stop' ) {
245+ stopBrowsingCapture ( ) ;
246+
247+ return Promise . resolve ( { response : "done" } ) ;
248+ }
249+
250+ if ( data . content === '#status' ) {
251+ return Promise . resolve ( { response : status } ) ;
252+ }
253+
254+ if ( data . content === '#download' ) {
255+ downloadBrowsingBookmark ( ) ;
256+ return Promise . resolve ( { response : "done" } ) ;
257+ }
258+
259+ return Promise . resolve ( { response : "error" } ) ;
260+ }
261+
262+ function dateFile ( ) {
263+ let dateUTC = new Date ( ) ;
264+ let dateString = dateUTC . getUTCFullYear ( ) + "-" + ( dateUTC . getUTCMonth ( ) + 1 ) + "-" + dateUTC . getUTCDate ( ) + "_" +
265+ dateUTC . getUTCHours ( ) + "-" + dateUTC . getUTCMinutes ( ) + "-" + dateUTC . getUTCSeconds ( ) ;
266+ return dateString ;
267+ }
268+
269+
270+ function saveData ( data ) {
271+ let blob = new Blob ( [ JSON . stringify ( data , null , 2 ) ] , { type : 'application/json' } ) ;
272+ let url = URL . createObjectURL ( blob ) ;
273+ let dateString = "regis-browser-bookmark/" + dateFile ( ) + ".txt" ;
274+ let download = browser . downloads . download ( { url : url , filename : dateString , saveAs : false } ) ;
275+ download . then ( ( ) => {
276+ list = [ ]
277+ } ) . catch ( error => console . log ( error ) ) ;
278+ }
279+
280+
281+ function init ( ) {
282+ startBrowsingCapture ( ) ;
283+ getMessage ( ) ;
284+
285+ browser . windows . onRemoved . addListener ( ( ) => {
286+ downloadBrowsingBookmark ( )
287+ } ) ;
288+
289+ setInterval ( downloadBrowsingBookmark , 1200000 ) ; // every 20 minutes
290+
291+ }
292+
293+
294+ init ( ) ;
0 commit comments