ManiMatter / decluttarr

Watches radarr, sonarr, lidarr, readarr and whisparr download queues and removes downloads if they become stalled or no longer needed.
GNU General Public License v3.0
292 stars 27 forks source link

[Feature request] Ignore certain download clients #196

Open Jorman opened 3 days ago

Jorman commented 3 days ago

Hi, I have recently discovered this project and I must say I like the idea of adding some automations for my favorite *Arr! I'm still dry-run testing it so I get a clear idea of how to configure the program.

On that note, I would like to take this opportunity to ask for some advice/advice. I also installed emulerr, which just extends our *Arr search to the eD2K network and I must say it works well, I exploit it especially for those old contents that tend to disappear quickly from the torrent network, to do this just add a download client and an indexer, the download client to be specified for the configuration is qBittorrent and that's why these questions arise. Would it be possible to have an option to exclude one or more Download Clients? Because decluttarr also sees emulerr downloads correctly (I guess because it sees them in the queue), but it happens on the eD2K network that downloads are slow and often the peers come and go, I have there downloads stopped for days but I know there are full sources, just need patience. Alternatively, could one otherwise filter out any categories they belong to?

What are your thoughts on this?

ManiMatter commented 2 days ago

Great idea. I dont use emule. If i code it, would you be willing to test iteratively and give feedback?

to start with, can you provide me with the /queue response of your *arr, so that I get an idea what yi could use as a filter parameter please?

Jorman commented 2 days ago

Hi, thanks for the response. Of course I can actively test, maybe I need some help on what kind of data you need and how to extract it. I use Emule very little myself and in fact I don't use it alone but as an "extension" for Arr, because Arr only handle nzb and torrent, the third protocol is convenient and I am also looking for ways to implement DC++ network, but I don't want to digress.

Obviously I don't have full knowledge of your program, so maybe what I'm about to say is stupid. I thought just get the list of Download Clients from the *Arr GET /api/v3/downloadclient and then ignore the Clients in the list, with an option like IGNORE_STALLED_QBIT_CLIENTS=["Client name 1", "Client name 2"] and IGNORE_SLOW_QBIT_CLIENTS=["Client name 1", "Client name 2"]. Maybe you came up with an even different idea, though.

How can I help you get the information you are looking for? If I activate a TRACE or DEBUG log, might there be useful information for you?

ManiMatter commented 2 days ago

What response do you get from /api/v3/downloadclient please?

Jorman commented 2 days ago
curl -X 'GET' \
  'http://10.0.0.100:7878/api/v3/downloadclient' \
  -H 'accept: application/json' \
  -H 'X-Api-Key: ***'
[
  {
    "enable": true,
    "protocol": "torrent",
    "priority": 50,
    "removeCompletedDownloads": true,
    "removeFailedDownloads": true,
    "name": "emulerr",
    "fields": [
      {
        "order": 0,
        "name": "host",
        "label": "Host",
        "value": "10.0.0.100",
        "type": "textbox",
        "advanced": false,
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 1,
        "name": "port",
        "label": "Port",
        "value": 3000,
        "type": "textbox",
        "advanced": false,
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 2,
        "name": "useSsl",
        "label": "Use SSL",
        "helpText": "Use a secure connection. See Options -> Web UI -> 'Use HTTPS instead of HTTP' in qBittorrent.",
        "value": false,
        "type": "checkbox",
        "advanced": false,
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 3,
        "name": "urlBase",
        "label": "URL Base",
        "helpText": "Adds a prefix to the qBittorrent url, such as http://[host]:[port]/[urlBase]/api",
        "type": "textbox",
        "advanced": true,
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 4,
        "name": "username",
        "label": "Username",
        "value": "root",
        "type": "textbox",
        "advanced": false,
        "privacy": "userName",
        "isFloat": false
      },
      {
        "order": 5,
        "name": "password",
        "label": "Password",
        "value": "********",
        "type": "password",
        "advanced": false,
        "privacy": "password",
        "isFloat": false
      },
      {
        "order": 6,
        "name": "movieCategory",
        "label": "Category",
        "helpText": "Adding a category specific to Radarr avoids conflicts with unrelated non-Radarr downloads. Using a category is optional, but strongly recommended.",
        "value": "radarr-eMulerr",
        "type": "textbox",
        "advanced": false,
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 7,
        "name": "movieImportedCategory",
        "label": "Post-Import Category",
        "helpText": "Category for Radarr to set after it has imported the download. Radarr will not remove torrents in that category even if seeding finished. Leave blank to keep same category.",
        "value": "",
        "type": "textbox",
        "advanced": true,
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 8,
        "name": "recentMoviePriority",
        "label": "Recent Priority",
        "helpText": "Priority to use when grabbing movies that aired within the last 21 days",
        "value": 0,
        "type": "select",
        "advanced": false,
        "selectOptions": [
          {
            "value": 0,
            "name": "Last",
            "order": 0,
            "dividerAfter": false
          },
          {
            "value": 1,
            "name": "First",
            "order": 1,
            "dividerAfter": false
          }
        ],
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 9,
        "name": "olderMoviePriority",
        "label": "Older Priority",
        "helpText": "Priority to use when grabbing movies that aired over 21 days ago",
        "value": 0,
        "type": "select",
        "advanced": false,
        "selectOptions": [
          {
            "value": 0,
            "name": "Last",
            "order": 0,
            "dividerAfter": false
          },
          {
            "value": 1,
            "name": "First",
            "order": 1,
            "dividerAfter": false
          }
        ],
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 10,
        "name": "initialState",
        "label": "Initial State",
        "helpText": "Initial state for torrents added to qBittorrent. Note that Forced Torrents do not abide by seed restrictions",
        "value": 0,
        "type": "select",
        "advanced": false,
        "selectOptions": [
          {
            "value": 0,
            "name": "Started",
            "order": 7,
            "hint": "(0)",
            "dividerAfter": false
          },
          {
            "value": 1,
            "name": "Force Started",
            "order": 10,
            "hint": "(1)",
            "dividerAfter": false
          },
          {
            "value": 2,
            "name": "Stopped",
            "order": 13,
            "hint": "(2)",
            "dividerAfter": false
          }
        ],
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 11,
        "name": "sequentialOrder",
        "label": "Sequential Order",
        "helpText": "Download in sequential order (qBittorrent 4.1.0+)",
        "value": false,
        "type": "checkbox",
        "advanced": false,
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 12,
        "name": "firstAndLast",
        "label": "First and Last First",
        "helpText": "Download first and last pieces first (qBittorrent 4.1.0+)",
        "value": false,
        "type": "checkbox",
        "advanced": false,
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 13,
        "name": "contentLayout",
        "label": "Content Layout",
        "helpText": "Whether to use qBittorrent's configured content layout, the original layout from the torrent or always create a subfolder (qBittorrent 4.3.2+)",
        "value": 0,
        "type": "select",
        "advanced": false,
        "selectOptions": [
          {
            "value": 0,
            "name": "Default",
            "order": 0,
            "dividerAfter": false
          },
          {
            "value": 1,
            "name": "Original",
            "order": 1,
            "dividerAfter": false
          },
          {
            "value": 2,
            "name": "Subfolder",
            "order": 2,
            "dividerAfter": false
          }
        ],
        "privacy": "normal",
        "isFloat": false
      }
    ],
    "implementationName": "qBittorrent",
    "implementation": "QBittorrent",
    "configContract": "QBittorrentSettings",
    "infoLink": "https://wiki.servarr.com/radarr/supported#qbittorrent",
    "tags": [],
    "id": 4
  },
  {
    "enable": false,
    "protocol": "usenet",
    "priority": 1,
    "removeCompletedDownloads": true,
    "removeFailedDownloads": true,
    "name": "NZBGet",
    "fields": [
      {
        "order": 0,
        "name": "host",
        "label": "Host",
        "value": "10.0.0.100",
        "type": "textbox",
        "advanced": false,
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 1,
        "name": "port",
        "label": "Port",
        "value": 6789,
        "type": "textbox",
        "advanced": false,
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 2,
        "name": "useSsl",
        "label": "Use SSL",
        "helpText": "Use secure connection when connection to NZBGet",
        "value": false,
        "type": "checkbox",
        "advanced": false,
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 3,
        "name": "urlBase",
        "label": "URL Base",
        "helpText": "Adds a prefix to the NZBGet url, such as http://[host]:[port]/[urlBase]/jsonrpc",
        "type": "textbox",
        "advanced": true,
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 4,
        "name": "username",
        "label": "Username",
        "value": "nzbget",
        "type": "textbox",
        "advanced": false,
        "privacy": "userName",
        "isFloat": false
      },
      {
        "order": 5,
        "name": "password",
        "label": "Password",
        "value": "********",
        "type": "password",
        "advanced": false,
        "privacy": "password",
        "isFloat": false
      },
      {
        "order": 6,
        "name": "movieCategory",
        "label": "Category",
        "helpText": "Adding a category specific to Radarr avoids conflicts with unrelated non-Radarr downloads. Using a category is optional, but strongly recommended.",
        "value": "Movies",
        "type": "textbox",
        "advanced": false,
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 7,
        "name": "recentMoviePriority",
        "label": "Recent Priority",
        "helpText": "Priority to use when grabbing movies that aired within the last 21 days",
        "value": 0,
        "type": "select",
        "advanced": false,
        "selectOptions": [
          {
            "value": -100,
            "name": "VeryLow",
            "order": -100,
            "dividerAfter": false
          },
          {
            "value": -50,
            "name": "Low",
            "order": -50,
            "dividerAfter": false
          },
          {
            "value": 0,
            "name": "Normal",
            "order": 0,
            "dividerAfter": false
          },
          {
            "value": 50,
            "name": "High",
            "order": 50,
            "dividerAfter": false
          },
          {
            "value": 100,
            "name": "VeryHigh",
            "order": 100,
            "dividerAfter": false
          },
          {
            "value": 900,
            "name": "Force",
            "order": 900,
            "dividerAfter": false
          }
        ],
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 8,
        "name": "olderMoviePriority",
        "label": "Older Priority",
        "helpText": "Priority to use when grabbing movies that aired over 21 days ago",
        "value": 0,
        "type": "select",
        "advanced": false,
        "selectOptions": [
          {
            "value": -100,
            "name": "VeryLow",
            "order": -100,
            "dividerAfter": false
          },
          {
            "value": -50,
            "name": "Low",
            "order": -50,
            "dividerAfter": false
          },
          {
            "value": 0,
            "name": "Normal",
            "order": 0,
            "dividerAfter": false
          },
          {
            "value": 50,
            "name": "High",
            "order": 50,
            "dividerAfter": false
          },
          {
            "value": 100,
            "name": "VeryHigh",
            "order": 100,
            "dividerAfter": false
          },
          {
            "value": 900,
            "name": "Force",
            "order": 900,
            "dividerAfter": false
          }
        ],
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 9,
        "name": "addPaused",
        "label": "Add Paused",
        "helpText": "This option requires at least NzbGet version 16.0",
        "value": false,
        "type": "checkbox",
        "advanced": false,
        "privacy": "normal",
        "isFloat": false
      }
    ],
    "implementationName": "NZBGet",
    "implementation": "Nzbget",
    "configContract": "NzbgetSettings",
    "infoLink": "https://wiki.servarr.com/radarr/supported#nzbget",
    "tags": [],
    "id": 3
  },
  {
    "enable": true,
    "protocol": "torrent",
    "priority": 1,
    "removeCompletedDownloads": false,
    "removeFailedDownloads": true,
    "name": "qBittorrent",
    "fields": [
      {
        "order": 0,
        "name": "host",
        "label": "Host",
        "value": "10.0.0.100",
        "type": "textbox",
        "advanced": false,
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 1,
        "name": "port",
        "label": "Port",
        "value": 8081,
        "type": "textbox",
        "advanced": false,
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 2,
        "name": "useSsl",
        "label": "Use SSL",
        "helpText": "Use a secure connection. See Options -> Web UI -> 'Use HTTPS instead of HTTP' in qBittorrent.",
        "value": false,
        "type": "checkbox",
        "advanced": false,
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 3,
        "name": "urlBase",
        "label": "URL Base",
        "helpText": "Adds a prefix to the qBittorrent url, such as http://[host]:[port]/[urlBase]/api",
        "type": "textbox",
        "advanced": true,
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 4,
        "name": "username",
        "label": "Username",
        "value": "admin",
        "type": "textbox",
        "advanced": false,
        "privacy": "userName",
        "isFloat": false
      },
      {
        "order": 5,
        "name": "password",
        "label": "Password",
        "value": "********",
        "type": "password",
        "advanced": false,
        "privacy": "password",
        "isFloat": false
      },
      {
        "order": 6,
        "name": "movieCategory",
        "label": "Category",
        "helpText": "Adding a category specific to Radarr avoids conflicts with unrelated non-Radarr downloads. Using a category is optional, but strongly recommended.",
        "value": "Film",
        "type": "textbox",
        "advanced": false,
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 7,
        "name": "movieImportedCategory",
        "label": "Post-Import Category",
        "helpText": "Category for Radarr to set after it has imported the download. Radarr will not remove torrents in that category even if seeding finished. Leave blank to keep same category.",
        "type": "textbox",
        "advanced": true,
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 8,
        "name": "recentMoviePriority",
        "label": "Recent Priority",
        "helpText": "Priority to use when grabbing movies that aired within the last 21 days",
        "value": 0,
        "type": "select",
        "advanced": false,
        "selectOptions": [
          {
            "value": 0,
            "name": "Last",
            "order": 0,
            "dividerAfter": false
          },
          {
            "value": 1,
            "name": "First",
            "order": 1,
            "dividerAfter": false
          }
        ],
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 9,
        "name": "olderMoviePriority",
        "label": "Older Priority",
        "helpText": "Priority to use when grabbing movies that aired over 21 days ago",
        "value": 0,
        "type": "select",
        "advanced": false,
        "selectOptions": [
          {
            "value": 0,
            "name": "Last",
            "order": 0,
            "dividerAfter": false
          },
          {
            "value": 1,
            "name": "First",
            "order": 1,
            "dividerAfter": false
          }
        ],
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 10,
        "name": "initialState",
        "label": "Initial State",
        "helpText": "Initial state for torrents added to qBittorrent. Note that Forced Torrents do not abide by seed restrictions",
        "value": 0,
        "type": "select",
        "advanced": false,
        "selectOptions": [
          {
            "value": 0,
            "name": "Started",
            "order": 7,
            "hint": "(0)",
            "dividerAfter": false
          },
          {
            "value": 1,
            "name": "Force Started",
            "order": 10,
            "hint": "(1)",
            "dividerAfter": false
          },
          {
            "value": 2,
            "name": "Stopped",
            "order": 13,
            "hint": "(2)",
            "dividerAfter": false
          }
        ],
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 11,
        "name": "sequentialOrder",
        "label": "Sequential Order",
        "helpText": "Download in sequential order (qBittorrent 4.1.0+)",
        "value": false,
        "type": "checkbox",
        "advanced": false,
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 12,
        "name": "firstAndLast",
        "label": "First and Last First",
        "helpText": "Download first and last pieces first (qBittorrent 4.1.0+)",
        "value": false,
        "type": "checkbox",
        "advanced": false,
        "privacy": "normal",
        "isFloat": false
      },
      {
        "order": 13,
        "name": "contentLayout",
        "label": "Content Layout",
        "helpText": "Whether to use qBittorrent's configured content layout, the original layout from the torrent or always create a subfolder (qBittorrent 4.3.2+)",
        "value": 0,
        "type": "select",
        "advanced": false,
        "selectOptions": [
          {
            "value": 0,
            "name": "Default",
            "order": 0,
            "dividerAfter": false
          },
          {
            "value": 1,
            "name": "Original",
            "order": 1,
            "dividerAfter": false
          },
          {
            "value": 2,
            "name": "Subfolder",
            "order": 2,
            "dividerAfter": false
          }
        ],
        "privacy": "normal",
        "isFloat": false
      }
    ],
    "implementationName": "qBittorrent",
    "implementation": "QBittorrent",
    "configContract": "QBittorrentSettings",
    "infoLink": "https://wiki.servarr.com/radarr/supported#qbittorrent",
    "tags": [],
    "id": 2
  }
]