#!/usr/bin/env bash #****F* lib/edit.sh # NAME # # edit.sh - функции для edit_project.sh. # # USED BY # # - edit_project.sh #****** #****f* edit.sh/getIdsTask # NAME # # getIdsTask - возвращает массив из id задач. # # ARGUMENTS # # uuid - uuid задачи. # # USAGE # # getIdsTask uuid # # RETURN VALUE # # return {array} - Id задач # # USES # # - getNameProject # # USED BY # # - edit.sh # - editStageProject # - deleteProject #****** function getIdsTask() { local nameProject nameProject=$(getNameProject "$1") readarray -t idsTaskProject < <(task project:"$nameProject" +current export | jq -r 'sort_by(.order)[] | .id') printf '%s\n' "${idsTaskProject[@]}" } #****f* edit.sh/compareTaskFiles # NAME # # compareTaskFiles - сравнивает файлы TMP_TSKW_EDIT и TMP_TSKW_BAK. # # DESCRIPTION # # TMP_TSKW_EDIT - файл содержит все шаги которые содержит проект с тегом current. # TMP_TSKW_BAK - копия TMP_TSKW_EDIT. # # USED BY # # - edit.sh # - editStageProject #****** function compareTaskFiles() { if cmp -s "$TMP_TSKW_EDIT" "$TMP_TSKW_BAK"; then notify "msg-gray" "Этапы проекта не были изменены. Выход..." exit 0 fi } #****f* edit.sh/backupStages # NAME # # backupStages - создание копии TMP_TSKW_EDIT. # # DESCRIPTION # # Делается для дальнейшего сравнения в compareTaskFiles. # # USED BY # # - edit.sh # - editStageProject #****** function backupStages() { cp "$TMP_TSKW_EDIT" "$TMP_TSKW_BAK" } #****f* edit.sh/editStages # NAME # # editStages - открытие TMP_TSKW_EDIT в nvim. # # DESCRIPTION # # Нужна для редактирования шагов проекта. # # USED BY # # - edit.sh # - editStageProject #****** function editStages() { nvim --clean "$TMP_TSKW_EDIT" & wait } #****f* edit.sh/editStageProject # NAME # # editStageProject - записывает шаги проекта в TMP_TSKW_EDIT, делает копию TMP_TSKW_EDIT, сравнивает TMP_TKSW_EDIT с копией. # # DESCRIPTION # # Фактически объединяет в себе несколько других функций: backupStages, editStages, compareTaskFiles. # # USES # # - backupStages # - editStages # - compareTaskFiles # # USED BY # # - edit_project.sh #****** function editStageProject() { readarray -t idsTaskProject < <(getIdsTask "$1") if [[ -f "$TMP_TSKW_EDIT" ]]; then : >"$TMP_TSKW_EDIT" fi if [[ ! "${#idsTaskProject[@]}" ]]; then echo "# Проект без этапов. Эта строка будет проигнорирована." >>"$TMP_TSKW_EDIT" backupStages editStages compareTaskFiles return 0 fi for taskID in "${idsTaskProject[@]}"; do local uuid uuid=$(task _get "$taskID".uuid) task _get "$uuid".description >>"$TMP_TSKW_EDIT" done backupStages editStages compareTaskFiles } #****f* edit.sh/deleteProject # NAME # # deleteProject - удаление проекта. # # USES # # - getIdsTask # - getNameProject # # USED BY # # - edit_project.sh #****** function deleteProject() { local idsTaskProject local nameProject idsTaskProject=$(getIdsTask "$1") nameProject=$(getNameProject "$1") if [[ "${#idsTaskProject[@]}" -eq 0 ]]; then return else task rc.bulk=0 rc.confirmation=off project:"$nameProject" -COMPLETED -DELETED +current delete fi } #****f* edit.sh/recreateProject # NAME # # recreateProject - пересоздание проекта. # # USES # # - getLatestTaskUuid # # USED BY # # - edit_project.sh #****** function recreateProject() { for taskIndex in "${!taskStages[@]}"; do if [[ "$taskIndex" -eq 0 ]]; then task add "${taskStages[$taskIndex]}" project:"$nameProject" order:$(("$taskIndex" + 2 - 1)) +current else task add "${taskStages[$taskIndex]}" project:"$nameProject" depends:"$uuidNewTask" order:$(("$taskIndex" + 2 - 1)) +current fi local uuidNewTask uuidNewTask=$(getLatestTaskUuid) done }