Remember The Milk script to estimate selected tasks
This post is aimed at fellow Remember The Milk users.
I often want to select a group of tasks in Remember The Milk and see their total estimate. For example, how much work do I have to do before I leave on my trip? I wrote a simple MilkScript to accomplish this:
function main() {
const tasks = rtm.getSelectedTasks();
if (!tasks.length) {
return rtm.newMessage(
"No tasks selected",
"Select 1 or more tasks to estimate."
);
}
let totalMinutes = 0;
for (const task of tasks) {
const estimate = task.getEstimate();
if (estimate) {
totalMinutes += estimate.getMinutes();
}
}
return rtm.newMessage(
`${formatMinutes(totalMinutes)} estimated`,
`${pluralize("task", tasks.length)} selected`
);
}
/**
* @param {number} totalMinutes
* @returns {string}
*/
function formatMinutes(totalMinutes) {
const hours = Math.floor(totalMinutes / 60);
if (!hours) return pluralize("minute", totalMinutes);
const minutes = totalMinutes % 60;
switch (minutes) {
case 0:
return pluralize("hour", hours);
case 30:
return `${hours + 0.5} hours`;
default:
return `${pluralize("hour", hours)}, ${pluralize(
"minute",
minutes
)}`;
}
}
/**
* @param {string} singleNoun
* @param {number} count
* @returns {string}
*/
function pluralize(singleNoun, count) {
return `${count} ${singleNoun}${count === 1 ? "" : "s"}`;
}
main();
Hope this can be helpful to someone else.