Skip to content

Commit

Permalink
Merge pull request #2 from MichMich/v2-beta
Browse files Browse the repository at this point in the history
Update V2 beta from master
  • Loading branch information
paviro committed Mar 30, 2016
2 parents 6181098 + af910aa commit c89e578
Show file tree
Hide file tree
Showing 9 changed files with 312 additions and 192 deletions.
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
node_modules
/node_modules

!/modules/node_helper
!/modules/node_helper/**
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ Things that still have to be implemented or changed.
####Loader
- Loading of module uses `eval()`. We might want to look into a better solution. [loader.js#L112](https://github.com/MichMich/MagicMirror/blob/v2-beta/js/loader.js#L112).


####NodeHelper
- The node_helper superclass creates a seperate socket connection for each module. It's preferred to use the overall socket connection of the server.



6 changes: 5 additions & 1 deletion js/class.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,8 @@

return Class;
};
})();
})();


/*************** DO NOT EDIT THE LINE BELOW ***************/
if (typeof module !== 'undefined') {module.exports = Class;}
33 changes: 12 additions & 21 deletions js/electron.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,31 +56,20 @@ function loadConfig (callback) {

function loadModule(moduleName) {
var helperPath = __dirname + '/../modules/' + moduleName + '/node_helper.js';

var loadModule = true;
try {
fs.accessSync(helperPath, fs.R_OK);

var child = spawn('node', [helperPath]);

// Make sure the output is logged.
child.stdout.on('data', function(data) {
process.stdout.write('[' + moduleName + '] ' + data);
});

child.stderr.on('data', function(data) {
process.stdout.write('[' + moduleName + '] ' + data);
});

child.on('close', function(code) {
console.log(moduleName + ' closing code: ' + code);
});

//Log module name
console.log("Started helper script for module: " + moduleName + ".");

} catch (e) {
loadModule = false;
console.log("No helper found for module: " + moduleName + ".");
}

if (loadModule) {
var Module = require(helperPath);
var m = new Module();
m.setName(moduleName);
m.start();
}
}

function loadModules(modules) {
Expand Down Expand Up @@ -112,7 +101,9 @@ loadConfig(function(c) {
// initialization and is ready to create browser windows.
app.on('ready', function() {
var server = new Server(config, function() {
createWindow();
setTimeout(function() {
createWindow();
}, 1000);
});
});

Expand Down
111 changes: 111 additions & 0 deletions modules/newsfeed/fetcher.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
/* Magic Mirror
* Fetcher
*
* By Michael Teeuw http://michaelteeuw.nl
* MIT Licensed.
*/

var NewsFetcher = require('./newsfetcher.js');

/* Fetcher
* Responsible for requesting an update on the set interval and broadcasting the data.
*
* attribute url string - URL of the news feed.
* attribute reloadInterval number - Reload interval in milliseconds.
*/

var Fetcher = function(url, reloadInterval) {
var self = this;
var newsFetcher = new NewsFetcher();
if (reloadInterval < 1000) {
reloadInterval = 1000;
}

var reloadTimer = null;
var items = [];

var fetchFailedCallback = function() {};
var itemsReceivedCallback = function() {};

/* private methods */

/* fetchNews()
* Request the new items from the newsFetcher.
*/

var fetchNews = function() {
//console.log('Fetch news.');
clearTimeout(reloadTimer);
reloadTimer = null;
newsFetcher.fetchNews(url, function(fetchedItems) {
items = fetchedItems;
self.broadcastItems();
scheduleTimer();
}, function(error) {
fetchFailedCallback(self, error);
scheduleTimer();
});
};

/* scheduleTimer()
* Schedule the timer for the next update.
*/

var scheduleTimer = function() {
//console.log('Schedule update timer.');
clearTimeout(reloadTimer);
reloadTimer = setTimeout(function() {
fetchNews();
}, reloadInterval);
};

/* public methods */

/* setReloadInterval()
* Update the reload interval, but only if we need to increase the speed.
*
* attribute interval number - Interval for the update in milliseconds.
*/
this.setReloadInterval = function(interval) {
if (interval > 1000 && interval < reloadInterval) {
reloadInterval = interval;
}
};

/* startFetch()
* Initiate fetchNews();
*/
this.startFetch = function() {
fetchNews();
};

/* broadcastItems()
* Broadcast the exsisting items.
*/
this.broadcastItems = function() {
if (items.length <= 0) {
//console.log('No items to broadcast yet.');
return;
}
//console.log('Broadcasting ' + items.length + ' items.');
itemsReceivedCallback(self);
};

this.onReceive = function(callback) {
itemsReceivedCallback = callback;
};

this.onError = function(callback) {
fetchFailedCallback = callback;
};

this.url = function() {
return url;
};

this.items = function() {
return items;
};
};

module.exports = Fetcher;
53 changes: 53 additions & 0 deletions modules/newsfeed/newsfetcher.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/* Magic Mirror
* NewsFetcher
*
* By Michael Teeuw http://michaelteeuw.nl
* MIT Licensed.
*/

var FeedMe = require('feedme');
var request = require('request');

var NewsFetcher = function() {
var self = this;

self.successCallback = function(){};
self.errorCallback = function(){};

self.items = [];

var parser = new FeedMe();

parser.on('item', function(item) {
//console.log(item);
self.items.push({
title: item.title,
pubdate: item.pubdate,
});
});

parser.on('end', function(item) {
self.successCallback(self.items);
});

parser.on('error', function(error) {
self.errorCallback(error);
});

/* public methods */

/* fetchNews()
* Fetch the new news items.
*
* attribute url string - The url to fetch.
* attribute success function(items) - Callback on succes.
* attribute error function(error) - Callback on error.
*/
self.fetchNews = function(url, success, error) {
self.successCallback = success;
self.errorCallback = error;
request(url).pipe(parser);
};
};

module.exports = NewsFetcher;
Loading

0 comments on commit c89e578

Please sign in to comment.