@@ -36,51 +36,18 @@ export function makeDroppable(previewInstance: WebGLPreview): void {
3636 * @emits update - Custom event with file metadata when file ends
3737 */
3838async function readFromFile ( preview : WebGLPreview , file : File ) : Promise < void > {
39- const stream = file . stream ( ) ;
40- const reader = stream . getReader ( ) ;
41- let result ;
42- let tail = '' ;
43- let size = 0 ;
44-
45- do {
46- result = await reader . read ( ) ;
47- const length = result . value ?. length ?? 0 ;
48- if ( length === 0 ) {
49- console . debug ( 'stream ended' ) ;
50- break ;
51- }
52- console . debug ( 'reading from stream' , Math . floor ( length / 1024 ) , 'kB' ) ;
53- size += length ;
54- const str = decode ( result . value ) ;
55- const idxNewLine = str . lastIndexOf ( '\n' ) ;
56- const maxFullLine = str . slice ( 0 , idxNewLine ) ;
57-
58- // parse increments but don't render yet
59- const { commands } = preview . parser . parseGCode ( tail + maxFullLine ) ;
60-
61- // we'll execute the commands immediately, for now
62- preview . interpreter . execute ( commands , preview . job ) ;
63-
64- tail = str . slice ( idxNewLine ) ;
65- } while ( ! result . done ) ;
66- console . debug ( 'total read from stream' , Math . floor ( size / 1024 ) , 'kB' ) ;
67-
39+ await preview . readFromStream ( file . stream ( ) ) ;
40+
6841 preview . endLayer = preview . job . layers . length ;
6942
7043 // dispatch a custom event to notify that the file has been loaded
7144 const event = new CustomEvent ( 'update' , {
7245 detail : {
7346 filename : file . name ,
74- size : size ,
47+ size : file . size ,
7548 layers : preview . job . layers . length ,
7649 paths : preview . job . paths . length
7750 }
7851 } ) ;
7952 preview . canvas . dispatchEvent ( event ) ;
80-
81- preview . renderAnimated ( ) ;
82- }
83-
84- function decode ( uint8array : Uint8Array ) {
85- return new TextDecoder ( 'utf-8' ) . decode ( uint8array ) ;
8653}
0 commit comments