331 lines
8.8 KiB
JavaScript
331 lines
8.8 KiB
JavaScript
|
module.exports=exports;
|
||
|
var todo=require('./todo');
|
||
|
var {pullexposedtasks,randomtasks,edittitle,searchtasks,pullmirrorsuper,pullmirrortask,getjournal,decayranks,completetask,pulltasks,addtask,removetask,ranktasks,removetasks,addmany}=todo;
|
||
|
Object.keys(todo).forEach(k=>exports[k]=todo[k]);
|
||
|
var prompt=require('prompt-sync')();
|
||
|
var fs=require('fs');
|
||
|
var async=require('async');
|
||
|
|
||
|
function noop() {}
|
||
|
|
||
|
function exports(user) {
|
||
|
var retr={};
|
||
|
retr.exports=exports;
|
||
|
retr.random=random;
|
||
|
retr.rand=random;
|
||
|
function random(count=5) {
|
||
|
randomtasks(user,count,(err,res)=>{
|
||
|
console.log();
|
||
|
res.forEach(i=>console.log(i.id,i.title));
|
||
|
});
|
||
|
}
|
||
|
retr.add=add;
|
||
|
function add() {
|
||
|
if(arguments.length==0) {
|
||
|
var list=[];
|
||
|
function ask() {
|
||
|
var line=prompt(':');
|
||
|
if(line) {
|
||
|
list.push(line);
|
||
|
ask();
|
||
|
}
|
||
|
else { //Add list
|
||
|
addmany(user,list,console.log);
|
||
|
}
|
||
|
//if(line) addtask(user,line,ask);
|
||
|
}
|
||
|
return ask();
|
||
|
}
|
||
|
Array.prototype.forEach.bind(arguments)(item=>{
|
||
|
if(typeof(item)==='string') addtask(user,item,noop);
|
||
|
else { //Asuming list
|
||
|
item.forEach(item=>addtask(user,item,noop));
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
retr.remove=remove;
|
||
|
function remove() {
|
||
|
Array.prototype.forEach.bind(arguments)(item=>{
|
||
|
if(typeof(item)==='number') {
|
||
|
if(item<=4) {
|
||
|
var verify = prompt('Verify: Y/n');
|
||
|
if(verify[0]=='n'||verify[0]=='N') return;
|
||
|
}
|
||
|
removetask(user,item,noop);
|
||
|
}
|
||
|
else { //Asuming list
|
||
|
item.forEach(item=>removetask(user,item,noop));
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
function printtasks(tasks,stream) {
|
||
|
pastpull=tasks;
|
||
|
try {
|
||
|
tasks.sort(()=>Math.random()-0.5);
|
||
|
stream.write('\n');
|
||
|
//console.log({tasks});
|
||
|
tasks.forEach((t,i)=>{
|
||
|
//console.log(t.id+':',i,t.title);
|
||
|
stream.write(t.id+': '+i+' '+t.title+'\n');
|
||
|
});
|
||
|
}
|
||
|
catch(e) {
|
||
|
console.log({user,tasks});
|
||
|
console.log(e);
|
||
|
}
|
||
|
}
|
||
|
retr.pullexposed = pullexposed;
|
||
|
function pullexposed(count=4,stream=process.stdout) {
|
||
|
pullexposedtasks(user,count,(err,tasks)=>{
|
||
|
if(err) return console.log(err,tasks);
|
||
|
printtasks(tasks,stream);
|
||
|
});
|
||
|
}
|
||
|
var pastpull=[];
|
||
|
retr.pull=pull;
|
||
|
retr.p = pull;
|
||
|
function pull(count=4,stream=process.stdout) {
|
||
|
pulltasks(user,count,(err,tasks)=>{
|
||
|
if(err) return console.log(err,tasks);
|
||
|
printtasks(tasks,stream);
|
||
|
});
|
||
|
}
|
||
|
retr.r=r;
|
||
|
var pulllog=fs.createWriteStream(__dirname+'/data/logs/pull.log',{flags:'a'});
|
||
|
//function r() {
|
||
|
// if(arguments.length===1 && typeof(arguments[0])==='string') {
|
||
|
// return retr.done(arguments[0]);
|
||
|
// }
|
||
|
// var expanded=[];
|
||
|
// Array.prototype.forEach.bind(arguments)(item=>{
|
||
|
// if(typeof(item)==='number') expanded.push(item);
|
||
|
// else { //Asuming list
|
||
|
// expanded=expanded.concat(item);
|
||
|
// }
|
||
|
// });
|
||
|
// var toptitle = pastpull[expanded[0]].title;
|
||
|
// expanded=expanded.map(i=>pastpull[i].id);
|
||
|
// //console.log(expanded)
|
||
|
// ranktasks(user,expanded,noop);
|
||
|
// pulllog.write(toptitle+'\n');
|
||
|
// pastrank=expanded;
|
||
|
//}
|
||
|
function r() {
|
||
|
if (arguments.length === 1 && typeof(arguments[0]) === 'string') {
|
||
|
return retr.done(arguments[0]);
|
||
|
}
|
||
|
var expanded = [];
|
||
|
Array.prototype.forEach.call(arguments, item => {
|
||
|
if (typeof(item) === 'number') {
|
||
|
expanded.push([item]); // Wrap single numbers in an array
|
||
|
} else if (Array.isArray(item)) {
|
||
|
expanded.push(item); // Use array as is
|
||
|
}
|
||
|
});
|
||
|
var toptitle = pastpull[expanded[0][0]].title; // Use the first element of the first array to get the title
|
||
|
expanded = expanded.map(group => group.map(i => pastpull[i].id)); // Replace temp ids with longhand ids
|
||
|
ranktasks(user, expanded, noop);
|
||
|
pulllog.write(toptitle + '\n');
|
||
|
pastrank = expanded.flat();
|
||
|
}
|
||
|
retr.addfromfile=addfromfile;
|
||
|
function addfromfile(path='insert') {
|
||
|
fs.readFile(path,(err,buff)=>{
|
||
|
if(err) return console.log(err);
|
||
|
addmany(user,buff.toString().split('\n').filter(i=>i.length),console.log);
|
||
|
});
|
||
|
}
|
||
|
retr.done=done;
|
||
|
function done(taskid) {
|
||
|
if(taskid<=4) {
|
||
|
var verify = prompt('Verify: Y/n');
|
||
|
if(verify[0]=='n'||verify[0]=='N') return;
|
||
|
}
|
||
|
completetask(user,taskid,err=>{
|
||
|
if(err) return console.log(err);
|
||
|
decayranks(user,1-5/300,noop);
|
||
|
//if(typeof(taskid)=='number') setTimeout(pm,100);
|
||
|
});
|
||
|
}
|
||
|
retr.d=d;
|
||
|
function d() {
|
||
|
done(pastrank[0]);
|
||
|
}
|
||
|
var pastrank=[];
|
||
|
retr.rank=rank;
|
||
|
//function rank() {
|
||
|
// var expanded=[];
|
||
|
// Array.prototype.forEach.bind(arguments)(item=>{
|
||
|
// if(typeof(item)==='number') expanded.push(item);
|
||
|
// else { //Asuming list
|
||
|
// expanded=expanded.concat(item);
|
||
|
// }
|
||
|
// });
|
||
|
// pastrank=expanded;
|
||
|
// ranktasks(user,expanded,noop);
|
||
|
//}
|
||
|
function rank() {
|
||
|
var expanded = [];
|
||
|
if (arguments.length === 1 && Array.isArray(arguments[0])) {
|
||
|
expanded = arguments[0]; // Treat single array argument as the complete taskGroups
|
||
|
} else {
|
||
|
// Treat each argument as an element to be passed to ranktasks
|
||
|
Array.prototype.forEach.call(arguments, item => {
|
||
|
if (typeof(item) === 'number') {
|
||
|
expanded.push([item]); // Wrap single numbers in an array
|
||
|
} else {
|
||
|
expanded.push(item); // Already an array, use as is
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
pastrank = expanded.flat();
|
||
|
ranktasks(user, expanded, noop);
|
||
|
}
|
||
|
retr.pullmirror=pullmirror;
|
||
|
retr.pm=pullmirror;
|
||
|
retr.pullmirrormonth=pullmirrormonth;
|
||
|
retr.pullmirrorweek=pullmirrorweek;
|
||
|
retr.pullmirrorday=pullmirrorday;
|
||
|
function pullmirror() {
|
||
|
//async.parallel([pullmirrormonth,pullmirrorweek,pullmirrorday],(err,res)=>{
|
||
|
async.map([doublepullmirrormonth,pullmirrormonth,doublepullmirrorweek,pullmirrorweek,doublepullmirrorday,pullmirrorday],(func,cb)=>{
|
||
|
func((err,res)=>{
|
||
|
if(err == 'Journal missing - skiplimit reached') return cb();
|
||
|
cb(err,res);
|
||
|
});
|
||
|
},(err,res)=>{
|
||
|
if(err) return console.log(err);
|
||
|
res=res.filter(r=>r);
|
||
|
res.forEach(item=>{
|
||
|
if(!item) return console.log('missing');
|
||
|
console.log((new Date(item.time)).toLocaleString(),item.title,item.id||'');
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
function pullmirrorday(cb) {
|
||
|
pullmirrortask(user,cb);
|
||
|
}
|
||
|
function doublepullmirrorday(cb) {
|
||
|
getjournal(user,0,(err,journal)=>{
|
||
|
if(err) return console.log(err);
|
||
|
if(!journal.list) return cb();
|
||
|
pullmirrorsuper(user,1,journal.list.length*2,5,cb);
|
||
|
});
|
||
|
}
|
||
|
retr.lookback=lookback;
|
||
|
function lookback(days) {
|
||
|
getjournal(user,days,(err,journal)=>{
|
||
|
if(err) return console.log(err);
|
||
|
if(!journal.list) return console.log('Journal missing');
|
||
|
journal.list.forEach(item=>{
|
||
|
console.log((new Date(item.time)).toLocaleString(),item.title,item.id||'');
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
retr.pullmirrorweek=pullmirrorweek;
|
||
|
function pullmirrorweek(cb) {
|
||
|
var day=(new Date()).getDay()||7;
|
||
|
var pending=day;
|
||
|
var lookcount=0;
|
||
|
for(var i=0;i<day;++i) {
|
||
|
getjournal(user,i,(err,journal)=>{
|
||
|
--pending;
|
||
|
if(journal && journal.list) lookcount+=journal.list.length;
|
||
|
if(!pending) {
|
||
|
pullmirrorsuper(user,day,lookcount,5,cb);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
retr.doublepullmirrorweek=doublepullmirrorweek;
|
||
|
function doublepullmirrorweek(cb) {
|
||
|
var day=(new Date()).getDay()||7;
|
||
|
var pending=day;
|
||
|
var lookcount=0;
|
||
|
for(var i=0;i<day;++i) {
|
||
|
getjournal(user,i,(err,journal)=>{
|
||
|
--pending;
|
||
|
if(journal && journal.list) lookcount+=journal.list.length;
|
||
|
if(!pending) {
|
||
|
pullmirrorsuper(user,day,lookcount*2,5,cb);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
retr.pullmirrormonth=pullmirrormonth;
|
||
|
function pullmirrormonth(cb) {
|
||
|
var day=(new Date()).getDate()||30;
|
||
|
var pending=day;
|
||
|
var lookcount=0;
|
||
|
for(var i=0;i<day;++i) {
|
||
|
getjournal(user,i,(err,journal)=>{
|
||
|
--pending;
|
||
|
if(journal && journal.list) lookcount+=journal.list.length;
|
||
|
if(!pending) {
|
||
|
pullmirrorsuper(user,day,lookcount,15,cb);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
retr.doublepullmirrormonth=doublepullmirrormonth;
|
||
|
function doublepullmirrormonth(cb) {
|
||
|
var day=(new Date()).getDate()||30;
|
||
|
var pending=day;
|
||
|
var lookcount=0;
|
||
|
for(var i=0;i<day;++i) {
|
||
|
getjournal(user,i,(err,journal)=>{
|
||
|
--pending;
|
||
|
if(journal && journal.list) lookcount+=journal.list.length;
|
||
|
if(!pending) {
|
||
|
pullmirrorsuper(user,day,lookcount*2,15,cb);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
function lookup(ref) {
|
||
|
if(!ref) return;
|
||
|
if(typeof(ref)=='number') return lookupid(ref);
|
||
|
else return lookupname(ref);
|
||
|
}
|
||
|
retr.search=search;
|
||
|
function search(titlefrag) {
|
||
|
var args=[];
|
||
|
for(var i=0;arguments[i];++i) {
|
||
|
args=args.concat(arguments[i]);
|
||
|
}
|
||
|
searchtasks(user,args,console.log);
|
||
|
}
|
||
|
retr.searchres=searchres;
|
||
|
function searchres(titlefrag) {
|
||
|
var args=[];
|
||
|
for(var i=0;arguments[i];++i) {
|
||
|
args=args.concat(arguments[i]);
|
||
|
}
|
||
|
return new Promise((resolve,reject)=>{
|
||
|
searchtasks(user,args,(err,results)=>{
|
||
|
if(err) return reject(err);
|
||
|
resolve(results);
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
retr.edit = edit;
|
||
|
function edit(id,title) {
|
||
|
edittitle(user,id,title);
|
||
|
}
|
||
|
/*
|
||
|
http.createServer((req,res)=>{
|
||
|
if(req.url=='/pull') {
|
||
|
res.writeHead(200,{'Content-type':'text/plain'});
|
||
|
pulltasks(user,5,(err,tasks)=>{
|
||
|
tasks.forEach((t,i)=>{
|
||
|
//console.log(t.id+':',i,t.title);
|
||
|
res.write(t.id+': '+i+' '+t.title+'\n');
|
||
|
});
|
||
|
res.end();
|
||
|
});
|
||
|
}
|
||
|
}).listen(7000);
|
||
|
*/
|
||
|
return retr;
|
||
|
}
|