UNPKG

timers3000

Version:

Provides a graphical interface in your browser to create and manage incremental timers for your daily tasks.

189 lines (174 loc) 5.87 kB
var pantexdb = require('pantexdb') , sessionscontroller = require('./sessionscontroller.js') , utils = require('../../lib/timerUtils.js'); var db = new pantexdb(process.env.TIMERDB, 'timers3000db', ["timers"], false).open(); /** * Create a new timer * Timerstructure: * {name : Stirng, * group: ID, * active: boolean * lastTimeStarted: Date * time: Integer} * @param {String} name The timer's name * @param {Function} done Function to call when the timer was created */ exports.create = function(data, done){ var timer = { "name": data.name, "group": data.group, "active": false, "lastTimeStarted": Date.now(), "time": 0 } db.timers.save(timer, function(err, obj){ if(err) console.warn(err); return done(timer._id); }); } /** * Delete a timer * @param {String} id The timer's id * @param {Function} done Function to call when the timer was deleted */ exports.delete = function(id, done){ db.timers.delete({_id:id}, function(err,num){ if(err) console.warn(err); return done(); }); } exports.addTime = function(id, _time, done){ db.timers.findOne({"_id":id},function(err,timer){ db.timers.update(id,{time: (timer.time + _time)},function(err, timer){ if(err || !timer){ console.log(err) return done(err,null); } return done(null, err); }); }); } /** * Delete all timers that belong to the specified group * @param {String} group_id The group's id * @param {Function} done Function to call when the timers are deleted */ exports.deleteByGroup = function(group_id, done){ db.timers.delete({group: group_id}, function(err, num){ if(err) console.log(err); done(); }); } /** * Start a timer: * Update a timer's active and lastTimeStarted field. * If the timer is already active, don't update the fields - the sessions has not * ended yet. * @param {String} id The timer's id * @param {Function} done Function to call when the timer was started */ exports.startTimer = function(id,done){ db.timers.findOne({"_id":id},function(err,timer){ //Timer is already active, don't set new startdate if(timer.active){ var diff = (Date.now() - timer.lastTimeStarted); var secs = Math.floor(diff / 1000); done(timer.time, secs); }else{ db.timers.update(id, {lastTimeStarted: Date.now(), active: true}, function(err, timer){ if(err || !timer){ console.log(err); done(-999); }else{ done(timer.time); } }); } }); } /** * Stop a timer: * Update the time and active field of a timer * @param {String} id The timer's id * @param {Function} done Function to call when the timer was stopped */ exports.stopTimer = function(id, done){ db.timers.findOne({_id: id}, function(err, timer){ if(err || !timer){ console.log(err) return done(); } //Calculate session time and save a session var secs = Math.floor((Date.now() - timer.lastTimeStarted) / 1000); sessionscontroller.create(id,secs,timer.lastTimeStarted,function(){}); //Update the timer db.timers.update(id, {time: timer.time + secs, active: false}, function(err, timer){ if(err || !timer) console.log(err); done(); }); }); } /** * Change a timer's group * @param {String} id The timers's id * @param {String} new_group the new group's id * @param {Function} done Function to call when the group field was updated */ exports.changeGroup = function(id, new_group, done){ db.timers.update(id, {group: new_group}, function(err, obj){ if(err) console.warn(err); return done(); }); } /** * Change a timer's name * @param {String} id the timer's id * @param {String} new_name the new name for the timer * @param {Function} done Function to call when the name field was updated */ exports.renameTimer = function(id, new_name, done){ db.timers.update(id, {name: new_name}, function(err, obj){ if(err) console.warn(err); return done(); }); } /** * Finds the timerobject to the specified id * @param {String} id The timers id * @param {Function} done the callback function */ exports.getTimer = function(id, done){ db.timers.findOne({"_id":id},function(err, timer){ if(err || !timer){ return done(err,null); }else{ return done(null,timer); } }); } /** * Get all timers in the collection and update their time-field (not in db) * if they are marked as active. * @param {Function} done Function to call when all timers are grabbed */ exports.getTimers = function(done){ db.timers.find({}, function(err, timers){ if(err){ console.warn(err); }else{ for (var i = 0; i < timers.length; i++){ if(timers[i].active){ var diff = (Date.now() - timers[i].lastTimeStarted); var secs = Math.floor(diff / 1000); timers[i].time += secs; } } } switch(process.env.TIMERSORTINGKEY){ case "ID" : done(timers);break; case "TIME" : done(timers.sort(utils.predicatBy('time', -1)));break; case "NAME" : done(timers.sort(utils.predicatBy('name', 1)));break; case "LTS" : done(timers.sort(utils.predicatBy('lastTimeStarted', -1)));break; } return; }); }