Skip to content

Commit ec1a26c

Browse files
peterpeter
authored andcommitted
v1.3.2
1 parent 07fb0f6 commit ec1a26c

File tree

11 files changed

+522
-315
lines changed

11 files changed

+522
-315
lines changed

README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@
55

66
## Download 下載 ダウンロード
77

8-
### [The latest 最新版 v1.3.1](https://github.com/QTGate/QTGate-Desktop-Client/releases/latest/)
8+
### [The latest 最新版 v1.3.2](https://github.com/QTGate/QTGate-Desktop-Client/releases/latest/)
99

10-
[windows32](https://github.com/QTGate/QTGate-Desktop-Client/releases/download/v1.3.1/qtgate.Setup.1.3.1.ia32.exe)
10+
[windows32](https://github.com/QTGate/QTGate-Desktop-Client/releases/download/v1.3.2/qtgate.Setup.1.3.2.ia32.exe)
1111

12-
[windows64](https://github.com/QTGate/QTGate-Desktop-Client/releases/download/v1.3.1/qtgate.Setup.1.3.1.exe)
12+
[windows64](https://github.com/QTGate/QTGate-Desktop-Client/releases/download/v1.3.2/qtgate.Setup.1.3.2.exe)
1313

14-
[MacOS](https://github.com/QTGate/QTGate-Desktop-Client/releases/download/v1.3.1/qtgate-1.3.1.dmg)
14+
[MacOS](https://github.com/QTGate/QTGate-Desktop-Client/releases/download/v1.3.2/qtgate-1.3.2.dmg)
1515

16-
[Linux deb](https://github.com/QTGate/QTGate-Desktop-Client/releases/download/v1.3.1/qtgate_1.3.1_amd64.deb)
16+
[Linux deb](https://github.com/QTGate/QTGate-Desktop-Client/releases/download/v1.3.2/qtgate_1.3.2_amd64.deb)
1717

18-
[Linux pacman](https://github.com/QTGate/QTGate-Desktop-Client/releases/download/v1.3.1/qtgate-1.3.1.pacman)
18+
[Linux pacman](https://github.com/QTGate/QTGate-Desktop-Client/releases/download/v1.3.2/qtgate-1.3.2.pacman)
1919

2020
## Description 項目概要
2121

app/ImapConnect.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export default class ImapConnect extends Imap.imapPeer {
4242
if ( !err || ! err.message )
4343
return null
4444
const message = err.message
45-
if ( /Auth|Lookup failed|Invalid|Login|username/i.test( message ))
45+
if ( /auth|login|log in|Too many simultaneous|UNAVAILABLE/i.test( message ))
4646
return 3
4747
if ( /ECONNREFUSED/i.test ( message ))
4848
return 4
@@ -193,7 +193,7 @@ export default class ImapConnect extends Imap.imapPeer {
193193
saveLog ( 'clearTimeout timeOutWhenSendConnectRequestMail !' )
194194
clearTimeout ( this.timeOutWhenSendConnectRequestMail )
195195
if ( ! ret.requestSerial ) {
196-
saveLog ( `newMail have not ret.requestSerial, doing switch ( ret.command ) `)
196+
saveLog ( `newMail have not ret.requestSerial, ${ JSON.stringify ( ret )} doing switch ( ret.command ) `)
197197

198198
switch ( ret.command ) {
199199

@@ -214,7 +214,7 @@ export default class ImapConnect extends Imap.imapPeer {
214214
return saveLog ( `got Command from server "changeDocker" localServer.proxyServer or localServer.connectCommand is null!!`)
215215

216216
}
217-
saveLog (`on changeDocker container = [${ container }]`)
217+
saveLog ( `on changeDocker container = [${ container }]` )
218218
return this.localServer.proxyServer.sendCommand ( 'changeDocker', container )
219219

220220
}

app/imap.js

Lines changed: 70 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ const os_1 = require("os");
2929
const timers_1 = require("timers");
3030
const buffer_1 = require("buffer");
3131
const Fs = require("fs");
32+
const Upload = require("./uploadFile");
3233
const MAX_INT = 9007199254740992;
3334
const debug = true;
3435
const 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 (/^RECENT$/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
}
10221032
exports.qtGateImapwrite = qtGateImapwrite;
10231033
class 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
};
12361238
const 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 && /AUTH|certificate|LOGIN/i.test(err.message)) {
1382+
if (err && err.message && /auth|login|log in|Too many simultaneous|UNAVAILABLE/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 && /AUTH|certificate|LOGIN/i.test(err.message)) {
1424+
if (err && err.message && /auth|login|log in|Too many simultaneous|UNAVAILABLE/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
}
14871486
exports.imapPeer = imapPeer;
14881487
exports.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 && /AUTH|certificate|LOGIN/i.test(err.message)) {
1495+
if (err.message && /auth|login|log in|Too many simultaneous|UNAVAILABLE/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(/temp\//, '');
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 && /AUTH|certificate|LOGIN/i.test(err.message)) {
1530+
wImap.logout();
1531+
if (err && err.message && /auth|login|log in|Too many simultaneous|UNAVAILABLE/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

Comments
 (0)