Remember The Milk script to estimate selected tasks

by
, posted

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.