out.on('close',function() { appfs.Mount(outf,function(vfs) { console.log("opening appfs"); //console.log(vfs.dirs); socket.emit("packageProgress",{text:"adjusting file offsets"}); vfs.moveOffset(stats.size,function() { //we now have a completed package... //create exe. console.log("creating exe package"); socket.emit("packageProgress",{text:"merging package into exe"}); console.log('copy /b "'+exeFile+'"+"'+outf+'" "'+exeFile2+'"'); child = exec('copy /b "'+exeFile+'"+"'+outf+'" "'+exeFile2+'"',function(error,stdout,sterr) { if (error) { console.log(error); } else { console.log(stdout); console.log(sterr); //clean up fs.unlink(outf); console.log("exe created" + exeFile); socket.emit("packageProgress",{text:"exe created: "+exeFile}); } }); }); }) });
}).then(function() { if (deskShell.defaultApp) { //running default app, so also check for updates. if (deskShell.env['checkForPlatformUpdates']) { var request = require("request"); request(deskShell.env.platformUpdateVersionUrl, function(error, response, body) { if (error) return console.log("update failed:"+error); var lines = body.split("\n"); fs.readFile(__dirname+path.sep+"installer-version.txt", 'utf8', function (err, data) { if (err) { //installer version not defined, you are probably running from a git checkout. } else { var lines2 = data.split("\n"); console.log("checking if upgrade available:",lines[0].replace(/\r/, '')+">"+lines2[0]); if (upgradeNeeded(lines[0],lines2[0])) { console.log("upgrade available, launching updater."); console.log(path.normalize(deskShell.platformDir + "/" +deskShell.env.updaterPath)); require('child_process').exec(path.normalize(deskShell.platformDir + path.sep +deskShell.env.updaterPath),function(error, stdout, stderr) { if (error) console.log("upgrade failed."); }); } else { console.log("no upgrade available."); } } }); }); } } //file found. var reading = Q.defer(); if (deskShell.env.appHandlers && deskShell.env.appHandlers[path.extname(deskShell.appFile)]) { console.log("handler file"); deskShell.appLaunchFile = deskShell.appFile; var appHandler = deskShell.env.appHandlers[path.extname(deskShell.appFile)]; deskShell.appFile = deskShell.installDir+"plugins"+path.sep+appHandler.app; deskShell.appDir = path.dirname(deskShell.appFile)+path.sep; console.log("launching handler:",deskShell.appFile); //ideally handlers would actually be a package file. deskShell.packageFile = false; deskShell.appfs = fs; fs.readFile(deskShell.appFile, 'utf8', function (err, data) { if (err) { return reading.reject(err); } try { deskShell.appDef = JSON.parse(data); deskShell.mainFile = deskShell.appDir + deskShell.appDef.main; } catch(e) { return reading.reject(e); } return reading.resolve(); }); } else { if (path.extname(deskShell.appFile) == ".appfs" || path.extname(deskShell.appFile) == ".exe") { console.log("package file"); deskShell.packageFile = true; appfs.Mount(deskShell.appFile,function(vfs) { deskShell.appfs = vfs; deskShell.appfs.readFile("app.desk", 'utf8', function (err, data) { if (err) { return reading.reject(err); } try { deskShell.appDef = JSON.parse(data); deskShell.mainFile = deskShell.appDef.main; } catch(e) { return reading.reject(e); } return reading.resolve(); }); }); } else { deskShell.packageFile = false; deskShell.appfs = fs; fs.readFile(deskShell.appFile, 'utf8', function (err, data) { if (err) { return reading.reject(err); } try { deskShell.appDef = JSON.parse(data); deskShell.mainFile = deskShell.appDir + deskShell.appDef.main; } catch(e) { return reading.reject(e); } return reading.resolve(); }); } } return reading.promise; }).then(function() {
fs.unlink(appFolder+packagef,function() { appfs.Mount(appFolder+packagef,function(vfs) { switch(appInfo['package']) { case 'scramble': vfs.pipe = "deskshell "; break; case 'fast': vfs.pipe = "none "; break; default: vfs.pipe = "Standard "; break; } var filepos=files.length; var addAnotherFile = function() { filepos--; if (filepos>-1) { //console.log(files[filepos].name); var reader = fs.createReadStream(files[filepos].path); var packageFile = path.relative(appFolder,files[filepos].path); var writepackageFile = packageFile.split("\\").join("/"); var writer = vfs.createWriteStream(writepackageFile); writer.on('close',function() { socket.emit("packageProgress",{text:"added "+writepackageFile}); addAnotherFile(); }); switch(appInfo['package']) { case "scramble": var b64encode = b64Streamer.Encoder(); reader.pipe(b64encode); cryptoStreamer.encryptStream(b64encode,vfs.pipe).pipe(writer); break; case "fast": reader.pipe(writer); break; case "standard": default: var b64encode = b64Streamer.Encoder(); reader.pipe(b64encode).pipe(writer); break; } } else { //check there is an app.desk if (!vfs.dirs['app.desk']) { //take desk file and add it as app.desk var reader = fs.createReadStream(appPackage); var writer = vfs.createWriteStream("app.desk"); writer.on('close',function() { socket.emit("packageProgress",{text:"added app.desk"}); vfs._writeFooter(function() { console.log("wrote footer"); socket.emit("packageProgress",{text:"package created: "+packagef}); }); }); switch(appInfo['package']) { case "scramble": cryptoStreamer.encryptStream(reader,vfs.pipe).pipe(writer); break; case "fast": reader.pipe(writer); break; case "standard": default: var b64encode = b64Streamer.Encoder(); reader.pipe(b64encode).pipe(writer); break; } } else { vfs._writeFooter(function() { console.log("wrote footer"); socket.emit("packageProgress",{text:"package created: "+packagef}); }); } } } addAnotherFile(); }); });