diff --git a/README.md b/README.md index aad2468..a1523c4 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ cleanuperr was created primarily to address malicious files, such as `*.lnk` or > - Trigger a search for downloads removed from the *arrs. > - Clean up downloads that have been seeding for a certain amount of time. > - Notify on strike or download removal. +> - Ignore certain torrent hashes, categories, tags or trackers from processing. cleanuperr supports both qBittorrent's built-in exclusion features and its own blocklist-based system. Binaries for all platforms are provided, along with Docker images for easy deployment. @@ -25,15 +26,21 @@ cleanuperr supports both qBittorrent's built-in exclusion features and its own b > https://discord.gg/sWggpnmGNY ## Table of contents: -- [Naming choice](README.md#naming-choice) -- [Quick Start](README.md#quick-start) -- [How it works](README.md#how-it-works) -- [Setup](README.md#setup) -- [Usage](README.md#usage) - - [Docker Compose](README.md#docker-compose-yaml) - - [Environment Variables](README.md#environment-variables) - - [Binaries](README.md#binaries-if-youre-not-using-docker) -- [Credits](README.md#credits) +- [Naming choice](#naming-choice) +- [Quick Start](#quick-start) +- [How it works](#how-it-works) + - [Content blocker](#1-content-blocker-will) + - [Queue cleaner](#2-queue-cleaner-will) + - [Download cleaner](#3-download-cleaner-will) +- [Setup](#setup-examples) +- [Usage](#usage) + - [Docker](#docker) + - [Environment Variables](#environment-variables) + - [Docker Compose](#docker-compose-example) + - [Windows](#windows) + - [Linux](#linux) + - [MacOS](#macos) +- [Credits](#credits) ## Naming choice @@ -52,10 +59,10 @@ I've seen a few discussions on this type of naming and I've decided that I didn' > Use the Unraid Community App. > > 3. **Manual Installation (if you're not using Docker)** -> More details [here](#binaries-if-youre-not-using-docker). +> Go to [Windows](#windows), [Linux](#linux) or [MacOS](#macos). > [!TIP] -> Refer to the [Environment variables](#Environment-variables) section for detailed configuration instructions and the [Setup](#Setup) section for an in-depth explanation of the cleanup process. +> Refer to the [Environment variables](#environment-variables) section for detailed configuration instructions and the [Setup examples](#setup-examples) section for an in-depth explanation of the cleanup process. > [!IMPORTANT] @@ -69,7 +76,7 @@ I've seen a few discussions on this type of naming and I've decided that I didn' # How it works -1. **Content blocker** will: +#### 1. **Content blocker** will: - Run every 5 minutes (or configured cron). - Process all items in the *arr queue. - Find the corresponding item from the download client for each queue item. @@ -80,7 +87,7 @@ I've seen a few discussions on this type of naming and I've decided that I didn' - It will be removed from the *arr's queue and blocked. - It will be deleted from the download client. - A new search will be triggered for the *arr item. -2. **Queue cleaner** will: +#### 2. **Queue cleaner** will: - Run every 5 minutes (or configured cron, or right after `content blocker`). - Process all items in the *arr queue. - Check each queue item if it is **stalled (download speed is 0)**, **stuck in metadata downloading** or **failed to be imported**. @@ -93,11 +100,11 @@ I've seen a few discussions on this type of naming and I've decided that I didn' - It will be removed from the *arr's queue and blocked. - It will be deleted from the download client. - A new search will be triggered for the *arr item. -3. **Download cleaner** will: +#### 3. **Download cleaner** will: - Run every hour (or configured cron). - Automatically clean up downloads that have been seeding for a certain amount of time. -# Setup +# Setup examples ## Using qBittorrent's built-in feature (works only with qBittorrent) @@ -129,7 +136,26 @@ I've seen a few discussions on this type of naming and I've decided that I didn' ## Usage -### Docker compose yaml +### Docker + + +### **Environment variables** + +**Jump to:** +- [General settings](variables.md#general-settings) +- [Queue Cleaner settings](variables.md#queue-cleaner-settings) +- [Content Blocker settings](variables.md#content-blocker-settings) +- [Download Cleaner settings](variables.md#download-cleaner-settings) +- [Download Client settings](variables.md#download-client-settings) +- [Arr settings](variables.md#arr-settings) +- [Notification settings](variables.md#notification-settings) +- [Advanced settings](variables.md#advanced-settings) + +### Docker compose example + +> [!NOTE] +> +> This example contains all settings and should be modified to fit your needs. ``` version: "3.3" @@ -232,28 +258,48 @@ services: - NOTIFIARR__CHANNEL_ID=discord_channel_id ``` -## Environment variables +### Windows -Jump to: -- [General settings](variables.md#general-settings) -- [Queue Cleaner settings](variables.md#queue-cleaner-settings) -- [Content Blocker settings](variables.md#content-blocker-settings) -- [Download Cleaner settings](variables.md#download-cleaner-settings) -- [Download Client settings](variables.md#download-client-settings) -- [Arr settings](variables.md#arr-settings) -- [Notification settings](variables.md#notification-settings) -- [Advanced settings](variables.md#advanced-settings) - -### Binaries (if you're not using Docker) - -1. Download the binaries from [releases](https://github.com/flmorg/cleanuperr/releases). -2. Extract them from the zip file. -3. Edit **appsettings.json**. The paths from this json file correspond with the docker env vars, as described [above](#environment-variables). +1. Download the zip file from [releases](https://github.com/flmorg/cleanuperr/releases). +2. Extract the zip file into `C:\example\directory`. +3. Edit **appsettings.json**. The paths from this json file correspond with the docker env vars, as described [here](#environment-variables). +4. Execute `cleanuperr.exe`. > [!TIP] > ### Run as a Windows Service > Check out this stackoverflow answer on how to do it: https://stackoverflow.com/a/15719678 +### Linux + +1. Download the zip file from [releases](https://github.com/flmorg/cleanuperr/releases). +2. Extract the zip file into `/example/directory`. +3. Edit **appsettings.json**. The paths from this json file correspond with the docker env vars, as described [here](#environment-variables). +4. Open a terminal and execute these commands: + ``` + cd /example/directory + chmod +x cleanuperr + ./cleanuperr + ``` + +### MacOS + +1. Download the zip file from [releases](https://github.com/flmorg/cleanuperr/releases). +2. Extract the zip file into `/example/directory`. +3. Edit **appsettings.json**. The paths from this json file correspond with the docker env vars, as described [here](#environment-variables). +4. Open a terminal and execute these commands: + ``` + cd /example/directory + chmod +x cleanuperr + ./cleanuperr + ``` + +> [!IMPORTANT] +> Some people have experienced problems when trying to execute cleanuperr on MacOS because the system actively blocked the file for not being signed. +> As per [this](), you may need to also execute this command: +> ``` +> codesign --sign - --force --preserve-metadata=entitlements,requirements,flags,runtime /example/directory/cleanuperr +> ``` + # Credits Special thanks for inspiration go to: - [ThijmenGThN/swaparr](https://github.com/ThijmenGThN/swaparr) @@ -265,4 +311,3 @@ Special thanks for inspiration go to: If I made your life just a tiny bit easier, consider buying me a coffee! Buy Me A Coffee - diff --git a/variables.md b/variables.md index 905aee1..e539035 100644 --- a/variables.md +++ b/variables.md @@ -1,52 +1,52 @@ ## Table of contents -- [General settings](variables.md#general-settings) -- [Queue Cleaner settings](variables.md#queue-cleaner-settings) -- [Content Blocker settings](variables.md#content-blocker-settings) -- [Download Cleaner settings](variables.md#download-cleaner-settings) -- [Download Client settings](variables.md#download-client-settings) -- [Arr settings](variables.md#arr-settings) -- [Notification settings](variables.md#notification-settings) -- [Advanced settings](variables.md#advanced-settings) +- [General settings](#general-settings) +- [Queue Cleaner settings](#queue-cleaner-settings) +- [Content Blocker settings](#content-blocker-settings) +- [Download Cleaner settings](#download-cleaner-settings) +- [Download Client settings](#download-client-settings) +- [Arr settings](#arr-settings) +- [Notification settings](#notification-settings) +- [Advanced settings](#advanced-settings) # ### General settings -**`TZ`** +#### **`TZ`** - The time zone to use. - Type: String. - Possible values: Any valid timezone. - Default: `UTC`. - Required: No. -**`DRY_RUN`** +#### **`DRY_RUN`** - When enabled, simulates irreversible operations (like deletions and notifications) without making actual changes. - Type: Boolean. - Possible values: `true`, `false`. - Default: `false`. - Required: No. -**`LOGGING__LOGLEVEL`** +#### **`LOGGING__LOGLEVEL`** - Controls the detail level of application logs. - Type: String. - Possible values: `Verbose`, `Debug`, `Information`, `Warning`, `Error`, `Fatal`. - Default: `Information`. - Required: No. -**`LOGGING__FILE__ENABLED`** +#### **`LOGGING__FILE__ENABLED`** - Enables logging to a file. - Type: Boolean. - Possible values: `true`, `false`. - Default: `false`. - Required: No. -**`LOGGING__FILE__PATH`** +#### **`LOGGING__FILE__PATH`** - Directory where log files will be saved. - Type: String. - Default: Empty. - Required: No. -**`LOGGING__ENHANCED`** +#### **`LOGGING__ENHANCED`** - Provides more detailed descriptions in logs whenever possible. - Type: Boolean. - Possible values: `true`, `false`. @@ -58,7 +58,7 @@ ### Queue Cleaner settings -**`TRIGGERS__QUEUECLEANER`** +#### **`TRIGGERS__QUEUECLEANER`** - Cron schedule for the queue cleaner job. - Type: String - [Quartz cron format](https://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html). - Default: `0 0/5 * * * ?` (every 5 minutes). @@ -66,9 +66,9 @@ > [!NOTE] > - Maximum interval is 6 hours. -> - Ignored if `QUEUECLEANER__RUNSEQUENTIALLY=true` and `CONTENTBLOCKER__ENABLED=true`. +> - Is ignored if `QUEUECLEANER__RUNSEQUENTIALLY=true` and `CONTENTBLOCKER__ENABLED=true`. -**`QUEUECLEANER__ENABLED`** +#### **`QUEUECLEANER__ENABLED`** - Enables or disables the queue cleaning functionality. - When enabled, processes all items in the *arr queue. - Type: Boolean @@ -76,7 +76,7 @@ - Default: `true` - Required: No. -**`QUEUECLEANER__IGNORED_DOWNLOADS_PATH`** +#### **`QUEUECLEANER__IGNORED_DOWNLOADS_PATH`** - Local path to the file containing ignored downloads. - If the contents of the file are changed, they will be reloaded on the next job run. - Accepted values: @@ -101,7 +101,7 @@ >[!IMPORTANT] > Some people have experienced problems using Docker where the mounted file would not update inside the container if it was modified on the host. This is a Docker configuration problem and can not be solved by cleanuperr. -**`QUEUECLEANER__RUNSEQUENTIALLY`** +#### **`QUEUECLEANER__RUNSEQUENTIALLY`** - Controls whether queue cleaner runs after content blocker instead of in parallel. - When `true`, streamlines the cleaning process by running immediately after content blocker. - Type: Boolean @@ -109,23 +109,24 @@ - Default: `true` - Required: No. -**`QUEUECLEANER__IMPORT_FAILED_MAX_STRIKES`** +#### **`QUEUECLEANER__IMPORT_FAILED_MAX_STRIKES`** - Number of strikes before removing a failed import. - Set to `0` to never remove failed imports. -- A strike is given when an item is stalled, stuck in metadata downloading, or failed to be imported. +- A strike is given when an item fails to be imported. - Type: Integer -- Possible values: `0` or a number greater than `2`. - Default: `0` - Required: No. +> [!NOTE] +> If not set to `0`, the minimum value is `3`. -**`QUEUECLEANER__IMPORT_FAILED_IGNORE_PRIVATE`** +#### **`QUEUECLEANER__IMPORT_FAILED_IGNORE_PRIVATE`** - Controls whether to ignore failed imports from private trackers. - Type: Boolean - Possible values: `true`, `false` - Default: `false` - Required: No. -**`QUEUECLEANER__IMPORT_FAILED_DELETE_PRIVATE`** +#### **`QUEUECLEANER__IMPORT_FAILED_DELETE_PRIVATE`** - Controls whether to delete failed imports from private trackers from the download client. - Has no effect if `QUEUECLEANER__IMPORT_FAILED_IGNORE_PRIVATE` is `true`. - Type: Boolean @@ -136,42 +137,43 @@ > [!WARNING] > Setting `QUEUECLEANER__IMPORT_FAILED_DELETE_PRIVATE=true` means you don't care about seeding, ratio, H&R and potentially losing your tracker account. -**`QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS`** +#### **`QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS`** - Patterns to look for in failed import messages that should be ignored. - Multiple patterns can be specified using incrementing numbers starting from 0. - Type: String array - Default: Empty. - Required: No. - Example: -```yaml -QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__0: "title mismatch" -QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__1: "manual import required" -``` + ```yaml + QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__0: "title mismatch" + QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__1: "manual import required" + ``` -**`QUEUECLEANER__STALLED_MAX_STRIKES`** +#### **`QUEUECLEANER__STALLED_MAX_STRIKES`** - Number of strikes before removing a stalled download. - Set to `0` to never remove stalled downloads. -- A strike is given when download speed is 0. +- A strike is given when an item is stalled (not downloading) or stuck while downloading metadata. - Type: Integer -- Possible values: `0` or a number greater than `2`. - Default: `0` - Required: No. +> [!NOTE] +> If not set to `0`, the minimum value is `3`. -**`QUEUECLEANER__STALLED_RESET_STRIKES_ON_PROGRESS`** +#### **`QUEUECLEANER__STALLED_RESET_STRIKES_ON_PROGRESS`** - Controls whether to remove strikes if any download progress was made since last checked. - Type: Boolean - Possible values: `true`, `false` - Default: `false` - Required: No. -**`QUEUECLEANER__STALLED_IGNORE_PRIVATE`** +#### **`QUEUECLEANER__STALLED_IGNORE_PRIVATE`** - Controls whether to ignore stalled downloads from private trackers. - Type: Boolean - Possible values: `true`, `false` - Default: `false` - Required: No. -**`QUEUECLEANER__STALLED_DELETE_PRIVATE`** +#### **`QUEUECLEANER__STALLED_DELETE_PRIVATE`** - Controls whether to delete stalled private downloads from the download client. - Has no effect if `QUEUECLEANER__STALLED_IGNORE_PRIVATE` is `true`. - Type: Boolean @@ -186,7 +188,7 @@ QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__1: "manual import required" ### Content Blocker settings -**`TRIGGERS__CONTENTBLOCKER`** +#### **`TRIGGERS__CONTENTBLOCKER`** - Cron schedule for the content blocker job. - Type: String - [Quartz cron format](https://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html). - Default: `0 0/5 * * * ?` (every 5 minutes). @@ -195,7 +197,7 @@ QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__1: "manual import required" > [!NOTE] > - Maximum interval is 6 hours. -**`CONTENTBLOCKER__ENABLED`** +#### **`CONTENTBLOCKER__ENABLED`** - Enables or disables the content blocker functionality. - When enabled, processes all items in the *arr queue and marks unwanted files. - Type: Boolean @@ -203,7 +205,7 @@ QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__1: "manual import required" - Default: `false` - Required: No. -**`CONTENTBLOCKER__IGNORED_DOWNLOADS_PATH`** +#### **`CONTENTBLOCKER__IGNORED_DOWNLOADS_PATH`** - Local path to the file containing ignored downloads. - If the contents of the file are changed, they will be reloaded on the next job run. - Accepted values: @@ -228,14 +230,14 @@ QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__1: "manual import required" >[!IMPORTANT] > Some people have experienced problems using Docker where the mounted file would not update inside the container if it was modified on the host. This is a Docker configuration problem and can not be solved by cleanuperr. -**`CONTENTBLOCKER__IGNORE_PRIVATE`** +#### **`CONTENTBLOCKER__IGNORE_PRIVATE`** - Controls whether to ignore downloads from private trackers. - Type: Boolean - Possible values: `true`, `false` - Default: `false` - Required: No. -**`CONTENTBLOCKER__DELETE_PRIVATE`** +#### **`CONTENTBLOCKER__DELETE_PRIVATE`** - Controls whether to delete private downloads that have all files blocked from the download client. - Has no effect if `CONTENTBLOCKER__IGNORE_PRIVATE` is `true`. - Type: Boolean @@ -250,7 +252,7 @@ QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__1: "manual import required" ### Download Cleaner settings -**`TRIGGERS__DOWNLOADCLEANER`** +#### **`TRIGGERS__DOWNLOADCLEANER`** - Cron schedule for the download cleaner job. - Type: String - [Quartz cron format](https://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html). - Default: `0 0 * * * ?` (every hour). @@ -259,7 +261,7 @@ QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__1: "manual import required" > [!NOTE] > - Maximum interval is 6 hours. -**`DOWNLOADCLEANER__ENABLED`** +#### **`DOWNLOADCLEANER__ENABLED`** - Enables or disables the download cleaner functionality. - When enabled, automatically cleans up downloads that have been seeding for a certain amount of time. - Type: Boolean. @@ -267,7 +269,7 @@ QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__1: "manual import required" - Default: `false` - Required: No. -**`DOWNLOADCLEANER__IGNORED_DOWNLOADS_PATH`** +#### **`DOWNLOADCLEANER__IGNORED_DOWNLOADS_PATH`** - Local path to the file containing ignored downloads. - If the contents of the file are changed, they will be reloaded on the next job run. - Accepted values: @@ -292,7 +294,7 @@ QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__1: "manual import required" >[!IMPORTANT] > Some people have experienced problems using Docker where the mounted file would not update inside the container if it was modified on the host. This is a Docker configuration problem and can not be solved by cleanuperr. -**`DOWNLOADCLEANER__DELETE_PRIVATE`** +#### **`DOWNLOADCLEANER__DELETE_PRIVATE`** - Controls whether to delete private downloads. - Type: Boolean. - Possible values: `true`, `false` @@ -302,7 +304,7 @@ QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__1: "manual import required" > [!WARNING] > Setting `DOWNLOADCLEANER__DELETE_PRIVATE=true` means you don't care about seeding, ratio, H&R and potentially losing your tracker account. -**`DOWNLOADCLEANER__CATEGORIES__0__NAME`** +#### **`DOWNLOADCLEANER__CATEGORIES__0__NAME`** - Name of the category to clean. - Type: String. - Default: Empty. @@ -310,18 +312,21 @@ QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__1: "manual import required" > [!NOTE] > The category name must match the category that was set in the *arr. +> > For qBittorrent, the category name is the name of the download category. +> > For Deluge, the category name is the name of the label. +> > For Transmission, the category name is the last directory from the save location. -**`DOWNLOADCLEANER__CATEGORIES__0__MAX_RATIO`** +#### **`DOWNLOADCLEANER__CATEGORIES__0__MAX_RATIO`** - Maximum ratio to reach before removing a download. - Type: Decimal. - Possible values: `-1` or greater (`-1` means no limit or disabled). - Default: `-1` - Required: No. -**`DOWNLOADCLEANER__CATEGORIES__0__MIN_SEED_TIME`** +#### **`DOWNLOADCLEANER__CATEGORIES__0__MIN_SEED_TIME`** - Minimum number of hours to seed before removing a download, if the ratio has been met. - Used with `MAX_RATIO` to ensure a minimum seed time. - Type: Decimal. @@ -329,7 +334,7 @@ QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__1: "manual import required" - Default: `0` - Required: No. -**`DOWNLOADCLEANER__CATEGORIES__0__MAX_SEED_TIME`** +#### **`DOWNLOADCLEANER__CATEGORIES__0__MAX_SEED_TIME`** - Maximum number of hours to seed before removing a download. - Type: Decimal. - Possible values: `-1` or greater (`-1` means no limit or disabled). @@ -352,7 +357,7 @@ QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__1: "manual import required" ### Download Client settings -**`DOWNLOAD_CLIENT`** +#### **`DOWNLOAD_CLIENT`** - Specifies which download client is used by *arrs. - Type: String. - Possible values: `none`, `qbittorrent`, `deluge`, `transmission`. @@ -362,49 +367,49 @@ QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__1: "manual import required" > [!NOTE] > Only one download client can be enabled at a time. If you have more than one download client, you should deploy multiple instances of cleanuperr. -**`QBITTORRENT__URL`** +#### **`QBITTORRENT__URL`** - URL of the qBittorrent instance. - Type: String. - Default: `http://localhost:8080`. - Required: No. -**`QBITTORRENT__USERNAME`** +#### **`QBITTORRENT__USERNAME`** - Username for qBittorrent authentication. - Type: String. - Default: Empty. - Required: No. -**`QBITTORRENT__PASSWORD`** +#### **`QBITTORRENT__PASSWORD`** - Password for qBittorrent authentication. - Type: String. - Default: Empty. - Required: No. -**`DELUGE__URL`** +#### **`DELUGE__URL`** - URL of the Deluge instance. - Type: String. - Default: `http://localhost:8112`. - Required: No. -**`DELUGE__PASSWORD`** +#### **`DELUGE__PASSWORD`** - Password for Deluge authentication. - Type: String. - Default: Empty. - Required: No. -**`TRANSMISSION__URL`** +#### **`TRANSMISSION__URL`** - URL of the Transmission instance. - Type: String. - Default: `http://localhost:9091`. - Required: No. -**`TRANSMISSION__USERNAME`** +#### **`TRANSMISSION__USERNAME`** - Username for Transmission authentication. - Type: String. - Default: Empty. - Required: No. -**`TRANSMISSION__PASSWORD`** +#### **`TRANSMISSION__PASSWORD`** - Password for Transmission authentication. - Type: String. - Default: Empty. @@ -414,112 +419,6 @@ QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__1: "manual import required" ### Arr settings -**`SONARR__ENABLED`** -- Enables or disables Sonarr cleanup. -- Type: Boolean -- Possible values: `true`, `false` -- Default: `false` -- Required: No. - -**`SONARR__BLOCK__TYPE`** -- Determines how file blocking works for Sonarr. -- Type: String -- Possible values: `blacklist`, `whitelist` -- Default: `blacklist` -- Required: No. - -**`SONARR__BLOCK__PATH`** -- Path to the blocklist file (local file or URL). -- Must be JSON compatible. -- Type: String -- Default: Empty. -- Required: No. - -**`SONARR__SEARCHTYPE`** -- Determines what to search for after removing a queue item. -- Type: String -- Possible values: `Episode`, `Season`, `Series` -- Default: `Episode` -- Required: No. - -**`SONARR__INSTANCES__0__URL`** -- URL of the Sonarr instance. -- Type: String -- Default: `http://localhost:8989` -- Required: No. - -**`SONARR__INSTANCES__0__APIKEY`** -- API key for the Sonarr instance. -- Type: String -- Default: Empty. -- Required: No. - -**`RADARR__ENABLED`** -- Enables or disables Radarr cleanup. -- Type: Boolean -- Possible values: `true`, `false` -- Default: `false` -- Required: No. - -**`RADARR__BLOCK__TYPE`** -- Determines how file blocking works for Radarr. -- Type: String -- Possible values: `blacklist`, `whitelist` -- Default: `blacklist` -- Required: No. - -**`RADARR__BLOCK__PATH`** -- Path to the blocklist file (local file or URL). -- Must be JSON compatible. -- Type: String -- Default: Empty. -- Required: No. - -**`RADARR__INSTANCES__0__URL`** -- URL of the Radarr instance. -- Type: String -- Default: `http://localhost:7878` -- Required: No. - -**`RADARR__INSTANCES__0__APIKEY`** -- API key for the Radarr instance. -- Type: String -- Default: Empty. -- Required: No. - -**`LIDARR__ENABLED`** -- Enables or disables Lidarr cleanup. -- Type: Boolean -- Possible values: `true`, `false` -- Default: `false` -- Required: No. - -**`LIDARR__BLOCK__TYPE`** -- Determines how file blocking works for Lidarr. -- Type: String -- Possible values: `blacklist`, `whitelist` -- Default: `blacklist` -- Required: No. - -**`LIDARR__BLOCK__PATH`** -- Path to the blocklist file (local file or URL). -- Must be JSON compatible. -- Type: String -- Default: Empty. -- Required: No. - -**`LIDARR__INSTANCES__0__URL`** -- URL of the Lidarr instance. -- Type: String -- Default: `http://localhost:8686` -- Required: No. - -**`LIDARR__INSTANCES__0__APIKEY`** -- API key for the Lidarr instance. -- Type: String -- Default: Empty. -- Required: No. - > [!NOTE] > Multiple instances can be specified for each *arr using this format, where `` starts from 0: > ```yaml @@ -527,8 +426,29 @@ QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__1: "manual import required" > __INSTANCES____APIKEY > ``` +#### **`SONARR__ENABLED`** +- Enables or disables Sonarr cleanup. +- Type: Boolean +- Possible values: `true`, `false` +- Default: `false` +- Required: No. + +#### **`SONARR__BLOCK__TYPE`** +- Determines how file blocking works for Sonarr. +- Type: String +- Possible values: `blacklist`, `whitelist` +- Default: `blacklist` +- Required: No. + +#### **`SONARR__BLOCK__PATH`** +- Path to the blocklist file (local file or URL). +- Must be JSON compatible. +- Type: String +- Default: Empty. +- Required: No. + > [!NOTE] -> The blocklists (blacklist/whitelist) support the following patterns: +> The blocklists support the following patterns: > ``` > *example // file name ends with "example" > example* // file name starts with "example" @@ -538,47 +458,155 @@ QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__1: "manual import required" > ``` > [!NOTE] -> [This blacklist](https://raw.githubusercontent.com/flmorg/cleanuperr/refs/heads/main/blacklist) and [this whitelist](https://raw.githubusercontent.com/flmorg/cleanuperr/refs/heads/main/whitelist) can be used for Sonarr and Radarr, but they are not suitable for other *arrs. +> [This blacklist](https://raw.githubusercontent.com/flmorg/cleanuperr/refs/heads/main/blacklist), [this permissive blacklist](https://raw.githubusercontent.com/flmorg/cleanuperr/refs/heads/main/blacklist_permissive) and [this whitelist](https://raw.githubusercontent.com/flmorg/cleanuperr/refs/heads/main/whitelist) can be used for Sonarr and Radarr. + +#### **`SONARR__SEARCHTYPE`** +- Determines what to search for after removing a queue item. +- Type: String +- Possible values: `Episode`, `Season`, `Series` +- Default: `Episode` +- Required: No. + +#### **`SONARR__INSTANCES__0__URL`** +- URL of the Sonarr instance. +- Type: String +- Default: `http://localhost:8989` +- Required: No. + +#### **`SONARR__INSTANCES__0__APIKEY`** +- API key for the Sonarr instance. +- Type: String +- Default: Empty. +- Required: No. + +#### **`RADARR__ENABLED`** +- Enables or disables Radarr cleanup. +- Type: Boolean +- Possible values: `true`, `false` +- Default: `false` +- Required: No. + +#### **`RADARR__BLOCK__TYPE`** +- Determines how file blocking works for Radarr. +- Type: String +- Possible values: `blacklist`, `whitelist` +- Default: `blacklist` +- Required: No. + +#### **`RADARR__BLOCK__PATH`** +- Path to the blocklist file (local file or URL). +- Must be JSON compatible. +- Type: String +- Default: Empty. +- Required: No. + +> [!NOTE] +> The blocklists support the following patterns: +> ``` +> *example // file name ends with "example" +> example* // file name starts with "example" +> *example* // file name has "example" in the name +> example // file name is exactly the word "example" +> regex: // regex that needs to be marked at the start of the line with "regex:" +> ``` + +> [!NOTE] +> [This blacklist](https://raw.githubusercontent.com/flmorg/cleanuperr/refs/heads/main/blacklist), [this permissive blacklist](https://raw.githubusercontent.com/flmorg/cleanuperr/refs/heads/main/blacklist_permissive) and [this whitelist](https://raw.githubusercontent.com/flmorg/cleanuperr/refs/heads/main/whitelist) can be used for Sonarr and Radarr. + +#### **`RADARR__INSTANCES__0__URL`** +- URL of the Radarr instance. +- Type: String +- Default: `http://localhost:7878` +- Required: No. + +#### **`RADARR__INSTANCES__0__APIKEY`** +- API key for the Radarr instance. +- Type: String +- Default: Empty. +- Required: No. + +#### **`LIDARR__ENABLED`** +- Enables or disables Lidarr cleanup. +- Type: Boolean +- Possible values: `true`, `false` +- Default: `false` +- Required: No. + +#### **`LIDARR__BLOCK__TYPE`** +- Determines how file blocking works for Lidarr. +- Type: String +- Possible values: `blacklist`, `whitelist` +- Default: `blacklist` +- Required: No. + +#### **`LIDARR__BLOCK__PATH`** +- Path to the blocklist file (local file or URL). +- Must be JSON compatible. +- Type: String +- Default: Empty. +- Required: No. + +> [!NOTE] +> The blocklists support the following patterns: +> ``` +> *example // file name ends with "example" +> example* // file name starts with "example" +> *example* // file name has "example" in the name +> example // file name is exactly the word "example" +> regex: // regex that needs to be marked at the start of the line with "regex:" +> ``` + +#### **`LIDARR__INSTANCES__0__URL`** +- URL of the Lidarr instance. +- Type: String +- Default: `http://localhost:8686` +- Required: No. + +#### **`LIDARR__INSTANCES__0__APIKEY`** +- API key for the Lidarr instance. +- Type: String +- Default: Empty. +- Required: No. # ### Notification settings -**`NOTIFIARR__API_KEY`** +#### **`NOTIFIARR__API_KEY`** - Notifiarr API key for sending notifications. - Requires Notifiarr's [`Passthrough`](https://notifiarr.wiki/en/Website/Integrations/Passthrough) integration to work. - Type: String - Default: Empty. - Required: No. -**`NOTIFIARR__CHANNEL_ID`** +#### **`NOTIFIARR__CHANNEL_ID`** - Discord channel ID where notifications will be sent. - Type: String - Default: Empty. - Required: No. -**`NOTIFIARR__ON_IMPORT_FAILED_STRIKE`** +#### **`NOTIFIARR__ON_IMPORT_FAILED_STRIKE`** - Controls whether to notify when an item receives a failed import strike. - Type: Boolean - Possible values: `true`, `false` - Default: `false` - Required: No. -**`NOTIFIARR__ON_STALLED_STRIKE`** +#### **`NOTIFIARR__ON_STALLED_STRIKE`** - Controls whether to notify when an item receives a stalled download strike. - Type: Boolean - Possible values: `true`, `false` - Default: `false` - Required: No. -**`NOTIFIARR__ON_QUEUE_ITEM_DELETED`** +#### **`NOTIFIARR__ON_QUEUE_ITEM_DELETED`** - Controls whether to notify when a queue item is deleted. - Type: Boolean - Possible values: `true`, `false` - Default: `false` - Required: No. -**`NOTIFIARR__ON_DOWNLOAD_CLEANED`** +#### **`NOTIFIARR__ON_DOWNLOAD_CLEANED`** - Controls whether to notify when a download is cleaned. - Type: Boolean - Possible values: `true`, `false` @@ -589,7 +617,7 @@ QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__1: "manual import required" ### Advanced settings -**`HTTP_MAX_RETRIES`** +#### **`HTTP_MAX_RETRIES`** - The number of times to retry a failed HTTP call. - Applies to calls to *arrs, download clients, and other services. - Type: Integer @@ -597,10 +625,10 @@ QUEUECLEANER__IMPORT_FAILED_IGNORE_PATTERNS__1: "manual import required" - Default: `0` - Required: No. -**`HTTP_TIMEOUT`** +#### **`HTTP_TIMEOUT`** - The number of seconds to wait before failing an HTTP call. - Applies to calls to *arrs, download clients, and other services. - Type: Integer -- Possible values: Greater than `0` +- Possible values: Greater than `0`. - Default: `100` - Required: No. \ No newline at end of file