@codecovevienna/gittt-cli
Version:
Tracking time with CLI into a git repository
102 lines (101 loc) • 4.97 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TimerHelper = void 0;
const inquirer_1 = __importDefault(require("inquirer"));
const lodash_1 = __importDefault(require("lodash"));
const moment_1 = __importDefault(require("moment"));
const types_1 = require("../types");
const _1 = require("./");
class TimerHelper {
constructor(fileHelper, projectHelper) {
this.startTimer = () => __awaiter(this, void 0, void 0, function* () {
const now = (0, moment_1.default)();
if (!this.fileHelper.timerFileExists()) {
// file does not exist just init with start time now
yield this.fileHelper.saveTimerObject({
start: now.valueOf(),
stop: 0,
});
_1.LogHelper.info(`Started Timer: ${(0, moment_1.default)(now).format("DD.MM.YYYY HH:mm:ss")}`);
}
else {
// file exists check if timer is running
if (yield this.isTimerRunning(now)) {
const timer = yield this.fileHelper.getTimerObject();
_1.LogHelper.info(`Timer is already started ${(0, moment_1.default)(timer.start).from(now)}`);
}
else {
yield this.fileHelper.saveTimerObject({
start: now.valueOf(),
stop: 0,
});
_1.LogHelper.info(`Started Timer: ${(0, moment_1.default)(now).format("DD.MM.YYYY HH:mm:ss")}`);
}
}
});
this.stopTimer = (gitCommitMessage, project) => __awaiter(this, void 0, void 0, function* () {
const now = (0, moment_1.default)();
if (yield this.isTimerRunning(now)) {
const timer = yield this.fileHelper.getTimerObject();
const diff = now.diff(timer.start);
let finalCommitMessage = gitCommitMessage;
if (!finalCommitMessage) {
// ask for message
const gitCommitMessageAnswer = yield inquirer_1.default.prompt([
{
message: "Git Commit Message:",
name: "gitCommitMessage",
type: "input",
},
]);
finalCommitMessage = gitCommitMessageAnswer.gitCommitMessage;
}
yield this.projectHelper.addRecordToProject({
amount: moment_1.default.duration(diff).asHours(),
end: now.valueOf(),
message: lodash_1.default.isEmpty(finalCommitMessage) ? undefined : finalCommitMessage,
type: types_1.RECORD_TYPES.Time,
}, project);
timer.stop = now.valueOf();
yield this.fileHelper.saveTimerObject(timer);
_1.LogHelper.info(`Timer stopped and work time is ${moment_1.default.utc(moment_1.default
.duration(diff)
.asMilliseconds()).format("HH:mm:ss.SSS")}`);
}
else {
_1.LogHelper.info("No timer was started previously");
}
});
this.killTimer = () => __awaiter(this, void 0, void 0, function* () {
if (yield this.isTimerRunning((0, moment_1.default)())) {
this.fileHelper.initTimerFile();
_1.LogHelper.warn("Timer was killed");
}
else {
_1.LogHelper.info("No timer was started previously");
}
});
this.isTimerRunning = (now) => __awaiter(this, void 0, void 0, function* () {
if (this.fileHelper.timerFileExists()) {
const timer = yield this.fileHelper.getTimerObject();
return timer.start > 0 && timer.start < now.valueOf() && timer.stop === 0;
}
return false;
});
this.fileHelper = fileHelper;
this.projectHelper = projectHelper;
}
}
exports.TimerHelper = TimerHelper;