@@ -10,6 +10,12 @@ import {
1010 getSharedArchives ,
1111} from "../localstorage" ;
1212import { isValidUrl } from "../utils" ;
13+
14+ import {
15+ trackArchiveSize ,
16+ onArchivingStarted ,
17+ onArchivingStopped ,
18+ } from "../events" ;
1319// ===========================================================================
1420self . recorders = { } ;
1521self . newRecId = null ;
@@ -24,6 +30,7 @@ let defaultCollId = null;
2430let autorun = false ;
2531let isRecordingEnabled = false ;
2632let skipDomains = [ ] as string [ ] ;
33+ let lastTrackedTotalSize = 0 ;
2734
2835const openWinMap = new Map ( ) ;
2936
@@ -39,6 +46,31 @@ let sidepanelPort = null;
3946 skipDomains = ( await getLocalOption ( "skipDomains" ) ) || [ ] ;
4047} ) ( ) ;
4148
49+ async function checkAndTrackArchiveSize ( ) {
50+ try {
51+ const collId = await getLocalOption ( "defaultCollId" ) ;
52+ if ( ! collId ) return ;
53+
54+ const coll = await collLoader . loadColl ( collId ) ;
55+ if ( ! coll ?. store ?. getAllPages ) return ;
56+
57+ const pages = await coll . store . getAllPages ( ) ;
58+ // @ts -expect-error any
59+ const totalSize = pages . reduce ( ( sum , page ) => sum + ( page . size || 0 ) , 0 ) ;
60+
61+ const sizeDiff = totalSize - lastTrackedTotalSize ;
62+ if (
63+ sizeDiff > 10 * 1024 * 1024 ||
64+ ( totalSize > 0 && lastTrackedTotalSize === 0 )
65+ ) {
66+ await trackArchiveSize ( totalSize ) ;
67+ lastTrackedTotalSize = totalSize ;
68+ }
69+ } catch ( error ) {
70+ console . error ( "Error tracking archive size:" , error ) ;
71+ }
72+ }
73+
4274// ===========================================================================
4375
4476function main ( ) {
@@ -110,6 +142,7 @@ function sidepanelHandler(port) {
110142 if ( coll ?. store ?. getAllPages ) {
111143 const pages = await coll . store . getAllPages ( ) ;
112144 port . postMessage ( { type : "pages" , pages } ) ;
145+ await checkAndTrackArchiveSize ( ) ;
113146 } else {
114147 port . postMessage ( { type : "pages" , pages : [ ] } ) ;
115148 }
@@ -127,6 +160,7 @@ function sidepanelHandler(port) {
127160 await coll . store . deletePage ( id ) ;
128161 }
129162
163+ await checkAndTrackArchiveSize ( ) ;
130164 // now re-send the new list of pages
131165 const pages = await coll . store . getAllPages ( ) ;
132166 port . postMessage ( { type : "pages" , pages } ) ;
@@ -156,6 +190,10 @@ function sidepanelHandler(port) {
156190 //@ts -expect-error - 2 parameters but 3
157191 tab . url ,
158192 ) ;
193+
194+ if ( tab . url ) {
195+ await onArchivingStarted ( tab . url ) ;
196+ }
159197 }
160198
161199 port . postMessage ( {
@@ -179,6 +217,9 @@ function sidepanelHandler(port) {
179217 stopRecorder ( tabId ) ;
180218 }
181219
220+ await checkAndTrackArchiveSize ( ) ;
221+ await onArchivingStopped ( "manual" ) ;
222+
182223 port . postMessage ( {
183224 type : "status" ,
184225 recording : false ,
@@ -223,6 +264,21 @@ chrome.runtime.onMessage.addListener(
223264 // @ts -expect-error - TS7006 - Parameter 'message' implicitly has an 'any' type.
224265 ( message /*sender, sendResponse*/ ) => {
225266 console . log ( "onMessage" , message ) ;
267+
268+ if ( message . type === "matomoTrack" && message . url ) {
269+ fetch ( message . url , {
270+ method : "GET" ,
271+ mode : "no-cors" ,
272+ } )
273+ . then ( ( ) => {
274+ console . log ( "Matomo tracking sent from background:" , message . url ) ;
275+ } )
276+ . catch ( ( error ) => {
277+ console . error ( "Matomo tracking error in background:" , error ) ;
278+ } ) ;
279+ return true ;
280+ }
281+
226282 switch ( message . msg ) {
227283 case "optionsChanged" :
228284 for ( const rec of Object . values ( self . recorders ) ) {
@@ -244,6 +300,11 @@ chrome.runtime.onMessage.addListener(
244300 case "disableCSP" :
245301 disableCSPForTab ( message . tabId ) ;
246302 break ;
303+
304+ case "checkArchiveSize" :
305+ // Check and track archive size when requested
306+ checkAndTrackArchiveSize ( ) ;
307+ break ;
247308 }
248309 return true ;
249310 } ,
@@ -531,6 +592,19 @@ async function disableCSPForTab(tabId) {
531592// ===========================================================================
532593chrome . runtime . onInstalled . addListener ( main ) ;
533594
595+ chrome . runtime . onStartup . addListener ( async ( ) => {
596+ await checkAndTrackArchiveSize ( ) ;
597+ } ) ;
598+
599+ setInterval (
600+ async ( ) => {
601+ if ( Object . keys ( self . recorders ) . length > 0 ) {
602+ await checkAndTrackArchiveSize ( ) ;
603+ }
604+ } ,
605+ 5 * 60 * 1000 ,
606+ ) ;
607+
534608if ( self . importScripts ) {
535609 self . importScripts ( "sw.js" ) ;
536610}
0 commit comments