mirror of https://github.com/IoTcat/todo-ddl.git
parent
7baee0aa25
commit
0e812392c0
16 changed files with 1850 additions and 694 deletions
@ -1,700 +1,25 @@ |
||||
#!/usr/bin/env node
|
||||
const request = require('request'); |
||||
require('shelljs/global'); |
||||
const ora = require('ora'); |
||||
const boxen = require('boxen'); |
||||
const table = require('cli-table'); |
||||
const colors = require('colors'); |
||||
const fs = require('fs'); |
||||
const md5 = require('md5'); |
||||
var yargs = require('yargs'); |
||||
|
||||
const conf = new (require('conf'))({ |
||||
email: { |
||||
type: "string", |
||||
format: "email" |
||||
}, |
||||
url: { |
||||
type: "string", |
||||
format: "url", |
||||
default: "https://api.yimian.xyz/todo-ddl/" |
||||
}, |
||||
taskData: { |
||||
type: "array", |
||||
default: [] |
||||
}, |
||||
ddlData: { |
||||
type: "array", |
||||
default: [] |
||||
} |
||||
}); |
||||
|
||||
if(conf.get('url') == undefined) conf.set('url', "https://api.yimian.xyz/todo-ddl/"); |
||||
if(conf.get('email') == undefined) conf.set('email', ""); |
||||
if(conf.get('taskData') == undefined) conf.set('taskData', []); |
||||
if(conf.get('ddlData') == undefined) conf.set('ddlData', []); |
||||
/* help */ |
||||
yargs = require(__dirname + '/modules/help.js')(yargs); |
||||
/* version */ |
||||
yargs = require(__dirname + '/modules/version.js')(yargs); |
||||
|
||||
/* systemctl */ |
||||
yargs = require(__dirname + '/modules/systemctl.js')(yargs); |
||||
|
||||
const tds = ['todo', 'task', 'history', 'ash']; |
||||
/* config */ |
||||
yargs = require(__dirname + '/modules/config.js')(yargs); |
||||
|
||||
var tools = { |
||||
_parseTime: t => { |
||||
var st = new Date(t); |
||||
return `${st.getFullYear()}-${st.getMonth()+1}-${st.getDate()} ${st.getHours()}:${st.getMinutes()}:${st.getSeconds()}`; |
||||
}, |
||||
_showInfo: (arr, head, value) => { |
||||
var info = new table({ |
||||
'head': head |
||||
}); |
||||
arr.forEach((i, index) => { |
||||
var item = conf.get('taskData')[i]; |
||||
info.push(value(item)); |
||||
if(index == arr.length-1){ |
||||
console.log(info.toString()); |
||||
} |
||||
}); |
||||
}, |
||||
td: { |
||||
_filter: condition => new Promise(resolve => { |
||||
var arr = []; |
||||
conf.get('taskData').forEach((item, index) => { |
||||
if(condition(item)){ |
||||
arr.push(index); |
||||
} |
||||
if(index == conf.get('taskData').length-1){ |
||||
resolve(arr); |
||||
} |
||||
}); |
||||
}), |
||||
task: { |
||||
_: item => (!item.isDel && item.tt == null), |
||||
_head: ['id', 'class', 'name', 'Create Time'], |
||||
_value: item => [item.id, item.class, item.name, tools._parseTime(item.st)], |
||||
ls: {} |
||||
}, |
||||
todo: { |
||||
_: item => !item.isDel && item.tt != null && item.et == null, |
||||
_head: ['id', 'class', 'name', 'Create Time', 'Start Time'], |
||||
_value: item => [item.id, item.class, item.name, tools._parseTime(item.st), tools._parseTime(item.tt)], |
||||
ls: {} |
||||
}, |
||||
history: { |
||||
_: item => !item.isDel && item.tt != null && item.et != null, |
||||
_head: ['id', 'class', 'name', 'Create Time', 'Start Time', 'Finish Time'], |
||||
_value: item => [item.id, item.class, item.name, tools._parseTime(item.st), tools._parseTime(item.tt), tools._parseTime(item.et)], |
||||
ls: {} |
||||
}, |
||||
ash: { |
||||
_: item => item.isDel, |
||||
_head: ['id', 'class', 'name', 'Create Time', 'Start Time', 'Finish Time'], |
||||
_value: item => [item.id, item.class, item.name, tools._parseTime(item.st), tools._parseTime(item.tt), tools._parseTime(item.et)], |
||||
ls: {} |
||||
} |
||||
} |
||||
}; |
||||
|
||||
tds.forEach(item => { |
||||
tools.td[item].ls.all = async () => { |
||||
tools._showInfo(await tools.td._filter(tools.td[item]._), tools.td[item]._head, tools.td[item]._value); |
||||
}; |
||||
tools.td[item].__ = async () => new Promise(async resolve => { |
||||
var arr = []; |
||||
var index = await tools.td._filter(tools.td[item]._); |
||||
index.forEach((i, ind) => { |
||||
arr.push(conf.get('taskData')[i]); |
||||
if(ind == index.length-1){ |
||||
resolve(arr); |
||||
} |
||||
}); |
||||
}); |
||||
}); |
||||
|
||||
|
||||
const getIDs = (id, data, zone) => new Promise(resolve => { |
||||
var ban = ora('Searching IDs...').start(); |
||||
var arr = []; |
||||
data.forEach((item, index) => { |
||||
if(item.id.substring(0, String(id).length) == id && tools.td[zone]._(item)){ |
||||
arr.push(index); |
||||
ban.info(item.id); |
||||
ban = new ora('Searching IDs...').start(); |
||||
} |
||||
if(index == data.length-1){ |
||||
ban.succeed('Search finished!! Found '+arr.length+' result!!'); |
||||
resolve(arr); |
||||
} |
||||
}); |
||||
}); |
||||
|
||||
const getID = async (id, data, zone) => { |
||||
var arr = await getIDs(id, data, zone); |
||||
if(arr.length > 1){ |
||||
console.error(boxen('Which ID do you want?')); |
||||
return null; |
||||
} |
||||
if(arr.length < 1){ |
||||
console.error(boxen('No ID Found!! Please use '+'td task|todo|history|ddl ls'.blue+' to check!!')); |
||||
return null; |
||||
} |
||||
return arr[0]; |
||||
}; |
||||
|
||||
|
||||
|
||||
|
||||
const argv = require('yargs') |
||||
.command("config", "Set todo-ddl tool confignation..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.command("show", "Show config details..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, yargs2 => { |
||||
var configInfo = new table(); |
||||
configInfo.push({email: conf.get('email')},{remote: conf.get('url')}); |
||||
console.log(configInfo.toString()); |
||||
}) |
||||
.command("reset", "Reset All config..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, yargs2 => { |
||||
conf.set('url', "https://api.yimian.xyz/todo-ddl/"); |
||||
conf.set('email', ""); |
||||
}) |
||||
.option("e", { |
||||
alias: "email", |
||||
default: "", |
||||
describe: "Your Email to login.", |
||||
demand: false, |
||||
type: 'string' |
||||
}) |
||||
.option("r", { |
||||
alias: "remote", |
||||
default: "", |
||||
describe: "Remote todo-ddl server URL.", |
||||
demand: false, |
||||
type: 'string' |
||||
}) |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, yargs => { |
||||
if(yargs.e == "" && yargs.r == ""){ |
||||
console.error(boxen('Please use '+'td config -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
if(yargs.e != ""){ |
||||
conf.set('email', yargs.e); |
||||
} |
||||
if(yargs.r != ""){ |
||||
conf.set('url', yargs.r); |
||||
} |
||||
var configInfo = new table(); |
||||
configInfo.push({email: conf.get('email')},{remote: conf.get('url')}); |
||||
console.log(configInfo.toString()); |
||||
}) |
||||
|
||||
|
||||
/* init */ |
||||
.command("init", "Set todo-ddl tool confignation..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, yargs => { |
||||
var t = (new Date()).valueOf(); |
||||
var ban = ora('Clear Data...').start(); |
||||
var data = conf.get('taskData'); |
||||
for(var i = 0; i < data.length; i ++){ |
||||
ban.succeed(data[i].id.red); |
||||
ban = new ora('Clear Data...').start(); |
||||
} |
||||
conf.set('taskData', []); |
||||
ban.succeed(`Finished in ${(new Date()).valueOf() - t} ms!!`); |
||||
}) |
||||
|
||||
|
||||
/* ls */ |
||||
.command("ls", "= td todo ls..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, yargs => { |
||||
tools.td.todo.ls.all(); |
||||
}) |
||||
|
||||
/* lst */ |
||||
.command("lst", "= td todo ls..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, yargs => { |
||||
tools.td.task.ls.all(); |
||||
}) |
||||
|
||||
/* lsh */ |
||||
.command("lsh", "= td todo ls..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, yargs => { |
||||
tools.td.history.ls.all(); |
||||
}) |
||||
|
||||
/* lsa */ |
||||
.command("lsa", "= td todo ls..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, yargs => { |
||||
tools.td.ash.ls.all(); |
||||
}) |
||||
|
||||
/* new */ |
||||
.command("new", "= td task add -n <name> -c [class]..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, yargs => { |
||||
if(yargs._.length < 2 || yargs._.length > 3){ |
||||
return; |
||||
} |
||||
if(yargs._.length == 2){ |
||||
yargs._[2] = "default"; |
||||
} |
||||
if(yargs._[1].length > 30){ |
||||
console.error(boxen('Too Long Name!!!\nPlease shorten your task name!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
data.push({ |
||||
id: md5((new Date()).valueOf()).substring(0, 6), |
||||
name: yargs._[1], |
||||
class: yargs._[2], |
||||
st: (new Date()).valueOf(), |
||||
tt: null, |
||||
et: null, |
||||
isDel: false |
||||
}); |
||||
conf.set('taskData', data); |
||||
tools.td.task.ls.all(); |
||||
}) |
||||
|
||||
/* add */ |
||||
.command("add", "= td todo add..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, async yargs => { |
||||
if(yargs._.length != 2) { |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
var index = await getID(yargs._[1], data, 'task'); |
||||
if(index==null){ |
||||
console.error(boxen('Illegal operation!!!\nPlease use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
data[index].tt = (new Date()).valueOf(); |
||||
conf.set('taskData', data); |
||||
tools.td.todo.ls.all(); |
||||
}) |
||||
|
||||
|
||||
/* done */ |
||||
.command("done", "= td todo done..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, async yargs => { |
||||
if(yargs._.length != 2) { |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
var index = await getID(yargs._[1], data, 'todo'); |
||||
if(index==null){ |
||||
console.error(boxen('Illegal operation!!!\nPlease use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
data[index].et = (new Date()).valueOf(); |
||||
conf.set('taskData', data); |
||||
tools.td.todo.ls.all(); |
||||
}) |
||||
|
||||
|
||||
/* return */ |
||||
.command("return", "= td todo return..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, async yargs => { |
||||
if(yargs._.length != 2) { |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
var index = await getID(yargs._[1], data, 'todo'); |
||||
if(index == null) index = getID(yargs._[1], data, 'history'); |
||||
if(index==null){ |
||||
console.error(boxen('Illegal operation!!!\nPlease use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
data[index].tt = null; |
||||
data[index].et = null; |
||||
conf.set('taskData', data); |
||||
tools.td.todo.ls.all(); |
||||
}) |
||||
|
||||
|
||||
/* rm */ |
||||
.command("rm", "= td task del..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, async yargs => { |
||||
if(yargs._.length != 2) { |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
var index = await getID(yargs._[1], data, 'todo'); |
||||
if(index == null) index = getID(yargs._[1], data, 'task'); |
||||
if(index == null) index = getID(yargs._[1], data, 'history'); |
||||
if(index==null){ |
||||
console.error(boxen('Illegal operation!!!\nPlease use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
data[index].isDel = true; |
||||
conf.set('taskData', data); |
||||
//tools.td.todo.ls.all();
|
||||
}) |
||||
|
||||
/* tasks */ |
||||
.command("task", "Add, del and change tasks..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.command("ls", "Show all tasks..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, yargs2 => { |
||||
tools.td.task.ls.all(); |
||||
}) |
||||
.command("add", "td task add -n <name> -c [class]".green+" Add new task..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.option("n", { |
||||
alias: "name", |
||||
default: "", |
||||
describe: "Task name.", |
||||
demand: true, |
||||
type: 'string' |
||||
}) |
||||
.option("c", { |
||||
alias: "class", |
||||
default: "", |
||||
describe: "Task class.", |
||||
demand: false, |
||||
type: 'string' |
||||
}) |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, yargs2 => { |
||||
if(yargs2.n == "" && yargs2.c == ""){ |
||||
console.error(boxen('Please use '+'td task -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
if(yargs2.n == ""){ |
||||
console.error(boxen('No Task Name!!!\nPlease use '+'td task -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
if(yargs2.c == ""){ |
||||
yargs2.c = "default"; |
||||
} |
||||
if(yargs2.c.length > 30){ |
||||
console.error(boxen('Too Long Name!!!\nPlease shorten your task name!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
data.push({ |
||||
id: md5((new Date()).valueOf()).substring(0, 6), |
||||
name: yargs2.n, |
||||
class: yargs2.c, |
||||
st: (new Date()).valueOf(), |
||||
tt: null, |
||||
et: null, |
||||
isDel: false |
||||
}); |
||||
conf.set('taskData', data); |
||||
tools.td.task.ls.all(); |
||||
}) |
||||
|
||||
.command("del", "td del -i <id>".green+" Delete task..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.option("i", { |
||||
alias: "id", |
||||
default: "", |
||||
describe: "Task id.", |
||||
demand: true, |
||||
type: 'string' |
||||
}) |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, async yargs2 => { |
||||
if(yargs2.i == ""){ |
||||
console.error(boxen('No Task ID!!!\nPlease use '+'td task -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
var index = await getID(yargs2.i, data, 'task'); |
||||
if(index==null){ |
||||
console.error(boxen('Illegal operation!!!\nPlease use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
data[index].isDel = true; |
||||
conf.set('taskData', data); |
||||
tools.td.task.ls.all(); |
||||
}) |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, yargs => { |
||||
console.error(boxen('Please use '+'td task -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
}) |
||||
|
||||
|
||||
/* todo */ |
||||
.command("todo", "Add, return and done todos..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.command("ls", "td todo ls".green+" Show all todos..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, yargs2 => { |
||||
tools.td.todo.ls.all(); |
||||
}) |
||||
|
||||
.command("add", "td todo add -i <id>".green+" Add new todo from tasks..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.option("i", { |
||||
alias: "id", |
||||
default: "", |
||||
describe: "Task ID.", |
||||
demand: true, |
||||
type: 'string' |
||||
}) |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, async yargs2 => { |
||||
if(yargs2.i == ""){ |
||||
console.error(boxen('Please use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
var index = await getID(yargs2.i, data, 'task'); |
||||
if(index==null){ |
||||
console.error(boxen('Illegal operation!!!\nPlease use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
data[index].tt = (new Date()).valueOf(); |
||||
conf.set('taskData', data); |
||||
tools.td.todo.ls.all(); |
||||
}) |
||||
|
||||
.command("return", "td todo return -i <id>".green+" Delete task..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.option("i", { |
||||
alias: "id", |
||||
default: "", |
||||
describe: "Task id.", |
||||
demand: true, |
||||
type: 'string' |
||||
}) |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, async yargs2 => { |
||||
if(yargs2.i == ""){ |
||||
console.error(boxen('No Task ID!!!\nPlease use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
var index = await getID(yargs2.i, data, 'todo'); |
||||
if(index==null){ |
||||
console.error(boxen('Illegal operation!!!\nPlease use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
data[index].tt = null; |
||||
conf.set('taskData', data); |
||||
tools.td.todo.ls.all(); |
||||
}) |
||||
|
||||
|
||||
.command("done", "td todo done -i <id>".green+" Delete task..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.option("i", { |
||||
alias: "id", |
||||
default: "", |
||||
describe: "Task id.", |
||||
demand: true, |
||||
type: 'string' |
||||
}) |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, async yargs2 => { |
||||
if(yargs2.i == ""){ |
||||
console.error(boxen('No Task ID!!!\nPlease use '+'td task -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
var index = await getID(yargs2.i, data, 'todo'); |
||||
if(index==null){ |
||||
console.error(boxen('Illegal operation!!!\nPlease use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
data[index].et = (new Date()).valueOf(); |
||||
conf.set('taskData', data); |
||||
tools.td.todo.ls.all(); |
||||
}) |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, yargs => { |
||||
console.error(boxen('Please use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
}) |
||||
|
||||
|
||||
|
||||
|
||||
/* history */ |
||||
.command("history", "Check history..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.command("ls", "td history ls".green+" Show all history..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.option("a", { |
||||
alias: "ash", |
||||
default: "", |
||||
describe: "Show ash bin..", |
||||
demand: false, |
||||
type: 'string' |
||||
}) |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, yargs2 => { |
||||
if(yargs2.a == ""){ |
||||
tools.td.history.ls.all(); |
||||
}else{ |
||||
tools.td.ash.ls.all(); |
||||
} |
||||
}) |
||||
|
||||
.command("return", "td history return -i <id>".green+" Return item to tasks..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.option("i", { |
||||
alias: "id", |
||||
default: "", |
||||
describe: "Task id.", |
||||
demand: true, |
||||
type: 'string' |
||||
}) |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, async yargs2 => { |
||||
if(yargs2.i == ""){ |
||||
console.error(boxen('No Task ID!!!\nPlease use '+'td history -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
var index = await getID(yargs2.i, data, 'history'); |
||||
if(index==null){ |
||||
console.error(boxen('Illegal operation!!!\nPlease use '+'td history -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
data[index].tt = null; |
||||
data[index].et = null; |
||||
conf.set('taskData', data); |
||||
tools.td.history.ls.all(); |
||||
}) |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, yargs => { |
||||
console.error(boxen('Please use '+'td history -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
}) |
||||
.help() |
||||
.alias("h", "help") |
||||
.alias("v", "version") |
||||
//.recommendCommands()
|
||||
.epilogue("") |
||||
.argv; |
||||
/* td */ |
||||
yargs = require(__dirname + '/modules/td.js')(yargs); |
||||
|
||||
/* log */ |
||||
yargs = require(__dirname + '/modules/log.js')(yargs); |
||||
|
||||
/* push */ |
||||
yargs = require(__dirname + '/modules/sync.js')(yargs); |
||||
|
||||
argv = yargs.epilogue("hhh").argv; |
@ -0,0 +1,88 @@ |
||||
module.exports = (yargs) => { |
||||
|
||||
var o = { |
||||
email: { |
||||
set: s => { |
||||
if(!o.email.check(s)){ |
||||
return 'Illegal Email!!'; |
||||
} |
||||
data.config.email(s); |
||||
return; |
||||
}, |
||||
get: () => data.config.email(), |
||||
check: s => { |
||||
var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/; |
||||
return reg.test(s); |
||||
} |
||||
}, |
||||
remote: { |
||||
set: s => { |
||||
if(!o.remote.check(s)){ |
||||
return 'Illegal URL!!'; |
||||
} |
||||
data.config.remote(s); |
||||
return; |
||||
}, |
||||
get: () => data.config.remote(), |
||||
check: s => { |
||||
var reg = /./;///^((https|http|ftp|rtsp|mms):\/\/)(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?(([0-9]{1,3}.){3}[0-9]{1,3}|([0-9a-z_!~*'()-]+.)*([0-9a-z][0-9a-z-]{0,61})?[0-9a-z].[a-z]{2,6})(:[0-9]{1,4})?((\/?)|(\/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+\/?)$/;
|
||||
return reg.test(s); |
||||
} |
||||
}, |
||||
show: () => { |
||||
let configInfo = new table(); |
||||
configInfo.push({email: o.email.get()},{remote: o.remote.get()}); |
||||
console.log(configInfo.toString()); |
||||
} |
||||
}; |
||||
|
||||
var data = require(__dirname + '/../utilities/data.js')(); |
||||
const colors = require('colors'); |
||||
const boxen = require('boxen'); |
||||
const table = require('cli-table'); |
||||
|
||||
yargs = yargs |
||||
.command("config", "td config [-e email] [-r remote]".green + " Config Email or/and remote url..", yargs => { |
||||
return yargs |
||||
.option("e", { |
||||
alias: "email", |
||||
default: "", |
||||
describe: "Your Email to login.", |
||||
demand: false, |
||||
type: 'string' |
||||
}) |
||||
.option("r", { |
||||
alias: "remote", |
||||
default: "", |
||||
describe: "Remote todo-ddl server URL.", |
||||
demand: false, |
||||
type: 'string' |
||||
}) |
||||
.help() |
||||
.version(false) |
||||
.argv; |
||||
}, argv => { |
||||
if(argv.e == "" && argv.r == ""){ |
||||
o.show(); |
||||
console.error(boxen('Please use '+'td config -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
if(argv.e != ""){ |
||||
var m = o.email.set(argv.e); |
||||
if(m){ |
||||
console.error(boxen(m, {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
} |
||||
if(argv.r != ""){ |
||||
var m = o.remote.set(argv.r); |
||||
if(m){ |
||||
console.error(boxen(m, {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
} |
||||
o.show(); |
||||
}) |
||||
|
||||
return yargs; |
||||
} |
@ -0,0 +1,7 @@ |
||||
module.exports = yargs => { |
||||
yargs = yargs |
||||
.help() |
||||
.alias("h", "help") |
||||
|
||||
return yargs; |
||||
} |
@ -0,0 +1,46 @@ |
||||
module.exports = yargs => { |
||||
|
||||
const tools = require(__dirname + '/../utilities/tdTools.js')(); |
||||
const colors = require('colors'); |
||||
const boxen = require('boxen'); |
||||
const table = require('cli-table'); |
||||
|
||||
yargs = yargs |
||||
|
||||
.command('ll', "td ll".green + " List all logs..", yargs => yargs, argv => { |
||||
let msg = tools.ll(); |
||||
if(msg){ |
||||
console.error(boxen(msg, {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
}) |
||||
|
||||
.command('log', "td log <content>".green + " Add new log..", yargs => yargs, argv => { |
||||
let msg = tools.log(argv._[1]); |
||||
if(msg){ |
||||
console.error(boxen(msg, {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
}) |
||||
|
||||
.command('select', "td select <id>".green + " Select a task to record logs..", yargs => yargs, argv => { |
||||
if(argv._.length != 2){ |
||||
console.error(boxen('Please use '+'td -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
let msg = tools.select(argv._[1]); |
||||
if(msg){ |
||||
console.error(boxen(msg, {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
}) |
||||
|
||||
.command('rml', "td rml <logID>".green + " Remove log..", yargs => yargs, argv => { |
||||
let msg = tools.rml(argv._[1]); |
||||
if(msg){ |
||||
console.error(boxen(msg, {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
}) |
||||
return yargs; |
||||
} |
@ -0,0 +1,72 @@ |
||||
module.exports = (yargs) => { |
||||
var o = { |
||||
push: () => { |
||||
let ban = ora(`Pushing...`).start(); |
||||
request.post(data.config.remote(), { |
||||
form:{ |
||||
action: 'push', |
||||
email: data.config.email(), |
||||
data: JSON.stringify({ |
||||
td: data.td(), |
||||
ddl: data.ddl() |
||||
}) |
||||
}
|
||||
}, (err, res, body) => { |
||||
if(err){ |
||||
ban.fail('Push data failed with errors!!'); |
||||
}else{ |
||||
ban.succeed('Push data to remote successfully!!'); |
||||
|
||||
} |
||||
process.exit(); |
||||
}); |
||||
}, |
||||
pull: (f) => { |
||||
let ban = ora(`Pulling...`).start(); |
||||
request.post(data.config.remote(), { |
||||
form:{ |
||||
action: 'pull', |
||||
email: data.config.email(), |
||||
data: JSON.stringify({}) |
||||
}
|
||||
}, (err, res, body) => { |
||||
if(err){ |
||||
ban.fail('Pull data failed with errors!!'); |
||||
}else{ |
||||
try{ |
||||
body = JSON.parse(body); |
||||
}catch(e){ |
||||
ban.fail('Pull data failed with errors!!'); |
||||
process.exit(); |
||||
} |
||||
let d = find.merge({td: data.td(), ddl: data.ddl()}, body); |
||||
data.td(d.td); |
||||
data.ddl(d.ddl); |
||||
ban.succeed('Push data to remote successfully!!'); |
||||
if(typeof f != "undefined") f(); |
||||
} |
||||
process.exit(); |
||||
}); |
||||
} |
||||
} |
||||
|
||||
const request = require('request'); |
||||
const ora = require('ora'); |
||||
var data = require(__dirname + '/../utilities/data.js')(); |
||||
var find = require(__dirname + '/../utilities/find.js')(); |
||||
|
||||
yargs = yargs |
||||
.command('push', "td push".green + " Push local data to remote..", yargs => yargs, argv => { |
||||
o.push(); |
||||
}) |
||||
.command('pull', "td pull".green + " Pull remote data to local..", yargs => yargs, argv => { |
||||
o.pull(); |
||||
}) |
||||
.command('sync', "td sync".green + " Sync remote and local data..", yargs => yargs, argv => { |
||||
o.pull(()=>{ |
||||
o.push(); |
||||
}); |
||||
}) |
||||
|
||||
return yargs; |
||||
} |
@ -0,0 +1,15 @@ |
||||
module.exports = (yargs) => { |
||||
|
||||
yargs = yargs |
||||
.command('init', "td init".green + " Clear All Data..", yargs => yargs, argv => { |
||||
data.td([]); |
||||
data.ddl([]); |
||||
data.log('null'); |
||||
}) |
||||
|
||||
var data = require(__dirname + '/../utilities/data.js')(); |
||||
const colors = require('colors'); |
||||
const boxen = require('boxen'); |
||||
|
||||
return yargs; |
||||
} |
@ -0,0 +1,100 @@ |
||||
module.exports = yargs => { |
||||
|
||||
const tools = require(__dirname + '/../utilities/tdTools.js')(); |
||||
const colors = require('colors'); |
||||
const boxen = require('boxen'); |
||||
const table = require('cli-table'); |
||||
|
||||
yargs = yargs |
||||
.command('lt', "td lt".green + " List all todos..", yargs => yargs, argv => { |
||||
tools.__.show(tools.todo.getAll()); |
||||
}) |
||||
|
||||
.command('ls', "td ls".green + " List all tasks..", yargs => yargs, argv => { |
||||
tools.__.show(tools.task.getAll()); |
||||
}) |
||||
|
||||
.command('history', "td history".green + " List all history..", yargs => yargs, argv => { |
||||
tools.__.show(tools.history.getAll()); |
||||
}) |
||||
|
||||
.command('new', "td new <name> [class]".green + " Create new todo..", yargs => yargs, argv => { |
||||
if(argv._.length < 2 || argv._.length > 3){ |
||||
console.error(boxen('Please use '+'td -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
let msg = tools.new(argv._[1], (argv._.length == 2)?null:argv._[2]); |
||||
if(msg){ |
||||
console.error(boxen(msg, {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
tools.__.show(tools.todo.getAll()); |
||||
}) |
||||
|
||||
.command('add', "td add <id>".green + " Add todo to task..", yargs => yargs, argv => { |
||||
if(argv._.length != 2){ |
||||
console.error(boxen('Please use '+'td -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
let msg = tools.add(argv._[1]); |
||||
if(msg){ |
||||
console.error(boxen(msg, {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
tools.__.show(tools.task.getAll()); |
||||
}) |
||||
|
||||
.command('done', "td done <id>".green + " Finish task..", yargs => yargs, argv => { |
||||
if(argv._.length != 2){ |
||||
console.error(boxen('Please use '+'td -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
let msg = tools.done(argv._[1]); |
||||
if(msg){ |
||||
console.error(boxen(msg, {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
tools.__.show(tools.task.getAll()); |
||||
}) |
||||
|
||||
.command('rm', "td rm <id>".green + " Remove task..", yargs => yargs, argv => { |
||||
if(argv._.length != 2){ |
||||
console.error(boxen('Please use '+'td -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
let msg = tools.rm(argv._[1]); |
||||
if(msg){ |
||||
console.error(boxen(msg, {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
console.log(argv._[1]); |
||||
}) |
||||
|
||||
.command('return', "td return <id>".green + " Return task to todo..", yargs => yargs, argv => { |
||||
if(argv._.length != 2){ |
||||
console.error(boxen('Please use '+'td -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
let msg = tools.return(argv._[1]); |
||||
if(msg){ |
||||
console.error(boxen(msg, {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
tools.__.show(tools.task.getAll()); |
||||
}) |
||||
|
||||
.command('recover', "td recover <id>".green + " Recover from history to task..", yargs => yargs, argv => { |
||||
if(argv._.length != 2){ |
||||
console.error(boxen('Please use '+'td -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
let msg = tools.recover(argv._[1]); |
||||
if(msg){ |
||||
console.error(boxen(msg, {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
tools.__.show(tools.task.getAll()); |
||||
}) |
||||
|
||||
return yargs; |
||||
} |
@ -0,0 +1,6 @@ |
||||
module.exports = yargs => { |
||||
yargs = yargs |
||||
.alias("v", "version") |
||||
|
||||
return yargs; |
||||
} |
@ -0,0 +1,700 @@ |
||||
#!/usr/bin/env node
|
||||
const request = require('request'); |
||||
require('shelljs/global'); |
||||
const ora = require('ora'); |
||||
const boxen = require('boxen'); |
||||
const table = require('cli-table'); |
||||
const colors = require('colors'); |
||||
const fs = require('fs'); |
||||
const md5 = require('md5'); |
||||
|
||||
const conf = new (require('conf'))({ |
||||
email: { |
||||
type: "string", |
||||
format: "email" |
||||
}, |
||||
url: { |
||||
type: "string", |
||||
format: "url", |
||||
default: "https://api.yimian.xyz/todo-ddl/" |
||||
}, |
||||
taskData: { |
||||
type: "array", |
||||
default: [] |
||||
}, |
||||
ddlData: { |
||||
type: "array", |
||||
default: [] |
||||
} |
||||
}); |
||||
|
||||
if(conf.get('url') == undefined) conf.set('url', "https://api.yimian.xyz/todo-ddl/"); |
||||
if(conf.get('email') == undefined) conf.set('email', ""); |
||||
if(conf.get('taskData') == undefined) conf.set('taskData', []); |
||||
if(conf.get('ddlData') == undefined) conf.set('ddlData', []); |
||||
|
||||
|
||||
const tds = ['todo', 'task', 'history', 'ash']; |
||||
|
||||
var tools = { |
||||
_parseTime: t => { |
||||
var st = new Date(t); |
||||
return `${st.getFullYear()}-${st.getMonth()+1}-${st.getDate()} ${st.getHours()}:${st.getMinutes()}:${st.getSeconds()}`; |
||||
}, |
||||
_showInfo: (arr, head, value) => { |
||||
var info = new table({ |
||||
'head': head |
||||
}); |
||||
arr.forEach((i, index) => { |
||||
var item = conf.get('taskData')[i]; |
||||
info.push(value(item)); |
||||
if(index == arr.length-1){ |
||||
console.log(info.toString()); |
||||
} |
||||
}); |
||||
}, |
||||
td: { |
||||
_filter: condition => new Promise(resolve => { |
||||
var arr = []; |
||||
conf.get('taskData').forEach((item, index) => { |
||||
if(condition(item)){ |
||||
arr.push(index); |
||||
} |
||||
if(index == conf.get('taskData').length-1){ |
||||
resolve(arr); |
||||
} |
||||
}); |
||||
}), |
||||
task: { |
||||
_: item => (!item.isDel && item.tt == null), |
||||
_head: ['id', 'class', 'name', 'Create Time'], |
||||
_value: item => [item.id, item.class, item.name, tools._parseTime(item.st)], |
||||
ls: {} |
||||
}, |
||||
todo: { |
||||
_: item => !item.isDel && item.tt != null && item.et == null, |
||||
_head: ['id', 'class', 'name', 'Create Time', 'Start Time'], |
||||
_value: item => [item.id, item.class, item.name, tools._parseTime(item.st), tools._parseTime(item.tt)], |
||||
ls: {} |
||||
}, |
||||
history: { |
||||
_: item => !item.isDel && item.tt != null && item.et != null, |
||||
_head: ['id', 'class', 'name', 'Create Time', 'Start Time', 'Finish Time'], |
||||
_value: item => [item.id, item.class, item.name, tools._parseTime(item.st), tools._parseTime(item.tt), tools._parseTime(item.et)], |
||||
ls: {} |
||||
}, |
||||
ash: { |
||||
_: item => item.isDel, |
||||
_head: ['id', 'class', 'name', 'Create Time', 'Start Time', 'Finish Time'], |
||||
_value: item => [item.id, item.class, item.name, tools._parseTime(item.st), tools._parseTime(item.tt), tools._parseTime(item.et)], |
||||
ls: {} |
||||
} |
||||
} |
||||
}; |
||||
|
||||
tds.forEach(item => { |
||||
tools.td[item].ls.all = async () => { |
||||
tools._showInfo(await tools.td._filter(tools.td[item]._), tools.td[item]._head, tools.td[item]._value); |
||||
}; |
||||
tools.td[item].__ = async () => new Promise(async resolve => { |
||||
var arr = []; |
||||
var index = await tools.td._filter(tools.td[item]._); |
||||
index.forEach((i, ind) => { |
||||
arr.push(conf.get('taskData')[i]); |
||||
if(ind == index.length-1){ |
||||
resolve(arr); |
||||
} |
||||
}); |
||||
}); |
||||
}); |
||||
|
||||
|
||||
const getIDs = (id, data, zone) => new Promise(resolve => { |
||||
var ban = ora('Searching IDs...').start(); |
||||
var arr = []; |
||||
data.forEach((item, index) => { |
||||
if(item.id.substring(0, String(id).length) == id && tools.td[zone]._(item)){ |
||||
arr.push(index); |
||||
ban.info(item.id); |
||||
ban = new ora('Searching IDs...').start(); |
||||
} |
||||
if(index == data.length-1){ |
||||
ban.succeed('Search finished!! Found '+arr.length+' result!!'); |
||||
resolve(arr); |
||||
} |
||||
}); |
||||
}); |
||||
|
||||
const getID = async (id, data, zone) => { |
||||
var arr = await getIDs(id, data, zone); |
||||
if(arr.length > 1){ |
||||
console.error(boxen('Which ID do you want?')); |
||||
return null; |
||||
} |
||||
if(arr.length < 1){ |
||||
console.error(boxen('No ID Found!! Please use '+'td task|todo|history|ddl ls'.blue+' to check!!')); |
||||
return null; |
||||
} |
||||
return arr[0]; |
||||
}; |
||||
|
||||
|
||||
|
||||
|
||||
const argv = require('yargs') |
||||
.command("config", "Set todo-ddl tool confignation..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.command("show", "Show config details..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, yargs2 => { |
||||
var configInfo = new table(); |
||||
configInfo.push({email: conf.get('email')},{remote: conf.get('url')}); |
||||
console.log(configInfo.toString()); |
||||
}) |
||||
.command("reset", "Reset All config..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, yargs2 => { |
||||
conf.set('url', "https://api.yimian.xyz/todo-ddl/"); |
||||
conf.set('email', ""); |
||||
}) |
||||
.option("e", { |
||||
alias: "email", |
||||
default: "", |
||||
describe: "Your Email to login.", |
||||
demand: false, |
||||
type: 'string' |
||||
}) |
||||
.option("r", { |
||||
alias: "remote", |
||||
default: "", |
||||
describe: "Remote todo-ddl server URL.", |
||||
demand: false, |
||||
type: 'string' |
||||
}) |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, yargs => { |
||||
if(yargs.e == "" && yargs.r == ""){ |
||||
console.error(boxen('Please use '+'td config -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
if(yargs.e != ""){ |
||||
conf.set('email', yargs.e); |
||||
} |
||||
if(yargs.r != ""){ |
||||
conf.set('url', yargs.r); |
||||
} |
||||
var configInfo = new table(); |
||||
configInfo.push({email: conf.get('email')},{remote: conf.get('url')}); |
||||
console.log(configInfo.toString()); |
||||
}) |
||||
|
||||
|
||||
/* init */ |
||||
.command("init", "Set todo-ddl tool confignation..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, yargs => { |
||||
var t = (new Date()).valueOf(); |
||||
var ban = ora('Clear Data...').start(); |
||||
var data = conf.get('taskData'); |
||||
for(var i = 0; i < data.length; i ++){ |
||||
ban.succeed(data[i].id.red); |
||||
ban = new ora('Clear Data...').start(); |
||||
} |
||||
conf.set('taskData', []); |
||||
ban.succeed(`Finished in ${(new Date()).valueOf() - t} ms!!`); |
||||
}) |
||||
|
||||
|
||||
/* ls */ |
||||
.command("ls", "= td todo ls..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, yargs => { |
||||
tools.td.todo.ls.all(); |
||||
}) |
||||
|
||||
/* lst */ |
||||
.command("lst", "= td todo ls..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, yargs => { |
||||
tools.td.task.ls.all(); |
||||
}) |
||||
|
||||
/* lsh */ |
||||
.command("lsh", "= td todo ls..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, yargs => { |
||||
tools.td.history.ls.all(); |
||||
}) |
||||
|
||||
/* lsa */ |
||||
.command("lsa", "= td todo ls..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, yargs => { |
||||
tools.td.ash.ls.all(); |
||||
}) |
||||
|
||||
/* new */ |
||||
.command("new", "= td task add -n <name> -c [class]..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, yargs => { |
||||
if(yargs._.length < 2 || yargs._.length > 3){ |
||||
return; |
||||
} |
||||
if(yargs._.length == 2){ |
||||
yargs._[2] = "default"; |
||||
} |
||||
if(yargs._[1].length > 30){ |
||||
console.error(boxen('Too Long Name!!!\nPlease shorten your task name!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
data.push({ |
||||
id: md5((new Date()).valueOf()).substring(0, 6), |
||||
name: yargs._[1], |
||||
class: yargs._[2], |
||||
st: (new Date()).valueOf(), |
||||
tt: null, |
||||
et: null, |
||||
isDel: false |
||||
}); |
||||
conf.set('taskData', data); |
||||
tools.td.task.ls.all(); |
||||
}) |
||||
|
||||
/* add */ |
||||
.command("add", "= td todo add..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, async yargs => { |
||||
if(yargs._.length != 2) { |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
var index = await getID(yargs._[1], data, 'task'); |
||||
if(index==null){ |
||||
console.error(boxen('Illegal operation!!!\nPlease use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
data[index].tt = (new Date()).valueOf(); |
||||
conf.set('taskData', data); |
||||
tools.td.todo.ls.all(); |
||||
}) |
||||
|
||||
|
||||
/* done */ |
||||
.command("done", "= td todo done..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, async yargs => { |
||||
if(yargs._.length != 2) { |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
var index = await getID(yargs._[1], data, 'todo'); |
||||
if(index==null){ |
||||
console.error(boxen('Illegal operation!!!\nPlease use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
data[index].et = (new Date()).valueOf(); |
||||
conf.set('taskData', data); |
||||
tools.td.todo.ls.all(); |
||||
}) |
||||
|
||||
|
||||
/* return */ |
||||
.command("return", "= td todo return..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, async yargs => { |
||||
if(yargs._.length != 2) { |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
var index = await getID(yargs._[1], data, 'todo'); |
||||
if(index == null) index = getID(yargs._[1], data, 'history'); |
||||
if(index==null){ |
||||
console.error(boxen('Illegal operation!!!\nPlease use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
data[index].tt = null; |
||||
data[index].et = null; |
||||
conf.set('taskData', data); |
||||
tools.td.todo.ls.all(); |
||||
}) |
||||
|
||||
|
||||
/* rm */ |
||||
.command("rm", "= td task del..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, async yargs => { |
||||
if(yargs._.length != 2) { |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
var index = await getID(yargs._[1], data, 'todo'); |
||||
if(index == null) index = getID(yargs._[1], data, 'task'); |
||||
if(index == null) index = getID(yargs._[1], data, 'history'); |
||||
if(index==null){ |
||||
console.error(boxen('Illegal operation!!!\nPlease use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
data[index].isDel = true; |
||||
conf.set('taskData', data); |
||||
//tools.td.todo.ls.all();
|
||||
}) |
||||
|
||||
/* tasks */ |
||||
.command("task", "Add, del and change tasks..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.command("ls", "Show all tasks..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, yargs2 => { |
||||
tools.td.task.ls.all(); |
||||
}) |
||||
.command("add", "td task add -n <name> -c [class]".green+" Add new task..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.option("n", { |
||||
alias: "name", |
||||
default: "", |
||||
describe: "Task name.", |
||||
demand: true, |
||||
type: 'string' |
||||
}) |
||||
.option("c", { |
||||
alias: "class", |
||||
default: "", |
||||
describe: "Task class.", |
||||
demand: false, |
||||
type: 'string' |
||||
}) |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, yargs2 => { |
||||
if(yargs2.n == "" && yargs2.c == ""){ |
||||
console.error(boxen('Please use '+'td task -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
if(yargs2.n == ""){ |
||||
console.error(boxen('No Task Name!!!\nPlease use '+'td task -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
if(yargs2.c == ""){ |
||||
yargs2.c = "default"; |
||||
} |
||||
if(yargs2.c.length > 30){ |
||||
console.error(boxen('Too Long Name!!!\nPlease shorten your task name!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
data.push({ |
||||
id: md5((new Date()).valueOf()).substring(0, 6), |
||||
name: yargs2.n, |
||||
class: yargs2.c, |
||||
st: (new Date()).valueOf(), |
||||
tt: null, |
||||
et: null, |
||||
isDel: false |
||||
}); |
||||
conf.set('taskData', data); |
||||
tools.td.task.ls.all(); |
||||
}) |
||||
|
||||
.command("del", "td del -i <id>".green+" Delete task..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.option("i", { |
||||
alias: "id", |
||||
default: "", |
||||
describe: "Task id.", |
||||
demand: true, |
||||
type: 'string' |
||||
}) |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, async yargs2 => { |
||||
if(yargs2.i == ""){ |
||||
console.error(boxen('No Task ID!!!\nPlease use '+'td task -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
var index = await getID(yargs2.i, data, 'task'); |
||||
if(index==null){ |
||||
console.error(boxen('Illegal operation!!!\nPlease use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
data[index].isDel = true; |
||||
conf.set('taskData', data); |
||||
tools.td.task.ls.all(); |
||||
}) |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, yargs => { |
||||
console.error(boxen('Please use '+'td task -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
}) |
||||
|
||||
|
||||
/* todo */ |
||||
.command("todo", "Add, return and done todos..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.command("ls", "td todo ls".green+" Show all todos..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, yargs2 => { |
||||
tools.td.todo.ls.all(); |
||||
}) |
||||
|
||||
.command("add", "td todo add -i <id>".green+" Add new todo from tasks..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.option("i", { |
||||
alias: "id", |
||||
default: "", |
||||
describe: "Task ID.", |
||||
demand: true, |
||||
type: 'string' |
||||
}) |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, async yargs2 => { |
||||
if(yargs2.i == ""){ |
||||
console.error(boxen('Please use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
var index = await getID(yargs2.i, data, 'task'); |
||||
if(index==null){ |
||||
console.error(boxen('Illegal operation!!!\nPlease use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
data[index].tt = (new Date()).valueOf(); |
||||
conf.set('taskData', data); |
||||
tools.td.todo.ls.all(); |
||||
}) |
||||
|
||||
.command("return", "td todo return -i <id>".green+" Delete task..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.option("i", { |
||||
alias: "id", |
||||
default: "", |
||||
describe: "Task id.", |
||||
demand: true, |
||||
type: 'string' |
||||
}) |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, async yargs2 => { |
||||
if(yargs2.i == ""){ |
||||
console.error(boxen('No Task ID!!!\nPlease use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
var index = await getID(yargs2.i, data, 'todo'); |
||||
if(index==null){ |
||||
console.error(boxen('Illegal operation!!!\nPlease use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
data[index].tt = null; |
||||
conf.set('taskData', data); |
||||
tools.td.todo.ls.all(); |
||||
}) |
||||
|
||||
|
||||
.command("done", "td todo done -i <id>".green+" Delete task..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.option("i", { |
||||
alias: "id", |
||||
default: "", |
||||
describe: "Task id.", |
||||
demand: true, |
||||
type: 'string' |
||||
}) |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, async yargs2 => { |
||||
if(yargs2.i == ""){ |
||||
console.error(boxen('No Task ID!!!\nPlease use '+'td task -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
var index = await getID(yargs2.i, data, 'todo'); |
||||
if(index==null){ |
||||
console.error(boxen('Illegal operation!!!\nPlease use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
data[index].et = (new Date()).valueOf(); |
||||
conf.set('taskData', data); |
||||
tools.td.todo.ls.all(); |
||||
}) |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, yargs => { |
||||
console.error(boxen('Please use '+'td todo -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
}) |
||||
|
||||
|
||||
|
||||
|
||||
/* history */ |
||||
.command("history", "Check history..", yargs => { |
||||
var argv = yargs |
||||
.reset() |
||||
.command("ls", "td history ls".green+" Show all history..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.option("a", { |
||||
alias: "ash", |
||||
default: "", |
||||
describe: "Show ash bin..", |
||||
demand: false, |
||||
type: 'string' |
||||
}) |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, yargs2 => { |
||||
if(yargs2.a == ""){ |
||||
tools.td.history.ls.all(); |
||||
}else{ |
||||
tools.td.ash.ls.all(); |
||||
} |
||||
}) |
||||
|
||||
.command("return", "td history return -i <id>".green+" Return item to tasks..", yargs2 => { |
||||
var argv = yargs2 |
||||
.reset() |
||||
.option("i", { |
||||
alias: "id", |
||||
default: "", |
||||
describe: "Task id.", |
||||
demand: true, |
||||
type: 'string' |
||||
}) |
||||
.version(false) |
||||
.help("") |
||||
.argv |
||||
return argv; |
||||
}, async yargs2 => { |
||||
if(yargs2.i == ""){ |
||||
console.error(boxen('No Task ID!!!\nPlease use '+'td history -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
var data = conf.get('taskData'); |
||||
var index = await getID(yargs2.i, data, 'history'); |
||||
if(index==null){ |
||||
console.error(boxen('Illegal operation!!!\nPlease use '+'td history -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
} |
||||
data[index].tt = null; |
||||
data[index].et = null; |
||||
conf.set('taskData', data); |
||||
tools.td.history.ls.all(); |
||||
}) |
||||
.version(false) |
||||
.argv |
||||
|
||||
return argv; |
||||
}, yargs => { |
||||
console.error(boxen('Please use '+'td history -h '.red+'to get Help!!', {padding: 1, margin: 1, borderStyle: 'double'})); |
||||
return; |
||||
}) |
||||
.help() |
||||
.alias("h", "help") |
||||
.alias("v", "version") |
||||
//.recommendCommands()
|
||||
.epilogue("") |
||||
.argv; |
||||
|
||||
|
||||
|
@ -0,0 +1,35 @@ |
||||
const app = require('express')(); |
||||
const fs = require('fs'); |
||||
const bodyParser = require('body-parser'); |
||||
|
||||
const find = require(__dirname + '/utilities/find.js')(); |
||||
|
||||
app.use(bodyParser.urlencoded({ extended: false })); |
||||
|
||||
var data = JSON.parse(fs.readFileSync(__dirname + '/var/data.json')); |
||||
|
||||
app.listen(13233 /*default port*/, () => console.log('todo-ddl listening on port 13233!')); |
||||
|
||||
app.post('/', (req, res) => { |
||||
let query = req.body; |
||||
query.data = JSON.parse(query.data); |
||||
if(!query.action || !query.email || !query.data){ |
||||
return; |
||||
} |
||||
if(query.action == 'push'){ |
||||
if(data.hasOwnProperty(query.email)){ |
||||
data[query.email] = find.merge(data[query.email], query.data); |
||||
}else{ |
||||
data[query.email] = query.data; |
||||
} |
||||
fs.writeFile(__dirname + '/var/data.json', JSON.stringify(data), ()=>{}); |
||||
res.send('ok'); |
||||
} |
||||
if(query.action == 'pull'){ |
||||
if(data.hasOwnProperty(query.email)){ |
||||
res.send(data[query.email]); |
||||
}else{ |
||||
res.status(404).send(''); |
||||
} |
||||
} |
||||
}); |
@ -0,0 +1,60 @@ |
||||
module.exports = () => { |
||||
|
||||
var o = { |
||||
__: (c, w, s) => { |
||||
var data = conf.get(c); |
||||
if(typeof s != "undefined"){ |
||||
data[w] = s; |
||||
conf.set(c, data); |
||||
} |
||||
return data[w]; |
||||
}, |
||||
//config
|
||||
config: { |
||||
email: s => o.__('config', 'email', s), |
||||
remote: s => o.__('config', 'remote', s) |
||||
}, |
||||
//data
|
||||
td: s => o.__('data', 'td', s), |
||||
ddl: s => o.__('data', 'ddl', s), |
||||
log: s => { |
||||
if(typeof s != "undefined"){ |
||||
conf.set('log', s); |
||||
} |
||||
return conf.get('log'); |
||||
} |
||||
}; |
||||
|
||||
const conf = new (require('conf'))({ |
||||
config: { |
||||
type: "object", |
||||
default: { |
||||
email: '', |
||||
remote: "https://api.yimian.xyz/todo-ddl/" |
||||
} |
||||
}, |
||||
data: { |
||||
type: "object", |
||||
default: { |
||||
td: [], |
||||
ddl: [] |
||||
} |
||||
}, |
||||
log: { |
||||
type: 'string', |
||||
default: 'null' |
||||
} |
||||
}); |
||||
|
||||
if(conf.get('config') == undefined) conf.set('config', { |
||||
email: '', |
||||
remote: "https://api.yimian.xyz/todo-ddl/" |
||||
}); |
||||
if(conf.get('data') == undefined) conf.set('data', { |
||||
td: [], |
||||
ddl: [] |
||||
}); |
||||
if(conf.get('log') == undefined) conf.set('log', 'null'); |
||||
|
||||
return o; |
||||
} |
@ -0,0 +1,113 @@ |
||||
module.exports = () => { |
||||
var o = { |
||||
search: (s, w, zone) => { |
||||
let res = []; |
||||
let ban = ora(`Searching ${w}s...`).start(); |
||||
for(const cla of zone){ |
||||
for(const i of cla){ |
||||
let pos = i[w].indexOf(s); |
||||
if(pos != -1 && res.indexOf(i[w]) == -1){ |
||||
res.push(i[w]); |
||||
ban.info(i[w].substring(0, pos) + String(s).yellow + i[w].substring(pos + String(s).length) + ' ' + ((typeof i.name == "undefined")?'':i.name) + ((typeof i.content == "undefined")?'':i.content)); |
||||
ban = new ora(`Searching ${w}s...`).start(); |
||||
} |
||||
} |
||||
} |
||||
ban.succeed('Search finished!! Found '+res.length+' results!!'); |
||||
return res; |
||||
}, |
||||
byIDs: (id, arr) => arr.filter(item => id.indexOf(item.id) >= 0), |
||||
updateTd: (id, w, s) => { |
||||
let d = data.td(); |
||||
for(let i = 0; i < d.length; i ++){ |
||||
if(d[i].id == id){ |
||||
d[i][w] = s; |
||||
d[i]['lastOperateTime'] = (new Date()).valueOf(); |
||||
break; |
||||
} |
||||
} |
||||
data.td(d); |
||||
}, |
||||
mergeArray: (a, b) => Array.from(new Set(a.concat(b))), |
||||
merge: (a, b) => { |
||||
let td = []; |
||||
|
||||
for(let td1 of a.td){ |
||||
for(let td2 of b.td){ |
||||
|
||||
if(td1.id == td2.id && !td.some(item => item.id == td2.id)){ |
||||
let obj = {}; |
||||
let logs = []; |
||||
for(let l2 of td2.logs){ |
||||
if(!logs.some(item => item.id == l2.id)){ |
||||
let l1 = td1.logs.filter(item => item.id == l2.id); |
||||
if(l1){ |
||||
l1 = l1[0]; |
||||
if(l1.lastOperateTime < l2.lastOperateTime){ |
||||
logs.push(l2); |
||||
}else{ |
||||
logs.push(l1); |
||||
} |
||||
}else{ |
||||
logs.push(l2); |
||||
} |
||||
} |
||||
} |
||||
|
||||
for(let l1 of td1.logs){ |
||||
if(!logs.some(item => item.id == l1.id)){ |
||||
let l2 = td2.logs.filter(item => item.id == l1.id); |
||||
if(l2){ |
||||
l2 = l2[0]; |
||||
if(l2.lastOperateTime < l1.lastOperateTime){ |
||||
logs.push(l1); |
||||
}else{ |
||||
logs.push(l2); |
||||
} |
||||
}else{ |
||||
logs.push(l1); |
||||
} |
||||
} |
||||
} |
||||
|
||||
if(td1.lastOperateTime < td2.lastOperateTime){ |
||||
obj = td2; |
||||
}else{ |
||||
obj = td1; |
||||
} |
||||
obj.logs = logs; |
||||
td.push(obj); |
||||
} |
||||
|
||||
} |
||||
} |
||||
|
||||
|
||||
for(let td1 of a.td){ |
||||
if(!td.some(item => item.id == td1.id)){ |
||||
td.push(td1); |
||||
} |
||||
} |
||||
|
||||
for(let td2 of b.td){ |
||||
if(!td.some(item => item.id == td2.id)){ |
||||
td.push(td2); |
||||
} |
||||
} |
||||
|
||||
|
||||
/* ddl */ |
||||
//console.log(td);
|
||||
return { |
||||
'td': td, |
||||
'ddl': [] |
||||
}; |
||||
} |
||||
} |
||||
|
||||
const colors = require('colors'); |
||||
const ora = require('ora'); |
||||
var data = require(__dirname + '/../utilities/data.js')(); |
||||
|
||||
return o; |
||||
} |
@ -0,0 +1,244 @@ |
||||
module.exports = () => { |
||||
var o = { |
||||
__: { |
||||
id: (aid, zone) => { |
||||
const ids = find.search(aid, 'id', zone); |
||||
if(zone.length > 1){ |
||||
return find.byIDs(ids, data.td()); |
||||
} |
||||
return find.byIDs(ids, zone[0]); |
||||
}, |
||||
name: (aname, zone) => { |
||||
const names = find.search(aname, 'name', zone); |
||||
return find.byIDs(names); |
||||
}, |
||||
getLogs: id => data.td().filter(item => item.id == id)[0].logs.filter(item2 => !item2.isDel), |
||||
getAllLogs: id => data.td().filter(item => item.id == id)[0].logs, |
||||
resetLog: id => { |
||||
if(id == data.log()) { |
||||
data.log('null'); |
||||
} |
||||
}, |
||||
addLog: (id, content) => { |
||||
let logs = o.__.getAllLogs(id); |
||||
logs.push({ |
||||
'id': o.__.generateID(16), |
||||
'content': content, |
||||
createTime: (new Date()).valueOf(), |
||||
lastOperateTime: (new Date()).valueOf(), |
||||
isDel: false |
||||
}); |
||||
find.updateTd(id, 'logs', logs); |
||||
}, |
||||
rmLog: (id, lid) => { |
||||
let logs = o.__.getAllLogs(id); |
||||
for(let i of logs){ |
||||
if(i.id == lid){ |
||||
i.isDel = true; |
||||
break; |
||||
} |
||||
} |
||||
find.updateTd(id, 'logs', logs); |
||||
}, |
||||
getAllClass: (zone) => { |
||||
let arr = []; |
||||
for(const cla of zone){ |
||||
for(const i of cla){ |
||||
if(arr.indexOf(i.class) != -1){ |
||||
arr.push(i.class); |
||||
} |
||||
} |
||||
} |
||||
return arr; |
||||
}, |
||||
parseTime: t => { |
||||
if(!t){ |
||||
return 'null'; |
||||
} |
||||
const st = new Date(t); |
||||
return `${st.getFullYear()}-${st.getMonth()+1}-${st.getDate()} ${st.getHours()}:${st.getMinutes()}:${st.getSeconds()}`; |
||||
}, |
||||
generateID: (l) => md5((new Date()).valueOf()).substring(0, l), |
||||
show: arr => { |
||||
let configInfo = new table({ |
||||
head: ['id', 'class', 'name', 'createTime', 'todoTime', 'endTime'] |
||||
}); |
||||
for(const i of arr){ |
||||
configInfo.push([i.id, i.class, i.name, o.__.parseTime(i.createTime), o.__.parseTime(i.todoTime), o.__.parseTime(i.endTime)]); |
||||
} |
||||
console.log(configInfo.toString()); |
||||
}, |
||||
showLogs: arr => { |
||||
let configInfo = new table({ |
||||
head: ['id', 'content', 'createTime'] |
||||
}); |
||||
for(const i of arr){ |
||||
configInfo.push([i.id, i.content, o.__.parseTime(i.createTime)]); |
||||
} |
||||
console.log(configInfo.toString()); |
||||
} |
||||
}, |
||||
getAll: () => data.td(), |
||||
getAllClass: () => o.__.getAllClass([data.td()]), |
||||
getByaID: id => o.__.id(id, [data.td()]), |
||||
getByaName: name => o.__.name(name, [data.td()]), |
||||
new: (name, cla) => { |
||||
let d = data.td(); |
||||
if(!cla){ |
||||
cla = 'default'; |
||||
} |
||||
if(!name){ |
||||
return 'Name should not be empty!!'; |
||||
} |
||||
if(name.length > 25){ |
||||
return 'Name too Long!!'; |
||||
} |
||||
d.push({ |
||||
id: o.__.generateID(8), |
||||
'name': name, |
||||
'class': cla, |
||||
createTime: (new Date()).valueOf(), |
||||
todoTime: null, |
||||
endTime: null, |
||||
lastOperateTime: (new Date()).valueOf(), |
||||
idDel: false, |
||||
logs: [{ |
||||
id: o.__.generateID(16), |
||||
content: 'Todo Item Created!!', |
||||
createTime: (new Date()).valueOf(), |
||||
lastOperateTime: (new Date()).valueOf() |
||||
}] |
||||
}); |
||||
data.td(d); |
||||
return; |
||||
}, |
||||
rm: aid => { |
||||
let items = o.__.id(aid, [o.todo.getAll(), o.task.getAll(), o.history.getAll()]); |
||||
if(items.length > 1){ |
||||
return 'Which id do you want to remove?'; |
||||
} |
||||
if(items.length <= 0){ |
||||
return 'Not found!!'; |
||||
} |
||||
find.updateTd(items[0].id, 'isDel', true); |
||||
console.log(items[0].id); |
||||
o.__.resetLog(items[0].id); |
||||
}, |
||||
add: aid => { |
||||
let items = o.__.id(aid, [o.todo.getAll()]); |
||||
if(items.length > 1){ |
||||
return 'Which id do you want to add to task?'; |
||||
} |
||||
if(items.length <= 0){ |
||||
return 'Not found!!'; |
||||
} |
||||
find.updateTd(items[0].id, 'todoTime', (new Date()).valueOf()); |
||||
}, |
||||
return: aid => { |
||||
let items = o.__.id(aid, [o.task.getAll()]); |
||||
if(items.length > 1){ |
||||
return 'Which id do you want to return?'; |
||||
} |
||||
if(items.length <= 0){ |
||||
return 'Not found!!'; |
||||
} |
||||
find.updateTd(items[0].id, 'todoTime', null); |
||||
o.__.resetLog(items[0].id); |
||||
}, |
||||
done: aid => { |
||||
let items = o.__.id(aid, [o.task.getAll()]); |
||||
if(items.length > 1){ |
||||
return 'Which id do you want to finish?'; |
||||
} |
||||
if(items.length <= 0){ |
||||
return 'Not found!!'; |
||||
} |
||||
find.updateTd(items[0].id, 'endTime', (new Date()).valueOf()); |
||||
o.__.resetLog(items[0].id); |
||||
}, |
||||
recover: aid => { |
||||
let items = o.__.id(aid, [o.history.getAll()]); |
||||
if(items.length > 1){ |
||||
return 'Which id do you want to recover?'; |
||||
} |
||||
if(items.length <= 0){ |
||||
return 'Not found!!'; |
||||
} |
||||
find.updateTd(items[0].id, 'endTime', null); |
||||
}, |
||||
/* log */ |
||||
ll: () => { |
||||
if(data.log() == 'null'){ |
||||
return 'No Task Pointed!! Please select a task to begin!!'; |
||||
} |
||||
let logs = o.__.getLogs(data.log()); |
||||
console.log('At task ' + data.log() + ' ' + o.__.id(data.log(), [data.td()])[0].name); |
||||
o.__.showLogs(logs); |
||||
}, |
||||
select: aid => { |
||||
let items = o.__.id(aid, [o.task.getAll()]); |
||||
if(items.length > 1){ |
||||
return 'Which id do you want to add to task?'; |
||||
} |
||||
if(items.length <= 0){ |
||||
return 'Not found!!'; |
||||
} |
||||
data.log(items[0].id); |
||||
console.log(items[0].id); |
||||
}, |
||||
log: content => { |
||||
if(data.log() == "null"){ |
||||
return 'No Task Pointed!! Please select a task to begin!!'; |
||||
} |
||||
o.__.addLog(data.log(), content); |
||||
}, |
||||
rml: aid => { |
||||
if(data.log() == "null"){ |
||||
return 'No Task Pointed!! Please select a task to begin!!'; |
||||
} |
||||
let items = o.__.id(aid, [o.__.id(data.log(), [data.td()])[0].logs]); |
||||
if(items.length > 1){ |
||||
return 'Which id do you want to add to task?'; |
||||
} |
||||
if(items.length <= 0){ |
||||
return 'Not found!!'; |
||||
} |
||||
o.__.rmLog(data.log(), items[0].id); |
||||
console.log(items[0].id); |
||||
}, |
||||
/* sub */ |
||||
todo: { |
||||
getAll: () => data.td().filter(item => !item.isDel && item.todoTime == null), |
||||
getByaID: id => o.__.id(id, [o.todo.getAll()]), |
||||
getByaName: name => o.__.name(name, [o.todo.getAll()]), |
||||
getAllClass: () => o.__.getAllClass([o.todo.getAll()]), |
||||
}, |
||||
task: { |
||||
getAll: () => data.td().filter(item => !item.isDel && item.todoTime != null && item.endTime == null), |
||||
getByaID: id => o.__.id(id, [o.task.getAll()]), |
||||
getByaName: name => o.__.name(name, [o.task.getAll()]), |
||||
getAllClass: () => o.__.getAllClass([o.task.getAll()]), |
||||
}, |
||||
history: { |
||||
getAll: () => data.td().filter(item => !item.isDel && item.todoTime != null && item.endTime != null), |
||||
getByaID: id => o.__.id(id, [o.history.getAll()]), |
||||
getByaName: name => o.__.name(name, [o.history.getAll()]), |
||||
getAllClass: () => o.__.getAllClass([o.history.getAll()]), |
||||
}, |
||||
ash: { |
||||
getAll: () => data.td().filter(item => item.isDel), |
||||
getByaID: id => o.__.id(id, [o.ash.getAll()]), |
||||
getByaName: name => o.__.name(name, [o.ash.getAll()]), |
||||
getAllClass: () => o.__.getAllClass([o.ash.getAll()]), |
||||
} |
||||
} |
||||
|
||||
var data = require(__dirname + '/../utilities/data.js')(); |
||||
const find = require(__dirname + '/../utilities/find.js')(); |
||||
const colors = require('colors'); |
||||
const boxen = require('boxen'); |
||||
const table = require('cli-table'); |
||||
const md5 = require('md5'); |
||||
|
||||
return o; |
||||
} |
Loading…
Reference in new issue