pmdclock
Version:
CLI clock agent/client for pomodoro
80 lines (63 loc) • 2.51 kB
JavaScript
;
const moment = require("moment");
const PMDClient = require("../client");
const Session = require("../session");
const config = require("../config");
module.exports = function (args) {
var client = new PMDClient();
const format = args.format || config.get("infoFormat");
client.on("connect", () => {
client.cmd("info")
.then((info) => {
var rmDelta, icon;
var {actual, tomatoes} = info;
if (!actual) {
process.stdout.write(`Not tasks actually\n`);
process.exit(0);
}
var now = moment(new Date());
var mTimeStart = moment(actual.started);
var mTimeExpire = moment(actual.expire);
var tDelta = moment(now.diff(mTimeStart));
if (now < mTimeExpire) {
rmDelta = moment(mTimeExpire.diff(now))
.format("mm:ss");
} else {
rmDelta = `-` + moment(now.diff(mTimeExpire))
.format("mm:ss");
}
var rfDelta = mTimeExpire.fromNow(true);
var rDelta = mTimeStart.fromNow(true);
if (actual._type === Session.types.TYPE_TASK) {
icon = config.get("taskRunningIcon");
} else if (actual._type === Session.types.TYPE_REST) {
icon = config.get("restRunningIcon");
} else {
icon = config.get("largeRestRunningIcon");
}
var tomatoesBar = config.get("taskIcon").repeat(tomatoes);
var msg = format
.replace("%n", actual.name)
.replace("%R", rfDelta)
.replace("%r", rmDelta)
.replace("%E", rDelta)
.replace("%e", tDelta.format("mm:ss"))
.replace("%t", tomatoes)
.replace("%T", tomatoesBar)
.replace("%i", icon)
;
process.stdout.write(`${msg}\n`);
process.exit(0);
});
});
client.on("error", (e) => {
process.stderr.write(`${e}\n`);
process.exit(1);
});
try {
client.connect();
} catch (e) {
process.stderr.write(`${e}\n`);
process.exit(2);
}
};