Compare commits
4 Commits
583239deb2
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6f9bf27756 | ||
|
|
6ba477f215 | ||
|
|
1a8a5d14c1 | ||
|
|
9773fc7b4a |
@@ -5,14 +5,22 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
- develop
|
- develop
|
||||||
|
schedule:
|
||||||
|
- cron: '0 4 * * *' # Daily at 4:00 UTC
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
# On schedule/dispatch, build both branches; otherwise only the pushed branch
|
||||||
|
branch: ${{ github.event_name == 'schedule' && fromJson('["main", "develop"]') || fromJson(format('["{0}"]', github.ref_name)) }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: ${{ matrix.branch }}
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
@@ -23,25 +31,39 @@ jobs:
|
|||||||
# Date ISO 8601
|
# Date ISO 8601
|
||||||
echo "build_date=$(date -u +%Y-%m-%dT%H:%M:%S%z)" >> "$GITHUB_OUTPUT"
|
echo "build_date=$(date -u +%Y-%m-%dT%H:%M:%S%z)" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
# Short SHA
|
# Short SHA of docker-prowlarr repo
|
||||||
echo "sha_short=$(echo ${GITHUB_SHA} | cut -c1-7)" >> "$GITHUB_OUTPUT"
|
echo "sha_short=$(git rev-parse --short HEAD)" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
# Prowlarr version from upstream API
|
# Corresponding upstream Prowlarr branch
|
||||||
PROWLARR_BRANCH="develop"
|
PROWLARR_BRANCH="develop"
|
||||||
if [ "${GITHUB_REF_NAME}" = "main" ]; then
|
if [ "${{ matrix.branch }}" = "main" ]; then
|
||||||
PROWLARR_BRANCH="master"
|
PROWLARR_BRANCH="master"
|
||||||
fi
|
fi
|
||||||
echo "prowlarr_branch=${PROWLARR_BRANCH}" >> "$GITHUB_OUTPUT"
|
echo "prowlarr_branch=${PROWLARR_BRANCH}" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
# Latest commit SHA on the upstream Prowlarr repo
|
||||||
|
UPSTREAM_SHA=$(git ls-remote https://github.com/Prowlarr/Prowlarr.git "refs/heads/${PROWLARR_BRANCH}" | awk '{print $1}')
|
||||||
|
UPSTREAM_SHA_SHORT=$(echo "${UPSTREAM_SHA}" | cut -c1-7)
|
||||||
|
echo "upstream_sha=${UPSTREAM_SHA}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "upstream_sha_short=${UPSTREAM_SHA_SHORT}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "Prowlarr upstream ${PROWLARR_BRANCH} is at ${UPSTREAM_SHA_SHORT}"
|
||||||
|
|
||||||
|
# Prowlarr version from upstream API
|
||||||
PROWLARR_VERSION=$(curl -sL "https://prowlarr.servarr.com/v1/update/${PROWLARR_BRANCH}/changes?runtime=netcore&os=linuxmusl" | jq -r '.[0].version')
|
PROWLARR_VERSION=$(curl -sL "https://prowlarr.servarr.com/v1/update/${PROWLARR_BRANCH}/changes?runtime=netcore&os=linuxmusl" | jq -r '.[0].version')
|
||||||
echo "prowlarr_version=${PROWLARR_VERSION}" >> "$GITHUB_OUTPUT"
|
echo "prowlarr_version=${PROWLARR_VERSION}" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
# Image name
|
# Image name
|
||||||
REGISTRY="${{ vars.OCI_REGISTRY }}"
|
REGISTRY="${{ vars.OCI_REGISTRY }}"
|
||||||
# Remove trailing slash if present
|
|
||||||
REGISTRY="${REGISTRY%/}"
|
REGISTRY="${REGISTRY%/}"
|
||||||
echo "image_name=${REGISTRY}/prowlarr" >> "$GITHUB_OUTPUT"
|
echo "image_name=${REGISTRY}/prowlarr" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
# Channel tag: latest for main, develop for develop
|
||||||
|
if [ "${{ matrix.branch }}" = "main" ]; then
|
||||||
|
echo "channel_tag=latest" >> "$GITHUB_OUTPUT"
|
||||||
|
else
|
||||||
|
echo "channel_tag=develop" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Login to OCI Registry
|
- name: Login to OCI Registry
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
@@ -49,7 +71,23 @@ jobs:
|
|||||||
username: ${{ vars.OCI_USERNAME }}
|
username: ${{ vars.OCI_USERNAME }}
|
||||||
password: ${{ vars.OCI_PASSWORD }}
|
password: ${{ vars.OCI_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Check if upstream version already built
|
||||||
|
id: check
|
||||||
|
if: github.event_name == 'schedule'
|
||||||
|
run: |
|
||||||
|
# Check if an image tagged with the upstream SHA already exists
|
||||||
|
IMAGE="${{ steps.vars.outputs.image_name }}:${{ steps.vars.outputs.prowlarr_branch }}-${{ steps.vars.outputs.upstream_sha_short }}"
|
||||||
|
echo "Checking if ${IMAGE} already exists..."
|
||||||
|
if docker manifest inspect "${IMAGE}" > /dev/null 2>&1; then
|
||||||
|
echo "Image ${IMAGE} already exists — no upstream changes, skipping build."
|
||||||
|
echo "skip=true" >> "$GITHUB_OUTPUT"
|
||||||
|
else
|
||||||
|
echo "Image ${IMAGE} not found — upstream has changed, proceeding with build."
|
||||||
|
echo "skip=false" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Build and push
|
- name: Build and push
|
||||||
|
if: steps.check.outputs.skip != 'true'
|
||||||
uses: docker/build-push-action@v6
|
uses: docker/build-push-action@v6
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
@@ -60,8 +98,9 @@ jobs:
|
|||||||
VERSION=${{ steps.vars.outputs.prowlarr_version }}-custom
|
VERSION=${{ steps.vars.outputs.prowlarr_version }}-custom
|
||||||
PROWLARR_BRANCH=${{ steps.vars.outputs.prowlarr_branch }}
|
PROWLARR_BRANCH=${{ steps.vars.outputs.prowlarr_branch }}
|
||||||
tags: |
|
tags: |
|
||||||
${{ steps.vars.outputs.image_name }}:latest
|
${{ steps.vars.outputs.image_name }}:${{ steps.vars.outputs.channel_tag }}
|
||||||
${{ steps.vars.outputs.image_name }}:${{ steps.vars.outputs.sha_short }}
|
${{ steps.vars.outputs.image_name }}:${{ steps.vars.outputs.sha_short }}
|
||||||
${{ steps.vars.outputs.image_name }}:${{ steps.vars.outputs.prowlarr_version }}-custom
|
${{ steps.vars.outputs.image_name }}:${{ steps.vars.outputs.prowlarr_version }}-custom
|
||||||
|
${{ steps.vars.outputs.image_name }}:${{ steps.vars.outputs.prowlarr_branch }}-${{ steps.vars.outputs.upstream_sha_short }}
|
||||||
cache-from: type=gha
|
cache-from: type=gha
|
||||||
cache-to: type=gha,mode=max
|
cache-to: type=gha,mode=max
|
||||||
|
|||||||
55
Dockerfile
55
Dockerfile
@@ -1,83 +1,60 @@
|
|||||||
# syntax=docker/dockerfile:1
|
# syntax=docker/dockerfile:1
|
||||||
|
|
||||||
#===========================
|
# Build Prowlarr from source with patches applied
|
||||||
# Stage 1: Build Prowlarr from source
|
|
||||||
#===========================
|
|
||||||
FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS build
|
FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS build
|
||||||
|
|
||||||
# Install build dependencies
|
RUN apk add --no-cache bash git curl icu-libs nodejs npm yarn
|
||||||
RUN apk add --no-cache \
|
|
||||||
bash \
|
|
||||||
git \
|
|
||||||
curl \
|
|
||||||
icu-libs \
|
|
||||||
nodejs \
|
|
||||||
npm \
|
|
||||||
yarn
|
|
||||||
|
|
||||||
# Arguments for upstream source
|
|
||||||
ARG PROWLARR_BRANCH="develop"
|
ARG PROWLARR_BRANCH="develop"
|
||||||
ARG PROWLARR_REPO="https://github.com/Prowlarr/Prowlarr.git"
|
|
||||||
|
|
||||||
WORKDIR /src
|
WORKDIR /src
|
||||||
|
RUN git clone --depth 1 --branch "${PROWLARR_BRANCH}" https://github.com/Prowlarr/Prowlarr.git .
|
||||||
|
|
||||||
# Clone upstream Prowlarr
|
|
||||||
RUN git clone --depth 1 --branch "${PROWLARR_BRANCH}" "${PROWLARR_REPO}" .
|
|
||||||
|
|
||||||
# Copy and apply patches
|
|
||||||
COPY patches/ /tmp/patches/
|
COPY patches/ /tmp/patches/
|
||||||
RUN git config user.email "build@local" && \
|
RUN git config user.email "build@local" && \
|
||||||
git config user.name "Build" && \
|
git config user.name "Build" && \
|
||||||
git am /tmp/patches/*.patch
|
git am /tmp/patches/*.patch
|
||||||
|
|
||||||
# Install frontend dependencies and build
|
RUN bash build.sh --backend -r linux-musl-x64 -f net8.0
|
||||||
RUN yarn install --frozen-lockfile --network-timeout 120000
|
RUN yarn install --frozen-lockfile --network-timeout 120000
|
||||||
RUN yarn run build --env production
|
RUN yarn run build --env production
|
||||||
|
|
||||||
# Build backend for linux-musl-x64 (Alpine)
|
|
||||||
RUN bash build.sh --backend -r linux-musl-x64 -f net8.0
|
|
||||||
|
|
||||||
# Package
|
|
||||||
RUN bash build.sh --packages -r linux-musl-x64 -f net8.0
|
RUN bash build.sh --packages -r linux-musl-x64 -f net8.0
|
||||||
|
|
||||||
#===========================
|
|
||||||
# Stage 2: Runtime
|
|
||||||
#===========================
|
|
||||||
FROM ghcr.io/linuxserver/baseimage-alpine:3.23
|
FROM ghcr.io/linuxserver/baseimage-alpine:3.23
|
||||||
|
|
||||||
# set version label
|
# set version label
|
||||||
ARG BUILD_DATE
|
ARG BUILD_DATE
|
||||||
ARG VERSION
|
ARG VERSION
|
||||||
ARG PROWLARR_BRANCH="develop"
|
ARG PROWLARR_RELEASE
|
||||||
LABEL build_version="Custom build version:- ${VERSION} Build-date:- ${BUILD_DATE}"
|
LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
|
||||||
LABEL maintainer="romain"
|
LABEL maintainer="Roxedus,thespad"
|
||||||
|
|
||||||
# environment settings
|
# environment settings
|
||||||
|
ARG PROWLARR_BRANCH="master"
|
||||||
ENV XDG_CONFIG_HOME="/config/xdg" \
|
ENV XDG_CONFIG_HOME="/config/xdg" \
|
||||||
COMPlus_EnableDiagnostics=0 \
|
COMPlus_EnableDiagnostics=0 \
|
||||||
TMPDIR=/run/prowlarr-temp
|
TMPDIR=/run/prowlarr-temp
|
||||||
|
|
||||||
RUN \
|
RUN \
|
||||||
echo "**** install runtime packages ****" && \
|
echo "**** install packages ****" && \
|
||||||
apk add -U --upgrade --no-cache \
|
apk add -U --upgrade --no-cache \
|
||||||
icu-libs \
|
icu-libs \
|
||||||
sqlite-libs \
|
sqlite-libs \
|
||||||
xmlstarlet
|
xmlstarlet && \
|
||||||
|
echo "**** install prowlarr ****" && \
|
||||||
|
mkdir -p /app/prowlarr/bin
|
||||||
|
|
||||||
# Copy compiled Prowlarr from build stage
|
|
||||||
RUN mkdir -p /app/prowlarr/bin
|
|
||||||
COPY --from=build /src/_artifacts/linux-musl-x64/net8.0/Prowlarr/ /app/prowlarr/bin/
|
COPY --from=build /src/_artifacts/linux-musl-x64/net8.0/Prowlarr/ /app/prowlarr/bin/
|
||||||
|
|
||||||
# Write package info
|
RUN \
|
||||||
RUN echo -e "UpdateMethod=docker\nBranch=${PROWLARR_BRANCH}\nPackageVersion=${VERSION}\nPackageAuthor=custom-build" > /app/prowlarr/package_info && \
|
echo -e "UpdateMethod=docker\nBranch=${PROWLARR_BRANCH}\nPackageVersion=${VERSION}\nPackageAuthor=[linuxserver.io](https://www.linuxserver.io/)" > /app/prowlarr/package_info && \
|
||||||
printf "Custom build version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
|
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
|
||||||
echo "**** cleanup ****" && \
|
echo "**** cleanup ****" && \
|
||||||
rm -rf \
|
rm -rf \
|
||||||
/app/prowlarr/bin/Prowlarr.Update \
|
/app/prowlarr/bin/Prowlarr.Update \
|
||||||
/tmp/* \
|
/tmp/* \
|
||||||
/var/tmp/*
|
/var/tmp/*
|
||||||
|
|
||||||
# copy local files (s6 services)
|
# copy local files
|
||||||
COPY root/ /
|
COPY root/ /
|
||||||
|
|
||||||
# ports and volumes
|
# ports and volumes
|
||||||
|
|||||||
@@ -1,23 +1,19 @@
|
|||||||
From f7ad90f98669386f4abfde0345a43e4ce13b1dfa Mon Sep 17 00:00:00 2001
|
From 4996a7c70c74f24e5a89c21cd1459bd3cef5ac5c Mon Sep 17 00:00:00 2001
|
||||||
From: Romain Lecat <romain@lecat.pro>
|
From: Romain Lecat <romain@lecat.pro>
|
||||||
Date: Mon, 16 Feb 2026 10:49:13 +0100
|
Date: Mon, 16 Feb 2026 10:49:13 +0100
|
||||||
Subject: [PATCH] Fork for AvistaZ family language filter
|
Subject: [PATCH] Fork for AvistaZ family language filter
|
||||||
|
|
||||||
---
|
---
|
||||||
.../Indexers/Definitions/AvistaZ.cs | 26 +-
|
.../Indexers/Definitions/AvistaZ.cs | 20 +-
|
||||||
.../Definitions/Avistaz/AvistazBase.cs | 3 +-
|
.../Definitions/Avistaz/AvistazBase.cs | 3 +-
|
||||||
.../Definitions/Avistaz/AvistazSettings.cs | 359 ++++++++++++++++++
|
.../Definitions/Avistaz/AvistazSettings.cs | 352 ++++++++++++++++++
|
||||||
.../Definitions/Avistaz/CinemaZSettings.cs | 21 +
|
.../Indexers/Definitions/CinemaZ.cs | 36 +-
|
||||||
.../Definitions/Avistaz/PrivateHDSettings.cs | 21 +
|
|
||||||
.../Indexers/Definitions/CinemaZ.cs | 42 +-
|
|
||||||
.../Indexers/Definitions/ExoticaZ.cs | 2 +-
|
.../Indexers/Definitions/ExoticaZ.cs | 2 +-
|
||||||
.../Indexers/Definitions/PrivateHD.cs | 42 +-
|
.../Indexers/Definitions/PrivateHD.cs | 36 +-
|
||||||
8 files changed, 511 insertions(+), 5 deletions(-)
|
6 files changed, 444 insertions(+), 5 deletions(-)
|
||||||
create mode 100644 src/NzbDrone.Core/Indexers/Definitions/Avistaz/CinemaZSettings.cs
|
|
||||||
create mode 100644 src/NzbDrone.Core/Indexers/Definitions/Avistaz/PrivateHDSettings.cs
|
|
||||||
|
|
||||||
diff --git a/src/NzbDrone.Core/Indexers/Definitions/AvistaZ.cs b/src/NzbDrone.Core/Indexers/Definitions/AvistaZ.cs
|
diff --git a/src/NzbDrone.Core/Indexers/Definitions/AvistaZ.cs b/src/NzbDrone.Core/Indexers/Definitions/AvistaZ.cs
|
||||||
index cc1be98b5..edb0ab464 100644
|
index cc1be98b5..e16bf1fff 100644
|
||||||
--- a/src/NzbDrone.Core/Indexers/Definitions/AvistaZ.cs
|
--- a/src/NzbDrone.Core/Indexers/Definitions/AvistaZ.cs
|
||||||
+++ b/src/NzbDrone.Core/Indexers/Definitions/AvistaZ.cs
|
+++ b/src/NzbDrone.Core/Indexers/Definitions/AvistaZ.cs
|
||||||
@@ -1,4 +1,5 @@
|
@@ -1,4 +1,5 @@
|
||||||
@@ -31,32 +27,26 @@ index cc1be98b5..edb0ab464 100644
|
|||||||
namespace NzbDrone.Core.Indexers.Definitions
|
namespace NzbDrone.Core.Indexers.Definitions
|
||||||
{
|
{
|
||||||
- public class AvistaZ : AvistazBase
|
- public class AvistaZ : AvistazBase
|
||||||
+ public class AvistaZ : AvistazBase<AvistaZSettings>
|
+ public class AvistaZ : AvistazBase<AvistazSettings>
|
||||||
{
|
{
|
||||||
public override string Name => "AvistaZ";
|
public override string Name => "AvistaZ";
|
||||||
public override string[] IndexerUrls => new[] { "https://avistaz.to/" };
|
public override string[] IndexerUrls => new[] { "https://avistaz.to/" };
|
||||||
@@ -68,6 +69,29 @@ protected override IndexerCapabilities SetCapabilities()
|
@@ -68,6 +69,23 @@ protected override IndexerCapabilities SetCapabilities()
|
||||||
|
|
||||||
public class AvistaZRequestGenerator : AvistazRequestGenerator
|
public class AvistaZRequestGenerator : AvistazRequestGenerator
|
||||||
{
|
{
|
||||||
+ public new AvistaZSettings Settings
|
|
||||||
+ {
|
|
||||||
+ get => (AvistaZSettings)base.Settings;
|
|
||||||
+ set => base.Settings = value;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ protected override List<KeyValuePair<string, string>> GetBasicSearchParameters(SearchCriteriaBase searchCriteria, string genre = null)
|
+ protected override List<KeyValuePair<string, string>> GetBasicSearchParameters(SearchCriteriaBase searchCriteria, string genre = null)
|
||||||
+ {
|
+ {
|
||||||
+ var parameters = base.GetBasicSearchParameters(searchCriteria, genre);
|
+ var parameters = base.GetBasicSearchParameters(searchCriteria, genre);
|
||||||
+
|
+
|
||||||
+ foreach (var languageId in Settings.SearchAudioLanguages.Distinct())
|
+ foreach (var languageId in Settings.SearchAudioLanguages.Distinct())
|
||||||
+ {
|
+ {
|
||||||
+ parameters.Add("language[]", languageId.ToString());
|
+ parameters.Add(new KeyValuePair<string, string>("language[]", languageId.ToString()));
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ foreach (var languageId in Settings.SearchSubtitleLanguages.Distinct())
|
+ foreach (var languageId in Settings.SearchSubtitleLanguages.Distinct())
|
||||||
+ {
|
+ {
|
||||||
+ parameters.Add("subtitle[]", languageId.ToString());
|
+ parameters.Add(new KeyValuePair<string, string>("subtitle[]", languageId.ToString()));
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ return parameters;
|
+ return parameters;
|
||||||
@@ -80,7 +70,7 @@ index b14bac702..1aabd470f 100644
|
|||||||
public override bool SupportsRss => true;
|
public override bool SupportsRss => true;
|
||||||
public override bool SupportsSearch => true;
|
public override bool SupportsSearch => true;
|
||||||
diff --git a/src/NzbDrone.Core/Indexers/Definitions/Avistaz/AvistazSettings.cs b/src/NzbDrone.Core/Indexers/Definitions/Avistaz/AvistazSettings.cs
|
diff --git a/src/NzbDrone.Core/Indexers/Definitions/Avistaz/AvistazSettings.cs b/src/NzbDrone.Core/Indexers/Definitions/Avistaz/AvistazSettings.cs
|
||||||
index bb431c47b..3a535df21 100644
|
index bb431c47b..47f69dd27 100644
|
||||||
--- a/src/NzbDrone.Core/Indexers/Definitions/Avistaz/AvistazSettings.cs
|
--- a/src/NzbDrone.Core/Indexers/Definitions/Avistaz/AvistazSettings.cs
|
||||||
+++ b/src/NzbDrone.Core/Indexers/Definitions/Avistaz/AvistazSettings.cs
|
+++ b/src/NzbDrone.Core/Indexers/Definitions/Avistaz/AvistazSettings.cs
|
||||||
@@ -1,3 +1,5 @@
|
@@ -1,3 +1,5 @@
|
||||||
@@ -89,25 +79,30 @@ index bb431c47b..3a535df21 100644
|
|||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using NzbDrone.Core.Annotations;
|
using NzbDrone.Core.Annotations;
|
||||||
using NzbDrone.Core.Indexers.Settings;
|
using NzbDrone.Core.Indexers.Settings;
|
||||||
@@ -44,4 +46,361 @@ public override NzbDroneValidationResult Validate()
|
@@ -23,6 +25,8 @@ public AvistazSettings()
|
||||||
return new NzbDroneValidationResult(Validator.Validate(this));
|
{
|
||||||
}
|
Token = "";
|
||||||
}
|
FreeleechOnly = false;
|
||||||
+
|
|
||||||
+ public class AvistaZSettings : AvistazSettings
|
|
||||||
+ {
|
|
||||||
+ public AvistaZSettings()
|
|
||||||
+ {
|
|
||||||
+ SearchAudioLanguages = Array.Empty<int>();
|
+ SearchAudioLanguages = Array.Empty<int>();
|
||||||
+ SearchSubtitleLanguages = Array.Empty<int>();
|
+ SearchSubtitleLanguages = Array.Empty<int>();
|
||||||
+ }
|
}
|
||||||
+
|
|
||||||
|
public string Token { get; set; }
|
||||||
|
@@ -39,9 +43,357 @@ public AvistazSettings()
|
||||||
|
[FieldDefinition(5, Label = "IndexerSettingsFreeleechOnly", Type = FieldType.Checkbox, HelpText = "IndexerAvistazSettingsFreeleechOnlyHelpText")]
|
||||||
|
public bool FreeleechOnly { get; set; }
|
||||||
|
|
||||||
+ [FieldDefinition(6, Label = "Search Audio Languages", Type = FieldType.Select, SelectOptions = typeof(AvistaZAudioLanguage), HelpText = "Filter by audio language. The language settings are AND searches, e.g. selecting English audio with Basque and Catalan subtitles will only return results with all three of these.", Advanced = true)]
|
+ [FieldDefinition(6, Label = "Search Audio Languages", Type = FieldType.Select, SelectOptions = typeof(AvistaZAudioLanguage), HelpText = "Filter by audio language. The language settings are AND searches, e.g. selecting English audio with Basque and Catalan subtitles will only return results with all three of these.", Advanced = true)]
|
||||||
+ public IEnumerable<int> SearchAudioLanguages { get; set; }
|
+ public IEnumerable<int> SearchAudioLanguages { get; set; }
|
||||||
+
|
+
|
||||||
+ [FieldDefinition(7, Label = "Search Subtitle Languages", Type = FieldType.Select, SelectOptions = typeof(AvistaZSubtitleLanguage), HelpText = "Filter by subtitle language. The language settings are AND searches, e.g. selecting English audio with Basque and Catalan subtitles will only return results with all three of these.", Advanced = true)]
|
+ [FieldDefinition(7, Label = "Search Subtitle Languages", Type = FieldType.Select, SelectOptions = typeof(AvistaZSubtitleLanguage), HelpText = "Filter by subtitle language. The language settings are AND searches, e.g. selecting English audio with Basque and Catalan subtitles will only return results with all three of these.", Advanced = true)]
|
||||||
+ public IEnumerable<int> SearchSubtitleLanguages { get; set; }
|
+ public IEnumerable<int> SearchSubtitleLanguages { get; set; }
|
||||||
+ }
|
+
|
||||||
|
public override NzbDroneValidationResult Validate()
|
||||||
|
{
|
||||||
|
return new NzbDroneValidationResult(Validator.Validate(this));
|
||||||
|
}
|
||||||
|
}
|
||||||
+
|
+
|
||||||
+ public enum AvistaZAudioLanguage
|
+ public enum AvistaZAudioLanguage
|
||||||
+ {
|
+ {
|
||||||
@@ -451,62 +446,8 @@ index bb431c47b..3a535df21 100644
|
|||||||
+ Wolof = 181,
|
+ Wolof = 181,
|
||||||
+ }
|
+ }
|
||||||
}
|
}
|
||||||
diff --git a/src/NzbDrone.Core/Indexers/Definitions/Avistaz/CinemaZSettings.cs b/src/NzbDrone.Core/Indexers/Definitions/Avistaz/CinemaZSettings.cs
|
|
||||||
new file mode 100644
|
|
||||||
index 000000000..fa133a0ed
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/src/NzbDrone.Core/Indexers/Definitions/Avistaz/CinemaZSettings.cs
|
|
||||||
@@ -0,0 +1,21 @@
|
|
||||||
+using System;
|
|
||||||
+using System.Collections.Generic;
|
|
||||||
+using NzbDrone.Core.Annotations;
|
|
||||||
+
|
|
||||||
+namespace NzbDrone.Core.Indexers.Definitions.Avistaz
|
|
||||||
+{
|
|
||||||
+ public class CinemaZSettings : AvistazSettings
|
|
||||||
+ {
|
|
||||||
+ public CinemaZSettings()
|
|
||||||
+ {
|
|
||||||
+ SearchAudioLanguages = Array.Empty<int>();
|
|
||||||
+ SearchSubtitleLanguages = Array.Empty<int>();
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ [FieldDefinition(6, Label = "Search Audio Languages", Type = FieldType.Select, SelectOptions = typeof(AvistaZAudioLanguage), HelpText = "Filter by audio language. The language settings are AND searches, e.g. selecting English audio with Basque and Catalan subtitles will only return results with all three of these.", Advanced = true)]
|
|
||||||
+ public IEnumerable<int> SearchAudioLanguages { get; set; }
|
|
||||||
+
|
|
||||||
+ [FieldDefinition(7, Label = "Search Subtitle Languages", Type = FieldType.Select, SelectOptions = typeof(AvistaZSubtitleLanguage), HelpText = "Filter by subtitle language. The language settings are AND searches, e.g. selecting English audio with Basque and Catalan subtitles will only return results with all three of these.", Advanced = true)]
|
|
||||||
+ public IEnumerable<int> SearchSubtitleLanguages { get; set; }
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
diff --git a/src/NzbDrone.Core/Indexers/Definitions/Avistaz/PrivateHDSettings.cs b/src/NzbDrone.Core/Indexers/Definitions/Avistaz/PrivateHDSettings.cs
|
|
||||||
new file mode 100644
|
|
||||||
index 000000000..31967b586
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/src/NzbDrone.Core/Indexers/Definitions/Avistaz/PrivateHDSettings.cs
|
|
||||||
@@ -0,0 +1,21 @@
|
|
||||||
+using System;
|
|
||||||
+using System.Collections.Generic;
|
|
||||||
+using NzbDrone.Core.Annotations;
|
|
||||||
+
|
|
||||||
+namespace NzbDrone.Core.Indexers.Definitions.Avistaz
|
|
||||||
+{
|
|
||||||
+ public class PrivateHDSettings : AvistazSettings
|
|
||||||
+ {
|
|
||||||
+ public PrivateHDSettings()
|
|
||||||
+ {
|
|
||||||
+ SearchAudioLanguages = Array.Empty<int>();
|
|
||||||
+ SearchSubtitleLanguages = Array.Empty<int>();
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ [FieldDefinition(6, Label = "Search Audio Languages", Type = FieldType.Select, SelectOptions = typeof(AvistaZAudioLanguage), HelpText = "Filter by audio language. The language settings are AND searches, e.g. selecting English audio with Basque and Catalan subtitles will only return results with all three of these.", Advanced = true)]
|
|
||||||
+ public IEnumerable<int> SearchAudioLanguages { get; set; }
|
|
||||||
+
|
|
||||||
+ [FieldDefinition(7, Label = "Search Subtitle Languages", Type = FieldType.Select, SelectOptions = typeof(AvistaZSubtitleLanguage), HelpText = "Filter by subtitle language. The language settings are AND searches, e.g. selecting English audio with Basque and Catalan subtitles will only return results with all three of these.", Advanced = true)]
|
|
||||||
+ public IEnumerable<int> SearchSubtitleLanguages { get; set; }
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
diff --git a/src/NzbDrone.Core/Indexers/Definitions/CinemaZ.cs b/src/NzbDrone.Core/Indexers/Definitions/CinemaZ.cs
|
diff --git a/src/NzbDrone.Core/Indexers/Definitions/CinemaZ.cs b/src/NzbDrone.Core/Indexers/Definitions/CinemaZ.cs
|
||||||
index 3f0fdd913..e3318c195 100644
|
index 3f0fdd913..0d630d3d8 100644
|
||||||
--- a/src/NzbDrone.Core/Indexers/Definitions/CinemaZ.cs
|
--- a/src/NzbDrone.Core/Indexers/Definitions/CinemaZ.cs
|
||||||
+++ b/src/NzbDrone.Core/Indexers/Definitions/CinemaZ.cs
|
+++ b/src/NzbDrone.Core/Indexers/Definitions/CinemaZ.cs
|
||||||
@@ -1,12 +1,14 @@
|
@@ -1,12 +1,14 @@
|
||||||
@@ -521,7 +462,7 @@ index 3f0fdd913..e3318c195 100644
|
|||||||
namespace NzbDrone.Core.Indexers.Definitions
|
namespace NzbDrone.Core.Indexers.Definitions
|
||||||
{
|
{
|
||||||
- public class CinemaZ : AvistazBase
|
- public class CinemaZ : AvistazBase
|
||||||
+ public class CinemaZ : AvistazBase<CinemaZSettings>
|
+ public class CinemaZ : AvistazBase<AvistazSettings>
|
||||||
{
|
{
|
||||||
public override string Name => "CinemaZ";
|
public override string Name => "CinemaZ";
|
||||||
public override string[] IndexerUrls => new[] { "https://cinemaz.to/" };
|
public override string[] IndexerUrls => new[] { "https://cinemaz.to/" };
|
||||||
@@ -544,31 +485,25 @@ index 3f0fdd913..e3318c195 100644
|
|||||||
protected override IndexerCapabilities SetCapabilities()
|
protected override IndexerCapabilities SetCapabilities()
|
||||||
{
|
{
|
||||||
var caps = new IndexerCapabilities
|
var caps = new IndexerCapabilities
|
||||||
@@ -51,4 +65,30 @@ protected override IndexerCapabilities SetCapabilities()
|
@@ -51,4 +65,24 @@ protected override IndexerCapabilities SetCapabilities()
|
||||||
return caps;
|
return caps;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+
|
+
|
||||||
+ public class CinemaZRequestGenerator : AvistazRequestGenerator
|
+ public class CinemaZRequestGenerator : AvistazRequestGenerator
|
||||||
+ {
|
+ {
|
||||||
+ public new CinemaZSettings Settings
|
|
||||||
+ {
|
|
||||||
+ get => (CinemaZSettings)base.Settings;
|
|
||||||
+ set => base.Settings = value;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ protected override List<KeyValuePair<string, string>> GetBasicSearchParameters(SearchCriteriaBase searchCriteria, string genre = null)
|
+ protected override List<KeyValuePair<string, string>> GetBasicSearchParameters(SearchCriteriaBase searchCriteria, string genre = null)
|
||||||
+ {
|
+ {
|
||||||
+ var parameters = base.GetBasicSearchParameters(searchCriteria, genre);
|
+ var parameters = base.GetBasicSearchParameters(searchCriteria, genre);
|
||||||
+
|
+
|
||||||
+ foreach (var languageId in Settings.SearchAudioLanguages.Distinct())
|
+ foreach (var languageId in Settings.SearchAudioLanguages.Distinct())
|
||||||
+ {
|
+ {
|
||||||
+ parameters.Add("language[]", languageId.ToString());
|
+ parameters.Add(new KeyValuePair<string, string>("language[]", languageId.ToString()));
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ foreach (var languageId in Settings.SearchSubtitleLanguages.Distinct())
|
+ foreach (var languageId in Settings.SearchSubtitleLanguages.Distinct())
|
||||||
+ {
|
+ {
|
||||||
+ parameters.Add("subtitle[]", languageId.ToString());
|
+ parameters.Add(new KeyValuePair<string, string>("subtitle[]", languageId.ToString()));
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ return parameters;
|
+ return parameters;
|
||||||
@@ -589,7 +524,7 @@ index 954d2442c..41202ab21 100644
|
|||||||
public override string Name => "ExoticaZ";
|
public override string Name => "ExoticaZ";
|
||||||
public override string[] IndexerUrls => new[] { "https://exoticaz.to/" };
|
public override string[] IndexerUrls => new[] { "https://exoticaz.to/" };
|
||||||
diff --git a/src/NzbDrone.Core/Indexers/Definitions/PrivateHD.cs b/src/NzbDrone.Core/Indexers/Definitions/PrivateHD.cs
|
diff --git a/src/NzbDrone.Core/Indexers/Definitions/PrivateHD.cs b/src/NzbDrone.Core/Indexers/Definitions/PrivateHD.cs
|
||||||
index 21fc76ede..df33867c1 100644
|
index 21fc76ede..0e8f651f0 100644
|
||||||
--- a/src/NzbDrone.Core/Indexers/Definitions/PrivateHD.cs
|
--- a/src/NzbDrone.Core/Indexers/Definitions/PrivateHD.cs
|
||||||
+++ b/src/NzbDrone.Core/Indexers/Definitions/PrivateHD.cs
|
+++ b/src/NzbDrone.Core/Indexers/Definitions/PrivateHD.cs
|
||||||
@@ -1,12 +1,14 @@
|
@@ -1,12 +1,14 @@
|
||||||
@@ -604,7 +539,7 @@ index 21fc76ede..df33867c1 100644
|
|||||||
namespace NzbDrone.Core.Indexers.Definitions
|
namespace NzbDrone.Core.Indexers.Definitions
|
||||||
{
|
{
|
||||||
- public class PrivateHD : AvistazBase
|
- public class PrivateHD : AvistazBase
|
||||||
+ public class PrivateHD : AvistazBase<PrivateHDSettings>
|
+ public class PrivateHD : AvistazBase<AvistazSettings>
|
||||||
{
|
{
|
||||||
public override string Name => "PrivateHD";
|
public override string Name => "PrivateHD";
|
||||||
public override string[] IndexerUrls => new[] { "https://privatehd.to/" };
|
public override string[] IndexerUrls => new[] { "https://privatehd.to/" };
|
||||||
@@ -627,31 +562,25 @@ index 21fc76ede..df33867c1 100644
|
|||||||
protected override IndexerCapabilities SetCapabilities()
|
protected override IndexerCapabilities SetCapabilities()
|
||||||
{
|
{
|
||||||
var caps = new IndexerCapabilities
|
var caps = new IndexerCapabilities
|
||||||
@@ -51,4 +65,30 @@ protected override IndexerCapabilities SetCapabilities()
|
@@ -51,4 +65,24 @@ protected override IndexerCapabilities SetCapabilities()
|
||||||
return caps;
|
return caps;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+
|
+
|
||||||
+ public class PrivateHDRequestGenerator : AvistazRequestGenerator
|
+ public class PrivateHDRequestGenerator : AvistazRequestGenerator
|
||||||
+ {
|
+ {
|
||||||
+ public new PrivateHDSettings Settings
|
|
||||||
+ {
|
|
||||||
+ get => (PrivateHDSettings)base.Settings;
|
|
||||||
+ set => base.Settings = value;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ protected override List<KeyValuePair<string, string>> GetBasicSearchParameters(SearchCriteriaBase searchCriteria, string genre = null)
|
+ protected override List<KeyValuePair<string, string>> GetBasicSearchParameters(SearchCriteriaBase searchCriteria, string genre = null)
|
||||||
+ {
|
+ {
|
||||||
+ var parameters = base.GetBasicSearchParameters(searchCriteria, genre);
|
+ var parameters = base.GetBasicSearchParameters(searchCriteria, genre);
|
||||||
+
|
+
|
||||||
+ foreach (var languageId in Settings.SearchAudioLanguages.Distinct())
|
+ foreach (var languageId in Settings.SearchAudioLanguages.Distinct())
|
||||||
+ {
|
+ {
|
||||||
+ parameters.Add("language[]", languageId.ToString());
|
+ parameters.Add(new KeyValuePair<string, string>("language[]", languageId.ToString()));
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ foreach (var languageId in Settings.SearchSubtitleLanguages.Distinct())
|
+ foreach (var languageId in Settings.SearchSubtitleLanguages.Distinct())
|
||||||
+ {
|
+ {
|
||||||
+ parameters.Add("subtitle[]", languageId.ToString());
|
+ parameters.Add(new KeyValuePair<string, string>("subtitle[]", languageId.ToString()));
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ return parameters;
|
+ return parameters;
|
||||||
|
|||||||
Reference in New Issue
Block a user