Xbmc est un très bon média center, à mon sens le meilleur. Parmi ses nombreuses fonctionnalités on trouve une médiathèque avec une certaine particularité : elle peut cacher les fichiers déjà lus. Dans le cas des vidéos (films ou séries) cela prend tout son sens. Toutefois il n’est pas encore possible de supprimer automatiquement un fichier déjà visionné. Je vous ait donc concocté un petit script pour palier à ce manque.
Où ?
Xbmc utilise une base Sqlite 3 pour stocker les informations sur les fichiers,
cela inclus bien entendu les chemins complets et si ils ont été lus ou non.
Pour rappel, Sqlite stocke les données dans des fichiers et dans notre cas
c’est celui-ci qui nous intéresse :
~/.xbmc/userdata/Database/MyVideos34.db
. Il est possible que le numéro
dans le nom ne soit pas le même !.
Comment ?
Votre distribution adorée dispose certainement d’un client Sqlite v3, à
vos claviers. Prenez bien la version 3, sinon vous obtiendrez l’erreur
”Unable to open database ".xbmc/userdata/Database/MyVideos34.db": file is
encrypted or is not a database
”.
Pour Ubuntu :
sudo apt-get install sqlite3
Sqlite utilisant Sql
,
voici la requête récupérant les infos nécessaires :
SELECT path.strPath,files.strFilename FROM files,path WHERE files.playCount > 0 AND path.idPath =files.idPath
Comme vous pouvez le
voir on interroge les tables files
et path
, car files
ne contient pas
les chemins complets.
Un peu de Bash pour récupérer le résultat et faire le ménage :
#!/bin/bash
#file clean.sh
ORIG="~/.xbmc/userdata/Database/MyVideos34.db"
DB="/tmp/xbmc.db" SQL="SELECT path.strPath,files.strFilename FROM files,path WHERE files.playCount > 0 AND path.idPath =files.idPath"
BUFFER="/tmp/xbmc_clean_buffer"
> $BUFFER
cp $ORIG $DB
sqlite3 $DB "$SQL" | sed 's/|//' | sed 's/ /\\ /g' > $BUFFER
while read file;do
if [ -e "$file" ];then
date rm -v "$file"
fi
done < $BUFFER
rm $BUFFER
rm $DB
Rien de bien complexe : un peu de [man]sed
[/man]
pour faire le ménage et échapper les espaces, un [man]rm
[/man] pour
supprimer (le -v
servant à loguer les suppressions). Par précaution on
travaille sur une copie de la base.
Quand ?
[man]crontab
[/man] à la rescousse :
# m h dom mon dow command
*/30 * * * * /home/server/clean.sh >> /home/server/clean_log
Notez la redirection dans un log, pour suivre les suppressions, on est jamais trop prudents !
Bon Bash ;-)