#!/usr/bin/env bash #****F* lib/project.sh # NAME # # project.sh - bash-скрипт для создания проекта в taskwarrior-tui. #****** #****f* global.sh/getProjName # NAME # # getProjName - возвращает название проекта. # # USES BY # # - taskProj # # NOTES # # Cамое первое описание (description) является названием задачи. # # RETURN VALUE # # return {string} - название задачи. #****** function getProjName() { task _get "$1".description } #****f* global.sh/getExitCriteria # NAME # # getExitCriteria - возвращает критерий завершения. # # USES BY # # - taskProj # # NOTES # # Следующее после самого первого описания (description) идёт - критерий завершения. # # RETURN VALUE # # return {string} - критерий завершения задачи. #****** function getExitCriteria() { task _get "$1".annotations.1.description } #****f* global.sh/taskCheck # NAME # # taskCheck - проверка обрабатываемой задачи. # # DESCRIPTION # # Проверка задачи на наличие: критерия завершения, названия проекта, первого шага и существующего проекта. # # USES BY # # - taskProj # # RETURN VALUE # # return {number} - статус завершения. #****** function taskCheck() { local task task="$1" annotationCount=$(getAnnotationCount "$task") case "$annotationCount" in 0) notify "msg-error" "Нет критерия завершения, выход..." return 1 ;; 1) notify "msg-error" "Нет первого шага у проекта, выход..." return 1 ;; *) checkExistingProject "$task" hasProject "$task" return 0 ;; esac } #****f* global.sh/taskProj # NAME # # taskProj - создание проекта. # # NOTES # # Проект создается на основе: # # - названия проекта; # - критерия завершения; # - первого шага. # # USES BY # # - tskw.sh #****** function taskProj() { local task local projectName local exitCriteria local idTask local tags task="$1" tags=$(getTags "$1") projectName=$(getProjName "$1") exitCriteria=$(getExitCriteria "$1") readarray -t annotations < <(task "$1" export | jq -r '.[] | .annotations[1:] | .[].description') if [[ "$tags" =~ "someday" ]]; then task "$task" modify priority: -someday fi task "$task" modify project:"$projectName" description:"$exitCriteria" denotateAllAnnotations "$task" for taskIndex in "${!annotations[@]}"; do if [[ "$taskIndex" -eq 0 ]]; then task add "${annotations[$taskIndex]}" project:"$projectName" order:"$((taskIndex + 2))" +current idTask=$(getLatestTaskId) continue fi task add "${annotations[$taskIndex]}" project:"$projectName" order:"$((taskIndex + 2))" depends:"$idTask" +current idTask=$(getLatestTaskId) done }