PlexWasher/README.md

183 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PlexWasher c'est quoi ?
Un utilitaire développé par **Akiya** ayant pour but de supprimer les films et séries après un certains laps de temps de non visionnage sur _**Plex**_. L'idée est de ne pas stocker inutilement des fichiers qui ne sont pas regardés et ainsi gagner de l'espace de stockage.
L'utilitaire utilise l'API de _**Tautulli**_, ***Radar*** et ***Sonarr*** un outil permettant de monitorer un serveur _**Plex**_, pour récupérer les informations de visionnage.
# Les fonctions disponibles/pas disponibles actuellement
- Suppression des films
- Via Radarr pour les films téléchargés par ce biais
- Via le système de fichier pour les autres
- Suppression des séries
- Via Sonarr pour les séries téléchargés par ce biais
- Via le système de fichier pour les autres
- Choix du nombre de mois avant suppression pour un fichier jamais consulté
- Choix du nombre de mois avant suppression depuis le dernier visionnage d'un fichier
- Possibilité de faire une whitelist pour que certains fichiers soient ignorés par l'utilitaire et jamais supprimés
- Possibilité de visionner la liste des fichiers que l'utilitaire a détecté comme étant dans les critères de suppression
- Choix du serveur _**Tautulli**_, ***Radarr*** et ***Sonarr***
# Configurer l'environnement pour utiliser l'utilitaire
L'utilitaire a été développé avec la version `3.10` de Python. Il sera exécuter depuis un container docker. Cette façon de faire offre plusieurs avantages :
- La version de Python reste fixe, aucune MAJ ne peut venir "casser" le fonctionnement du programme
- Le container docker peut-être créé et supprimé à la volée le temps de l'utilisation seulement
- Le container n'ayant accès en lecture/écriture qu'au dossier relatif à sa propre configuration et au lieu de stockage des films et séries, il ne peut pas aller supprimer des fichiers ailleurs. Ceci protège ainsi le système d'un bug pouvant causer des suppressions non souhaitées.
## Récupérer l'utilitaire du repo git
Afin de récupérer facilement l'utilitaire, lancer la commande suivante :
`git clone https://git.antoinesanchez.fr/Akiya/PlexWasher.git=`
NB : Cette commande est à renseigner seulement la première fois. A l'avenir pour récupérer une éventuelle MAJ de l'utilitaire il faudra simplement réaliser la commande suivante :
`git pull`
## Installation de l'utilitaire via un container docker
L'utilitaire est livré de manière à pouvoir build une image docker en utilisant la commande suivante (❗Le "." est important à la fin de la commande) :
`sudo docker build -t plexwasher:latest .`
# Paramétrage
La configuration se réalise dans le fichier _**config.ini**_.
## Configuration des serveurs Tautulli, Radarr et Sonarr
Compléter les champs comme suit :
```
[TAUTULLI]
SERVER_URL = https://tautulli.exemple.com
API_KEY = apikeytautilli
[RADARR]
SERVER_URL = https://radarr.exemple.com
API_KEY = apikeyradarr
[SONARR]
SERVER_URL = https://sonarr.exemple.com
API_KEY = apikeysonarr
```
La clef API du serveur _**Tautulli**_ se trouve dans **Settings / Web Interface**. Dérouler la page jusqu'à trouver la section **API**.
Le champ **Enable API** doit être coché. Si une clef API n'a encore jamais été généré, cliquer sur **Generate**. Il est ensuite possible d'afficher la clef API en cliquant sur l'œil puis de copier la clef, c'est cette dernière qu'il faut renseigner dans le champ `API_KEY` ci-dessus.
Pour ***Radarr*** et ***Sonarr*** la clef API se trouve ici dans Settings/General.
## Application des filtres
L'application des filtres à lieu dans la section suivante :
```
[MEDIA_FILTER]
; Section_id de la librairie film à nettoyer
film_section_ids = [1,2]
; nb de mois avant suppression pour un film jamais regardé
deadline_never_watched = 12
; nb de mois avant suppression depuis le dernier visionage
deadline_last_watched = 12
files_to_ignore = [
     "/share/data/Plex/Films/Inglourious Basterds - 2009/Inglourious Basterds - 2009.mkv",
     "/share/data/Plex/Films/N'oublie jamais - 2004/The Notebook - 2004.mkv",
     "/share/data/Plex/Films/Nuit D'Ivresse -1986.mkv"
     ]
```
- Le champ `film_section_ids` correspond au choix de la librairie dans _**Tautulli**_. Dans mon cas, la 1 correspond à la librairie des films et 2 celle des séries.
- Le champ `deadline_never_watched` correspond au nombre de **mois** avant suppression pour un fichier jamais consulté. Ceci permet de donner un délais de X mois pour qu'un fichier ajouté récemment ne soit pas comptabilisé comme bêtement jamais visionné et supprimé.
- Le champ `deadline_laste_watched` correspond au nombre de **mois** avant suppression depuis le dernier visionnage d'un fichier.
- Le champ `files_to_ignore` correspond à la whitelist, c'est à dire aux fichiers qui ne seront pas impactés par l'utilitaires. Il faut renseigner ici les fichiers que l'on souhaite voir conserver. La syntaxe à respecter pour ce champ est celle décrite ci-dessus. A savoir, le chemin complet du fichier entre guillemet, suivi d'une virgule sauf dans le cas du dernier fichier.
# Utilisation de l'utilitaire
Les fichiers _**config.ini**_ (s'il n'existe pas, copier coller ***config.exemple.ini*** en le renommant ***config.ini***) et ***to_delete.txt*** seront utiles dans cette section.
La configuration de l'utilitaire est à réaliser dans le fichier _**config.ini**_ en suivant les explications dans la section **Paramétrage**.
L'utilitaire fonctionne en deux temps. C'est à dire qu'il faut d'abords lui demander d'acquérir la liste des fichiers à supprimer. Il rempli alors le fichier ***to_delete.txt***. Ce fichier est consultable et contient la liste de tout ce qui va être supprimé. Il est possible à ce stade de l'éditer pour supprimer ou ajouter un fichier à supprimer. Une fois le fichier contrôlé, il faut enfin demander à l'utilitaire de passer à la phase de suppression.
## Obtenir la liste des fichiers à supprimer
Pour obtenir la liste des fichiers à supprimer, il faut exécuter le programme _**plexwasher.py**_ de la manière suivante :
`docker run --name plexwasher -v $(pwd)/to_delete.txt:/app/plexwasher/to_delete.txt -v $(pwd)/config.ini:/app/plexwasher/config.ini -v /home/antoine-a/plex:/share/CACHEDEV1_DATA/Plex --rm plexwasher /app/plexwasher/plexwasher.py -g`
NB :
- Dans mon cas, cette commande est à lancer sur Serveur1 depuis le dossier "/home/antoine-a/data/appdata/PlexWasher/input"
- -v permet de mapper les fichier ***to_delete.txt***, ***config.ini*** et le lecteur réseau "plex" dans laquelle se trouve les films et séries.
- -rm permet de supprimer le container docker après l'exécution du script python
- `/app/plexwasher/plexwasher.py -g` permet d'exécuter la commande "get" du script afin d'alimenter le fichier ***to_delete.txt***
Après quelques instants (plus ou moins long en fonction du nombre de fichier qui doivent être supprimés) la tâche est accomplie. Le fichier ***to_delete.txt*** est complété.
Il est possible à ce stade d'éditer ce fichier pour retirer des fichiers à supprimer ou en ajouter (en veillant à respecter la syntaxe).
## Lancer la suppression des fichiers
Pour lancer la suppression des fichiers, il faut exécuter le programme _**plexwasher.py**_ de la manière suivante :
`docker run --name plexwasher -v $(pwd)/to_delete.txt:/app/plexwasher/to_delete.txt -v $(pwd)/config.ini:/app/plexwasher/config.ini -v /home/antoine-a/plex:/share/CACHEDEV1_DATA/Plex --rm plexwasher /app/plexwasher/plexwasher.py -d -v`
`
NB :
- Dans mon cas, cette commande est à lancer sur Serveur1 depuis le dossier "*/home/antoine-a/data/appdata/PlexWasher/input*"
- -v permet de mapper les fichier ***to_delete.txt***, ***config.ini*** et le lecteur réseau "plex" dans laquelle se trouve les films et séries.
- -rm permet de supprimer le container docker après l'exécution du script python
- `plexwasher /app/plexwasher/plexwasher.py -d -v` permet d'exécuter la commande "delete" du script afin de supprimer les fichiers qui sont dans ***to_delete.txt*** et non protégés dans la whitelist (dans ***config.ini***) ; le "-v" permet lui d'obtenir tous les logs du script.
Après quelques instants (plus ou moins long en fonction du nombre de fichier qui doivent être supprimés) la tâche est accomplie et les fichiers sont supprimés.
## Comportement de Plex, Radarr, Sonarr, Overseerr et Tautulli
_**Plex**_ détecte de lui même la suppression des fichiers et les retire de la bibliothèque. _**Tautulli**_ est plus lent mais finit par le détecter également (serveur configuré sur un scan par heure). Un redémarrage de _**Tautulli**_ permet d'accélerer le processus.
Enfin ***Sonarr*** et ***Radarr***, si le fichier a été téléchargé par eux, sont utilisés directement utilisés pour la suppression des éléments en question. De fait ils sont à jour.
Reste ***Overseerr*** dont les demandes ne sont pas actualisés, la bonne pratique étant de supprimer les demandes au fil de l'eau dès lors qu'elles passent disponibles.
_____________________________________________________________________________
# PlexWasher
A simple command line to remove media from plex
## Description
This tool will query a Tautulli server to get the path of all files for a media that was not not been watched for a given period.
The list will then be written to a file in case the user want to double check before deleting all the listed files.
This tool supports:
- selection of period a media is not beeing watched before deleting it.
- whitelist of files to prevent the deletion of a media even if the not watched period is exeeded.
## Getting Started
### Dependencies
* python3.10 or newer
### Installing
* Download the source code
```
git clone https://git.antoinesanchez.fr/Akiya/PlexWasher.git # or download the ZIP from https://git.antoinesanchez.fr/Akiya/PlexWasher/archive/main.zip and extract it
```
* Rename 'config.exemple.ini' to 'config.ini' and modify it to set the correct informations
### Executing program
* CMD description:
```
usage: plexwasher.py [-h] [-v] [-g] [-d] [-o OUTPUT]
options:
-h, --help show this help message and exit
-v, --verbose Print lots of debugging statements
-g, --get Get the list of files to delete and stores the list in a file
-d, --delete Read a file listing unwanted files, delete the unwanted files and its parent folders if empty.
-o OUTPUT, --output OUTPUT
Change the default output file.
```
* Exemple:
```
./plexwasher.py --get
```
## License
This project is licensed under the Apache-2.0 License - see the LICENSE file for details