From b26818dad13db472b20e299d96d0fb124417a5e6 Mon Sep 17 00:00:00 2001 From: Stepanov Aleksey Date: Sun, 11 May 2025 14:12:21 +0500 Subject: add taskwarrior-tui-scripts project --- lib/global.sh | 265 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 265 insertions(+) create mode 100755 lib/global.sh (limited to 'lib/global.sh') diff --git a/lib/global.sh b/lib/global.sh new file mode 100755 index 0000000..58f8721 --- /dev/null +++ b/lib/global.sh @@ -0,0 +1,265 @@ +#!/usr/bin/env bash + +#****F* lib/global.sh +# NAME +# +# global.sh - общие функции для всех скриптов. +# +# USES +# +# - environment.sh +#****** + +#****f* global.sh/notify +# NAME +# +# notify - вывод сообщения через notify-send. +# +# ARGUMENTS +# +# category - категория уведомления. +# message - строка сообщения. +# +# USAGE +# +# notify +# +# EXAMPLE +# +# notify "msg-error" "Ошибка!" +# +# NOTES +# +# Категории уведомлений находятся в $HOME/.config/mako/category +# +# USES +# +# - global.sh +# - project.sh +# - edit.sh +# - someday.sh +# - start_stop.sh +# - edit_project.sh +#****** +function notify() { + notify-send -t 3000 -a "taskwarrior" -c "$1" "$2" +} + +#****f* global.sh/getLatestTaskId +# NAME +# +# getLatestTaskId - возвращает id задачи. +# +# DESCRIPTION +# +# Возвращает id задачи с тегом +LATEST, которая является самой последней из добавленных. +# +# USES +# +# - project.sh +# +# NOTES +# +# https://taskwarrior.org/docs/tags/ +# +# RETURN VALUE +# +# return {string} - Id задачи +#****** +function getLatestTaskId() { + task +LATEST _id +} + +#****f* global.sh/getLatestTaskUuid +# NAME +# +# getLatestTaskUuid - возвращает id задачи. +# +# DESCRIPTION +# +# Возвращает uuid задачи с тегом +LATEST, которая является самой последней из добавленных. +# +# USES +# +# - project.sh +# +# NOTES +# +# https://taskwarrior.org/docs/tags/ +# +# RETURN VALUE +# +# return {string} - Uuid задачи +#****** +function getLatestTaskUuid() { + task +LATEST _uuid +} + +#****f* global.sh/getTags +# NAME +# +# getTags - возвращает массив тегов задачи. +# +# ARGUMENTS +# +# id | uuid - id или uuid задачи. +# +# USAGE +# +# getTags +# +# USES +# +# - project.sh +# - someday.sh +# - edit_project.sh +# +# RETURN VALUE +# +# return {Array} - Массив тегов +#****** +function getTags() { + task "$1" export | jq -r '.[].tags? | .[]?' +} + +#****f* global.sh/getNameProject +# NAME +# +# getNameProject - возвращает название проекта задачи. +# +# ARGUMENTS +# +# id | uuid - id или uuid задачи. +# +# USAGE +# +# getNameProject +# +# USES +# +# - edit.sh +# +# RETURN VALUE +# +# return {String} - Uuid задачи +#****** +function getNameProject() { + task "$1" _project +} + +#****f* global.sh/getAnnotationCount +# NAME +# +# getAnnotationCount - возвращает длину массива аннотаций задачи. +# +# ARGUMENTS +# +# id | uuid - id или uuid задачи. +# +# USAGE +# +# getAnnotationCount +# +# USES +# +# - project.sh +# +# RETURN VALUE +# +# return {String} - Количество аннотаций +#****** +function getAnnotationCount() { + task "$1" export | jq -r '.[] | .annotations | length' +} + +#****f* global.sh/checkExistingProject +# NAME +# +# checkExistingProject - проверка на наличие существующего проекта. +# +# ARGUMENTS +# +# id | uuid - id или uuid задачи. +# +# USAGE +# +# checkExistingProject +# +# USES +# +# - project.sh +#****** +function checkExistingProject() { + local task + local nameNewProject + + task="$1" + nameNewProject=$(task _get "$task".description) + readarray -t listExistingProjects < <(task _project | grep "$nameNewProject") + + if [[ "${#listExistingProjects[@]}" -ge 1 ]]; then + notify "msg-error" "Проект с таким названием уже существует. Выход..." + exit 1 + fi +} + +#****f* global.sh/hasProject +# NAME +# +# hasProject - проверка на наличие проекта у задачи. +# +# ARGUMENTS +# +# id | uuid - id или uuid задачи. +# +# USAGE +# +# hasProject +# +# USES +# +# - project.sh +#****** +function hasProject() { + local task + local hasProject + + task="$1" + + hasProject=$(task "$task" export | jq -r '.[] | .project') + + if [[ ! "$hasProject" == "null" ]]; then + clear + notify "msg-error" "Одна из выбранных задач имеет проект, выход..." + exit 1 + fi +} + +#****f* global.sh/denotateAllAnnotations +# NAME +# +# denotateAllAnnotations - удаление всех аннотаций у задачи. +# +# ARGUMENTS +# +# id | uuid - id или uuid задачи. +# +# USAGE +# +# denotateAllAnnotations +# +# USES +# +# - project.sh +#****** +function denotateAllAnnotations() { + local task + local countAnnotations + + task="$1" + countAnnotations=$(getAnnotationCount "$task") + + for ((i = 0; i < countAnnotations; i++)); do + task "$task" denotate + done +} -- cgit