Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>So I finally fixed this issue. If someone is interested how I did it, this is how:</p> <p>I built a function using the NPM api to check if the current version is up to date:</p> <pre><code> exports.checkVersion = function(req, res) { npm.load([], function (err, npm) { npm.commands.search(["mediacenterjs"], function(err, data){ if (err){ console.log('NPM search error ' + err); return; } else{ var currentInfo = checkCurrentVersion(); for (var key in data) { var obj = data[key]; if(obj.name === 'mediacenterjs' &amp;&amp; obj.version &gt; currentInfo.version){ var message = 'New version '+obj.version+' Available'; res.json(message); } } } }); }); } var checkCurrentVersion = function(){ var info = {}; var data = fs.readFileSync('./package.json' , 'utf8'); try{ info = JSON.parse(data); }catch(e){ console.log('JSON Parse Error', e); } return info; }; </code></pre> <p>If the version is not up to date I initiate a download (in my case the github master repo url) using node-wget:</p> <pre><code>var wget = require('wget'); var download = wget.download(src, output, options); download.on('error', function(err) { console.log('Error', err); callback(output); }); download.on('end', function(output) { console.log(output); callback(output); }); download.on('progress', function(progress) { console.log(progress * 100); }); </code></pre> <p>The callback kicks off the unzip function bases on @John Munsch 'Self help' script but I added a check to see if there was a previous unzip attempt and if so, I delete the folder:</p> <pre><code>if(fs.existsSync(dir) === false){ fs.mkdirSync(dir); } else { rimraf(dir, function (err) { if(err) { console.log('Error removing temp folder', err); } else { fileHandler.downloadFile(src, output, options, function(output){ console.log('Done', output); unzip(req, res, output, dir); }); } }); } console.log("Unzipping New Version..."); var AdmZip = require("adm-zip"); var zip = new AdmZip(output); zip.extractAllTo(dir, true); fs.openSync('./configuration/update.js', 'w'); </code></pre> <p>The openSync function kicks off my 'NodeMon' based file (<a href="https://github.com/jansmolders86/mediacenterjs/blob/master/server.js" rel="nofollow">https://github.com/jansmolders86/mediacenterjs/blob/master/server.js</a>) which kills the server because it is listing for changes to that specific file. Finally it restart and starts the following functions:</p> <pre><code>function installUpdate(output, dir){ console.log('Installing update...'); var fsExtra = require("fs.extra"); fsExtra.copy(dir+'/mediacenterjs-master', './', function (err) { if (err) { console.error('Error', err); } else { console.log("success!"); cleanUp(output, dir); } }); } function cleanUp(output, dir) { console.log('Cleanup...'); var rimraf = require('rimraf'); rimraf(dir, function (e) { if(e) { console.log('Error removing module', e .red); } }); if(fs.existsSync(output) === true){ fs.unlinkSync(output); console.log('Done, restarting server...') server.start(); } } </code></pre> <p>Thanks to everyone that helped me out!</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload