@@ -29,6 +29,7 @@ const os_1 = require("os");
2929const timers_1 = require ( "timers" ) ;
3030const buffer_1 = require ( "buffer" ) ;
3131const Fs = require ( "fs" ) ;
32+ const Upload = require ( "./uploadFile" ) ;
3233const MAX_INT = 9007199254740992 ;
3334const debug = true ;
3435const QTGateFolder = path_1 . join ( os_1 . homedir ( ) , '.QTGate' ) ;
@@ -505,8 +506,9 @@ class ImapServerSwitchStream extends Stream.Transform {
505506 this . Tag = `A${ this . imapServer . TagCount } ` ;
506507 this . cmd = `${ this . Tag } LOGOUT` ;
507508 this . debug ? debugOut ( this . cmd , false ) : null ;
508- if ( this . writable )
509+ if ( this . writable ) {
509510 return this . push ( this . cmd + '\r\n' ) ;
511+ }
510512 callabck ( ) ;
511513 }
512514 append ( text , CallBack ) {
@@ -721,7 +723,7 @@ class ImapServerSwitchStream extends Stream.Transform {
721723 return this . _logout ( callback ) ;
722724 } ;
723725 if ( this . imapServer . listenFolder && this . runningCommand ) {
724- console . log ( `logout_process [this.imapServer.listenFolder && this.runningCommand], doing this.idleStop ()` ) ;
726+ saveLog ( `logout_process [this.imapServer.listenFolder && this.runningCommand], doing this.idleStop ()` ) ;
725727 this . idleCallBack = doLogout ;
726728 return this . idleStop ( ) ;
727729 }
@@ -755,6 +757,9 @@ class ImapServerSwitchStream extends Stream.Transform {
755757 if ( parseInt ( cmdArray [ 1 ] ) ) {
756758 }
757759 }
760+ if ( / ^ R E C E N T $ / i. test ( cmdArray [ 2 ] ) && parseInt ( cmdArray [ 1 ] ) > 0 ) {
761+ newSwitchRet = true ;
762+ }
758763 return _callback ( ) ;
759764 }
760765 default :
@@ -904,24 +909,25 @@ const appendFromFile = (imap, fileName, CallBack) => {
904909 }
905910 return Fs . stat ( fileName , ( err , stat ) => {
906911 if ( err ) {
907- console . log ( `appendFromFile s.stat got error!` , err ) ;
912+ saveLog ( `appendFromFile s.stat got error! [ ${ err . message } ]` ) ;
908913 return CallBack ( err ) ;
909914 }
910915 imap . canDoLogout = false ;
911916 imap . doCommandCallback = ( err , info ) => {
917+ saveLog ( `appendFromFile doCommandCallback err [${ err } ], info [${ info } ]` ) ;
912918 imap . canDoLogout = true ;
913919 return imap . checkLogout ( ( ) => {
914920 return CallBack ( err , info ) ;
915921 } ) ;
916922 } ;
917923 let readFile = Fs . createReadStream ( fileName , { encoding : 'utf8' } ) ;
918924 readFile . once ( 'close' , ( ) => {
919- console . log ( `appendFromFile readFile.once close!` ) ;
925+ saveLog ( `appendFromFile readFile.once close! imap.writable [ ${ imap . writable } ] ` ) ;
920926 if ( imap . writable ) {
921- imap . push ( '\r\n' ) ;
927+ return imap . push ( '\r\n \r\n' ) ;
922928 }
923- imap . resume ( ) ;
924- return Fs . unlink ( fileName , ( ) => { } ) ;
929+ // imap.resume()
930+ // return Fs.unlink ( fileName, () => {})
925931 } ) ;
926932 imap . commandProcess = ( text1 , cmdArray , _next , _callback ) => {
927933 switch ( cmdArray [ 0 ] ) {
@@ -941,8 +947,7 @@ const appendFromFile = (imap, fileName, CallBack) => {
941947 }
942948 } ;
943949 imap . Tag = `A${ imap . imapServer . TagCount } ` ;
944- imap . cmd = `APPEND "${ imap . imapServer . writeFolder } " {${ stat . size } ${ imap . imapServer . literalPlus ? '+' : '' } }` ;
945- imap . cmd = `${ imap . Tag } ${ imap . cmd } ` ;
950+ imap . cmd = `${ imap . Tag } APPEND "${ imap . imapServer . writeFolder } " {${ stat . size } ${ imap . imapServer . literalPlus ? '+' : '' } }` ;
946951 const time = stat . size / 1000 + 2000 ;
947952 imap . debug ? debugOut ( imap . cmd , false ) : null ;
948953 if ( ! imap . writable ) {
@@ -955,7 +960,11 @@ const appendFromFile = (imap, fileName, CallBack) => {
955960 //console.log (`************************************* append time = [${ time }] `)
956961 if ( imap . imapServer . literalPlus ) {
957962 return readFile . on ( 'data' , ( chunk ) => {
958- return imap . push ( chunk ) ;
963+ if ( imap . writable ) {
964+ //saveLog (`appendFromFile append stream length [${ chunk.length }]`)
965+ return imap . push ( chunk . toString ( ) ) ;
966+ }
967+ return imap . imapServer . socket . end ( ) ;
959968 } ) ;
960969 }
961970 } ) ;
@@ -971,7 +980,7 @@ class qtGateImapwrite extends qtGateImap {
971980 this . ready = this . canAppend = true ;
972981 } ) ;
973982 }
974- appendFromFile2 ( fileName , CallBack ) {
983+ appendFromFile3 ( fileName , CallBack ) {
975984 if ( ! this . ready || ! this . canAppend ) {
976985 return this . appenfFilesPool . push ( {
977986 fileName : fileName ,
@@ -981,10 +990,11 @@ class qtGateImapwrite extends qtGateImap {
981990 this . canAppend = false ;
982991 return appendFromFile ( this . imapStream , fileName , err => {
983992 this . canAppend = true ;
993+ //saveLog ( `qtGateImapwrite appendFromFile CallBack err = [${ err && err.message ? err.message : null }]`)
984994 CallBack ( err ) ;
985995 if ( this . appenfFilesPool . length ) {
986996 const uu = this . appenfFilesPool . shift ( ) ;
987- return this . appendFromFile2 ( uu . fileName , uu . CallBack ) ;
997+ return this . appendFromFile3 ( uu . fileName , uu . CallBack ) ;
988998 }
989999 } ) ;
9901000 }
@@ -1021,7 +1031,7 @@ class qtGateImapwrite extends qtGateImap {
10211031}
10221032exports . qtGateImapwrite = qtGateImapwrite ;
10231033class qtGateImapRead extends qtGateImap {
1024- constructor ( IMapConnect , listenFolder , isEachMail , deleteBoxWhenEnd , newMail ) {
1034+ constructor ( IMapConnect , listenFolder , deleteBoxWhenEnd , newMail ) {
10251035 super ( IMapConnect , listenFolder , deleteBoxWhenEnd , null , debug , newMail ) ;
10261036 this . openBox = false ;
10271037 this . once ( 'ready' , ( ) => {
@@ -1076,7 +1086,7 @@ exports.imapBasicTest = (IMapConnect, CallBack) => {
10761086 const doCatchMail = ( id , _CallBack ) => {
10771087 let didFatch = false ;
10781088 let err = null ;
1079- let rImap = new qtGateImapRead ( IMapConnect , listenFolder , false , false , mail => {
1089+ let rImap = new qtGateImapRead ( IMapConnect , listenFolder , false , mail => {
10801090 saveLog ( `new mail` ) ;
10811091 const attach = exports . getMailAttached ( mail ) ;
10821092 if ( ! attach ) {
@@ -1154,7 +1164,7 @@ exports.imapAccountTest = (IMapConnect, CallBack) => {
11541164 return CallBack ( err , ret ) ;
11551165 }
11561166 } ;
1157- let rImap = new qtGateImapRead ( IMapConnect , listenFolder , false , false , mail => {
1167+ let rImap = new qtGateImapRead ( IMapConnect , listenFolder , false , mail => {
11581168 rImap . logout ( ) ;
11591169 rImap = null ;
11601170 const attach = exports . getMailAttached ( mail ) ;
@@ -1218,19 +1228,11 @@ exports.imapAccountTest = (IMapConnect, CallBack) => {
12181228 return doCallBack ( err , null ) ;
12191229 } ) ;
12201230} ;
1221- exports . readMedia111 = ( IMapConnect , fileName , CallBack ) => {
1222- let _callback = false ;
1223- let rImap = new qtGateImapRead ( IMapConnect , fileName , true , true , mail => {
1231+ exports . imapGetMediaFile = ( IMapConnect , fileName , CallBack ) => {
1232+ let rImap = new qtGateImapRead ( IMapConnect , fileName , true , mail => {
1233+ rImap . logout ( ) ;
12241234 const retText = exports . getMailAttachedBase64 ( mail ) ;
1225- _callback = true ;
1226- CallBack ( null , retText ) ;
1227- return rImap . logout ( ) ;
1228- } ) ;
1229- rImap . once ( 'end' , err => {
1230- if ( err && ! _callback ) {
1231- return CallBack ( err ) ;
1232- }
1233- rImap = null ;
1235+ return CallBack ( null , retText ) ;
12341236 } ) ;
12351237} ;
12361238const pingPongTimeOut = 1000 * 30 ;
@@ -1377,7 +1379,7 @@ class imapPeer extends Event.EventEmitter {
13771379 }
13781380 } ) ;
13791381 this . wImap . once ( 'error' , err => {
1380- if ( err && err . message && / A U T H | c e r t i f i c a t e | L O G I N / i. test ( err . message ) ) {
1382+ if ( err && err . message && / a u t h | l o g i n | l o g i n | T o o m a n y s i m u l t a n e o u s | U N A V A I L A B L E / i. test ( err . message ) ) {
13811383 return this . destroy ( 1 ) ;
13821384 }
13831385 saveLog ( `imapPeer this.wImap on error [${ err . message } ]` ) ;
@@ -1406,7 +1408,7 @@ class imapPeer extends Event.EventEmitter {
14061408 }
14071409 newReadImap ( ) {
14081410 saveLog ( `newReadImap!` ) ;
1409- this . rImap = new qtGateImapRead ( this . imapData , this . listenBox , false , false , email => {
1411+ this . rImap = new qtGateImapRead ( this . imapData , this . listenBox , false , email => {
14101412 this . mail ( email ) ;
14111413 } ) ;
14121414 this . rImap . once ( 'ready' , ( ) => {
@@ -1419,7 +1421,7 @@ class imapPeer extends Event.EventEmitter {
14191421 } ) ;
14201422 this . rImap . once ( 'error' , err => {
14211423 saveLog ( `rImap on Error [${ err . message } ]` ) ;
1422- if ( err && err . message && / A U T H | c e r t i f i c a t e | L O G I N / i. test ( err . message ) ) {
1424+ if ( err && err . message && / a u t h | l o g i n | l o g i n | T o o m a n y s i m u l t a n e o u s | U N A V A I L A B L E / i. test ( err . message ) ) {
14231425 return this . destroy ( 1 ) ;
14241426 }
14251427 this . rImap . destroyAll ( null ) ;
@@ -1433,7 +1435,7 @@ class imapPeer extends Event.EventEmitter {
14331435 } ) ;
14341436 }
14351437 makeWriteFolder ( CallBack ) {
1436- let uu = new qtGateImapRead ( this . imapData , this . writeBox , false , false , email => { } ) ;
1438+ let uu = new qtGateImapRead ( this . imapData , this . writeBox , false , email => { } ) ;
14371439 uu . once ( 'ready' , ( ) => {
14381440 uu . destroyAll ( null ) ;
14391441 this . pingUuid = null ;
@@ -1480,9 +1482,6 @@ class imapPeer extends Event.EventEmitter {
14801482 return saveLog ( `sendDone got error [${ err . message } ]` ) ;
14811483 } ) ;
14821484 }
1483- trySendToRemoteFromFile1Less10MB ( fileName , CallBack ) {
1484- return exports . trySendToRemoteFromFile1Less10MB ( this , fileName , CallBack ) ;
1485- }
14861485}
14871486exports . imapPeer = imapPeer ;
14881487exports . sendMediaData = ( imapPeer , mediaData , CallBack ) => {
@@ -1493,7 +1492,7 @@ exports.sendMediaData = (imapPeer, mediaData, CallBack) => {
14931492 wImap . once ( 'error' , err => {
14941493 _err = err ;
14951494 wImap . logout ( ) ;
1496- if ( err . message && / A U T H | c e r t i f i c a t e | L O G I N / i. test ( err . message ) ) {
1495+ if ( err . message && / a u t h | l o g i n | l o g i n | T o o m a n y s i m u l t a n e o u s | U N A V A I L A B L E / i. test ( err . message ) ) {
14971496 if ( ! _return ) {
14981497 _return = true ;
14991498 return CallBack ( err ) ;
@@ -1521,40 +1520,43 @@ exports.sendMediaData = (imapPeer, mediaData, CallBack) => {
15211520 } ) ;
15221521 } ) ;
15231522} ;
1524- exports . trySendToRemoteFromFile1Less10MB = ( imapPeer , fileName , CallBack ) => {
1523+ exports . trySendToRemoteFromFile1Less10MB4 = ( imapPeer , fileName , CallBack ) => {
15251524 //saveLog (`doing trySendToRemoteFromFile1Less10MB fileName = [${ fileName }]`)
1526- const writeBox = fileName . replace ( / t e m p \/ / , '' ) ;
1525+ const filePath = fileName . split ( '/videoTemp/' ) ;
1526+ const writeBox = filePath [ filePath . length - 1 ] ;
15271527 let _return = false ;
15281528 let wImap = new qtGateImapwrite ( imapPeer . imapData , writeBox ) ;
15291529 wImap . once ( 'error' , err => {
1530- wImap . destroyAll ( err ) ;
1531- if ( err && err . message && / A U T H | c e r t i f i c a t e | L O G I N / i. test ( err . message ) ) {
1530+ wImap . logout ( ) ;
1531+ if ( err && err . message && / a u t h | l o g i n | l o g i n | T o o m a n y s i m u l t a n e o u s | U N A V A I L A B L E / i. test ( err . message ) ) {
15321532 if ( ! _return ) {
15331533 _return = true ;
15341534 return CallBack ( err ) ;
15351535 }
15361536 return ;
15371537 }
1538- return exports . trySendToRemoteFromFile1Less10MB ( imapPeer , fileName , CallBack ) ;
1538+ return exports . trySendToRemoteFromFile1Less10MB4 ( imapPeer , fileName , CallBack ) ;
15391539 } ) ;
15401540 wImap . once ( 'end' , err => {
15411541 wImap = null ;
1542- //saveLog ( `trySendToRemoteFromFile on end! err = [${ err }]` )
1543- if ( ! _return ) {
1544- _return = true ;
1545- return CallBack ( err ) ;
1546- }
1542+ Fs . unlink ( fileName , ( ) => {
1543+ //saveLog ( `trySendToRemoteFromFile on end! err = [${ err }]` )
1544+ if ( ! _return ) {
1545+ _return = true ;
1546+ return CallBack ( err ) ;
1547+ }
1548+ } ) ;
15471549 } ) ;
15481550 wImap . once ( 'ready' , ( ) => {
15491551 //saveLog ( `trySendToRemoteFromFile wImap on ready for [${ fileName }]`)
1550- return wImap . imapStream . createBox ( false , writeBox , err => {
1551- wImap . appendFromFile2 ( fileName , err => {
1552- wImap . destroyAll ( err ) ;
1553- if ( ! _return ) {
1554- _return = true ;
1555- return CallBack ( ) ;
1556- }
1557- } ) ;
1552+ return Async . series ( [
1553+ next => wImap . imapStream . createBox ( false , writeBox , next ) ,
1554+ next => wImap . appendFromFile3 ( fileName , next ) ,
1555+ next => wImap . logout ( )
1556+ ] , err => {
1557+ if ( err ) {
1558+ return wImap . destroyAll ( err ) ;
1559+ }
15581560 } ) ;
15591561 } ) ;
15601562} ;
@@ -2077,17 +2079,20 @@ class streamImap extends Stream.Transform {
20772079 return this . emit ( 'end' ) ;
20782080 }
20792081}
2080- exports . readMediaToFile = ( IMapConnect , fileName , tempFolderName , CallBack ) => {
2081- const writeFileName = path_1 . join ( tempFolderName , fileName ) ;
2082- let _CallBack = false ;
2083- const imap = new streamImap ( IMapConnect , fileName , writeFileName ) ;
2084- const doCallBack = err => {
2085- if ( _CallBack ) {
2086- return ;
2082+ exports . imapGetMediaFilesFromString = ( IMapConnect , files , folder , CallBack ) => {
2083+ const fileArray = files . split ( ',' ) ;
2084+ if ( ! fileArray . length ) {
2085+ return CallBack ( new Error ( ' no file!' ) ) ;
2086+ }
2087+ Async . eachSeries ( fileArray , ( n , next ) => {
2088+ Async . waterfall ( [
2089+ _next => exports . imapGetMediaFile ( IMapConnect , n , _next ) ,
2090+ ( mediaData , _next ) => Fs . writeFile ( path_1 . join ( folder , n ) , mediaData , 'utf8' , _next )
2091+ ] , next ) ;
2092+ } , err => {
2093+ if ( err ) {
2094+ return CallBack ( err ) ;
20872095 }
2088- _CallBack = true ;
2089- CallBack ( err , writeFileName ) ;
2090- } ;
2091- imap . once ( 'end' , doCallBack ) ;
2092- imap . once ( 'error' , doCallBack ) ;
2096+ return Upload . joinFiles ( files , CallBack ) ;
2097+ } ) ;
20932098} ;
0 commit comments