Tym-Project

From: SUPINFO
To: Tous
Subject: IT

Xbmc : Supprimer Automatiquement Les Fichiers Lus (Linux)

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 ;-)

Comments