@@ -50,68 +50,58 @@ export async function ConvertCodeToPDF(code: Buffer, lang, filename, team, locat
5050 const typst = generateTypst ( team , location , fakeFilename , filename , lang , codeColor ) ;
5151 compiler . addSource ( '/main.typst' , typst ) ;
5252 compiler . addSource ( `/${ fakeFilename } ` , toUtf8 ( code ) ) ;
53- const docs = await compiler . compile ( {
54- format : 'pdf' ,
55- mainFilePath : '/main.typst' ,
56- } ) ;
57- compiler . addSource ( `/${ fakeFilename } ` , '' ) ;
5853 logger . info ( `Convert ${ filename } to PDF` ) ;
59- return docs ;
54+ try {
55+ return await compiler . compile ( {
56+ format : 'pdf' ,
57+ mainFilePath : '/main.typst' ,
58+ } ) ;
59+ } catch ( e ) {
60+ logger . error ( e ) ;
61+ compiler = await createTypstCompiler ( ) ;
62+ throw e ;
63+ } finally {
64+ compiler . addSource ( `/${ fakeFilename } ` , '' ) ;
65+ }
6066}
6167
6268export async function printFile ( docs ) {
63- try {
64- let finalFile = null ;
65- const files = [ ] ;
66- for ( const doc of docs ) {
67- const {
68- _id, tid, code, lang, filename, team, location,
69- } = doc ;
70- const pdf = await ConvertCodeToPDF (
71- code ? Buffer . from ( code , 'base64' ) : Buffer . from ( 'empty file' ) ,
72- lang ,
73- filename ,
74- team ,
75- location ,
76- config . printColor ,
77- ) ;
78- fs . writeFileSync ( path . resolve ( process . cwd ( ) , `data${ path . sep } ${ tid } #${ _id } .pdf` ) , pdf ) ;
79- files . push ( path . resolve ( process . cwd ( ) , `data${ path . sep } ${ tid } #${ _id } .pdf` ) ) ;
80- }
81- if ( files . length === 1 ) {
82- finalFile = files [ 0 ] ;
83- } else {
84- finalFile = path . resolve ( process . cwd ( ) , `data${ path . sep } ${ new Date ( ) . getTime ( ) } -merged.pdf` ) ;
85- await mergePDFs ( files , finalFile ) ;
86- }
87- if ( config . printers . length ) {
88- while ( true ) {
89- const printersInfo : any [ ] = await getPrinters ( ) ;
90- const printers = printersInfo . filter ( ( p ) => config . printers . includes ( p . printer ) ) ;
91- const randomP = printers [ Math . floor ( Math . random ( ) * printers . length ) ] ;
92- if ( randomP . status === 'idle' ) {
93- logger . info ( `Printing ${ finalFile } on ${ randomP . printer } ` ) ;
94- await print ( finalFile , randomP . printer , 1 , files . length > 1 ? undefined : config . printPageMax ) ;
95- return randomP . printer ;
96- }
97- for ( const printer of printers . filter ( ( p ) => p . printer !== randomP . printer ) ) {
98- logger . info ( `Checking ${ printer . printer } ${ printer . status } ` ) ;
99- if ( printer . status === 'idle' ) {
100- logger . info ( `Printing ${ finalFile } on ${ printer . printer } ` ) ;
101- await print ( finalFile , printer . printer , 1 , files . length > 1 ? undefined : config . printPageMax ) ;
102- return printer . printer ;
103- }
104- }
105- logger . info ( 'No Printer can found to print, sleeping...' ) ;
106- await sleep ( 3000 ) ;
107- }
69+ let finalFile = null ;
70+ const files = [ ] ;
71+ for ( const doc of docs ) {
72+ const {
73+ _id, tid, code, lang, filename, team, location,
74+ } = doc ;
75+ const pdf = await ConvertCodeToPDF (
76+ code ? Buffer . from ( code , 'base64' ) : Buffer . from ( 'empty file' ) ,
77+ lang ,
78+ filename ,
79+ team ,
80+ location ,
81+ config . printColor ,
82+ ) ;
83+ fs . writeFileSync ( path . resolve ( process . cwd ( ) , `data${ path . sep } ${ tid } #${ _id } .pdf` ) , pdf ) ;
84+ files . push ( path . resolve ( process . cwd ( ) , `data${ path . sep } ${ tid } #${ _id } .pdf` ) ) ;
85+ }
86+ if ( files . length === 1 ) {
87+ finalFile = files [ 0 ] ;
88+ } else {
89+ finalFile = path . resolve ( process . cwd ( ) , `data${ path . sep } ${ new Date ( ) . getTime ( ) } -merged.pdf` ) ;
90+ await mergePDFs ( files , finalFile ) ;
91+ }
92+ while ( config . printers . length ) {
93+ const printersInfo : any [ ] = await getPrinters ( ) ;
94+ const printers = printersInfo . filter ( ( p ) => config . printers . includes ( p . printer ) && p . status === 'idle' ) ;
95+ if ( printers . length ) {
96+ const randomP = printers [ Math . floor ( Math . random ( ) * printers . length ) ] ;
97+ logger . info ( `Printing ${ finalFile } on ${ randomP . printer } ` ) ;
98+ await print ( finalFile , randomP . printer , 1 , files . length > 1 ? undefined : config . printPageMax ) ;
99+ return randomP . printer ;
108100 }
109- logger . error ( 'No Printer Configured' ) ;
110- return null ;
111- } catch ( e ) {
112- logger . error ( e ) ;
113- return null ;
101+ logger . info ( 'No idle printer can found to print, sleeping...' ) ;
102+ await sleep ( 3000 ) ;
114103 }
104+ throw new Error ( 'No Printer Configured' ) ;
115105}
116106
117107async function fetchTask ( c ) {
0 commit comments