|
|
var express = require('express'), bodyParser = require('body-parser'), utils = require('./utils.js'), https = require('https');
//---- Construct ----
function WEB(db, currency, options) { var __self = this;
__self.db = db; __self.currency = currency;
__self.port = options.port || 9000; __self.title = options.title; __self.currency_name = options.currency; __self.logo = options.logo; __self.twitter = options.twitter; __self.fanart = options.fanart; __self.statdir = options.statdir; __self.check_data = 4;//minutes
__self.first_check = true; __self.slogan = ''; }
// ---- Methods ----
WEB.prototype.start = function () { var __self = this; __self.srv = express(); __self.srv.set('view engine', 'jade'); __self.srv.set('views', 'web/templates'); __self.srv.use(bodyParser()); __self.srv.use(express.static('./web/public'));
__self.render_opts = { title: __self.title, slogan: __self.slogan, logo: __self.logo, twitter: __self.twitter, fanart: __self.fanart, currency: __self.currency_name, };
// get twitch/twitter data
function update_data() { var time = utils.make_interval(__self.check_data); if (time === 0 || __self.first_check) { if(__self.first_check) __self.first_check = false; https.get('https://api.twitch.tv/kraken/channels/' + __self.title, function (response) { var body = '';
// put together response
response.on('data', function (chunk) { body += chunk; });
// log file creation
response.on('end', function () { var json = null; try { json = JSON.parse(body); __self.slogan = json.status; __self.render_opts.slogan = json.status; } catch (err) { console.log('Error grabbing Twitch data in Web.JS: '+err); } setTimeout(update_data, 1000); }); }); } else { setTimeout(update_data, time); } }
// ---- Helpers ----
__self.srv.locals.ucfirst = function(value){ return value.charAt(0).toUpperCase() + value.slice(1); }; __self.srv.locals.slicelast = function(value){ return value.slice(0, -1); };
// ---- Routes -----
__self.srv.get('/', function(req, res) { //lets get the top 5
sql = 'SELECT * FROM viewers ORDER BY points DESC LIMIT 10;'; __self.db.execute(sql, function(rows) { var opts = __self.render_opts; opts.rows = rows; opts.bet_status = __self.currency.bets_status; opts.bet_board = __self.currency.bets_board; opts.bet_viewers = __self.currency.bets_viewers;
res.render('index', opts); }); }); __self.srv.get('/ladder', function(req, res) { //get the whole viewer list
sql = 'SELECT * FROM viewers ORDER BY points DESC;'; __self.db.execute(sql, function(rows) { var opts = __self.render_opts; opts.rows = rows; res.render('ladder', opts); }); }); __self.srv.get('/stats', function(req, res) { var opts = __self.render_opts; opts.statdir = __self.statdir; res.render('stats', opts); }); __self.srv.get('/fanart', function(req, res) { res.render('fanart', __self.render_opts); });
/* Raw data for android app */ __self.srv.get('/api/test', function(req, res) { res.send("Hey, its Potatr. This data was pulled from the web."); }); __self.srv.get('/api/viewer_dump', function(req, res) { sql = 'SELECT * FROM viewers ORDER BY points DESC;'; __self.db.execute(sql, function(rows) { ladder_data = new Object(); rows.forEach(function(element, index, array){ ladder_data[element.user] = element.points; }); res.send(ladder_data); }); }); __self.srv.post('/api/exchange', function(req, res) { var name = req.body.name.toLowerCase(), amount = parseInt(req.body.amount, 10);
if (req.ip == '127.0.0.1') { if ( __self.currency.viewer_list.indexOf(name) > -1 ) { __self.currency.adjust_currency('add', amount, name); res.send('1'); } else { res.send('0'); } } });
__self.srv.listen(__self.port); update_data(); console.log('Started website at '+__self.port);
};
module.exports = function (db, currency, options) { return new WEB(db, currency, options); };
|