UNPKG

watch-xdelta

Version:

smart-watch xdelta script

121 lines (97 loc) 3.19 kB
/** * header头信息有关的操作 */ 'use strict'; var _regeneratorRuntime = require('babel-runtime/regenerator')['default']; var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; Object.defineProperty(exports, '__esModule', { value: true }); var _co = require('co'); var _co2 = _interopRequireDefault(_co); var _babelFs = require('babel-fs'); var _babelFs2 = _interopRequireDefault(_babelFs); var DIFF_INDEX = 20;exports.DIFF_INDEX = DIFF_INDEX; // diff文件在头信息中的起始位置 /** * 初始化差分文件的头信息, 具体结构可以看doc/header.docx * @param {Number} diffLen diff块的总大小 * @param {Number} blk 分块的数量 * @param {Number} blksize 分块的大小 * @param {Number} oldFromLenB 老固件有多少个字节 * @param {Number} newFromLenB 新固件有多少个字节 * @return{Promise.<Buffer>} 头信息 * */ var generatorHeader = _co2['default'].wrap(_regeneratorRuntime.mark(function callee$0$0(_ref) { var blk = _ref.blk; var blksize = _ref.blksize; var oldFromLenB = _ref.oldFromLenB; var newFromLenB = _ref.newFromLenB; var xdeltaFiles = _ref.xdeltaFiles; var buf; return _regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { while (1) switch (context$1$0.prev = context$1$0.next) { case 0: buf = new Buffer(DIFF_INDEX + xdeltaFiles.length * 4); //wth1 buf.writeUInt8(0x77, 0); buf.writeUInt8(0x74, 1); buf.writeUInt8(0x68, 2); buf.writeUInt8(0x31, 3); //block-size buf.writeUInt32LE(blksize, 4); //diffNum buf.writeUInt32LE(blk, 8); //oldFromLenB buf.writeUInt32LE(oldFromLenB, 12); //newFromLenB buf.writeUInt32LE(newFromLenB, 16); //diffLen1...diffLenN context$1$0.next = 11; return fillInDiff(buf, DIFF_INDEX, xdeltaFiles); case 11: return context$1$0.abrupt('return', buf); case 12: case 'end': return context$1$0.stop(); } }, callee$0$0, this); })); exports.generatorHeader = generatorHeader; /** * 填充每个diff文件的大小 * @param {Buffer} buf 头信息 * @param {Number} xdeltaIndex 第一个diff文件的位置 * @param {Array} xdeltaFiles diff文件数组 * */ var fillInDiff = _co2['default'].wrap(_regeneratorRuntime.mark(function callee$0$0(buf, xdeltaIndex, xdeltaFiles) { var i, len, file, dStat, dSize; return _regeneratorRuntime.wrap(function callee$0$0$(context$1$0) { while (1) switch (context$1$0.prev = context$1$0.next) { case 0: i = 0, len = xdeltaFiles.length; case 1: if (!(i < len)) { context$1$0.next = 12; break; } file = xdeltaFiles[i]; context$1$0.next = 5; return _babelFs2['default'].stat(file); case 5: dStat = context$1$0.sent; dSize = dStat.size; buf.writeUInt32LE(dSize, xdeltaIndex); xdeltaIndex += 4; case 9: i++; context$1$0.next = 1; break; case 12: case 'end': return context$1$0.stop(); } }, callee$0$0, this); }));