/** * Created by marti on 30/01/2016. */ var http = require('http'), request = require('request'), cheerio = require('cheerio'), util = require('util'), cron = require('node-cron'); var dateFormat = require('dateformat'); var jsonfile = require('jsonfile'), fs = require('fs'); var nano = require('nano')('http://localhost:5984'); var log4js = require('log4js'); var logger = log4js.getLogger(); var calHandler = require('./today/calHandler'); var swedishWord = require('./today/swedishword'); var weather = require('./today/weather'); var trains = require('./today/trains'); var history = require('./today/history'); var mdMailer = require('./today/mailer'); var mdFitbit = require('./today/fitbit'); var db_name = 'silvrgit'; var dbCouch = nano.use(db_name); require('sugar-date'); var todayCache = { last: 0, data: { trains: {last: 0, data: []}, weather: {}, history: [], today: '', tv: {entries: []}, cal: {entries: []}, swedish: {}, fitbit:{} }, expire: ((60 * 1000) * 60) }; var file = __dirname + '/' + 'newdata.json'; var htmlfile = __dirname + '/' + 'today.html'; function saveData() { logger.info('Saving...'); jsonfile.writeFileSync(file, todayCache); } function saveToDB(data) { logger.debug('Inserting into couch...'); // Logger.info(util.inspect(obj)); dbCouch.insert(data, function(err, body, header) { if (err) { logger.error('Error inserting into couch'); logger.error(err); return; } }); } function nth(d) { // if (d > 3 && d < 21) {return 'th';} // Thanks kennebec // if (d % 10 === 1) {return 'st';} else if (d % 10 === 2) {return 'nd';} else if (d % 10 === 3) {return 'rd';} else {return 'th';} var n= d; return Math.floor(n / 10) === 1 ? 'th' : (n % 10 === 1 ? 'st' : (n % 10 === 2 ? 'nd' : (n % 10 === 3 ? 'rd' : 'th'))); } function dayNumber() { var now = new Date(); var start = new Date(now.getFullYear(), 0, 0); var diff = now - start; var oneDay = 1000 * 60 * 60 * 24; return Math.floor(diff / oneDay); } function breakDay() { var now = new Date(); return {year: now.getFullYear(), month: parseInt(now.getMonth()) + 1, day: now.getDate()} } /** * @return {number} */ function DayDiff(CurrentDate) { var TYear = CurrentDate.getFullYear(); var TDay = new Date('January, 01, ' + (parseInt(TYear) + 1)); TDay.getFullYear(TYear); var DayCount = (TDay - CurrentDate) / (1000 * 60 * 60 * 24); DayCount = Math.round(DayCount); var d = new Date(); DayCount = d.daysSince('beginning of this year'); return (DayCount); } Array.prototype.indexOfOld = Array.prototype.indexOf; Array.prototype.indexOf = function(e, fn) { if (!fn) { return this.indexOfOld(e); } else { if (typeof fn === 'string') { var att = fn; fn = function(e) { return e[att]; }; } return this.map(fn).indexOfOld(e); } }; module.exports = { getClock: function(req, res) { // Console.log(todayCache); res.render('pages/clock', todayCache); }, getToday: function(req, res) { logger.info(todayCache); res.render('pages/today', todayCache); }, getData: function(req, res) { res.setHeader('Content-Type', 'application/json'); res.end(JSON.stringify(todayCache)); }, getTodayDate: function() { var s, d = new Date(), nextYear = (parseInt(d.getFullYear()) + 1).toString() + '-01-01'; console.log(d.daysUntil('beginning of next year')); var daysSinceStart = d.daysSince('beginning of this year'); var daysRemaining = d.daysUntil('beginning of next year'); todayCache.data.history = []; s = '' + d.format('{Weekday} {Month} {dd}, {yyyy}') + ' - '; /* s = s + 'The ' + dayNumber() + nth(dayNumber) + ' day of ' + dateFormat(d, 'yyyy') + ', and there are ' + DayDiff(d) + ' days left until the end of the year.'; */ s = s + 'The ' + daysSinceStart + nth(daysSinceStart) + ' day of ' + dateFormat(d, 'yyyy') + ', and there are ' + daysRemaining + ' days left until the end of the year.'; logger.debug(s); todayCache.data.today = s; }, refreshTrainAndWeather: function() { weather.newDoGetWeather() .then((d) => { todayCache.data.weather = d; }).catch((e) => { logger.error(e); }); trains.updateTrains() .then((d) => { 'use strict'; console.log('Trains: ', d); todayCache.data.trains.data = d; todayCache.data.trains.last = new Date(); }) .catch((e)=> { 'use strict'; console.error(e); }); }, preLoadToday: function() { module.exports.getTodayDate(); todayCache.data.cal.entries = []; weather.newDoGetWeather() .then((d)=> { todayCache.data.weather = d; }) .catch((e) => { logger.error(e); }); trains.updateTrains() .then((d) => { 'use strict'; console.log('Trains: ', d); todayCache.data.trains.data = d; todayCache.data.trains.last = new Date(); }) .catch((e)=> { 'use strict'; console.error(e); }); history.updateHistory() .then((d) => { 'use strict'; console.log('History result: ', d); todayCache.data.history = d; }) .catch((e)=> { 'use strict'; console.error(e); }); calHandler.getSimpleCalV3('http://www.pogdesign.co.uk/cat/download_ics/60cfdff469d0490545d33d7e3b5c0bcc') .then((d) => { 'use strict'; todayCache.data.tv = d; }) .catch((e) => { 'use strict'; logger.error(e); }); calHandler.getSimpleCalV3( 'https://calendar.google.com/calendar/ical/martind2000%40gmail.com/private-40cfebc9f7dcfa7fde6b9bf2f0092c93/basic.ics') .then((d) => { 'use strict'; todayCache.data.cal.entries = todayCache.data.cal.entries.concat(d.entries); }) .catch((e) => { 'use strict'; logger.error(e); }); calHandler.getSimpleCalV3( 'https://calendar.google.com/calendar/ical/mt5pgdhknvgoc8usfnrso9vkv0%40group.calendar.google.com/private-58876002af9f302a593acfa6fa792dcf/basic.ics') .then((d) => { 'use strict'; todayCache.data.cal.entries = todayCache.data.cal.entries.concat(d.entries); }) .catch((e) => { 'use strict'; logger.error(e); }); calHandler.getSimpleCalV3( 'https://www.tripit.com/feed/ical/private/DB96E4BB-94A9BD8F9CC1CF51C6CC0D920840F4F5/tripit.ics') .then((d) => { 'use strict'; todayCache.data.cal.entries = todayCache.data.cal.entries.concat(d.entries); }) .catch((e) => { 'use strict'; logger.error(e); }); swedishWord.getSwedishWord() .then((d) => { 'use strict'; console.log('Swedish result: ', d); todayCache.data.swedish = d; }) .catch((e)=> { 'use strict'; console.error(e); }); mdFitbit.getYesterdayFitbit() .then((d) => { todayCache.data.fitbit = d; }) .catch((e)=> { 'use strict'; console.error(e); }); todayCache.date = breakDay(); } }; setTimeout(function() { module.exports.preLoadToday(); }, 5000); setTimeout(function() { // mdMailer.sendEmailV1(todayCache, __dirname); saveToDB(todayCache); }, 45000); cron.schedule('45 6 * * *', function() { module.exports.preLoadToday(); return -1; }); cron.schedule('0 */1 * * *', function() { module.exports.refreshTrainAndWeather(); return -1; }); cron.schedule('0 7 * * *', function() { mdMailer.sendEmailV1(); saveToDB(todayCache); // Console.log('tick'); return -1; });