vrem
Version:
An open-source automatic time-tracker
57 lines (56 loc) • 2.67 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getEndEntryForTheCurrentProgram = exports.programLogTypes = exports.getProgramLogEntriesForDates = exports.getTaskLogEntriesForDates = void 0;
const db_1 = __importDefault(require("./db"));
const getTodayStart = () => {
const date = new Date();
date.setHours(0, 0, 0, 0);
return date;
};
const getTodayEnd = () => {
const date = new Date();
date.setHours(23, 59, 59, 999);
return date;
};
function getTaskLogEntriesForDates(from = getTodayStart(), to = new Date()) {
const limits = { from: from.valueOf(), to: to.valueOf() };
const finished = db_1.default.prepare(`
SELECT name, startTime,
CASE WHEN endTime > :to THEN :to ELSE endTime END AS endTime
FROM TaskLogs JOIN Tasks ON taskId = Tasks.id
WHERE startTime >= :from AND startTime <= :to;
`).all(limits);
const current = db_1.default.prepare(`
SELECT name, startTime, ? AS endTime
FROM CurrentTask JOIN Tasks ON taskId = Tasks.id
WHERE startTime >= :from AND startTime <= :to LIMIT 1;
`).get(limits, Date.now());
if (current)
finished.push({ ...current, current: true });
return finished;
}
exports.getTaskLogEntriesForDates = getTaskLogEntriesForDates;
function getProgramLogEntriesForDates(from = getTodayStart(), to = new Date()) {
return db_1.default.prepare(`
SELECT timestamp, path, description, type
FROM ProgramLogs LEFT JOIN Programs ON programId = Programs.id
WHERE timestamp >= ? AND timestamp <= ?
ORDER BY timestamp ASC;
`).all(from.valueOf(), to.valueOf());
}
exports.getProgramLogEntriesForDates = getProgramLogEntriesForDates;
exports.programLogTypes = Object.freeze(JSON.parse(db_1.default.prepare('SELECT json_group_object(type, id) FROM ProgramLogTypes;').pluck().get()));
function getEndEntryForTheCurrentProgram(logEntry) {
if (logEntry.type !== exports.programLogTypes.program)
return null;
const lastActiveTimestamp = db_1.default.prepare(`
SELECT lastActiveTimestamp
FROM CurrentProgram JOIN Programs ON programId = Programs.id
WHERE timestamp = ? AND path = ?;
`).pluck().get(logEntry.timestamp, logEntry.path);
return lastActiveTimestamp ? { timestamp: lastActiveTimestamp, type: exports.programLogTypes.end } : null;
}
exports.getEndEntryForTheCurrentProgram = getEndEntryForTheCurrentProgram;