123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381 |
- #!/usr/bin/env bash
- # ENCONDING UTF-8
- #================HEADER======================================================|
- #Autor
- # Jefferson Rocha <root@slackjeff.com.br>
- #
- #PROGRAMA
- # ROPEBOX - Simples agendador de Tarefas
- #
- #DESCRIÇÃO
- # Agende suas tarefas de uma maneira fácil e simples.
- #
- #SITE
- # http://slackjeff.com.br/programas/ropebox.html
- #
- #CHANGELOG
- # https://notabug.org/jeffersonrocha/ropebox/raw/master/changelog.txt
- #============================================================================|
- #================VARIAVEIS
- NAME="RopeBox"
- VERSION="1.D"
- directory_task="${HOME}/ropebox"
- DATE=$(date +%d/%m/%Y)
- LINK="https://notabug.org/jeffersonrocha/ropebox"
- #========Cores
- red='\033[31;1m'
- green='\033[32;1m'
- cyan='\033[36;1m'
- end='\033[m'
- #================BIBLIOTECAS
- source "${directory_task}/ropebox.conf"
- #================VERIFICACOES INICIAIS
- [ "$UID" = "0" ] && { echo "Root não é permitido."; exit 1 ;}
- # Bash existe?
- type bash &>/dev/null || \
- { echo -e "${red}Você necessita do Shell Bash para continuar.${end}";exit 1;}
- # Diretorio ropebox existe?
- [ ! -d "$directory_task" ] && \
- { echo -e "${red}O diretório ropebox, não foi encontrado em seu Home. Abortando.${end}";exit 1;}
- #================FUNCOES
- _HELP()
- {
- cat <<EOF | less
- ${NAME} ${VERSION} - Simples Gerenciador de Tarefas.
- COMANDOS:
- +
- Adiciona nova Tarefa
- -
- Remove uma Tarefa
- @
- Edita uma Tarefa
- -a
- Remove Todas Tarefas existentes, com a sua confirmação!
- !s
- Procura uma determinada String/Texto nas tarefas
- !a
- Listagem de todas as Tarefas disponíveis
- !al
- Listagem de todas as tarefas disponíveis em modo coluna.
- Ótimo para uma visualização rápida.
- update
- Atualiza o ropebox através da internet direto do fonte.
- ?, help
- Exibe esta opção de ajuda
- q, exit
- Sair do ${NAME}
- +-------------------+
- | NOTAS IMPORTANTES |
- +-------------------+
- **Para manter a simplicidade o ${NAME} não auto procura o editor padrão que você utiliza.
- Isso devido ao fato que você usuário deve adicionar qual editor você mais gosta.
- Você deve alterar a variável 'my_editor' e adicionar o seu editor de texto favorito!
- Por PADRÃO o editor vem apontado como 'nano' que é um editor simples e fácil presente
- por padrão em quase todos distribuições GNU/Linux.
- +-----+
- | BUG |
- +-----+
- Caso encontre algum bug ou tem alguma sugestão envie um email para
- root@slackjeff.com.br
- +---------+
- | LICENÇA |
- +---------+
- Este Software está protegido com a licença GNU GPL VERSÃO 3.
- EOF
- }
- _BAR() # Barra de inicio
- {
- echo -e "${cyan}${NAME}${end} Versão ${cyan}${VERSION}${end}"
- echo "Para informações digite ?, help | exit, CTRL+C para sair"
- printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' -
- echo
- }
- _VIEWER() # Leitor de arquivos de textos/tarefas.
- {
- while read line; do
- echo "$line"
- done < "$archive"
- }
- _TEMPLATE() # Template para criação de nova tarefa
- {
- cat > "${directory_task}/task/${doc_name}.txt" <<END
- #####################################################################
- Nome da Tarefa = ${input2}
- Chamada Rápida = ${fast_num}
- Data de Criação = ${DATE}
- Criado por = ${USER}
- +-------------------------------------------------------------------+
- END
- }
- _ENTRY() # Entrar no diretorio de task/tarefas
- {
- cd "${directory_task}/task/"
- }
- _ADD_TASK() # Adiciona nova tarefa
- {
- ( # Subshell
- # Criando o número de chamada rápida
- # de acordo com a quantidade de arquivos no diretório.
- _ENTRY
- shopt -s nullglob dotglob # Mudando propriedades do shell.
- files=(*) # Recolhendo quantidade de arquivos no diretório.
- total=$(echo ${#files[@]})
- fast_num="$(( $total + 1 ))"
- _TEMPLATE # Chamando função para criar template
- "$my_editor" "${directory_task}/task/${doc_name}.txt" # Abrindo editor
- )
- }
- _REMOVE_TASK() # Remover uma tarefa
- {
- ( # Subshell
- _ENTRY
- # Procurando por task nos diretorios on e off
- for archive in *; do
- [ "$archive" = '*' ] && { echo -e "${red}{ALERTA}${end} Nenhuma Tarefa foi Encontrada!"; return 1 ;}
- fast_call=$(grep "^Cha.*R.*=" "${archive}") # Pegando o número de chamada Rápida.
- if [ "$fast_call" = "Chamada Rápida = $doc_name" ]; then
- task_name=$(grep "^Nom.*Tare.*=" "${archive}" | awk '{print $5}') # Nome da Tarefa/task
- rm "$archive"
- echo -e "${green}{OK}${end} Tarefa ${task_name} foi removido com sucesso."
- return 0
- elif [ "$archive" = "${doc_name}.txt" ]; then
- rm "$archive"
- echo -e "${green}{OK}${end} Tarefa ${input2} foi removido com sucesso."
- return 0
- fi
- done
- { echo -e "${red}{ALERTA}${end} Nenhuma Tarefa foi Encontrado!"; return 1 ;}
- )
- }
- _EDIT_TASK() # Editar uma tarefa
- {
- ( # Subshell
- _ENTRY
- for open in *; do
- [ "$open" = '*' ] && { echo -e "${red}{ALERTA}${end} Nenhuma Tarefa foi Encontrada!"; exit 1 ;}
- fast_call=$(grep "Cha.*R.*=" "${open}") # Pegando o número de chamada Rápida.
- if [ "$fast_call" = "Chamada Rápida = $doc_name" ]; then
- $my_editor "${open}" # Abrindo Editor
- return 0
- elif [ "$open" = "${doc_name}.txt" ]; then
- $my_editor "${open}" # Abrindo Editor
- return 0
- fi
- done
- echo -e "${red}{ALERTA}${end} Tarefa '$input2' não foi encontrada!"; return 1
- )
- }
- _LIST_ON() # Listar todas as tarefas
- {
- ( # Subshell
- _ENTRY
- for archive in *; do
- if [ "$archive" = '*' ] || [ -z "$archive" ]; then
- echo -e "${red}{ALERTA}${end} Nenhuma Tarefa ativa!"
- return 1
- fi
- _VIEWER # Chamando função de visualização de arquivo de texto.
- # Pulando duas linhas.
- echo
- echo
- done
- )
- }
- _LIST_SIMPLE() # Exibir a lista simples de tarefas em colunas
- {
- ( # Subshell
- _ENTRY
- tmp="/tmp/templist"
- echo -e "${cyan}Nº CRIAÇÃO AUTOR TAREFA${end}" >> "$tmp"
- for archive in *; do
- # Verificando se existe tarefas
- if [ "$archive" = '*' ] || [ -z "$archive" ]; then
- echo -e "${red}{ALERTA}${end} Nenhuma Tarefa ativa!"
- return 1
- fi
- # Pegando os campos necessários para imprimir na coluna
- #=============
- # OTIMIZAR!!!!
- #=============
- # Este pedaço está muito lento, precisa melhorar a velocidade
- my_author=$(grep "^Criado.*=" "$archive" | awk '{print $4}')
- my_task=$(grep "^Nome.*=" "$archive" | sed "s/.*= //; s/ /|/g")
- my_fast_call=$(grep "^Chamada.*=" "$archive" | awk '{print $4}')
- my_date=$(grep "^Data.*=" "$archive" | awk '{print $5}')
- echo -e "${my_fast_call} ${my_date} ${my_author} ${my_task}" >> "$tmp"
- done
- sort -n "$tmp" | column -t | sed 's/|/ /g' # Exibir a coluna já tabulada
- rm "$tmp" # Remover o arquivo temporario
- )
- }
- _SEARCH() # Procurar por uma determinada string nas tarefas
- {
- ( # Subshell
- _ENTRY
- count='0' # Inicializando variável contadora
- for archive in *; do # Pegando todos os arquivos no diretorio
- if grep -iq "${input2}" "$archive" &>/dev/null; then # procurando o padrão
- _VIEWER # Chamando função de visualização de arquivo de texto.
- echo
- echo
- exit 0
- else
- count=$((count+1)) # Incremento
- fi
- done
- # Se não achou nada retorna msg.
- [ "$total" -gt '0' ] && { echo "Nenhuma ocorrência encontrada para: '${input2}'"; exit 1 ;}
- )
- }
- _CLEAR_ALL()
- {
- ( # Subshell
- _ENTRY
- if rm -v * &>/dev/null; then
- echo "Todas Tarefas foram Removidas com Sucesso!"
- return 0
- else
- echo -e "${red}{ALERTA}${end} Nenhuma Tarefa ativa!"
- return 1
- fi
- )
- }
- _UPDATE()
- {
- # Declaração de variáveis
- local NAME=${NAME,,} # Pegando nome e convertendo para lower
- local ARCHIVE='master.tar.gz' # Nome do pacote do servidor
- local LINK="https://notabug.org/jeffersonrocha/${NAME}/archive/${ARCHIVE}"
- echo "Verificando Conexão com Internet..."
- wget -q --spider www.google.com || { echo "${red}{AVISO}${end} Sem Internet.";exit 1;}
- ( # Subshell
- cd "${HOME}" # Entrando no home do usuario
- if ! wget -q --show-progress "$LINK"; then
- echo -e "${red}{Alerta}${end} Erro, não foi permitido fazer update."
- echo "Você não possui acesso com a internet."
- exit 1
- fi
- # Desempacotando e retirando alguns archs na extração.
- tar xf "${ARCHIVE}" \
- --exclude='LICENSE' \
- --exclude='README.md' \
- --exclude='install.sh'
- chmod +x "${directory_task}/${NAME}" # Permissão de execução no script.
- rm "${ARCHIVE}"
- return 0
- )
- }
- #=======================PRINCIPAL
- clear
- _BAR
- while :; do # Loop principal
- read -ep "> " input input2 # Entradas principais do usuário
- # Tudo em Lower
- input2="${input2,,}" # Tudo em minusculo
- # Variável utilizada para criar arquivos de texto,
- # removendo os caracteres de espaço e substituindo por _
- doc_name="${input2// /_}"
- # Verficando Entrada
- case ${input} in
- \+)
- [ "$input2" ] || \
- { echo -e "${red}{ALERTA}${end} Para adicionar uma Tarefa use: + Nome da Tarefa";continue;}
- [ "$input2" = '.' ] && \
- { echo -e "${red}{ALERTA}${end} Não permitido nome como ' . '";continue;}
- ( # Subshell
- _ENTRY
- # Verificando se tarefa já existe...
- for exist in *; do
- [ "$exist" = "${doc_name}.txt" ] && { conf='yes'; break ;} || conf='no'
- done
- if [ "$conf" = 'yes' ]; then
- echo -e "${red}{ALERTA}${end} Nome desta tarefa já existe!"
- continue
- elif [ "$conf" = 'no' ]; then
- echo "Tarefa criada..."; sleep 0.2s
- _ADD_TASK
- fi
- )
- ;;
- -)
- [ "$input2" ] || { echo "Digite o nome da Tarefa que deseja remover."; continue ;}
- _REMOVE_TASK
- ;;
- \@)
- [ "$input2" ] || { echo "Digite o nome da Tarefa que deseja editar."; continue ;}
- _EDIT_TASK
- ;;
- !a)
- _LIST_ON
- ;;
- !al)
- _LIST_SIMPLE
- ;;
- !s)
- [ "$input2" ] || { echo "Digite a String que deseja pesquisar."; continue ;}
- _SEARCH
- ;;
- -a)
- read -p "{ALERTA} VOCÊ VAI APAGAR TODAS AS SUAS TAREFAS, DESEJA CONTINUAR? 's/N': " clear_all
- clear_all=${clear_all,,} # Tudo em minusculo
- clear_all=${clear_all:=n} # Enter pressionado retorna n.
- [ "$clear_all" = 's' ] && _CLEAR_ALL || continue
- ;;
- update) _UPDATE ;;
- clear) clear; _BAR ;;
- \?|help) _HELP ;;
- q|exit) exit 0 ;;
- *) echo "Comando não encontrado! Para ajuda digite ? ou Help." ;;
- esac
- done # Loop Principal
|