101 lines
2.6 KiB
JavaScript
Raw Normal View History

2016-11-16 18:19:44 +01:00
var SimpleGit = require("simple-git");
var simpleGits = [];
var fs = require("fs");
var path = require("path");
var defaultModules = require(__dirname + "/../defaultmodules.js");
2016-10-15 13:08:46 +02:00
var NodeHelper = require("node_helper");
module.exports = NodeHelper.create({
config: {},
updateTimer: null,
2019-06-29 15:59:03 -05:00
updateProcessStarted: false,
2016-10-15 13:08:46 +02:00
start: function () {
},
configureModules: function(modules) {
2019-06-29 15:59:03 -05:00
// Push MagicMirror itself , biggest chance it'll show up last in UI and isn't overwritten
// others will be added in front, asynchronously
simpleGits.push({"module": "default", "git": SimpleGit(path.normalize(__dirname + "/../../../"))});
for (moduleName in modules) {
if (defaultModules.indexOf(moduleName) < 0) {
// Default modules are included in the main MagicMirror repo
var moduleFolder = path.normalize(__dirname + "/../../" + moduleName);
var stat;
try {
2019-06-29 15:59:03 -05:00
//console.log("checking git for module="+moduleName)
stat = fs.statSync(path.join(moduleFolder, ".git"));
} catch(err) {
// Error when directory .git doesn't exist
// This module is not managed with git, skip
continue;
}
var res = function(mn, mf) {
var git = SimpleGit(mf);
git.getRemotes(true, function(err, remotes) {
if (remotes.length < 1 || remotes[0].name.length < 1) {
// No valid remote for folder, skip
return;
}
// Folder has .git and has at least one git remote, watch this folder
2019-06-29 15:59:03 -05:00
simpleGits.unshift({"module": mn, "git": git});
});
}(moduleName, moduleFolder);
2016-11-16 18:19:44 +01:00
}
}
2016-10-15 13:08:46 +02:00
},
socketNotificationReceived: function (notification, payload) {
if (notification === "CONFIG") {
this.config = payload;
} else if(notification === "MODULES") {
2019-06-29 15:59:03 -05:00
// if this is the 1st time thru the update check process
if(this.updateProcessStarted==false ){
this.updateProcessStarted=true;
this.configureModules(payload);
this.preformFetch();
}
2016-10-15 13:08:46 +02:00
}
},
preformFetch() {
2019-06-29 15:59:03 -05:00
var self=this;
2016-11-16 18:19:44 +01:00
simpleGits.forEach(function(sg) {
sg.git.fetch().status(function(err, data) {
data.module = sg.module;
if (!err) {
2019-06-29 15:59:03 -05:00
sg.git.log({"-1": null},
function(err, data2) {
if (!err && data2.latest && "hash" in data2.latest) {
this.bound_data.hash = data2.latest.hash;
self.sendSocketNotification("STATUS", this.bound_data);
}
}.bind({bound_data:data})
);
2016-11-16 18:19:44 +01:00
}
});
2016-10-15 13:08:46 +02:00
});
this.scheduleNextFetch(this.config.updateInterval);
},
scheduleNextFetch: function(delay) {
if (delay < 60 * 1000) {
delay = 60 * 1000
}
var self = this;
clearTimeout(this.updateTimer);
this.updateTimer = setTimeout(function() {
self.preformFetch();
}, delay);
}
2016-10-17 17:03:10 +02:00
});