Hallo,
Ich abe ich mir mal schnell folgendes gebastelt:
Zum Anzeigen der Aufnahmen-Liste:
#define FINDCMD "wget -q -O - 'http://herakles.zh.local/~vdr/video_db/video_simple.php?videodir1=%s&videodir2=%s&recext=%s'"
video_simple.php:
[PHP]
<?php
/* Datenbankserver - In der Regel die IP */
$db_server = "localhost";
/* Datenbankname */
$db_name = "video1_db";
/* Datenbankuser */
$db_user = "video1_db";
/* Datenbankpasswort */
$db_passwort = "video1_db";
/* Tabelle für die Datensätze */
$tab_name = "recordings";
$action = $_GET["action"];
$recext = str_replace(".","\.", $_GET["recext"]);
$videodir = $_GET["recording"];
/* Erstellt Connect zu Datenbank her */
$db = mysql_connect($db_server,$db_user,$db_passwort) or die ("Konnte keine Verbindung zur Datenbank herstellen");
$db_check = mysql_select_db($db_name);
if($db) {
if ( $action == "add" ) {
$recordingdir = $_GET["recording"];
echo "<br><b>Verzeichnis:</b> " . $recordingdir . "<br>";
$query = "SELECT * FROM ".$tab_name." WHERE videodir='".$recordingdir."' ";
$result = mysql_query($query);
if ( $result && ! mysql_num_rows($result) ) {
$query = "INSERT INTO " . $db_name . "." . $tab_name . " (videodir) VALUES ('".$recordingdir."') ";
$result = mysql_query($query, $db);
}
}
if ( $recext ) {
$query = "SELECT videodir FROM ".$tab_name." ";
$result = mysql_query($query, $db);
if ( $result ) {
while ( $row = mysql_fetch_object($result) ) {
if ( preg_match("/.".$recext."$/", $row->videodir) )
echo $row->videodir."\n";
}
}
}
if ( $action == "remove" ) {
$query = "DELETE FROM ".$tab_name." WHERE videodir='$videodir'";
$result = mysql_query($query, $db);
}
if ( $action == "rename" ) {
$videoneudir = str_replace(".rec", ".del", $videodir);
$query = "UPDATE ".$tab_name." SET videodir='$videoneudir' WHERE videodir='$videodir'";
$result = mysql_query($query, $db);
}
} else {
echo "Konnte keine Verbindung zum Datenbankserver aufbauen!<br>";
echo "Bitte Verbindungseinstellungen überprüfen!<br>";
}
?>
[/PHP]
Das $recext ist wichtig, der VDR holt sich darüber getrennt die Verzeichnisse einmal mit der Endung .rec und einmal mit der Endung .del
vdr mit Option "-r videodb_store.sh" starten,
damit werden Aunahmen bei Aufnahmebeginn (before) und beim Schneiden (edited) hinzugefügt.
videodb_store.sh:
#!/bin/bash
VIDEODIR="$2"
VIDEODIR="$(echo "$VIDEODIR" | sed -e "s/%/%25/")"
VIDEODIR="$(echo "$VIDEODIR" | sed -e "s/&/%26/")"
if [ "$1" == "before" -o "$1" == "edited" ]
then
wget -q -O - "http://herakles.zh.local/~vdr/video_db/video_simple.php?action=add&recording=$VIDEODIR" >/dev/null
logger videodb_store: add: "$2"
fi
if [ "$1" == "rename" ]
then
wget -q -O - "http://herakles.zh.local/~vdr/video_db/video_simple.php?action=$1&recording=$VIDEODIR" >/dev/null
logger videodb_store: rename: "$2"
fi
if [ "$1" == "remove" ]
then
wget -q -O - "http://herakles.zh.local/~vdr/video_db/video_simple.php?action=$1&recording=$VIDEODIR" >/dev/null
logger videodb_store: remove: "$2"
fi
Display More
Zum löschen muß videodir.c geändert werden, hinzufügen:
#define DELETECMD "videodb_store.sh %s '%s'"
und dann die beiden folgenden Funktionen entsprechend ändern (hab leider kaum C-Kenntnisse)
Die Zeilen mit den ">" am Zeilenanfang habe ich hinzugefügt.
bool RenameVideoFile(const char *OldName, const char *NewName)
{
> char *cmd = NULL;
// Only the base video directory entry will be renamed, leaving the
// possible symlinks untouched. Going through all the symlinks and disks
// would be unnecessary work - maybe later...
if (rename(OldName, NewName) == -1) {
LOG_ERROR_STR(OldName);
return false;
}
> else {
> asprintf(&cmd, DELETECMD, "rename", OldName);
> FILE *p = popen(cmd, "r");
> free(cmd);
> }
return true;
}
bool RemoveVideoFile(const char *FileName)
{
> char *cmd = NULL;
> asprintf(&cmd, DELETECMD, "remove", FileName);
> FILE *p = popen(cmd, "r");
> free(cmd);
return RemoveFileOrDir(FileName, true);
}
Display More
Aber vorsicht, ist noch nicht gut getestet und überhaupt nicht optimiert etc.!
Tabelle recordings mit feldern recid und videodir.
Das ganze ist bei mir mit 220 Aufnahmen deutlich schneller