TerabyteTerminator/tools/db/update-file-state

174 lines
5.0 KiB
Plaintext
Raw Normal View History

#!/bin/bash
# @author 6543
# @version 0.1
# @date 2019-02-07
## Options/Parameter
# [$1]: <path to movie folder>
{ #set enviroemnt
readonly TRUE=1 #like <stdbool.h>
readonly FALSE=0 #like <stdbool.h>
2019-05-10 16:56:56 +00:00
readonly TTSYNC_EXIST=0 #file exist local
readonly TTSYNC_BACKUP=1 #file exist local - backup exist
readonly TTSYNC_REMOTE=2 #file exists remote - not used jet
readonly TTSYNC_DEL=3 #local file deleted
readonly globalconf="/etc/tt/global"
}
{ #get options & args
readonly mode=$(echo $1 | tr -d '-')
moviedir="$1"
2019-05-10 16:56:56 +00:00
[ -z "$moviedir" ] && [ -f "$globalconf" ] && { # if (no argument) and (globalconf exist)
if [ -z "$(grep "moviedir=" "$globalconf" )" ]; then # and (moviedir is NOT in globalconf)
echo 'neither "movie folder" is set in global config nor given as argument'
exit 2
else # and (moviedir is in globalconf)
moviedir="$(grep "moviedir=" "$globalconf" | cut -d '=' -f 2)"
fi
}
[ -d "$moviedir" ] || { echo "moviedir \"$moviedir\" do not exist"; exit 3; } # check moviedir
moviedir=""$(echo $moviedir | sed 's|/$||g')""
[ -z "$moviedir" ] && exit 255 #catch case moviedir="/"
readonly DATE=$(date '+%Y-%m-%d')
}
{ #db
dbname="tt_test"
dbhost="localhost"
dbuser="root"
dbpwd=""
}
function help() {
#help menue
echo "$0 is part of the TerabyteTerminator Project"
echo ""
echo "update-file-state [moviedir]"
echo " moviedir: Is optional if it is already in the global config"
exit 0
}
[ "$mode" == "help" ] && help
###########################
## Programm Haupt Ablauf ##
###########################
function main() {
#cd to moviedir
cd "$moviedir"
2019-05-10 17:10:22 +00:00
#clean DB from old stuff
{
2019-05-10 18:50:14 +00:00
db_query "DELETE From File WHERE Size=0 OR MD5="" OR MD5 IS NULL;"
2019-05-10 17:10:22 +00:00
}
2019-05-10 16:56:56 +00:00
#erselle zwei dateilisten
list_tmp=$(mktemp -d)
db_query "SELECT CONCAT('$moviedir/', Folder, '/', Name) FROM File WHERE TTSync=$TTSYNC_EXIST OR TTSync=$TTSYNC_BACKUP;" > "$list_tmp/indb"
find "$moviedir" -type f > "$list_tmp/exist"
#find new files
grep -vf "$list_tmp/indb" "$list_tmp/exist" > "$list_tmp/new"
#all IDs wich an old check date:
2019-05-10 17:10:22 +00:00
db_query "SELECT ID FROM File Where TTCheck < '$DATE' OR TTCheck IS NULL;" | while read line; do
#for each ID with an old check date ...
ID=$line
TTSync=$(db_query "SELECT TTSync FROM File WHERE ID=$ID;")
2019-05-10 17:59:26 +00:00
FILE=$(db_query "SELECT CONCAT('$moviedir/', Folder, '/', Name) FROM File WHERE ID=$ID;")
if [ -f "$FILE"]; then
SIZE=$(db_query "SELECT Size FROM File WHERE ID=$ID;")
2019-05-10 18:50:14 +00:00
SIZE_new="$(file_size "$FILE")"
[ "$SIZE" != "$SIZE_new" ] && {
2019-05-10 17:59:26 +00:00
echo "FILE CHANGE: $FILE"
2019-05-10 18:50:14 +00:00
if [ "0" == "$SIZE_new" ]; then
#file exist but empty
#rm "$FILE" <- secure? 2check
db_query "UPDATE File SET TTSync=$TTSYNC_DEL,TTCheck=$DATE WHERE ID=$ID;"
else
2019-05-10 17:59:26 +00:00
#recalc md5 ... + check
#update DB
2019-05-10 18:50:14 +00:00
MD5_new=$(md5sum "$FILE" | cut -c -32)
MD5=$(db_query "SELECT MD5 FROM File WHERE ID=$ID;")
if [ "$MD5" == "$MD5_new" ]; then
db_query "UPDATE File SET Size=$SIZE_new,TTCheck=$DATE WHERE ID=$ID;"
else
#new file/file changed!
db_query "UPDATE File SET TTSync=$TTSYNC_DEL,TTCheck=$DATE WHERE ID=$ID;"
file_add "$(db_query "SELECT CONCAT(Folder, '/', Name) FROM File WHERE ID=$ID;")"
fi
fi
2019-05-10 17:59:26 +00:00
}
2019-05-10 18:50:14 +00:00
else
# file dont exist
db_query "UPDATE File SET TTSync=$TTSYNC_DEL,TTCheck=$DATE WHERE ID=$ID;"
fi
2019-05-10 17:59:26 +00:00
2019-05-10 17:10:22 +00:00
done
2019-05-10 16:56:56 +00:00
2019-05-10 18:50:14 +00:00
#add new files ....
cat "$list_tmp/new" | while read line; do
file_add "$line"
done
rm -r "$list_tmp/"
}
###########################
## help functions #########
###########################
##check & prepair args
[ -z "$moviedir" ] && [ -f "$globalconf" ] && { # if (no argument) and (globalconf exist)
if [ -z "$(grep "moviedir=" "$globalconf" )" ]; then # and (moviedir is NOT in globalconf)
echo 'neither "movie folder" is set in global config nor given as argument'
exit 2
else # and (moviedir is in globalconf)
moviedir="$(grep "moviedir=" "$globalconf" | cut -d '=' -f 2)"
fi
}
[ -d "$moviedir" ] || { echo "moviedir \"$moviedir\" do not exist"; exit 3; } # check moviedir
moviedir=""$(echo $moviedir | sed 's|/$||g')""
[ -z "$moviedir" ] && exit 255 #catch case moviedir="/"
# file_size <path> -> (du -b)/1024 [Kb]
function file_size() {
2019-05-10 16:56:56 +00:00
if [ -f "$1" ]; then
echo $(($(du -b "$1" | cut -f 1)/1024))
else
echo 0
fi
}
2019-05-10 18:50:14 +00:00
function file_add() {
echo "dumy func file_add [rel. path]
#chek if path still esist chek usw...
#chek if size ->md5 exist -> not new MV !!!
}
# db_query <query> -> result
function db_query() {
local args="-sN" #no headers, no grid
args+=" -h$dbhost"
args+=" -u$dbuser"
[ -n "$dbpwd" ] && args+=" -p$dbpwd"
args+=" $dbname"
echo $@ | mysql $args
}
# db_F-ID_getPath <F-ID> -> <Path>
function db_id_getPath() {
db_query "SELECT CONCAT('$moviedir/', Folder, '/', Name) FROM File WHERE ID=$1;"
}
main #aufruf der main function (eig. programmstart)