changed cli tool
- create new note if arg is 'new' - can edit several notes - type q to quit - refactor
This commit is contained in:
parent
3be1d05859
commit
f1b7420a50
|
@ -11,9 +11,18 @@ var rl = readline.createInterface({
|
||||||
|
|
||||||
var settings = JSON.parse(fs.readFileSync("settings.json", { encoding: "utf8", flag: "r" }));
|
var settings = JSON.parse(fs.readFileSync("settings.json", { encoding: "utf8", flag: "r" }));
|
||||||
var pgpkey = fs.readFileSync("key.acs", { encoding: "utf8", flag: "r" });
|
var pgpkey = fs.readFileSync("key.acs", { encoding: "utf8", flag: "r" });
|
||||||
var filter = process.argv.length > 2 ? process.argv[2] : "";
|
var filter = "";
|
||||||
var intervalid = null;
|
var intervalid = null;
|
||||||
var notes = null;
|
var notes = null;
|
||||||
|
var currentnote = null;
|
||||||
|
|
||||||
|
function timestamp()
|
||||||
|
{
|
||||||
|
var utc = new Date();
|
||||||
|
var loc = new Date(utc - utc.getTimezoneOffset() * 60 * 1000);
|
||||||
|
|
||||||
|
return loc.toISOString().replace("T", " ").replace(/\..*/, "").replace(/:/g, ".");
|
||||||
|
}
|
||||||
|
|
||||||
function simplifystring(str)
|
function simplifystring(str)
|
||||||
{
|
{
|
||||||
|
@ -49,6 +58,61 @@ function filteredlist()
|
||||||
.filter(n => simplifystring(n.title).includes(simplifystring(filter)));
|
.filter(n => simplifystring(n.title).includes(simplifystring(filter)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function saveifneeded()
|
||||||
|
{
|
||||||
|
var newcontent = fs.readFileSync("note.md", { encoding: "utf8", flag: "r" });
|
||||||
|
if (currentnote.content != newcontent)
|
||||||
|
{
|
||||||
|
currentnote.content = newcontent;
|
||||||
|
|
||||||
|
notes.splice(notes.indexOf(currentnote), 1);
|
||||||
|
notes.unshift(currentnote);
|
||||||
|
|
||||||
|
console.log("sending data file to server...");
|
||||||
|
var encrypted = await encrypt(JSON.stringify(notes));
|
||||||
|
axios.post(`${settings.url}/handler.php`,
|
||||||
|
{
|
||||||
|
action: "push",
|
||||||
|
password: settings.password,
|
||||||
|
data: encrypted
|
||||||
|
},
|
||||||
|
{
|
||||||
|
headers:
|
||||||
|
{
|
||||||
|
"Content-type": "application/x-www-form-urlencoded"
|
||||||
|
}
|
||||||
|
}).then(res => {
|
||||||
|
console.log("...done.");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
console.log("no change.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function editnote(index)
|
||||||
|
{
|
||||||
|
currentnote = filteredlist()[index];
|
||||||
|
if (currentnote)
|
||||||
|
{
|
||||||
|
// todo: use title instead? To put in data folder?
|
||||||
|
fs.writeFileSync("note.md", currentnote.content);
|
||||||
|
|
||||||
|
cp.exec(`${settings.command} note.md`, async function (err, stdout, stderr)
|
||||||
|
{
|
||||||
|
clearInterval(intervalid);
|
||||||
|
saveifneeded();
|
||||||
|
});
|
||||||
|
intervalid = setInterval(saveifneeded, 10000);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
console.log("No note found.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run part
|
||||||
axios.post(`${settings.url}/handler.php`,
|
axios.post(`${settings.url}/handler.php`,
|
||||||
{
|
{
|
||||||
action: "fetch",
|
action: "fetch",
|
||||||
|
@ -64,86 +128,50 @@ axios.post(`${settings.url}/handler.php`,
|
||||||
{
|
{
|
||||||
notes = JSON.parse(await decrypt(res.data));
|
notes = JSON.parse(await decrypt(res.data));
|
||||||
|
|
||||||
filteredlist()
|
if (process.argv.length > 2 && process.argv[2] === "new")
|
||||||
.every( (note, i) =>
|
|
||||||
{
|
{
|
||||||
console.log(`[${i}] ${note.title}`)
|
var title = timestamp();
|
||||||
return Boolean(filter) || i < settings.maxcountifnofilter;
|
currentnote = {
|
||||||
});
|
title: title,
|
||||||
|
content: ""
|
||||||
// todo: open if only one match. quit if no match
|
}
|
||||||
rl.prompt();
|
notes.unshift(currentnote);
|
||||||
rl.on("line", async function (line)
|
console.log("Creating new note: " + title);
|
||||||
|
editnote(0);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
var note = filteredlist()[line];
|
if (process.argv.length > 2)
|
||||||
|
|
||||||
// todo: use title instead? To put in data folder?
|
|
||||||
fs.writeFileSync("note.md", note.content);
|
|
||||||
|
|
||||||
cp.exec(`${settings.command} note.md`, async function (err, stdout, stderr)
|
|
||||||
{
|
{
|
||||||
clearInterval(intervalid);
|
filter = process.argv[2];
|
||||||
var newcontent = fs.readFileSync("note.md", { encoding: "utf8", flag: "r" });
|
}
|
||||||
if (note.content != newcontent)
|
|
||||||
|
var matchcount = filteredlist().length;
|
||||||
|
if (matchcount == 1)
|
||||||
|
{
|
||||||
|
editnote(0);
|
||||||
|
}
|
||||||
|
else if (matchcount > 1)
|
||||||
|
{
|
||||||
|
console.log("Select a note or type 'q' to quit:");
|
||||||
|
filteredlist()
|
||||||
|
.every( (note, i) =>
|
||||||
{
|
{
|
||||||
note.content = newcontent;
|
console.log(`[${i}] ${note.title}`)
|
||||||
|
return Boolean(filter) || i < settings.maxcountifnofilter;
|
||||||
notes.splice(notes.indexOf(note), 1);
|
});
|
||||||
notes.unshift(note);
|
rl.prompt();
|
||||||
|
rl.on("line", async function (line)
|
||||||
console.log("sending data file to server...");
|
|
||||||
var encrypted = await encrypt(JSON.stringify(notes));
|
|
||||||
axios.post(`${settings.url}/handler.php`,
|
|
||||||
{
|
|
||||||
action: "push",
|
|
||||||
password: settings.password,
|
|
||||||
data: encrypted
|
|
||||||
},
|
|
||||||
{
|
|
||||||
headers:
|
|
||||||
{
|
|
||||||
"Content-type": "application/x-www-form-urlencoded"
|
|
||||||
}
|
|
||||||
}).then(res => {
|
|
||||||
console.log("done.");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
console.log("no change.");
|
if (line == "q")
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
intervalid = setInterval(async function()
|
|
||||||
{
|
|
||||||
//todo: refactor "save"
|
|
||||||
var newcontent = fs.readFileSync("note.md", { encoding: "utf8", flag: "r" });
|
|
||||||
if (note.content != newcontent)
|
|
||||||
{
|
{
|
||||||
note.content = newcontent;
|
rl.close();
|
||||||
|
|
||||||
notes.splice(notes.indexOf(note), 1);
|
|
||||||
notes.unshift(note);
|
|
||||||
|
|
||||||
console.log("sending data file to server...");
|
|
||||||
var encrypted = await encrypt(JSON.stringify(notes));
|
|
||||||
axios.post(`${settings.url}/handler.php`,
|
|
||||||
{
|
|
||||||
action: "push",
|
|
||||||
password: settings.password,
|
|
||||||
data: encrypted
|
|
||||||
},
|
|
||||||
{
|
|
||||||
headers:
|
|
||||||
{
|
|
||||||
"Content-type": "application/x-www-form-urlencoded"
|
|
||||||
}
|
|
||||||
}).then(res => {
|
|
||||||
console.log("done.");
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}, 10000);
|
else
|
||||||
|
{
|
||||||
rl.close();
|
editnote(line);
|
||||||
});
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue