# Script zu checken, ob Ausschreibungen neu dazugekommen sind oder sich geändert haben # Aufbau der Wettkampfdatenbank: # Tabellen # - downloads -> Verwalten der heruntergeladenen Ausschreibungen # - adressen -> Verwalten von Adressen der Wettkampforte # - wk -> Verwalten der Wettkämpfe # Aufbau der einzelnen Tabellen: # - downloads # - id PRIMARY KEY INT -> Die interne ID der Ausschreibung # - dateiname TEXT -> der Dateiname der Auschreibung # - sha512 TEXT -> Hash der Datei # - wkID TEXT -> IDs der zugehörigen Wettkämpfe (kommasepariert, leer soll heißen uninteresannte Ausschreibung) # - wk # - id PRIMARY KEY INT -> Die interne ID des Wettkampfes # - datum TEXT -> Datum des Wettkampfes # - name TEXT -> Name des Wettkampfes # - adrID -> ID des Wettkampfortes in der Adressdatenbank # Über Dateinamenliste iterieren filelist=`ls -1A download/` for file in $filelist do # Hash der Datei merken hash=`rhash --printf=%{sha512} download/"$file"` # sqlQuery zusammenstellen: Alle AusschreibungsIDs suchen, die diese Ausschreibung haben query="SELECT id FROM downloads WHERE dateiName='$file';" ids=`echo $query | sqlite wk.db` echo "Gefundene wkIDs: $ids" if [[ $ids = "" ]] then # Wenn dateiname noch nicht in der Datenbank gefunden wurde, Eintrag neu anlegen # echo "$file noch nicht zugeordnet!" # Wettkampfdaten abfragen # echo `evince download/$file &` mupdf download/$file & echo "Ausschreibung: $file" echo "Datum (bei mehreren Daten per Leertaste getrennt, zum Ignorieren nichts):" read daten # Werden keine Daten eingegeben, dann soll die Ausschreibung ignoriert werden if test -z $daten then query="INSERT INTO downloads(dateiname, sha512, wkID) VALUES('$file', '$hash', -1);" echo $query | sqlite wk.db continue else # Ansonsten wird für jedes Datum ein Wettkampf angelegt wkName = "" plz = "" ak = "" for datum in $daten do echo "$datum:" # Ausgabe anderer WK an diesem Datum query="SELECT id,name FROM wk WHERE datum='$datum';" wks=`echo $query | sqlite wk.db` echo $wks # Eingabe des Wettkampfnamens (bei mehreren Daten kann mit leerem Namen einfach der zuletzt eingegebene Name verwendet werden) echo "Wettkampfname: ($wkName)" read temp if test -z $temp then echo "Wettkampfname übernommen: $wkName" else wkName = temp fi # Eingabe der Postleitzahl des Wettkampfortes echo "PLZ: ($plz)" read temp if test -z $temp then echo "PLZ übernommen: $plz" else plz = temp fi # Zur Postleitzahl gehörige Adresse finden query="SELECT id FROM adressen WHERE plz='$plz';" adrIDs=`echo $query | sqlite wk.db` if test -z $adrIDs then # @todo: Eingabe der Adresse echo "Keine zugehörige Adresse gefunden!" adrID = 0 #else # @todo: Behandlung verschiedener Adressen mit gleicher PLZ ergänzen fi # Eingabe der Altersklassen echo "AK: ($ak)" read temp if test -z $temp then echo "Übernommene AK: $ak" else ak = temp fi # Hinzufügen des Wettkampfes zur Datenbank query="INSERT INTO wk(datum, name, ak, adrID) VALUES('$datum','$wkName','$ak','adrID');" `echo $query | sqlite wk.db` # Eintrag in die Ausschreibungsdatenbank; Dazu brauchen wir die wkID query="SELECT id FROM wk WHERE datum='$datum' AND name='$wkName' AND ak='$ak';" wkID=`echo $query | sqlite wk.db` query="INSERT INTO downloads(dateiname, sha512, wk) VALUES('$file', '$hash', '$wkID');" echo $query | sqlite wk.db done # nächstes Datum fi # Ende Hinzufügen eines neuen Wettkampfes # Wenn wir wkIDs für diese Ausschreibung gefunden haben müssen wir testen, ob sich der Hash geändert hat else query="SELECT sha512 FROM downloads WHERE dateiName='$file';" dbhash=`echo $query | sqlite wk.db` if [[ $hash != $dbhash ]] then echo "$file hat sich geändert!" query="SELECT wkID FROM downloads WHERE dateiName='$file';" wkIDs=`echo $query | sqlite wk.db` echo "Betroffene Wettkämpfe: $wkIDs" # todo Bei einer geänderten Ausschreibung die daten des Wettkampfeintrages anpassen for wkID in $wkIDs do query="SELECT name FROM wk WHERE id='$wkID';" wkName=`echo $query | sqlite wk.db` echo "Wettkampfname: ($wkName)" read temp if test -z $temp then echo "Wettkampfname übernommen: $wkName" else wkName = temp fi query="SELECT datum FROM wk WHERE id='$wkID';" wkDatum=`echo $query | sqlite wk.db` echo "Datum: ($wkDatum)" read temp if test -z $temp then echo "Datum übernommen: $Datum" else wkDatum = temp fi query="SELECT ak FROM wk WHERE id='$wkID';" wkAk=`echo $query | sqlite wk.db` echo "Ak: ($wkAk)" read temp if test -z $temp then echo "Ak übernommen: $wkAk" else wkAk= temp fi query="UPDATE wk SET name='$wkName',datum='$wkDatum',ak='$wkAk' WHERE id=$id;" `echo $query | sqlite wk.db` done query="UPDATE downloads SET sha512='$hash' WHERE id=$id;" `echo $query | sqlite wk.db` # @todo: Update der Ausschreibung zum Upload auslösen else echo "$file unverändert!" fi # ende unveränderte ausschreibung fi # ende existenz ausschreibung done # ende dateilistenschleife