@@ -31,58 +31,64 @@ async function startCapture(streamId, tabId, duration, delay) {
3131 } ) ;
3232
3333 mediaRecorder . ondataavailable = ( event ) => {
34+ console . log ( 'Data available:' , event . data . size , 'bytes' ) ;
3435 if ( event . data . size > 0 ) {
3536 recordedChunks . push ( event . data ) ;
3637 }
3738 } ;
3839
3940 mediaRecorder . onstop = async ( ) => {
41+ console . log ( 'MediaRecorder stopped, chunks:' , recordedChunks . length ) ;
4042 stream . getTracks ( ) . forEach ( track => track . stop ( ) ) ;
4143
4244 const blob = new Blob ( recordedChunks , { type : 'video/webm' } ) ;
45+ console . log ( 'Blob size:' , blob . size , 'bytes' ) ;
46+
47+ if ( blob . size === 0 ) {
48+ console . error ( 'Empty recording - no data captured' ) ;
49+ chrome . runtime . sendMessage ( { action : 'recordingComplete' } ) ;
50+ return ;
51+ }
52+
4353 const url = URL . createObjectURL ( blob ) ;
54+ console . log ( 'Blob URL:' , url ) ;
4455
4556 // Download the video
4657 const timestamp = new Date ( ) . toISOString ( ) . replace ( / [: .] / g, '-' ) . slice ( 0 , 19 ) ;
47- await chrome . downloads . download ( {
48- url : url ,
49- filename : `scrollywood-${ timestamp } .webm` ,
50- saveAs : true ,
51- } ) ;
58+ const filename = `scrollywood-${ timestamp } .webm` ;
59+ console . log ( 'Downloading as:' , filename ) ;
60+
61+ try {
62+ const downloadId = await chrome . downloads . download ( {
63+ url : url ,
64+ filename : filename ,
65+ saveAs : true ,
66+ } ) ;
67+ console . log ( 'Download started, ID:' , downloadId ) ;
68+ } catch ( err ) {
69+ console . error ( 'Download error:' , err ) ;
70+ }
5271
5372 chrome . runtime . sendMessage ( { action : 'recordingComplete' } ) ;
5473 } ;
5574
75+ mediaRecorder . onerror = ( event ) => {
76+ console . error ( 'MediaRecorder error:' , event . error ) ;
77+ } ;
78+
5679 // Start recording
5780 mediaRecorder . start ( 1000 ) ;
5881 console . log ( 'Recording started, waiting for delay...' ) ;
5982
6083 // Wait for initial delay
6184 await sleep ( delay * 1000 ) ;
6285
63- // Inject scroll script
64- console . log ( 'Starting scroll...' ) ;
65- await chrome . scripting . executeScript ( {
66- target : { tabId } ,
67- func : ( scrollDuration ) => {
68- const totalHeight = document . documentElement . scrollHeight - window . innerHeight ;
69- const startTime = Date . now ( ) ;
70- const endTime = startTime + ( scrollDuration * 1000 ) ;
71-
72- function smoothScroll ( ) {
73- const now = Date . now ( ) ;
74- if ( now >= endTime ) return ;
75-
76- const progress = ( now - startTime ) / ( scrollDuration * 1000 ) ;
77- const targetY = totalHeight * progress ;
78- window . scrollTo ( { top : targetY , behavior : 'instant' } ) ;
79-
80- requestAnimationFrame ( smoothScroll ) ;
81- }
82-
83- smoothScroll ( ) ;
84- } ,
85- args : [ duration ] ,
86+ // Ask service worker to inject scroll script (scripting API not available in offscreen)
87+ console . log ( 'Requesting scroll injection...' ) ;
88+ chrome . runtime . sendMessage ( {
89+ action : 'injectScroll' ,
90+ tabId,
91+ duration,
8692 } ) ;
8793
8894 // Wait for scroll to complete plus extra time at the end
0 commit comments