#!/bin/bash ### License ## ####################################################################### # DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE # # Version 2, December 2004 # # # # Copyright (C) 2004 Sam Hocevar # # # # Everyone is permitted to copy and distribute verbatim or modified # # copies of this license document, and changing it is allowed as long # # as the name is changed. # # # # DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE # # TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION # # # # 0. You just DO WHAT THE FUCK YOU WANT TO. # # # ####################################################################### ### Functions ## # usage() { cat <]] [-g] [-s] [-h] OPTIONS: -d daemon mode, starts a loop -w set the number of hours of work needed before the script asks you to stop working default is 8, float numbers accepted -g start the counter and exit -s stop the counter and exit -h print this help and exit SOURCE: https://framagit.org/-/snippets/6620 DOCUMENTATION: https://wiki.fiat-tux.fr/books/logiciels/page/une-pointeuse-avec-ktimetracker EOF exit } save() { qdbus org.kde.ktimetracker /KTimeTracker org.kde.ktimetracker.ktimetracker.saveAll } start_task() { echo -n "Starting $TASK… " if [[ $(qdbus org.kde.ktimetracker /KTimeTracker org.kde.ktimetracker.ktimetracker.isTaskNameActive $TASK) == 'false' ]] then if [[ $(qdbus org.kde.ktimetracker /KTimeTracker org.kde.ktimetracker.ktimetracker.startTimerForTaskName $TASK) == 'true' ]] then echo "success" notify-send -a Ktimetracker -i /usr/share/icons/hicolor/64x64/apps/ktimetracker.png "Compteur lancé" else echo "failure" notify-send -a Ktimetracker -i /usr/share/icons/hicolor/64x64/apps/ktimetracker.png -u critical "Le lancement du compteur n’a pas fonctionné" fi else echo "no need" notify-send -a Ktimetracker -i /usr/share/icons/hicolor/64x64/apps/ktimetracker.png "Le compteur était déjà lancé" fi save } stop_task() { echo -n "Stopping $TASK… " if [[ $(qdbus org.kde.ktimetracker /KTimeTracker org.kde.ktimetracker.ktimetracker.isTaskNameActive $TASK) == 'true' ]] then if [[ $(qdbus org.kde.ktimetracker /KTimeTracker org.kde.ktimetracker.ktimetracker.stopTimerForTaskName $TASK) == 'true' ]] then echo "success" notify-send -a Ktimetracker -i /usr/share/icons/hicolor/64x64/apps/ktimetracker.png "Compteur arrêté" else echo "failure" notify-send -a Ktimetracker -i /usr/share/icons/hicolor/64x64/apps/ktimetracker.png -u critical "L’arrêt du compteur n’a pas fonctionné" fi else echo "no need" notify-send -a Ktimetracker -i /usr/share/icons/hicolor/64x64/apps/ktimetracker.png "Le compteur n’était pas lancé" fi save } ### Options ## # DAEMON='' START='' STOP='' WORKHOURS=8 optstring=":dgshw:" while getopts ${optstring} arg do case ${arg} in d) DAEMON='daemon mode' ;; g) START='start' ;; s) STOP='stop' ;; w) WORKHOURS=${OPTARG} ;; h) usage ;; esac done ### Let’s work! ## # WEEK=$(date +"%Y_Semaine_%V") TASK=$(date +"%Y-%m-%d_(%A)") if [[ -z $(pgrep -lf ktimetracker) ]] then kstart5 --iconify --skiptaskbar --skippager ktimetracker >/dev/null 2>&1 sleep 1 qdbus org.kde.ktimetracker /ktimetracker/MainWindow_1 org.qtproject.Qt.QWidget.hide fi if [[ $(qdbus org.kde.ktimetracker /KTimeTracker org.kde.ktimetracker.ktimetracker.tasks | grep -c "^$WEEK\$" ) -eq 0 ]] then qdbus org.kde.ktimetracker /KTimeTracker org.kde.ktimetracker.ktimetracker.addTask "$WEEK" fi WEEK_TASKID=$(qdbus org.kde.ktimetracker /KTimeTracker org.kde.ktimetracker.ktimetracker.taskIdsFromName $WEEK) if [[ $(qdbus org.kde.ktimetracker /KTimeTracker org.kde.ktimetracker.ktimetracker.tasks | grep -c "^$TASK\$" ) -eq 0 ]] then qdbus org.kde.ktimetracker /KTimeTracker org.kde.ktimetracker.ktimetracker.addSubTask "$TASK" $WEEK_TASKID fi TASKID=$(qdbus org.kde.ktimetracker /KTimeTracker org.kde.ktimetracker.ktimetracker.taskIdsFromName $TASK) TIME=$(qdbus org.kde.ktimetracker /KTimeTracker org.kde.ktimetracker.ktimetracker.totalMinutesForTaskId $TASKID) if [[ -z $TIME ]] then TIME=0 fi HOUR=$(( $TIME/60 )) MIN=$(printf "%02d" $(( $TIME - $HOUR * 60 ))) HOUR=$(printf "%02d" $HOUR) if [[ -z $MIN ]] then MIN='00' fi if [[ ! -z $START ]] then start_task exit fi if [[ ! -z $STOP ]] then stop_task exit fi if [[ -z $DAEMON ]] then echo "${HOUR}h${MIN}min" if [[ $(qdbus org.kde.ktimetracker /KTimeTracker org.kde.ktimetracker.ktimetracker.isTaskNameActive $TASK) == 'true' ]] then ACTION=$(notify-send -a Ktimetracker -i /usr/share/icons/hicolor/64x64/apps/ktimetracker.png --wait -A stop='Arrêter le compteur' "${HOUR}h${MIN}min") if [[ $ACTION == 'stop' ]] then stop_task fi else ACTION=$(notify-send -a Ktimetracker -i /usr/share/icons/hicolor/64x64/apps/ktimetracker.png --wait -A start='Lancer le compteur' "${HOUR}h${MIN}min") if [[ $ACTION == 'start' ]] then start_task fi fi elif [[ ! -z $DAEMON ]] then notify-send -a Ktimetracker -i /usr/share/icons/hicolor/64x64/apps/ktimetracker.png "Lancement de KtStatus" while true do TASK=$(date +"%Y-%m-%d_(%A)") if [[ $(qdbus org.kde.ktimetracker /KTimeTracker org.kde.ktimetracker.ktimetracker.isTaskNameActive $TASK) == 'true' ]] then echo "$TASK: active" >&2 TASKID=$(qdbus org.kde.ktimetracker /KTimeTracker org.kde.ktimetracker.ktimetracker.taskIdsFromName $TASK) TIME=$(qdbus org.kde.ktimetracker /KTimeTracker org.kde.ktimetracker.ktimetracker.totalMinutesForTaskId $TASKID) if [[ $(echo "$TIME > $WORKHOURS * 60" | bc ) -eq 1 ]] then echo "$TASK: temps de travail dépassé" >&2 HOUR=$(( $TIME/60 )) MIN=$(printf "%02d" $(( $TIME - $HOUR * 60 ))) HOUR=$(printf "%02d" $HOUR) ACTION=$(notify-send -a Ktimetracker -i /usr/share/icons/gnome/48x48/status/dialog-warning.png --wait -A stop='Arrêter le compteur' -t 10000 "Il est temps d’arrêter de travailler !${HOUR}h${MIN}min") if [[ $ACTION == 'stop' ]] then stop_task fi fi else echo "Pas de tâche active" >&2 fi sleep 600 done fi