Commit a58f7e7a authored by Skye Yu's avatar Skye Yu

feat: add getPartFile download

parent 6f2d1c15
...@@ -69,6 +69,7 @@ declare class Jensen { ...@@ -69,6 +69,7 @@ declare class Jensen {
getDeviceInfo: (time?: number) => Promise<DeviceInfo>; getDeviceInfo: (time?: number) => Promise<DeviceInfo>;
listFiles: (time?: number) => Promise<FileInfo[]>; listFiles: (time?: number) => Promise<FileInfo[]>;
getFile: (fileName: string, length: number, on?: (msg: Uint8Array | 'fail') => void, onprogress?: (size: number) => void) => void; getFile: (fileName: string, length: number, on?: (msg: Uint8Array | 'fail') => void, onprogress?: (size: number) => void) => void;
getFilePart: (fileName: string, length: number, on?: (msg: Uint8Array | 'fail') => void, onprogress?: (size: number) => void) => void;
getFileBlock: (fileName: string, length: number, on?: (msg: Uint8Array | 'fail') => void) => Promise<ReturnStruct['common']>; getFileBlock: (fileName: string, length: number, on?: (msg: Uint8Array | 'fail') => void) => Promise<ReturnStruct['common']>;
requestFirmwareUpgrade: (vn: number, length: number, time?: number) => Promise<{ result: 'accepted' | 'fail' }>; requestFirmwareUpgrade: (vn: number, length: number, time?: number) => Promise<{ result: 'accepted' | 'fail' }>;
beginBNC: (time?: number) => Promise<ReturnStruct['common']>; beginBNC: (time?: number) => Promise<ReturnStruct['common']>;
......
...@@ -217,7 +217,7 @@ function Jensen(log) { ...@@ -217,7 +217,7 @@ function Jensen(log) {
current = 'cmd-' + cmd.command + '-' + cmd.index; current = 'cmd-' + cmd.command + '-' + cmd.index;
Logger.debug('jensen', 'sendNext', 'command: ' + COMMAND_NAMES[cmd.command] + ', data bytes: ' + data.byteLength); Logger.debug('jensen', 'sendNext', 'command: ' + COMMAND_NAMES[cmd.command] + ', data bytes: ' + data.byteLength);
self.timewait = cmd.command == TRANSFER_FILE ? 1000 : 10; self.timewait = cmd.command == TRANSFER_FILE || cmd.command == GET_FILE_BLOCK ? 100 : 10;
await device.transferOut(1, data).catch((e) => crash('sendNext', e)); await device.transferOut(1, data).catch((e) => crash('sendNext', e));
if (cmd.onprogress) cmd.onprogress(1, 1); if (cmd.onprogress) cmd.onprogress(1, 1);
...@@ -720,6 +720,39 @@ Jensen.prototype.streaming = async function (filename, length, ondata, onprogres ...@@ -720,6 +720,39 @@ Jensen.prototype.streaming = async function (filename, length, ondata, onprogres
this.send(new Command(TRANSFER_FILE).body(fname)); this.send(new Command(TRANSFER_FILE).body(fname));
}; };
Jensen.prototype.getFilePart = async function (filename, length, ondata, onprogress) {
if (typeof length != 'number') throw new Error('parameter `length` required');
if (length <= 0) throw new Error('parameter `length` must greater than zero');
Logger.info('jensen', 'getFilePart', `file download start. filename: ${filename}, length: ${length} `);
let data = [];
data.push((length >> 24) & 0xff);
data.push((length >> 16) & 0xff);
data.push((length >> 8) & 0xff);
data.push((length >> 0) & 0xff);
for (let i = 0; i < filename.length; i++) data.push(filename.charCodeAt(i));
let flen = 0;
let handler = (msg) => {
if (msg != null) {
flen += msg.body.length || msg.body.byteLength;
ondata(msg.body);
Logger.info('jensen', 'getFilePart length', `${length} ${flen}`);
if (flen >= length) {
Logger.info('jensen', 'getFilePart', 'file download finish.');
return 'OK';
}
} else {
Logger.info('jensen', 'getFilePart', 'file download fail.');
ondata('fail');
}
};
this.onreceive = onprogress;
Jensen.registerHandler(GET_FILE_BLOCK, handler);
this.send(new Command(GET_FILE_BLOCK).body(data));
};
Jensen.prototype.getFile = async function (filename, length, ondata, onprogress) { Jensen.prototype.getFile = async function (filename, length, ondata, onprogress) {
if (typeof length != 'number') throw new Error('parameter `length` required'); if (typeof length != 'number') throw new Error('parameter `length` required');
if (length <= 0) throw new Error('parameter `length` must greater than zero'); if (length <= 0) throw new Error('parameter `length` must greater than zero');
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment