171 lines
5.8 KiB
JavaScript
Executable File
171 lines
5.8 KiB
JavaScript
Executable File
const path = require('path');
|
|
const fs = require('fs');
|
|
const fse = require('fs-extra');
|
|
const os = require('os');
|
|
const gunzip = require('gulp-gunzip');
|
|
const untar = require('gulp-untar');
|
|
const through = require('through2');
|
|
const gulp = require('gulp');
|
|
const gutil = require('gulp-util');
|
|
const Sdk = require('./sdk');
|
|
const exec = require('./exec');
|
|
const col = gutil.colors;
|
|
|
|
|
|
class FlashPlayer extends Sdk {
|
|
|
|
constructor(version) {
|
|
super(FlashPlayer.ID, version || FlashPlayer.VERSION);
|
|
}
|
|
|
|
playerPath(debug) {
|
|
const v = this.version.split('.');
|
|
const dir = `${v[0]}_${v[1]}_r${v[2]}_${v[3]}`;
|
|
return `${this.path}/${dir}${debug ? '_debug': ''}`;
|
|
}
|
|
|
|
prepare() {
|
|
let p = super.prepare();
|
|
if (!this.prepared && os.type() === 'Linux') {
|
|
p = p.then(() => {
|
|
let arch = null;
|
|
if (os.arch() === 'ia32') { arch = 'i386'}
|
|
if (os.arch() === 'x64') { arch = 'x86_64'}
|
|
|
|
const extract = (debug) => {
|
|
const v = this.version.split('.');
|
|
const playerPath = this.playerPath(debug);
|
|
const archive = `${playerPath}/flashplayer${v[0]}_${v[1]}r${v[2]}_${v[3]}_linux_sa${debug ? '_debug' : ''}.${arch}.tar.gz`;
|
|
return gulp.src(archive)
|
|
.pipe(gunzip()).pipe(untar())
|
|
.pipe(gulp.dest(playerPath));
|
|
};
|
|
|
|
return new Promise((success, fail) => {
|
|
extract().on('end', () => {
|
|
extract(true).on('end', success).on('error', fail)
|
|
}).on('error', fail);
|
|
})
|
|
})
|
|
}
|
|
return p;
|
|
}
|
|
|
|
get prepared() {
|
|
try {
|
|
return fs.existsSync(`${this.flashPlayerBin()}`);
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
get link() {
|
|
return `https://fpdownload.macromedia.com/pub/flashplayer/installers/archive/fp_${this.version}_archive.zip`;
|
|
}
|
|
|
|
flashPlayerBin(debug) {
|
|
if (os.type() === 'Windows_NT') {
|
|
const v = this.version.split('.');
|
|
const playerName = `flashplayer${v[0]}_${v[1]}r${v[2]}_${v[3]}_win_sa${debug ? '_debug' : ''}.exe`;
|
|
return `${this.playerPath(debug)}/${playerName}`;
|
|
} else if (os.type() === 'Linux') {
|
|
const binPath = `${this.playerPath(debug)}/${debug ? 'flashplayerdebugger': 'flashplayer'}`;
|
|
fs.chmodSync(binPath, 0o755);
|
|
return binPath;
|
|
} else {
|
|
throw `Unsupported os '${os.type()}'`;
|
|
}
|
|
}
|
|
|
|
static get flashPlayerDir() {
|
|
if (os.type() === 'Windows_NT') {
|
|
return `${process.env.APPDATA}/Macromedia/Flash Player`;
|
|
} else if (os.type() === 'Linux') {
|
|
return `${os.homedir()}/.macromedia/Flash_Player`;
|
|
}
|
|
}
|
|
|
|
static get log() {
|
|
return `${this.flashPlayerDir}/Logs/flashlog.txt`;
|
|
}
|
|
|
|
static enableLog() {
|
|
const filename = `${os.homedir()}/mm.cfg`;
|
|
const value = 'TraceOutputFileEnable=1';
|
|
if (fs.exists(filename)) {
|
|
const data = fs.readFileSync(filename);
|
|
if (data.indexOf(value) === -1) {
|
|
fs.appendFileSync(filename, `${value}\n`);
|
|
}
|
|
} else {
|
|
fs.writeFileSync(filename, `${value}\n`);
|
|
}
|
|
}
|
|
|
|
static trust(value) {
|
|
const filename = `${this.flashPlayerDir}/#Security/FlashPlayerTrust/gulp.cfg`;
|
|
if (fs.exists(filename)) {
|
|
const data = fs.readFileSync(filename);
|
|
if (data.indexOf(value) === -1) {
|
|
fs.appendFileSync(filename, `${value}\n`);
|
|
}
|
|
} else {
|
|
if (!fs.exists(path.dirname(filename))) {
|
|
fse.ensureDirSync(path.dirname(filename));
|
|
}
|
|
fs.writeFileSync(filename, `${value}\n`);
|
|
}
|
|
}
|
|
|
|
run(debug) {
|
|
let stream = null;
|
|
const bufferContents = (file, enc, callback) => {
|
|
gutil.log(this.tag, col.cyan("run"), col.magenta(file.path));
|
|
FlashPlayer.trust(file.path);
|
|
FlashPlayer.enableLog();
|
|
exec('.', [this.flashPlayerBin(debug), file.path].join(' ')).then(() => {
|
|
stream.emit('end');
|
|
//callback();
|
|
}).catch((error) => {
|
|
stream.emit('end');
|
|
//callback();
|
|
stream.emit('error', error);
|
|
});
|
|
//stream.push(file);
|
|
// ToDo: watch when file is exists
|
|
// or create log file in FlashPlayer.enableLog()?
|
|
stream.push(new gutil.File({
|
|
path: FlashPlayer.log
|
|
}));
|
|
};
|
|
|
|
return stream = through.obj(bufferContents);
|
|
}
|
|
}
|
|
|
|
FlashPlayer.ID = "flashplayer";
|
|
|
|
FlashPlayer.VERSION_11_2_202_644 = '11.2.202.644';
|
|
FlashPlayer.VERSION_11 = FlashPlayer.VERSION_11_2_202_644;
|
|
|
|
FlashPlayer.VERSION_24_0_0_186 = '24.0.0.186';
|
|
FlashPlayer.VERSION_24_0_0_194 = '24.0.0.194';
|
|
FlashPlayer.VERSION_24_0_0_221 = '24.0.0.221';
|
|
FlashPlayer.VERSION_24 = FlashPlayer.VERSION_24_0_0_221;
|
|
|
|
FlashPlayer.VERSION_25_0_0_127 = '25.0.0.127';
|
|
FlashPlayer.VERSION_25_0_0_148 = '25.0.0.148';
|
|
FlashPlayer.VERSION_25_0_0_163 = '25.0.0.163';
|
|
FlashPlayer.VERSION_25_0_0_117 = '25.0.0.171';
|
|
FlashPlayer.VERSION_25 = FlashPlayer.VERSION_25_0_0_117;
|
|
|
|
FlashPlayer.VERSION_26_0_0_131 = '26.0.0.131';
|
|
FlashPlayer.VERSION_26 = FlashPlayer.VERSION_26_0_0_131;
|
|
|
|
if (os.type() === 'Linux' && os.arch() === 'ia32') { //Linux i386
|
|
FlashPlayer.VERSION = FlashPlayer.VERSION_11;
|
|
} else {
|
|
FlashPlayer.VERSION = FlashPlayer.VERSION_26;
|
|
}
|
|
|
|
module.exports = FlashPlayer; |