mirror of
https://github.com/Readarr/Readarr.git
synced 2026-03-12 15:29:59 -04:00
Compare commits
3 Commits
sonarr-pul
...
changelog-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e0b7a78568 | ||
|
|
bc31f10770 | ||
|
|
98ca518178 |
@@ -15,7 +15,7 @@ variables:
|
||||
buildName: '$(Build.SourceBranchName).$(readarrVersion)'
|
||||
sentryOrg: 'servarr'
|
||||
sentryUrl: 'https://sentry.servarr.com'
|
||||
dotnetVersion: '6.0.300'
|
||||
dotnetVersion: '6.0.201'
|
||||
innoVersion: '6.2.0'
|
||||
windowsImage: 'windows-2022'
|
||||
linuxImage: 'ubuntu-20.04'
|
||||
@@ -66,13 +66,16 @@ stages:
|
||||
inputs:
|
||||
version: $(dotnetVersion)
|
||||
- bash: |
|
||||
SDK_PATH="${AGENT_TOOLSDIRECTORY}/dotnet/sdk/${DOTNETVERSION}"
|
||||
BUNDLEDVERSIONS="${SDK_PATH}/Microsoft.NETCoreSdk.BundledVersions.props"
|
||||
|
||||
if ! grep -q freebsd-x64 $BUNDLEDVERSIONS; then
|
||||
sed -i.ORI 's/osx-x64/osx-x64;freebsd-x64;linux-x86/' $BUNDLEDVERSIONS
|
||||
BUNDLEDVERSIONS=${AGENT_TOOLSDIRECTORY}/dotnet/sdk/${DOTNETVERSION}/Microsoft.NETCoreSdk.BundledVersions.props
|
||||
echo $BUNDLEDVERSIONS
|
||||
grep osx-x64 $BUNDLEDVERSIONS
|
||||
if grep -q freebsd-x64 $BUNDLEDVERSIONS; then
|
||||
echo "BSD already enabled"
|
||||
else
|
||||
echo "Enabling BSD support"
|
||||
sed -i.ORI 's/osx-x64/osx-x64;freebsd-x64/' $BUNDLEDVERSIONS
|
||||
fi
|
||||
displayName: Extra Platform Support
|
||||
displayName: Enable FreeBSD Support
|
||||
- task: Cache@2
|
||||
inputs:
|
||||
key: 'nuget | "$(Agent.OS)" | $(Build.SourcesDirectory)/src/Directory.Packages.props'
|
||||
@@ -84,27 +87,29 @@ stages:
|
||||
NUGET_PACKAGES: $(nugetCacheFolder)
|
||||
- powershell: Get-ChildItem _output\net6.0*,_output\*.Update\* -Recurse | Where { $_.Fullname -notlike "*\publish\*" -and $_.attributes -notlike "*directory*" } | Remove-Item
|
||||
displayName: Clean up intermediate output
|
||||
- publish: $(outputFolder)
|
||||
artifact: '$(osName)Backend'
|
||||
- task: PublishPipelineArtifact@1
|
||||
inputs:
|
||||
path: $(outputFolder)
|
||||
artifact: '$(osName)Backend'
|
||||
artifactType: 'pipeline'
|
||||
parallel: true
|
||||
parallelCount: 100
|
||||
displayName: Publish Backend
|
||||
- publish: '$(testsFolder)/net6.0/win-x64/publish'
|
||||
artifact: win-x64-tests
|
||||
displayName: Publish win-x64 Test Package
|
||||
artifact: WindowsCoreTests
|
||||
displayName: Publish Windows Test Package
|
||||
- publish: '$(testsFolder)/net6.0/linux-x64/publish'
|
||||
artifact: linux-x64-tests
|
||||
displayName: Publish linux-x64 Test Package
|
||||
- publish: '$(testsFolder)/net6.0/linux-x86/publish'
|
||||
artifact: linux-x86-tests
|
||||
displayName: Publish linux-x86 Test Package
|
||||
artifact: LinuxCoreTests
|
||||
displayName: Publish Linux Test Package
|
||||
- publish: '$(testsFolder)/net6.0/linux-musl-x64/publish'
|
||||
artifact: linux-musl-x64-tests
|
||||
displayName: Publish linux-musl-x64 Test Package
|
||||
artifact: LinuxMuslCoreTests
|
||||
displayName: Publish Linux Musl Test Package
|
||||
- publish: '$(testsFolder)/net6.0/freebsd-x64/publish'
|
||||
artifact: freebsd-x64-tests
|
||||
displayName: Publish freebsd-x64 Test Package
|
||||
artifact: FreebsdCoreTests
|
||||
displayName: Publish FreeBSD Test Package
|
||||
- publish: '$(testsFolder)/net6.0/osx-x64/publish'
|
||||
artifact: osx-x64-tests
|
||||
displayName: Publish osx-x64 Test Package
|
||||
artifact: MacCoreTests
|
||||
displayName: Publish MacOS Test Package
|
||||
|
||||
- stage: Build_Backend_Other
|
||||
displayName: Build Backend (Other OS)
|
||||
@@ -136,29 +141,25 @@ stages:
|
||||
inputs:
|
||||
version: $(dotnetVersion)
|
||||
- bash: |
|
||||
SDK_PATH="${AGENT_TOOLSDIRECTORY}/dotnet/sdk/${DOTNETVERSION}"
|
||||
BUNDLEDVERSIONS="${SDK_PATH}/Microsoft.NETCoreSdk.BundledVersions.props"
|
||||
|
||||
if ! grep -q freebsd-x64 $BUNDLEDVERSIONS; then
|
||||
sed -i.ORI 's/osx-x64/osx-x64;freebsd-x64;linux-x86/' $BUNDLEDVERSIONS
|
||||
BUNDLEDVERSIONS=${AGENT_TOOLSDIRECTORY}/dotnet/sdk/${DOTNETVERSION}/Microsoft.NETCoreSdk.BundledVersions.props
|
||||
echo $BUNDLEDVERSIONS
|
||||
grep osx-x64 $BUNDLEDVERSIONS
|
||||
if grep -q freebsd-x64 $BUNDLEDVERSIONS; then
|
||||
echo "BSD already enabled"
|
||||
else
|
||||
echo "Enabling BSD support"
|
||||
sed -i.ORI 's/osx-x64/osx-x64;freebsd-x64/' $BUNDLEDVERSIONS
|
||||
fi
|
||||
displayName: Extra Platform Support
|
||||
displayName: Enable FreeBSD Support
|
||||
- task: Cache@2
|
||||
inputs:
|
||||
key: 'nuget | "$(Agent.OS)" | $(Build.SourcesDirectory)/src/Directory.Packages.props'
|
||||
path: $(nugetCacheFolder)
|
||||
displayName: Cache NuGet packages
|
||||
- bash: ./build.sh --backend --enable-extra-platforms
|
||||
- bash: ./build.sh --backend --enable-bsd
|
||||
displayName: Build Readarr Backend
|
||||
env:
|
||||
NUGET_PACKAGES: $(nugetCacheFolder)
|
||||
- bash: |
|
||||
find ${OUTPUTFOLDER} -type f ! -path "*/publish/*" -exec rm -rf {} \;
|
||||
find ${OUTPUTFOLDER} -depth -empty -type d -exec rm -r "{}" \;
|
||||
find ${TESTSFOLDER} -type f ! -path "*/publish/*" -exec rm -rf {} \;
|
||||
find ${TESTSFOLDER} -depth -empty -type d -exec rm -r "{}" \;
|
||||
displayName: Clean up intermediate output
|
||||
condition: and(succeeded(), ne(variables['osName'], 'Windows'))
|
||||
|
||||
- stage: Build_Frontend
|
||||
displayName: Frontend
|
||||
@@ -261,35 +262,35 @@ stages:
|
||||
artifactName: WindowsFrontend
|
||||
targetPath: _output
|
||||
displayName: Fetch Frontend
|
||||
- bash: ./build.sh --packages --enable-extra-platforms
|
||||
- bash: ./build.sh --packages --enable-bsd
|
||||
displayName: Create Packages
|
||||
- bash: |
|
||||
find . -name "Readarr" -exec chmod a+x {} \;
|
||||
find . -name "Readarr.Update" -exec chmod a+x {} \;
|
||||
displayName: Set executable bits
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create win-x64 zip
|
||||
displayName: Create Windows Core zip
|
||||
inputs:
|
||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Readarr.$(buildName).windows-core-x64.zip'
|
||||
archiveType: 'zip'
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/win-x64/net6.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create win-x86 zip
|
||||
displayName: Create Windows x86 Core zip
|
||||
inputs:
|
||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Readarr.$(buildName).windows-core-x86.zip'
|
||||
archiveType: 'zip'
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/win-x86/net6.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create osx-x64 app
|
||||
displayName: Create MacOS x64 Core app
|
||||
inputs:
|
||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Readarr.$(buildName).osx-app-core-x64.zip'
|
||||
archiveType: 'zip'
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/osx-x64-app/net6.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create osx-x64 tar
|
||||
displayName: Create MacOS x64 Core tar
|
||||
inputs:
|
||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Readarr.$(buildName).osx-core-x64.tar.gz'
|
||||
archiveType: 'tar'
|
||||
@@ -297,14 +298,14 @@ stages:
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/osx-x64/net6.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create osx-arm64 app
|
||||
displayName: Create MacOS arm64 Core app
|
||||
inputs:
|
||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Readarr.$(buildName).osx-app-core-arm64.zip'
|
||||
archiveType: 'zip'
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/osx-arm64-app/net6.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create osx-arm64 tar
|
||||
displayName: Create MacOS arm64 Core tar
|
||||
inputs:
|
||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Readarr.$(buildName).osx-core-arm64.tar.gz'
|
||||
archiveType: 'tar'
|
||||
@@ -312,7 +313,7 @@ stages:
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/osx-arm64/net6.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create linux-x64 tar
|
||||
displayName: Create Linux Core tar
|
||||
inputs:
|
||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Readarr.$(buildName).linux-core-x64.tar.gz'
|
||||
archiveType: 'tar'
|
||||
@@ -320,7 +321,7 @@ stages:
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/linux-x64/net6.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create linux-musl-x64 tar
|
||||
displayName: Create Linux Musl Core tar
|
||||
inputs:
|
||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Readarr.$(buildName).linux-musl-core-x64.tar.gz'
|
||||
archiveType: 'tar'
|
||||
@@ -328,15 +329,7 @@ stages:
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/linux-musl-x64/net6.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create linux-x86 tar
|
||||
inputs:
|
||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Readarr.$(buildName).linux-core-x86.tar.gz'
|
||||
archiveType: 'tar'
|
||||
tarCompression: 'gz'
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/linux-x86/net6.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create linux-arm tar
|
||||
displayName: Create ARM32 Linux Core tar
|
||||
inputs:
|
||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Readarr.$(buildName).linux-core-arm.tar.gz'
|
||||
archiveType: 'tar'
|
||||
@@ -344,7 +337,7 @@ stages:
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/linux-arm/net6.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create linux-musl-arm tar
|
||||
displayName: Create ARM32 Linux Musl Core tar
|
||||
inputs:
|
||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Readarr.$(buildName).linux-musl-core-arm.tar.gz'
|
||||
archiveType: 'tar'
|
||||
@@ -352,7 +345,7 @@ stages:
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/linux-musl-arm/net6.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create linux-arm64 tar
|
||||
displayName: Create Linux arm64 Core tar
|
||||
inputs:
|
||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Readarr.$(buildName).linux-core-arm64.tar.gz'
|
||||
archiveType: 'tar'
|
||||
@@ -360,7 +353,7 @@ stages:
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/linux-arm64/net6.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create linux-musl-arm64 tar
|
||||
displayName: Create ARM64 Linux Musl Core tar
|
||||
inputs:
|
||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Readarr.$(buildName).linux-musl-core-arm64.tar.gz'
|
||||
archiveType: 'tar'
|
||||
@@ -368,7 +361,7 @@ stages:
|
||||
includeRootFolder: false
|
||||
rootFolderOrFile: $(artifactsFolder)/linux-musl-arm64/net6.0
|
||||
- task: ArchiveFiles@2
|
||||
displayName: Create freebsd-x64 tar
|
||||
displayName: Create FreeBSD Core Core tar
|
||||
inputs:
|
||||
archiveFile: '$(Build.ArtifactStagingDirectory)/Readarr.$(buildName).freebsd-core-x64.tar.gz'
|
||||
archiveType: 'tar'
|
||||
@@ -420,22 +413,22 @@ stages:
|
||||
matrix:
|
||||
MacCore:
|
||||
osName: 'Mac'
|
||||
testName: 'osx-x64'
|
||||
testName: 'MacCore'
|
||||
poolName: 'Azure Pipelines'
|
||||
imageName: ${{ variables.macImage }}
|
||||
WindowsCore:
|
||||
osName: 'Windows'
|
||||
testName: 'win-x64'
|
||||
testName: 'WindowsCore'
|
||||
poolName: 'Azure Pipelines'
|
||||
imageName: ${{ variables.windowsImage }}
|
||||
LinuxCore:
|
||||
osName: 'Linux'
|
||||
testName: 'linux-x64'
|
||||
testName: 'LinuxCore'
|
||||
poolName: 'Azure Pipelines'
|
||||
imageName: ${{ variables.linuxImage }}
|
||||
FreebsdCore:
|
||||
osName: 'Linux'
|
||||
testName: 'freebsd-x64'
|
||||
testName: 'FreebsdCore'
|
||||
poolName: 'FreeBSD'
|
||||
imageName:
|
||||
|
||||
@@ -454,7 +447,7 @@ stages:
|
||||
displayName: Download Test Artifact
|
||||
inputs:
|
||||
buildType: 'current'
|
||||
artifactName: '$(testName)-tests'
|
||||
artifactName: '$(testName)Tests'
|
||||
targetPath: $(testsFolder)
|
||||
- powershell: Set-Service SCardSvr -StartupType Manual
|
||||
displayName: Enable Windows Test Service
|
||||
@@ -482,12 +475,8 @@ stages:
|
||||
matrix:
|
||||
alpine:
|
||||
testName: 'Musl Net Core'
|
||||
artifactName: linux-musl-x64-tests
|
||||
artifactName: LinuxMuslCoreTests
|
||||
containerImage: ghcr.io/servarr/testimages:alpine
|
||||
linux-x86:
|
||||
testName: 'linux-x86'
|
||||
artifactName: linux-x86-tests
|
||||
containerImage: ghcr.io/servarr/testimages:linux-x86
|
||||
|
||||
pool:
|
||||
vmImage: ${{ variables.linuxImage }}
|
||||
@@ -498,15 +487,9 @@ stages:
|
||||
|
||||
steps:
|
||||
- task: UseDotNet@2
|
||||
displayName: 'Install .NET'
|
||||
displayName: 'Install .net core'
|
||||
inputs:
|
||||
version: $(dotnetVersion)
|
||||
condition: and(succeeded(), ne(variables['testName'], 'linux-x86'))
|
||||
- bash: |
|
||||
SDKURL=$(curl -s https://api.github.com/repos/Servarr/dotnet-linux-x86/releases | jq -rc '.[].assets[].browser_download_url' | grep sdk-${DOTNETVERSION}.*gz$)
|
||||
curl -fsSL $SDKURL | tar xzf - -C /opt/dotnet
|
||||
displayName: 'Install .NET'
|
||||
condition: and(succeeded(), eq(variables['testName'], 'linux-x86'))
|
||||
- checkout: none
|
||||
- task: DownloadPipelineArtifact@2
|
||||
displayName: Download Test Artifact
|
||||
@@ -540,17 +523,17 @@ stages:
|
||||
matrix:
|
||||
MacCore:
|
||||
osName: 'Mac'
|
||||
testName: 'osx-x64'
|
||||
testName: 'MacCore'
|
||||
imageName: ${{ variables.macImage }}
|
||||
pattern: 'Readarr.*.osx-core-x64.tar.gz'
|
||||
WindowsCore:
|
||||
osName: 'Windows'
|
||||
testName: 'win-x64'
|
||||
testName: 'WindowsCore'
|
||||
imageName: ${{ variables.windowsImage }}
|
||||
pattern: 'Readarr.*.windows-core-x64.zip'
|
||||
LinuxCore:
|
||||
osName: 'Linux'
|
||||
testName: 'linux-x64'
|
||||
testName: 'LinuxCore'
|
||||
imageName: ${{ variables.linuxImage }}
|
||||
pattern: 'Readarr.*.linux-core-x64.tar.gz'
|
||||
|
||||
@@ -567,7 +550,7 @@ stages:
|
||||
displayName: Download Test Artifact
|
||||
inputs:
|
||||
buildType: 'current'
|
||||
artifactName: '$(testName)-tests'
|
||||
artifactName: '$(testName)Tests'
|
||||
targetPath: $(testsFolder)
|
||||
- task: DownloadPipelineArtifact@2
|
||||
displayName: Download Build Artifact
|
||||
@@ -612,7 +595,7 @@ stages:
|
||||
displayName: Download Test Artifact
|
||||
inputs:
|
||||
buildType: 'current'
|
||||
artifactName: 'freebsd-x64-tests'
|
||||
artifactName: 'FreebsdCoreTests'
|
||||
targetPath: $(testsFolder)
|
||||
- task: DownloadPipelineArtifact@2
|
||||
displayName: Download Build Artifact
|
||||
@@ -646,15 +629,11 @@ stages:
|
||||
strategy:
|
||||
matrix:
|
||||
alpine:
|
||||
testName: 'linux-musl-x64'
|
||||
artifactName: linux-musl-x64-tests
|
||||
testName: 'Musl Net Core'
|
||||
artifactName: LinuxMuslCoreTests
|
||||
containerImage: ghcr.io/servarr/testimages:alpine
|
||||
pattern: 'Readarr.*.linux-musl-core-x64.tar.gz'
|
||||
linux-x86:
|
||||
testName: 'linux-x86'
|
||||
artifactName: linux-x86-tests
|
||||
containerImage: ghcr.io/servarr/testimages:linux-x86
|
||||
pattern: 'Readarr.*.linux-core-x86.tar.gz'
|
||||
|
||||
pool:
|
||||
vmImage: ${{ variables.linuxImage }}
|
||||
|
||||
@@ -664,15 +643,9 @@ stages:
|
||||
|
||||
steps:
|
||||
- task: UseDotNet@2
|
||||
displayName: 'Install .NET'
|
||||
displayName: 'Install .net core'
|
||||
inputs:
|
||||
version: $(dotnetVersion)
|
||||
condition: and(succeeded(), ne(variables['testName'], 'linux-x86'))
|
||||
- bash: |
|
||||
SDKURL=$(curl -s https://api.github.com/repos/Servarr/dotnet-linux-x86/releases | jq -rc '.[].assets[].browser_download_url' | grep sdk-${DOTNETVERSION}.*gz$)
|
||||
curl -fsSL $SDKURL | tar xzf - -C /opt/dotnet
|
||||
displayName: 'Install .NET'
|
||||
condition: and(succeeded(), eq(variables['testName'], 'linux-x86'))
|
||||
- checkout: none
|
||||
- task: DownloadPipelineArtifact@2
|
||||
displayName: Download Test Artifact
|
||||
@@ -718,17 +691,14 @@ stages:
|
||||
matrix:
|
||||
Linux:
|
||||
osName: 'Linux'
|
||||
artifactName: 'linux-x64'
|
||||
imageName: ${{ variables.linuxImage }}
|
||||
pattern: 'Readarr.*.linux-core-x64.tar.gz'
|
||||
Mac:
|
||||
osName: 'Mac'
|
||||
artifactName: 'osx-x64'
|
||||
imageName: ${{ variables.macImage }}
|
||||
pattern: 'Readarr.*.osx-core-x64.tar.gz'
|
||||
Windows:
|
||||
osName: 'Windows'
|
||||
artifactName: 'win-x64'
|
||||
imageName: ${{ variables.windowsImage }}
|
||||
pattern: 'Readarr.*.windows-core-x64.zip'
|
||||
|
||||
@@ -745,7 +715,7 @@ stages:
|
||||
displayName: Download Test Artifact
|
||||
inputs:
|
||||
buildType: 'current'
|
||||
artifactName: '$(artifactName)-tests'
|
||||
artifactName: '$(osName)CoreTests'
|
||||
targetPath: $(testsFolder)
|
||||
- task: DownloadPipelineArtifact@2
|
||||
displayName: Download Build Artifact
|
||||
|
||||
45
build.sh
45
build.sh
@@ -27,22 +27,15 @@ UpdateVersionNumber()
|
||||
fi
|
||||
}
|
||||
|
||||
EnableExtraPlatformsInSDK()
|
||||
EnableBsdSupport()
|
||||
{
|
||||
SDK_PATH=$(dotnet --list-sdks | grep -P '6\.\d\.\d+' | head -1 | sed 's/\(6\.[0-9]*\.[0-9]*\).*\[\(.*\)\]/\2\/\1/g')
|
||||
BUNDLEDVERSIONS="${SDK_PATH}/Microsoft.NETCoreSdk.BundledVersions.props"
|
||||
if grep -q freebsd-x64 $BUNDLEDVERSIONS; then
|
||||
echo "Extra platforms already enabled"
|
||||
else
|
||||
echo "Enabling extra platform support"
|
||||
sed -i.ORI 's/osx-x64/osx-x64;freebsd-x64;linux-x86/' $BUNDLEDVERSIONS
|
||||
fi
|
||||
}
|
||||
#todo enable sdk with
|
||||
#SDK_PATH=$(dotnet --list-sdks | grep -P '5\.\d\.\d+' | head -1 | sed 's/\(5\.[0-9]*\.[0-9]*\).*\[\(.*\)\]/\2\/\1/g')
|
||||
# BUNDLED_VERSIONS="${SDK_PATH}/Microsoft.NETCoreSdk.BundledVersions.props"
|
||||
|
||||
EnableExtraPlatforms()
|
||||
{
|
||||
if grep -qv freebsd-x64 src/Directory.Build.props; then
|
||||
sed -i'' -e "s^<RuntimeIdentifiers>\(.*\)</RuntimeIdentifiers>^<RuntimeIdentifiers>\1;freebsd-x64;linux-x86</RuntimeIdentifiers>^g" src/Directory.Build.props
|
||||
sed -i'' -e "s^<RuntimeIdentifiers>\(.*\)</RuntimeIdentifiers>^<RuntimeIdentifiers>\1;freebsd-x64</RuntimeIdentifiers>^g" src/Directory.Build.props
|
||||
sed -i'' -e "s^<ExcludedRuntimeFrameworkPairs>\(.*\)</ExcludedRuntimeFrameworkPairs>^<ExcludedRuntimeFrameworkPairs>\1;freebsd-x64:net472</ExcludedRuntimeFrameworkPairs>^g" src/Directory.Build.props
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -299,8 +292,7 @@ if [ $# -eq 0 ]; then
|
||||
PACKAGES=YES
|
||||
INSTALLER=NO
|
||||
LINT=YES
|
||||
ENABLE_EXTRA_PLATFORMS=NO
|
||||
ENABLE_EXTRA_PLATFORMS_IN_SDK=NO
|
||||
ENABLE_BSD=NO
|
||||
fi
|
||||
|
||||
while [[ $# -gt 0 ]]
|
||||
@@ -312,12 +304,8 @@ case $key in
|
||||
BACKEND=YES
|
||||
shift # past argument
|
||||
;;
|
||||
--enable-bsd|--enable-extra-platforms)
|
||||
ENABLE_EXTRA_PLATFORMS=YES
|
||||
shift # past argument
|
||||
;;
|
||||
--enable-extra-platforms-in-sdk)
|
||||
ENABLE_EXTRA_PLATFORMS_IN_SDK=YES
|
||||
--enable-bsd)
|
||||
ENABLE_BSD=YES
|
||||
shift # past argument
|
||||
;;
|
||||
-r|--runtime)
|
||||
@@ -361,17 +349,12 @@ esac
|
||||
done
|
||||
set -- "${POSITIONAL[@]}" # restore positional parameters
|
||||
|
||||
if [ "$ENABLE_EXTRA_PLATFORMS_IN_SDK" = "YES" ];
|
||||
then
|
||||
EnableExtraPlatformsInSDK
|
||||
fi
|
||||
|
||||
if [ "$BACKEND" = "YES" ];
|
||||
then
|
||||
UpdateVersionNumber
|
||||
if [ "$ENABLE_EXTRA_PLATFORMS" = "YES" ];
|
||||
if [ "$ENABLE_BSD" = "YES" ];
|
||||
then
|
||||
EnableExtraPlatforms
|
||||
EnableBsdSupport
|
||||
fi
|
||||
Build
|
||||
if [[ -z "$RID" || -z "$FRAMEWORK" ]];
|
||||
@@ -381,10 +364,9 @@ then
|
||||
PackageTests "net6.0" "linux-x64"
|
||||
PackageTests "net6.0" "linux-musl-x64"
|
||||
PackageTests "net6.0" "osx-x64"
|
||||
if [ "$ENABLE_EXTRA_PLATFORMS" = "YES" ];
|
||||
if [ "$ENABLE_BSD" = "YES" ];
|
||||
then
|
||||
PackageTests "net6.0" "freebsd-x64"
|
||||
PackageTests "net6.0" "linux-x86"
|
||||
fi
|
||||
else
|
||||
PackageTests "$FRAMEWORK" "$RID"
|
||||
@@ -423,10 +405,9 @@ then
|
||||
Package "net6.0" "linux-musl-arm"
|
||||
Package "net6.0" "osx-x64"
|
||||
Package "net6.0" "osx-arm64"
|
||||
if [ "$ENABLE_EXTRA_PLATFORMS" = "YES" ];
|
||||
if [ "$ENABLE_BSD" = "YES" ];
|
||||
then
|
||||
Package "net6.0" "freebsd-x64"
|
||||
Package "net6.0" "linux-x86"
|
||||
fi
|
||||
else
|
||||
Package "$FRAMEWORK" "$RID"
|
||||
|
||||
94
changelogs/CHANGELOG-v0.1.1.1320.md
Normal file
94
changelogs/CHANGELOG-v0.1.1.1320.md
Normal file
@@ -0,0 +1,94 @@
|
||||
# New Beta Release
|
||||
|
||||
Readarr v0.1.1.1320 has been released on `develop`
|
||||
|
||||
- **Users who do not wish to be on the alpha `nightly` testing branch should take advantage of this parity and switch to `develop`**
|
||||
|
||||
A reminder about the `develop` and `nightly` branches
|
||||
|
||||
- **develop** - Current Develop/Beta - (Beta): This is the testing edge. Released after tested in nightly to ensure no immediate issues. New features and bug fixes released here first after nightly. It can be considered semi-stable, but is still beta.
|
||||
- **nightly** - Current Nightly/Unstable - (Alpha/Unstable) : This is the bleeding edge. It is released as soon as code is committed and passes all automated tests. This build may have not been used by us or other users yet. There is no guarantee that it will even run in some cases. This branch is only recommended for advanced users. Issues and self investigation are expected in this branch. Use this branch only if you know what you are doing and are willing to get your hands dirty to recover a failed update. This version is updated immediately.
|
||||
|
||||
# Announcements
|
||||
|
||||
- Automated API Documentation Updates recently implemented
|
||||
- [Wiki Contributions](https://wiki.servarr.com/readarr) and updates welcome and encouraged on the Wiki itself or via GitHub
|
||||
|
||||
# Additional Commentary
|
||||
|
||||
- [Lidarr v1 released](https://www.reddit.com/r/Lidarr/comments/ul0b2w/new_release_develop_v1012578/)
|
||||
- [Lidarr](https://lidarr.audio/donate), [Prowlarr](https://prowlarr.com/donate), [Radarr](https://radarr.video/donate), [Readarr](https://readarr.com/donate) now accept direct bitcoin donations
|
||||
- Radarr Postgres Database Support in `nightly` and `develop`
|
||||
- [Lidarr Postgres Database Support in development (Draft PR#2625)](https://github.com/Lidarr/Lidarr/pull/2625)
|
||||
|
||||
# Releases
|
||||
|
||||
## Native
|
||||
|
||||
- [GitHub Releases](https://github.com/Readarr/Readarr/releases)
|
||||
|
||||
- [Wiki Installation Instructions](https://wiki.servarr.com/readarr/installation)
|
||||
|
||||
## Docker
|
||||
|
||||
- [hotio/Readarr:testing](https://hotio.dev/containers/readarr)
|
||||
|
||||
- [lscr.io/linuxserver/Readarr:develop](https://docs.linuxserver.io/images/docker-readarr)
|
||||
|
||||
## NAS Packages
|
||||
|
||||
- Synology - Please ask the SynoCommunity to update the base package; however, you can update in-app normally
|
||||
|
||||
- QNAP - Please ask the QNAP to update the base package; however, you should be able to update in-app normally
|
||||
|
||||
------------
|
||||
|
||||
# Release Notes
|
||||
|
||||
## v0.1.1.1320 (changes since v0.1.0.1248)
|
||||
|
||||
- Fixed: Correct User-Agent api logging
|
||||
|
||||
- Fixed: UI hiding search results with duplicate GUIDs
|
||||
|
||||
- New: Add date picker for custom filter dates
|
||||
|
||||
- Fixed: Interactive Search Filter not filtering multiple qualities in the same filter row
|
||||
|
||||
- Fixed: Clarify Qbit Content Path Error
|
||||
|
||||
- Fixed: Properly handle 119 error code from Synology Download Station
|
||||
|
||||
- Fixed: API error when sending payload without optional parameters
|
||||
|
||||
- Fixed: Cleanup Temp files after backup creation
|
||||
|
||||
- Fixed: Loading old commands from database
|
||||
|
||||
- New: Update Cert Validation Help Text
|
||||
|
||||
- Fixed: Clarify Indexer Priority Helptext
|
||||
|
||||
- Fixed: Improve help text for download client Category
|
||||
|
||||
- Fixed: IPv4 instead of IP4
|
||||
|
||||
- New: Add Validations for Recycle Bin Folder
|
||||
|
||||
- New: .NET 6.0.3
|
||||
|
||||
- Fixed: Healthcheck warning message used incorrect variable
|
||||
|
||||
- Fixed: Assume SABnzbd develop version is 3.0.0 if not specified
|
||||
|
||||
- Fixed: Updater version number logging
|
||||
|
||||
- Fixed: Update from version in logs
|
||||
|
||||
- New: Add more information about Windows service to installer
|
||||
|
||||
- Fixed: Recycle bin log message
|
||||
|
||||
- Fixed: Make authentication cookie name unique to Readarr
|
||||
|
||||
- Other bug fixes and improvements, see GitHub history
|
||||
2
changelogs/templates/announcements.md
Normal file
2
changelogs/templates/announcements.md
Normal file
@@ -0,0 +1,2 @@
|
||||
- Automated API Documentation Updates recently implemented
|
||||
- [Wiki Contributions](https://wiki.servarr.com/readarr) and updates welcome and encouraged on the Wiki itself or via GitHub
|
||||
6
changelogs/templates/branch-develop.md
Normal file
6
changelogs/templates/branch-develop.md
Normal file
@@ -0,0 +1,6 @@
|
||||
- **Users who do not wish to be on the alpha `nightly` testing branch should take advantage of this parity and switch to `develop`**
|
||||
|
||||
A reminder about the `develop` and `nightly` branches
|
||||
|
||||
- **develop** - Current Develop/Beta - (Beta): This is the testing edge. Released after tested in nightly to ensure no immediate issues. New features and bug fixes released here first after nightly. It can be considered semi-stable, but is still beta.
|
||||
- **nightly** - Current Nightly/Unstable - (Alpha/Unstable) : This is the bleeding edge. It is released as soon as code is committed and passes all automated tests. This build may have not been used by us or other users yet. There is no guarantee that it will even run in some cases. This branch is only recommended for advanced users. Issues and self investigation are expected in this branch. Use this branch only if you know what you are doing and are willing to get your hands dirty to recover a failed update. This version is updated immediately.
|
||||
6
changelogs/templates/branch-master.md
Normal file
6
changelogs/templates/branch-master.md
Normal file
@@ -0,0 +1,6 @@
|
||||
- **Users who do not wish to be on the alpha `nightly` or beta `develop` testing branches should take advantage of this parity and switch to `master`
|
||||
|
||||
A reminder about the `develop` and `nightly` branches
|
||||
|
||||
- **develop** - Current Develop/Beta - (Beta): This is the testing edge. Released after tested in nightly to ensure no immediate issues. New features and bug fixes released here first after nightly. It can be considered semi-stable, but is still beta.**
|
||||
- **nightly** - Current Nightly/Unstable - (Alpha/Unstable) : This is the bleeding edge. It is released as soon as code is committed and passes all automated tests. This build may have not been used by us or other users yet. There is no guarantee that it will even run in some cases. This branch is only recommended for advanced users. Issues and self investigation are expected in this branch. Use this branch only if you know what you are doing and are willing to get your hands dirty to recover a failed update. This version is updated immediately.**
|
||||
4
changelogs/templates/commentary.md
Normal file
4
changelogs/templates/commentary.md
Normal file
@@ -0,0 +1,4 @@
|
||||
- [Lidarr v1 released](https://www.reddit.com/r/Lidarr/comments/ul0b2w/new_release_develop_v1012578/)
|
||||
- [Lidarr](https://lidarr.audio/donate), [Prowlarr](https://prowlarr.com/donate), [Radarr](https://radarr.video/donate), [Readarr](https://readarr.com/donate) now accept direct bitcoin donations
|
||||
- Radarr Postgres Database Support in `nightly` and `develop`
|
||||
- [Lidarr Postgres Database Support in development (Draft PR#2625)](https://github.com/Lidarr/Lidarr/pull/2625)
|
||||
@@ -8,17 +8,17 @@ function AuthorMonitorNewItemsOptionsPopoverContent() {
|
||||
<DescriptionList>
|
||||
<DescriptionListItem
|
||||
title={translate('AllBooks')}
|
||||
data={translate('DataNewAllBooks')}
|
||||
data="Monitor all new books"
|
||||
/>
|
||||
|
||||
<DescriptionListItem
|
||||
title={translate('NewBooks')}
|
||||
data={translate('DataNewBooks')}
|
||||
data="Monitor new books released after the newest existing book"
|
||||
/>
|
||||
|
||||
<DescriptionListItem
|
||||
title={translate('None')}
|
||||
data={translate('DataNewNone')}
|
||||
data="Don't monitor any new books"
|
||||
/>
|
||||
</DescriptionList>
|
||||
);
|
||||
|
||||
@@ -8,42 +8,42 @@ function AuthorMonitoringOptionsPopoverContent() {
|
||||
return (
|
||||
<>
|
||||
<Alert>
|
||||
{translate('MonitoringOptionsHelpText')}
|
||||
This is a one time adjustment to set which books are monitored
|
||||
</Alert>
|
||||
<DescriptionList>
|
||||
<DescriptionListItem
|
||||
title={translate('AllBooks')}
|
||||
data={translate('DataAllBooks')}
|
||||
data="Monitor all books"
|
||||
/>
|
||||
|
||||
<DescriptionListItem
|
||||
title={translate('FutureBooks')}
|
||||
data={translate('DataFutureBooks')}
|
||||
data="Monitor books that have not released yet"
|
||||
/>
|
||||
|
||||
<DescriptionListItem
|
||||
title={translate('MissingBooks')}
|
||||
data={translate('DataMissingBooks')}
|
||||
data="Monitor books that do not have files or have not released yet"
|
||||
/>
|
||||
|
||||
<DescriptionListItem
|
||||
title={translate('ExistingBooks')}
|
||||
data={translate('DataExistingBooks')}
|
||||
data="Monitor books that have files or have not released yet"
|
||||
/>
|
||||
|
||||
<DescriptionListItem
|
||||
title={translate('FirstBook')}
|
||||
data={translate('DataFirstBook')}
|
||||
data="Monitor the first book. All other books will be ignored"
|
||||
/>
|
||||
|
||||
<DescriptionListItem
|
||||
title={translate('LatestBook')}
|
||||
data={translate('DataLatestBook')}
|
||||
data="Monitor the latest book and future books"
|
||||
/>
|
||||
|
||||
<DescriptionListItem
|
||||
title={translate('None')}
|
||||
data={translate('DataNone')}
|
||||
data="No books will be monitored"
|
||||
/>
|
||||
</DescriptionList>
|
||||
</>
|
||||
|
||||
@@ -8,7 +8,7 @@ import AppRoutes from './AppRoutes';
|
||||
|
||||
function App({ store, history }) {
|
||||
return (
|
||||
<DocumentTitle title={window.Readarr.instanceName}>
|
||||
<DocumentTitle title="Readarr">
|
||||
<Provider store={store}>
|
||||
<ConnectedRouter history={history}>
|
||||
<PageConnector>
|
||||
|
||||
@@ -267,7 +267,7 @@ class AuthorEditorFooter extends Component {
|
||||
isDisabled={!selectedCount || isOrganizingAuthor || isRetaggingAuthor}
|
||||
onPress={onOrganizeAuthorPress}
|
||||
>
|
||||
{translate('RenameFiles')}
|
||||
Rename Files
|
||||
</SpinnerButton>
|
||||
|
||||
<SpinnerButton
|
||||
@@ -277,7 +277,7 @@ class AuthorEditorFooter extends Component {
|
||||
isDisabled={!selectedCount || isOrganizingAuthor || isRetaggingAuthor}
|
||||
onPress={onRetagAuthorPress}
|
||||
>
|
||||
{translate('WriteMetadataTags')}
|
||||
Write Metadata Tags
|
||||
</SpinnerButton>
|
||||
|
||||
<SpinnerButton
|
||||
@@ -286,7 +286,7 @@ class AuthorEditorFooter extends Component {
|
||||
isDisabled={!selectedCount || isOrganizingAuthor || isRetaggingAuthor}
|
||||
onPress={this.onTagsPress}
|
||||
>
|
||||
{translate('SetReadarrTags')}
|
||||
Set Readarr Tags
|
||||
</SpinnerButton>
|
||||
|
||||
<SpinnerButton
|
||||
@@ -296,7 +296,7 @@ class AuthorEditorFooter extends Component {
|
||||
isDisabled={!selectedCount || isDeleting}
|
||||
onPress={this.onDeleteSelectedPress}
|
||||
>
|
||||
{translate('Delete')}
|
||||
Delete
|
||||
</SpinnerButton>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -8,7 +8,6 @@ import * as commandNames from 'Commands/commandNames';
|
||||
import { toggleBooksMonitored } from 'Store/Actions/bookActions';
|
||||
import { clearBookFiles, fetchBookFiles } from 'Store/Actions/bookFileActions';
|
||||
import { executeCommand } from 'Store/Actions/commandActions';
|
||||
import { clearEditions, fetchEditions } from 'Store/Actions/editionActions';
|
||||
import { cancelFetchReleases, clearReleases } from 'Store/Actions/releaseActions';
|
||||
import createAllAuthorSelector from 'Store/Selectors/createAllAuthorsSelector';
|
||||
import createCommandsSelector from 'Store/Selectors/createCommandsSelector';
|
||||
@@ -44,12 +43,11 @@ function createMapStateToProps() {
|
||||
(state, { titleSlug }) => titleSlug,
|
||||
selectBookFiles,
|
||||
(state) => state.books,
|
||||
(state) => state.editions,
|
||||
createAllAuthorSelector(),
|
||||
createCommandsSelector(),
|
||||
createUISettingsSelector(),
|
||||
createDimensionsSelector(),
|
||||
(titleSlug, bookFiles, books, editions, authors, commands, uiSettings, dimensions) => {
|
||||
(titleSlug, bookFiles, books, authors, commands, uiSettings, dimensions) => {
|
||||
const book = books.items.find((b) => b.titleSlug === titleSlug);
|
||||
const author = authors.find((a) => a.id === book.authorId);
|
||||
const sortedBooks = books.items.filter((b) => b.authorId === book.authorId);
|
||||
@@ -81,8 +79,8 @@ function createMapStateToProps() {
|
||||
isRefreshingCommand.body.bookId === book.id
|
||||
);
|
||||
|
||||
const isFetching = isBookFilesFetching || editions.isFetching;
|
||||
const isPopulated = isBookFilesPopulated && editions.isPopulated;
|
||||
const isFetching = isBookFilesFetching;
|
||||
const isPopulated = isBookFilesPopulated;
|
||||
|
||||
return {
|
||||
...book,
|
||||
@@ -106,8 +104,6 @@ const mapDispatchToProps = {
|
||||
executeCommand,
|
||||
fetchBookFiles,
|
||||
clearBookFiles,
|
||||
fetchEditions,
|
||||
clearEditions,
|
||||
clearReleases,
|
||||
cancelFetchReleases,
|
||||
toggleBooksMonitored
|
||||
@@ -125,8 +121,7 @@ class BookDetailsConnector extends Component {
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps) {
|
||||
if (prevProps.id !== this.props.id ||
|
||||
!_.isEqual(getMonitoredEditions(prevProps), getMonitoredEditions(this.props)) ||
|
||||
if (!_.isEqual(getMonitoredEditions(prevProps), getMonitoredEditions(this.props)) ||
|
||||
(prevProps.anyReleaseOk === false && this.props.anyReleaseOk === true)) {
|
||||
this.unpopulate();
|
||||
this.populate();
|
||||
@@ -145,14 +140,12 @@ class BookDetailsConnector extends Component {
|
||||
const bookId = this.props.id;
|
||||
|
||||
this.props.fetchBookFiles({ bookId });
|
||||
this.props.fetchEditions({ bookId });
|
||||
}
|
||||
|
||||
unpopulate = () => {
|
||||
this.props.cancelFetchReleases();
|
||||
this.props.clearReleases();
|
||||
this.props.clearBookFiles();
|
||||
this.props.clearEditions();
|
||||
}
|
||||
|
||||
//
|
||||
@@ -202,8 +195,6 @@ BookDetailsConnector.propTypes = {
|
||||
titleSlug: PropTypes.string.isRequired,
|
||||
fetchBookFiles: PropTypes.func.isRequired,
|
||||
clearBookFiles: PropTypes.func.isRequired,
|
||||
fetchEditions: PropTypes.func.isRequired,
|
||||
clearEditions: PropTypes.func.isRequired,
|
||||
clearReleases: PropTypes.func.isRequired,
|
||||
cancelFetchReleases: PropTypes.func.isRequired,
|
||||
toggleBooksMonitored: PropTypes.func.isRequired,
|
||||
|
||||
@@ -8,25 +8,15 @@ import createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';
|
||||
import createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';
|
||||
import BookDetailsHeader from './BookDetailsHeader';
|
||||
|
||||
const selectOverview = createSelector(
|
||||
(state) => state.editions,
|
||||
(editions) => {
|
||||
const monitored = editions.items.find((e) => e.monitored === true);
|
||||
return monitored?.overview;
|
||||
}
|
||||
);
|
||||
|
||||
function createMapStateToProps() {
|
||||
return createSelector(
|
||||
createBookSelector(),
|
||||
selectOverview,
|
||||
createUISettingsSelector(),
|
||||
createDimensionsSelector(),
|
||||
(book, overview, uiSettings, dimensions) => {
|
||||
(book, uiSettings, dimensions) => {
|
||||
|
||||
return {
|
||||
...book,
|
||||
overview,
|
||||
shortDateFormat: uiSettings.shortDateFormat,
|
||||
isSmallScreen: dimensions.isSmallScreen
|
||||
};
|
||||
|
||||
@@ -53,7 +53,7 @@ class EditBookModalContent extends Component {
|
||||
editions
|
||||
} = item;
|
||||
|
||||
const hasFile = statistics ? statistics.bookFileCount > 0 : false;
|
||||
const hasFile = statistics ? statistics.bookFileCount : 0;
|
||||
const errorMessage = getErrorMessage(error, 'Unable to load editions');
|
||||
|
||||
return (
|
||||
|
||||
@@ -4,7 +4,7 @@ import React, { Component } from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
import { createSelector } from 'reselect';
|
||||
import { saveBook, setBookValue } from 'Store/Actions/bookActions';
|
||||
import { saveEditions } from 'Store/Actions/editionActions';
|
||||
import { clearEditions, fetchEditions } from 'Store/Actions/editionActions';
|
||||
import createAuthorSelector from 'Store/Selectors/createAuthorSelector';
|
||||
import createBookSelector from 'Store/Selectors/createBookSelector';
|
||||
import selectSettings from 'Store/Selectors/selectSettings';
|
||||
@@ -26,14 +26,17 @@ function createMapStateToProps() {
|
||||
const {
|
||||
isFetching,
|
||||
isPopulated,
|
||||
error
|
||||
error,
|
||||
items
|
||||
} = editionState;
|
||||
|
||||
book.editions = items;
|
||||
|
||||
const bookSettings = _.pick(book, [
|
||||
'monitored',
|
||||
'anyEditionOk'
|
||||
'anyEditionOk',
|
||||
'editions'
|
||||
]);
|
||||
bookSettings.editions = editionState.items;
|
||||
|
||||
const settings = selectSettings(bookSettings, pendingChanges, saveError);
|
||||
|
||||
@@ -55,9 +58,10 @@ function createMapStateToProps() {
|
||||
}
|
||||
|
||||
const mapDispatchToProps = {
|
||||
dispatchFetchEditions: fetchEditions,
|
||||
dispatchClearEditions: clearEditions,
|
||||
dispatchSetBookValue: setBookValue,
|
||||
dispatchSaveBook: saveBook,
|
||||
dispatchSaveEditions: saveEditions
|
||||
dispatchSaveBook: saveBook
|
||||
};
|
||||
|
||||
class EditBookModalContentConnector extends Component {
|
||||
@@ -65,12 +69,20 @@ class EditBookModalContentConnector extends Component {
|
||||
//
|
||||
// Lifecycle
|
||||
|
||||
componentDidMount() {
|
||||
this.props.dispatchFetchEditions({ bookId: this.props.bookId });
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps, prevState) {
|
||||
if (prevProps.isSaving && !this.props.isSaving && !this.props.saveError) {
|
||||
this.props.onModalClose();
|
||||
}
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this.props.dispatchClearEditions();
|
||||
}
|
||||
|
||||
//
|
||||
// Listeners
|
||||
|
||||
@@ -82,9 +94,6 @@ class EditBookModalContentConnector extends Component {
|
||||
this.props.dispatchSaveBook({
|
||||
id: this.props.bookId
|
||||
});
|
||||
this.props.dispatchSaveEditions({
|
||||
id: this.props.bookId
|
||||
});
|
||||
}
|
||||
|
||||
//
|
||||
@@ -105,9 +114,10 @@ EditBookModalContentConnector.propTypes = {
|
||||
bookId: PropTypes.number,
|
||||
isSaving: PropTypes.bool.isRequired,
|
||||
saveError: PropTypes.object,
|
||||
dispatchFetchEditions: PropTypes.func.isRequired,
|
||||
dispatchClearEditions: PropTypes.func.isRequired,
|
||||
dispatchSetBookValue: PropTypes.func.isRequired,
|
||||
dispatchSaveBook: PropTypes.func.isRequired,
|
||||
dispatchSaveEditions: PropTypes.func.isRequired,
|
||||
onModalClose: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ import { connect } from 'react-redux';
|
||||
import { createSelector } from 'reselect';
|
||||
import * as commandNames from 'Commands/commandNames';
|
||||
import { executeCommand } from 'Store/Actions/commandActions';
|
||||
import createBookAuthorSelector from 'Store/Selectors/createBookAuthorSelector';
|
||||
import createBookQualityProfileSelector from 'Store/Selectors/createBookQualityProfileSelector';
|
||||
import createBookSelector from 'Store/Selectors/createBookSelector';
|
||||
import createExecutingCommandsSelector from 'Store/Selectors/createExecutingCommandsSelector';
|
||||
@@ -33,13 +32,11 @@ function selectShowSearchAction() {
|
||||
function createMapStateToProps() {
|
||||
return createSelector(
|
||||
createBookSelector(),
|
||||
createBookAuthorSelector(),
|
||||
createBookQualityProfileSelector(),
|
||||
selectShowSearchAction(),
|
||||
createExecutingCommandsSelector(),
|
||||
(
|
||||
book,
|
||||
author,
|
||||
qualityProfile,
|
||||
showSearchAction,
|
||||
executingCommands
|
||||
@@ -57,7 +54,7 @@ function createMapStateToProps() {
|
||||
const isRefreshingBook = executingCommands.some((command) => {
|
||||
return (
|
||||
(command.name === commandNames.REFRESH_AUTHOR &&
|
||||
command.body.authorId === book.authorId) ||
|
||||
command.body.authorId === book.author.id) ||
|
||||
(command.name === commandNames.REFRESH_BOOK &&
|
||||
command.body.bookId === book.id)
|
||||
);
|
||||
@@ -66,7 +63,7 @@ function createMapStateToProps() {
|
||||
const isSearchingBook = executingCommands.some((command) => {
|
||||
return (
|
||||
(command.name === commandNames.AUTHOR_SEARCH &&
|
||||
command.body.authorId === book.authorId) ||
|
||||
command.body.authorId === book.author.id) ||
|
||||
(command.name === commandNames.BOOK_SEARCH &&
|
||||
command.body.bookIds.includes(book.id))
|
||||
);
|
||||
@@ -74,7 +71,6 @@ function createMapStateToProps() {
|
||||
|
||||
return {
|
||||
...book,
|
||||
author,
|
||||
qualityProfile,
|
||||
showSearchAction,
|
||||
isRefreshingBook,
|
||||
|
||||
@@ -12,7 +12,6 @@ import SpinnerIconButton from 'Components/Link/SpinnerIconButton';
|
||||
import { icons } from 'Helpers/Props';
|
||||
import dimensions from 'Styles/Variables/dimensions';
|
||||
import fonts from 'Styles/Variables/fonts';
|
||||
import createAjaxRequest from 'Utilities/createAjaxRequest';
|
||||
import stripHtml from 'Utilities/String/stripHtml';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import BookIndexOverviewInfo from './BookIndexOverviewInfo';
|
||||
@@ -43,26 +42,10 @@ class BookIndexOverview extends Component {
|
||||
|
||||
this.state = {
|
||||
isEditAuthorModalOpen: false,
|
||||
isDeleteAuthorModalOpen: false,
|
||||
overview: ''
|
||||
isDeleteAuthorModalOpen: false
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
const { id } = this.props;
|
||||
|
||||
// Note that this component is lazy loaded by the virtualised view.
|
||||
// We want to avoid storing overviews for *all* books which is
|
||||
// why it's not put into the redux store
|
||||
const promise = createAjaxRequest({
|
||||
url: `/book/${id}/overview`
|
||||
}).request;
|
||||
|
||||
promise.done((data) => {
|
||||
this.setState({ overview: data.overview });
|
||||
});
|
||||
}
|
||||
|
||||
//
|
||||
// Listeners
|
||||
|
||||
@@ -101,6 +84,7 @@ class BookIndexOverview extends Component {
|
||||
const {
|
||||
id,
|
||||
title,
|
||||
overview,
|
||||
monitored,
|
||||
titleSlug,
|
||||
nextAiring,
|
||||
@@ -134,7 +118,6 @@ class BookIndexOverview extends Component {
|
||||
} = statistics;
|
||||
|
||||
const {
|
||||
overview,
|
||||
isEditAuthorModalOpen,
|
||||
isDeleteAuthorModalOpen
|
||||
} = this.state;
|
||||
@@ -284,6 +267,7 @@ class BookIndexOverview extends Component {
|
||||
BookIndexOverview.propTypes = {
|
||||
id: PropTypes.number.isRequired,
|
||||
title: PropTypes.string.isRequired,
|
||||
overview: PropTypes.string.isRequired,
|
||||
monitored: PropTypes.bool.isRequired,
|
||||
titleSlug: PropTypes.string.isRequired,
|
||||
nextAiring: PropTypes.string,
|
||||
|
||||
@@ -6,7 +6,6 @@ import SelectInput from 'Components/Form/SelectInput';
|
||||
import SpinnerButton from 'Components/Link/SpinnerButton';
|
||||
import PageContentFooter from 'Components/Page/PageContentFooter';
|
||||
import { kinds } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import styles from './BookshelfFooter.css';
|
||||
|
||||
const NO_CHANGE = 'noChange';
|
||||
@@ -115,7 +114,7 @@ class BookshelfFooter extends Component {
|
||||
|
||||
<div className={styles.inputContainer}>
|
||||
<div className={styles.label}>
|
||||
{translate('MonitorExistingBooks')}
|
||||
Monitor Existing Books
|
||||
</div>
|
||||
|
||||
<MonitorBooksSelectInput
|
||||
@@ -129,7 +128,7 @@ class BookshelfFooter extends Component {
|
||||
|
||||
<div className={styles.inputContainer}>
|
||||
<div className={styles.label}>
|
||||
{translate('MonitorNewBooks')}
|
||||
Monitor New Books
|
||||
</div>
|
||||
|
||||
<MonitorNewItemsSelectInput
|
||||
@@ -153,7 +152,7 @@ class BookshelfFooter extends Component {
|
||||
isDisabled={!selectedCount || noChanges}
|
||||
onPress={this.onUpdateSelectedPress}
|
||||
>
|
||||
{translate('UpdateSelected')}
|
||||
Update Selected
|
||||
</SpinnerButton>
|
||||
</div>
|
||||
</PageContentFooter>
|
||||
|
||||
@@ -2,7 +2,6 @@ import PropTypes from 'prop-types';
|
||||
import React from 'react';
|
||||
import Link from 'Components/Link/Link';
|
||||
import { inputTypes } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
// import translate from 'Utilities/String/translate';
|
||||
import AutoCompleteInput from './AutoCompleteInput';
|
||||
import BookEditionSelectInputConnector from './BookEditionSelectInputConnector';
|
||||
@@ -217,7 +216,7 @@ function FormInputGroup(props) {
|
||||
<Link
|
||||
to={helpLink}
|
||||
>
|
||||
{translate('MoreInfo')}
|
||||
More Info
|
||||
</Link>
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ function PageContent(props) {
|
||||
|
||||
return (
|
||||
<ErrorBoundary errorComponent={PageContentError}>
|
||||
<DocumentTitle title={title ? `${title} - ${window.Readarr.instanceName}` : window.Readarr.instanceName}>
|
||||
<DocumentTitle title={title ? `${title} - Readarr` : 'Readarr'}>
|
||||
<div className={className}>
|
||||
{children}
|
||||
</div>
|
||||
|
||||
@@ -126,7 +126,7 @@ class AddAuthorOptionsForm extends Component {
|
||||
|
||||
<FormGroup className={showMetadataProfile ? undefined : styles.hideMetadataProfile}>
|
||||
<FormLabel>
|
||||
{translate('MetadataProfile')}
|
||||
Metadata Profile
|
||||
|
||||
{
|
||||
includeNoneMetadataProfile &&
|
||||
|
||||
@@ -20,7 +20,6 @@ function HostSettings(props) {
|
||||
bindAddress,
|
||||
port,
|
||||
urlBase,
|
||||
instanceName,
|
||||
enableSsl,
|
||||
sslPort,
|
||||
sslCertPath,
|
||||
@@ -79,22 +78,6 @@ function HostSettings(props) {
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
>
|
||||
<FormLabel>{translate('InstanceName')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.TEXT}
|
||||
name="instanceName"
|
||||
helpText={translate('InstanceNameHelpText')}
|
||||
helpTextWarning={translate('RestartRequiredHelpTextWarning')}
|
||||
onChange={onInputChange}
|
||||
{...instanceName}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup
|
||||
advancedSettings={advancedSettings}
|
||||
isAdvanced={true}
|
||||
|
||||
@@ -28,17 +28,17 @@ function ImportListMonitoringOptionsPopoverContent() {
|
||||
<DescriptionList>
|
||||
<DescriptionListItem
|
||||
title={translate('None')}
|
||||
data={translate('DataListMonitorNone')}
|
||||
data="Do not monitor authors or books"
|
||||
/>
|
||||
|
||||
<DescriptionListItem
|
||||
title={translate('SpecificBook')}
|
||||
data={translate('DataListMonitorSpecificBook')}
|
||||
data="Monitor authors but only monitor books explicitly included in the list"
|
||||
/>
|
||||
|
||||
<DescriptionListItem
|
||||
title={translate('AllAuthorBooks')}
|
||||
data={translate('DataListMonitorAll')}
|
||||
data="Monitor authors and all books for each author included on the import list"
|
||||
/>
|
||||
</DescriptionList>
|
||||
);
|
||||
@@ -89,7 +89,7 @@ function EditImportListModalContent(props) {
|
||||
return (
|
||||
<ModalContent onModalClose={onModalClose}>
|
||||
<ModalHeader>
|
||||
{id ? translate('EditList') : translate('AddList')}
|
||||
{id ? 'Edit List' : 'Add List'}
|
||||
</ModalHeader>
|
||||
|
||||
<ModalBody>
|
||||
@@ -148,7 +148,7 @@ function EditImportListModalContent(props) {
|
||||
|
||||
<FormGroup>
|
||||
<FormLabel>
|
||||
{translate('Monitor')}
|
||||
Monitor
|
||||
|
||||
<Popover
|
||||
anchor={
|
||||
@@ -318,7 +318,7 @@ function EditImportListModalContent(props) {
|
||||
kind={kinds.DANGER}
|
||||
onPress={onDeleteImportListPress}
|
||||
>
|
||||
{translate('Delete')}
|
||||
Delete
|
||||
</Button>
|
||||
}
|
||||
|
||||
@@ -327,13 +327,13 @@ function EditImportListModalContent(props) {
|
||||
error={saveError}
|
||||
onPress={onTestPress}
|
||||
>
|
||||
{translate('Test')}
|
||||
Test
|
||||
</SpinnerErrorButton>
|
||||
|
||||
<Button
|
||||
onPress={onModalClose}
|
||||
>
|
||||
{translate('Cancel')}
|
||||
Cancel
|
||||
</Button>
|
||||
|
||||
<SpinnerErrorButton
|
||||
@@ -341,7 +341,7 @@ function EditImportListModalContent(props) {
|
||||
error={saveError}
|
||||
onPress={onSavePress}
|
||||
>
|
||||
{translate('Save')}
|
||||
Save
|
||||
</SpinnerErrorButton>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
||||
@@ -346,7 +346,7 @@ function EditRootFolderModalContent(props) {
|
||||
|
||||
<FormGroup>
|
||||
<FormLabel>
|
||||
{translate('ConvertToFormat')}
|
||||
Convert to format
|
||||
<Popover
|
||||
anchor={
|
||||
<Icon
|
||||
@@ -371,7 +371,7 @@ function EditRootFolderModalContent(props) {
|
||||
|
||||
<FormGroup>
|
||||
<FormLabel>
|
||||
{translate('CalibreOutputProfile')}
|
||||
Calibre Output Profile
|
||||
<Popover
|
||||
anchor={
|
||||
<Icon
|
||||
@@ -423,14 +423,14 @@ function EditRootFolderModalContent(props) {
|
||||
kind={kinds.DANGER}
|
||||
onPress={onDeleteRootFolderPress}
|
||||
>
|
||||
{translate('Delete')}
|
||||
Delete
|
||||
</Button>
|
||||
}
|
||||
|
||||
<Button
|
||||
onPress={onModalClose}
|
||||
>
|
||||
{translate('Cancel')}
|
||||
Cancel
|
||||
</Button>
|
||||
|
||||
<SpinnerErrorButton
|
||||
@@ -438,7 +438,7 @@ function EditRootFolderModalContent(props) {
|
||||
error={saveError}
|
||||
onPress={onSavePress}
|
||||
>
|
||||
{translate('Save')}
|
||||
Save
|
||||
</SpinnerErrorButton>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
||||
@@ -78,8 +78,12 @@ export const actionHandlers = handleThunks({
|
||||
} = payload;
|
||||
|
||||
const promise = createAjaxRequest({
|
||||
url: `/history/failed/${historyId}`,
|
||||
method: 'POST'
|
||||
url: '/history/failed',
|
||||
method: 'POST',
|
||||
data: {
|
||||
id: historyId
|
||||
},
|
||||
dataType: 'json'
|
||||
}).request;
|
||||
|
||||
promise.done(() => {
|
||||
|
||||
@@ -86,8 +86,12 @@ export const actionHandlers = handleThunks({
|
||||
} = payload;
|
||||
|
||||
const promise = createAjaxRequest({
|
||||
url: `/history/failed/${historyId}`,
|
||||
method: 'POST'
|
||||
url: '/history/failed',
|
||||
method: 'POST',
|
||||
data: {
|
||||
id: historyId
|
||||
},
|
||||
dataType: 'json'
|
||||
}).request;
|
||||
|
||||
promise.done(() => {
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
import { createAction } from 'redux-actions';
|
||||
import { batchActions } from 'redux-batched-actions';
|
||||
import { createThunk, handleThunks } from 'Store/thunks';
|
||||
import getProviderState from 'Utilities/State/getProviderState';
|
||||
import { updateItem } from './baseActions';
|
||||
import createFetchHandler from './Creators/createFetchHandler';
|
||||
import createHandleActions from './Creators/createHandleActions';
|
||||
import createClearReducer from './Creators/Reducers/createClearReducer';
|
||||
@@ -28,39 +25,18 @@ export const defaultState = {
|
||||
|
||||
export const FETCH_EDITIONS = 'editions/fetchEditions';
|
||||
export const CLEAR_EDITIONS = 'editions/clearEditions';
|
||||
export const SAVE_EDITIONS = 'editions/saveEditions';
|
||||
|
||||
//
|
||||
// Action Creators
|
||||
|
||||
export const fetchEditions = createThunk(FETCH_EDITIONS);
|
||||
export const clearEditions = createAction(CLEAR_EDITIONS);
|
||||
export const saveEditions = createThunk(SAVE_EDITIONS);
|
||||
|
||||
//
|
||||
// Action Handlers
|
||||
|
||||
export const actionHandlers = handleThunks({
|
||||
[FETCH_EDITIONS]: createFetchHandler(section, '/edition'),
|
||||
|
||||
[SAVE_EDITIONS]: function(getState, payload, dispatch) {
|
||||
const {
|
||||
id,
|
||||
...otherPayload
|
||||
} = payload;
|
||||
|
||||
const saveData = getProviderState({ id, ...otherPayload }, getState, 'books');
|
||||
|
||||
dispatch(batchActions([
|
||||
...saveData.editions.map((edition) => {
|
||||
return updateItem({
|
||||
id: edition.id,
|
||||
section: 'editions',
|
||||
...edition
|
||||
});
|
||||
})
|
||||
]));
|
||||
}
|
||||
[FETCH_EDITIONS]: createFetchHandler(section, '/edition')
|
||||
});
|
||||
|
||||
//
|
||||
|
||||
@@ -246,8 +246,11 @@ export const actionHandlers = handleThunks({
|
||||
}));
|
||||
|
||||
const promise = createAjaxRequest({
|
||||
url: `/history/failed/${id}`,
|
||||
url: '/history/failed',
|
||||
method: 'POST',
|
||||
data: {
|
||||
id
|
||||
},
|
||||
dataType: 'json'
|
||||
}).request;
|
||||
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
import { createSelector } from 'reselect';
|
||||
import createBookSelector from './createBookSelector';
|
||||
|
||||
function createBookAuthorSelector() {
|
||||
return createSelector(
|
||||
createBookSelector(),
|
||||
(state) => state.authors.itemMap,
|
||||
(state) => state.authors.items,
|
||||
(book, authorMap, allAuthors) => {
|
||||
return allAuthors[authorMap[book.authorId]];
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
export default createBookAuthorSelector;
|
||||
@@ -1,16 +1,18 @@
|
||||
import { createSelector } from 'reselect';
|
||||
import createBookAuthorSelector from './createBookAuthorSelector';
|
||||
import createBookSelector from './createBookSelector';
|
||||
|
||||
function createBookQualityProfileSelector() {
|
||||
return createSelector(
|
||||
(state) => state.settings.qualityProfiles.items,
|
||||
createBookAuthorSelector(),
|
||||
(qualityProfiles, author) => {
|
||||
if (!author) {
|
||||
createBookSelector(),
|
||||
(qualityProfiles, book) => {
|
||||
if (!book) {
|
||||
return {};
|
||||
}
|
||||
|
||||
return qualityProfiles.find((profile) => profile.id === author.qualityProfileId);
|
||||
return qualityProfiles.find((profile) => {
|
||||
return profile.id === book.author.qualityProfileId;
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
"@fortawesome/free-regular-svg-icons": "5.15.3",
|
||||
"@fortawesome/free-solid-svg-icons": "5.15.3",
|
||||
"@fortawesome/react-fontawesome": "0.1.14",
|
||||
"@microsoft/signalr": "6.0.5",
|
||||
"@microsoft/signalr": "6.0.3",
|
||||
"@sentry/browser": "6.18.2",
|
||||
"@sentry/integrations": "6.18.2",
|
||||
"ansi-colors": "4.1.1",
|
||||
|
||||
110
scripts/readarr_changelog_post.sh
Normal file
110
scripts/readarr_changelog_post.sh
Normal file
@@ -0,0 +1,110 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Generate a Markdown change log of pull requests from commits between two tags
|
||||
scriptDir=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
|
||||
ghRepo="Readarr"
|
||||
#branch="develop"
|
||||
#read -r -p "What Repo?: " ghRepo
|
||||
#read -r -p "What Org?: [Default:$ghRepo]" ghOrg
|
||||
read -r -p "What Branch? [master|develop|nightly]:" branch
|
||||
ghOrg=${ghOrg:-$ghRepo}
|
||||
ghRepoUrl=https://github.com/$ghOrg/$ghRepo
|
||||
|
||||
case "${branch}" in
|
||||
master)
|
||||
hotioBranch='release'
|
||||
lsioBranch='latest'
|
||||
branchType='Stable'
|
||||
;;
|
||||
develop)
|
||||
hotioBranch='testing'
|
||||
lsioBranch='develop'
|
||||
branchType='Beta'
|
||||
;;
|
||||
nightly)
|
||||
hotioBranch='nightly'
|
||||
lsioBranch='nightly'
|
||||
branchType='Alpha'
|
||||
;;
|
||||
esac
|
||||
baseDir=$(dirname "$scriptDir")
|
||||
changelogDir="$baseDir/changelogs/"
|
||||
templateDir="$changelogDir/templates/"
|
||||
# Get a list of all tags in reverse order
|
||||
# Assumes the tags are in version format like v1.2.3
|
||||
## gitTags=$(git ls-remote -t --exit-code --refs --sort='-v:refname' "$ghRepoUrl" | sed -E 's/^[[:xdigit:]]+[[:space:]]+refs\/tags\/(.+)/\1/g')
|
||||
|
||||
# Make the tags an array
|
||||
|
||||
# shellcheck disable=SC2206
|
||||
## tags=($gitTags)
|
||||
|
||||
# Prompt for Tags due to bad Tags on GH (Sonarr v2)
|
||||
# Commented out automation
|
||||
##latestTag=${tags[0]}
|
||||
##previousTag=${tags[1]}
|
||||
read -r -p "Enter Latest Tag:" latestTag
|
||||
read -r -p "Enter Previous Tag:" previousTag
|
||||
|
||||
# Get a log of commits that occurred between two tags
|
||||
# See Pretty format placeholders at https://git-scm.com/docs/pretty-formats
|
||||
# -i -E --grep="(Fixed:|New:)"'
|
||||
commits=$(git log --pretty=format:" - %s%n" -i -E --grep="(Fixed:|New:)" "$previousTag".."$latestTag")
|
||||
# Store our changelog in a variable to be saved to a file at the end
|
||||
markdown="# New ${branchType^} Release"
|
||||
markdown+='\n\n'
|
||||
markdown+="$ghRepo $latestTag has been released on \`$branch\`"
|
||||
markdown+='\n\n'
|
||||
branchmsg=$(cat "$templateDir"/branch-$branch.md)
|
||||
if [ -n "$branchmsg" ]; then
|
||||
{
|
||||
markdown+=$branchmsg
|
||||
markdown+='\n\n'
|
||||
}
|
||||
fi
|
||||
markdown+="# Announcements"
|
||||
markdown+='\n\n'
|
||||
markdown+=$(cat "$templateDir"/announcements.md)
|
||||
markdown+='\n\n'
|
||||
markdown+="# Additional Commentary"
|
||||
markdown+='\n\n'
|
||||
markdown+=$(cat "$templateDir"/commentary.md)
|
||||
markdown+='\n\n'
|
||||
markdown+="# Releases"
|
||||
markdown+='\n\n'
|
||||
markdown+="## Native"
|
||||
markdown+="\n\n"
|
||||
markdown+="- [GitHub Releases]($ghRepoUrl/releases)"
|
||||
markdown+="\n\n"
|
||||
markdown+="- [Wiki Installation Instructions](https://wiki.servarr.com/${ghRepo,,}/installation)"
|
||||
markdown+="\n\n"
|
||||
markdown+="## Docker"
|
||||
markdown+="\n\n"
|
||||
markdown+="- [hotio/$ghRepo:$hotioBranch](https://hotio.dev/containers/${ghRepo,,})"
|
||||
markdown+="\n\n"
|
||||
markdown+="- [lscr.io/linuxserver/$ghRepo:$lsioBranch](https://docs.linuxserver.io/images/docker-${ghRepo,,})"
|
||||
markdown+="\n\n"
|
||||
markdown+="## NAS Packages"
|
||||
markdown+="\n\n"
|
||||
markdown+="- Synology - Please ask the SynoCommunity to update the base package; however, you can update in-app normally"
|
||||
markdown+="\n\n"
|
||||
markdown+="- QNAP - Please ask the QNAP to update the base package; however, you should be able to update in-app normally"
|
||||
markdown+="\n\n"
|
||||
markdown+="------------"
|
||||
markdown+="\n\n"
|
||||
markdown+="# Release Notes"
|
||||
markdown+="\n\n"
|
||||
markdown+="## $latestTag (changes since $previousTag)"
|
||||
markdown+="\n\n"
|
||||
markdown+="$commits"
|
||||
markdown+="\n\n"
|
||||
markdown+=" - Other bug fixes and improvements, see GitHub history"
|
||||
# Loop over each commit and look for merged pull requests
|
||||
#for COMMIT in $COMMITS; do
|
||||
|
||||
#done
|
||||
|
||||
# Save our markdown to a file
|
||||
mkdir -p "$changelogDir"
|
||||
echo -e "$markdown" >"$changelogDir/CHANGELOG-$latestTag.md"
|
||||
exit 0
|
||||
@@ -15,26 +15,25 @@
|
||||
<PackageVersion Include="ImpromptuInterface" Version="7.0.1" />
|
||||
<PackageVersion Include="LazyCache" Version="2.4.0" />
|
||||
<PackageVersion Include="Mailkit" Version="3.1.1" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.SignalR.Client" Version="6.0.5" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.SignalR.Client" Version="6.0.3" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Logging" Version="6.0.0" />
|
||||
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.2.0" />
|
||||
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
|
||||
<PackageVersion Include="Microsoft.Win32.Registry" Version="5.0.0" />
|
||||
<PackageVersion Include="Mono.Posix.NETStandard" Version="5.20.1.34-servarr22" />
|
||||
<PackageVersion Include="MonoTorrent" Version="2.0.5" />
|
||||
<PackageVersion Include="Mono.Posix.NETStandard" Version="5.20.1.34-servarr18" />
|
||||
<PackageVersion Include="MonoTorrent" Version="2.0.4" />
|
||||
<PackageVersion Include="Moq" Version="4.17.2" />
|
||||
<PackageVersion Include="NBuilder" Version="6.1.0" />
|
||||
<PackageVersion Include="Newtonsoft.Json" Version="13.0.1" />
|
||||
<PackageVersion Include="NLog.Extensions.Logging" Version="1.7.4" />
|
||||
<PackageVersion Include="NLog" Version="4.7.14" />
|
||||
<PackageVersion Include="NLog.Targets.Syslog" Version="6.0.2" />
|
||||
<PackageVersion Include="NUnit3TestAdapter" Version="4.2.1" />
|
||||
<PackageVersion Include="NUnit" Version="3.13.2" />
|
||||
<PackageVersion Include="NunitXml.TestLogger" Version="3.0.117" />
|
||||
<PackageVersion Include="PdfSharpCore" Version="1.3.18" />
|
||||
<PackageVersion Include="PdfSharpCore" Version="1.3.13" />
|
||||
<PackageVersion Include="RestSharp.Serializers.SystemTextJson" Version="106.15.0" />
|
||||
<PackageVersion Include="RestSharp" Version="106.15.0" />
|
||||
<PackageVersion Include="Selenium.Support" Version="3.141.0" />
|
||||
@@ -56,9 +55,9 @@
|
||||
<PackageVersion Include="System.Security.Principal.Windows" Version="5.0.0" />
|
||||
<PackageVersion Include="System.ServiceProcess.ServiceController" Version="6.0.0" />
|
||||
<PackageVersion Include="System.Text.Encoding.CodePages" Version="6.0.0" />
|
||||
<PackageVersion Include="System.Text.Json" Version="6.0.4" />
|
||||
<PackageVersion Include="System.Text.Json" Version="6.0.2" />
|
||||
<PackageVersion Include="System.ValueTuple" Version="4.5.0" />
|
||||
<PackageVersion Include="TagLibSharp-Lidarr" Version="2.2.0.19" />
|
||||
<PackageVersion Include="Unity" Version="5.11.10" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -9,26 +9,4 @@
|
||||
<add key="SQLite" value="https://pkgs.dev.azure.com/Servarr/Servarr/_packaging/SQLite/nuget/v3/index.json" />
|
||||
<add key="coverlet-nightly" value="https://pkgs.dev.azure.com/Servarr/coverlet/_packaging/coverlet-nightly/nuget/v3/index.json" />
|
||||
</packageSources>
|
||||
<packageSourceMapping>
|
||||
<!-- key value for <packageSource> should match key values from <packageSources> element -->
|
||||
<packageSource key="nuget.org">
|
||||
<package pattern="*" />
|
||||
</packageSource>
|
||||
<packageSource key="dotnet-bsd-crossbuild">
|
||||
<package pattern="*" />
|
||||
</packageSource>
|
||||
<packageSource key="FluentMigrator">
|
||||
<package pattern="FluentMigrator" />
|
||||
<package pattern="FluentMigrator.*" />
|
||||
</packageSource>
|
||||
<packageSource key="Mono.Posix.NETStandard">
|
||||
<package pattern="Mono.Posix.NETStandard" />
|
||||
</packageSource>
|
||||
<packageSource key="SQLite">
|
||||
<package pattern="System.Data.SQLite.Core.Servarr" />
|
||||
</packageSource>
|
||||
<packageSource key="coverlet-nightly">
|
||||
<package pattern="coverlet.*" />
|
||||
</packageSource>
|
||||
</packageSourceMapping>
|
||||
</configuration>
|
||||
|
||||
@@ -80,7 +80,6 @@ namespace NzbDrone.Common.Test.InstrumentationTests
|
||||
|
||||
//GoodReads
|
||||
[TestCase(@"{""signatureMethod"": ""hmacSha1"",""signatureTreatment"": ""escaped"",""type"": ""protectedResource"",""method"": ""GET"",""token"": ""mytoken"",""tokenSecret"": ""mytokensecret"",""requestUrl"": ""https://www.goodreads.com/review/list.xml"",""parameters"": { ""_nc"": ""1"", ""v"": ""2"", ""id"": ""999999999"", ""shelf"": ""currently-reading"", ""per_page"": ""200"", ""page"": ""1""}")]
|
||||
[TestCase(@"https://www.goodreads.com/series/311911?key=1234530f422f4aacb6b301233210aaaa&_nc=1&format=xml")]
|
||||
public void should_cleanGoodRead_message(string message)
|
||||
{
|
||||
var cleansedMessage = CleanseLogMessage.Cleanse(message);
|
||||
|
||||
@@ -11,7 +11,7 @@ namespace NzbDrone.Common.Instrumentation
|
||||
private static readonly Regex[] CleansingRules = new[]
|
||||
{
|
||||
// Url
|
||||
new Regex(@"(?<=\?|&|: )((?:api|auth|pass)?key|(?:access[-_]?)?token|auth|user|uid|api|[a-z_]*apikey|account|passwd)=(?<secret>[^&=]+?)(?= |&|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
||||
new Regex(@"(?<=\?|&|: )(apikey|(?:access[-_]?)?token|passkey|auth|authkey|user|uid|api|[a-z_]*apikey|account|passwd)=(?<secret>[^&=]+?)(?= |&|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
||||
new Regex(@"(?<=\?|&)[^=]*?(username|password)=(?<secret>[^&=]+?)(?= |&|$)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
||||
new Regex(@"torrentleech\.org/(?!rss)(?<secret>[0-9a-z]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
||||
new Regex(@"torrentleech\.org/rss/download/[0-9]+/(?<secret>[0-9a-z]+)", RegexOptions.Compiled | RegexOptions.IgnoreCase),
|
||||
|
||||
@@ -27,6 +27,7 @@ namespace NzbDrone.Core.Test.UpdateTests
|
||||
[Test]
|
||||
public void finds_update_when_version_lower()
|
||||
{
|
||||
NotBsd();
|
||||
UseRealHttp();
|
||||
Subject.GetLatestUpdate("nightly", new Version(0, 1)).Should().NotBeNull();
|
||||
}
|
||||
@@ -42,6 +43,8 @@ namespace NzbDrone.Core.Test.UpdateTests
|
||||
[Test]
|
||||
public void should_get_recent_updates()
|
||||
{
|
||||
NotBsd();
|
||||
|
||||
const string branch = "nightly";
|
||||
UseRealHttp();
|
||||
var recent = Subject.GetRecentUpdates(branch, new Version(0, 1));
|
||||
|
||||
@@ -41,13 +41,9 @@ namespace NzbDrone.Core.Configuration
|
||||
string SslCertPassword { get; }
|
||||
string UrlBase { get; }
|
||||
string UiFolder { get; }
|
||||
string InstanceName { get; }
|
||||
bool UpdateAutomatically { get; }
|
||||
UpdateMechanism UpdateMechanism { get; }
|
||||
string UpdateScriptPath { get; }
|
||||
string SyslogServer { get; }
|
||||
int SyslogPort { get; }
|
||||
string SyslogLevel { get; }
|
||||
}
|
||||
|
||||
public class ConfigFileProvider : IConfigFileProvider
|
||||
@@ -206,7 +202,6 @@ namespace NzbDrone.Core.Configuration
|
||||
}
|
||||
|
||||
public string UiFolder => BuildInfo.IsDebug ? Path.Combine("..", "UI") : "UI";
|
||||
public string InstanceName => GetValue("InstanceName", BuildInfo.AppName);
|
||||
|
||||
public bool UpdateAutomatically => GetValueBoolean("UpdateAutomatically", false, false);
|
||||
|
||||
@@ -214,12 +209,6 @@ namespace NzbDrone.Core.Configuration
|
||||
|
||||
public string UpdateScriptPath => GetValue("UpdateScriptPath", "", false);
|
||||
|
||||
public string SyslogServer => GetValue("SyslogServer", "", persist: false);
|
||||
|
||||
public int SyslogPort => GetValueInt("SyslogPort", 514, persist: false);
|
||||
|
||||
public string SyslogLevel => GetValue("SyslogLevel", LogLevel, false).ToLowerInvariant();
|
||||
|
||||
public int GetValueInt(string key, int defaultValue, bool persist = true)
|
||||
{
|
||||
return Convert.ToInt32(GetValue(key, defaultValue, persist));
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
using FluentMigrator;
|
||||
using NzbDrone.Core.Datastore.Migration.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Datastore.Migration
|
||||
{
|
||||
[Migration(22)]
|
||||
public class EditionMonitoredIndex : NzbDroneMigrationBase
|
||||
{
|
||||
protected override void MainDbUpgrade()
|
||||
{
|
||||
Create.Index().OnTable("Editions").OnColumn("Monitored");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,8 +2,6 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NLog;
|
||||
using NLog.Config;
|
||||
using NLog.Targets.Syslog;
|
||||
using NLog.Targets.Syslog.Settings;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Common.Instrumentation;
|
||||
@@ -42,12 +40,6 @@ namespace NzbDrone.Core.Instrumentation
|
||||
minimumConsoleLogLevel = LogLevel.Info;
|
||||
}
|
||||
|
||||
if (_configFileProvider.SyslogServer.IsNotNullOrWhiteSpace())
|
||||
{
|
||||
var syslogLevel = LogLevel.FromString(_configFileProvider.SyslogLevel);
|
||||
SetSyslogParameters(_configFileProvider.SyslogServer, _configFileProvider.SyslogPort, syslogLevel);
|
||||
}
|
||||
|
||||
var rules = LogManager.Configuration.LoggingRules;
|
||||
|
||||
//Console
|
||||
@@ -109,24 +101,6 @@ namespace NzbDrone.Core.Instrumentation
|
||||
}
|
||||
}
|
||||
|
||||
private void SetSyslogParameters(string syslogServer, int syslogPort, LogLevel minimumLogLevel)
|
||||
{
|
||||
var syslogTarget = new SyslogTarget();
|
||||
|
||||
syslogTarget.Name = "syslogTarget";
|
||||
syslogTarget.MessageSend.Protocol = ProtocolType.Udp;
|
||||
syslogTarget.MessageSend.Udp.Port = syslogPort;
|
||||
syslogTarget.MessageSend.Udp.Server = syslogServer;
|
||||
syslogTarget.MessageSend.Udp.ReconnectInterval = 500;
|
||||
syslogTarget.MessageCreation.Rfc = RfcNumber.Rfc5424;
|
||||
syslogTarget.MessageCreation.Rfc5424.AppName = _configFileProvider.InstanceName;
|
||||
|
||||
var loggingRule = new LoggingRule("*", minimumLogLevel, syslogTarget);
|
||||
|
||||
LogManager.Configuration.AddTarget("syslogTarget", syslogTarget);
|
||||
LogManager.Configuration.LoggingRules.Add(loggingRule);
|
||||
}
|
||||
|
||||
private List<LogLevel> GetLogLevels()
|
||||
{
|
||||
return new List<LogLevel>
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
"AddedAuthorSettings": "Added Author Settings",
|
||||
"AddImportListExclusionHelpText": "Prevent book from being added to Readarr by Import Lists or Author Refresh",
|
||||
"AddingTag": "Adding tag",
|
||||
"AddList": "Add List",
|
||||
"AddListExclusion": "Add List Exclusion",
|
||||
"AddMissing": "Add missing",
|
||||
"AddNewItem": "Add New Item",
|
||||
@@ -131,7 +130,6 @@
|
||||
"ContinuingAllBooksDownloaded": "Continuing (All books downloaded)",
|
||||
"ContinuingMoreBooksAreExpected": "More books are expected",
|
||||
"ContinuingNoAdditionalBooksAreExpected": "No additional books are expected",
|
||||
"ConvertToFormat": "Convert To Format",
|
||||
"CopyUsingHardlinksHelpText": "Use Hardlinks when trying to copy files from torrents that are still being seeded",
|
||||
"CopyUsingHardlinksHelpTextWarning": "Occasionally, file locks may prevent renaming files that are being seeded. You may temporarily disable seeding and use Readarr's rename function as a work around.",
|
||||
"CouldntFindAnyResultsForTerm": "Couldn't find any results for '{0}'",
|
||||
@@ -141,19 +139,6 @@
|
||||
"CreateGroup": "Create group",
|
||||
"CutoffHelpText": "Once this quality is reached Readarr will no longer download books",
|
||||
"CutoffUnmet": "Cutoff Unmet",
|
||||
"DataAllBooks": "Monitor all books",
|
||||
"DataExistingBooks": "Monitor books that have files or have not released yet",
|
||||
"DataFirstBook": "Monitor the first book. All other books will be ignored",
|
||||
"DataFuturebooks": "Monitor books that have not released yet",
|
||||
"DataLatestBook": "Monitor the latest book and future books",
|
||||
"DataListMonitorAll": "Monitor authors and all books for each author included on the import list",
|
||||
"DataListMonitorNone": "Do not monitor authors or books",
|
||||
"DataListMonitorSpecificBook": "Monitor authors, but only monitor books explicitly included in the list",
|
||||
"DataMissingBooks": "Monitor books that do not have files or have not released yet",
|
||||
"DataNewAllBooks": "Monitor all new books",
|
||||
"DataNewBooks": "Monitor new books released after the newest existing book",
|
||||
"DataNewNone": "Don't monitor any new books",
|
||||
"DataNone": "No books will be monitored",
|
||||
"Dates": "Dates",
|
||||
"DBMigration": "DB Migration",
|
||||
"DefaultMetadataProfileIdHelpText": "Default Metadata Profile for authors detected in this folder",
|
||||
@@ -225,7 +210,6 @@
|
||||
"EditBook": "Edit Book",
|
||||
"Edition": "Edition",
|
||||
"EditionsHelpText": "Change edition for this book",
|
||||
"EditList": "Edit List",
|
||||
"EmbedMetadataHelpText": "Tell Calibre to write metadata into the actual book file",
|
||||
"EmbedMetadataInBookFiles": "Embed Metadata in Book Files",
|
||||
"Enable": "Enable",
|
||||
@@ -352,8 +336,6 @@
|
||||
"IndexersSettingsSummary": "Indexers and release restrictions",
|
||||
"IndexerStatusCheckAllClientMessage": "All indexers are unavailable due to failures",
|
||||
"IndexerStatusCheckSingleClientMessage": "Indexers unavailable due to failures: {0}",
|
||||
"InstanceName": "Instance Name",
|
||||
"InstanceNameHelpText": "Instance name in tab and for Syslog app name",
|
||||
"Interval": "Interval",
|
||||
"ISBN": "ISBN",
|
||||
"IsCalibreLibraryHelpText": "Use Calibre Content Server to manipulate library",
|
||||
@@ -441,11 +423,9 @@
|
||||
"MonitoredAuthorIsMonitored": "Author is monitored",
|
||||
"MonitoredAuthorIsUnmonitored": "Author is unmonitored",
|
||||
"MonitoredHelpText": "Readarr will search for and download book",
|
||||
"MonitorExistingBooks": "Monitor Existing Books",
|
||||
"Monitoring": "Monitoring",
|
||||
"MonitoringOptions": "Monitoring Options",
|
||||
"MonitoringOptionsHelpText": "Which books should be monitored after the author is added (one-time adjustment)",
|
||||
"MonitorNewBooks": "Monitor New Books",
|
||||
"MonitorNewItems": "Monitor New Books",
|
||||
"MonitorNewItemsHelpText": "Which new books should be monitored",
|
||||
"MonoVersion": "Mono Version",
|
||||
@@ -619,7 +599,6 @@
|
||||
"RemoveTagRemovingTag": "Removing tag",
|
||||
"RenameBooks": "Rename Books",
|
||||
"RenameBooksHelpText": "Readarr will use the existing file name if renaming is disabled",
|
||||
"RenameFiles": "Rename Files",
|
||||
"Reorder": "Reorder",
|
||||
"ReplaceIllegalCharacters": "Replace Illegal Characters",
|
||||
"ReplaceIllegalCharactersHelpText": "Replace illegal characters. If unchecked, Readarr will remove them instead",
|
||||
@@ -635,7 +614,6 @@
|
||||
"RestartNow": "Restart Now",
|
||||
"RestartReadarr": "Restart Readarr",
|
||||
"RestartReloadNote": "Note: Readarr will automatically restart and reload the UI during the restore process.",
|
||||
"RestartRequiredHelpTextWarning": "Requires restart to take effect",
|
||||
"Restore": "Restore",
|
||||
"RestoreBackup": "Restore Backup",
|
||||
"Result": "Result",
|
||||
@@ -678,7 +656,6 @@
|
||||
"SetPermissions": "Set Permissions",
|
||||
"SetPermissionsLinuxHelpText": "Should chmod be run when files are imported/renamed?",
|
||||
"SetPermissionsLinuxHelpTextWarning": "If you're unsure what these settings do, do not alter them.",
|
||||
"SetReadarrTags": "Set Readarr Tags",
|
||||
"Settings": "Settings",
|
||||
"SettingsRemotePathMappingLocalPath": "Local Path",
|
||||
"SettingsRemotePathMappingLocalPathHelpText": "Path that Readarr should use to access the remote path locally",
|
||||
@@ -757,7 +734,6 @@
|
||||
"TagsSettingsSummary": "Manage author, profile, restriction, and notification tags",
|
||||
"Tasks": "Tasks",
|
||||
"Term": "Term",
|
||||
"Test": "Test",
|
||||
"TestAll": "Test All",
|
||||
"TestAllClients": "Test All Clients",
|
||||
"TestAllIndexers": "Test All Indexers",
|
||||
@@ -829,7 +805,6 @@
|
||||
"UnselectAll": "Unselect All",
|
||||
"UpdateAll": "Update all",
|
||||
"UpdateAutomaticallyHelpText": "Automatically download and install updates. You will still be able to install from System: Updates",
|
||||
"UpdateAvailable": "New update is available",
|
||||
"UpdateCheckStartupNotWritableMessage": "Cannot install update because startup folder '{0}' is not writable by the user '{1}'.",
|
||||
"UpdateCheckStartupTranslocationMessage": "Cannot install update because startup folder '{0}' is in an App Translocation folder.",
|
||||
"UpdateCheckUINotWritableMessage": "Cannot install update because UI folder '{0}' is not writable by the user '{1}'.",
|
||||
@@ -867,12 +842,12 @@
|
||||
"WriteAudioTagsScrub": "Scrub Existing Tags",
|
||||
"WriteAudioTagsScrubHelp": "Remove existing tags from files, leaving only those added by Readarr.",
|
||||
"WriteBookTagsHelpTextWarning": "Selecting 'All files' will alter existing files when they are imported.",
|
||||
"WriteMetadataTags": "Write Metadata Tags",
|
||||
"WriteTagsAll": "All files; initial import only",
|
||||
"WriteTagsNew": "For new downloads only",
|
||||
"WriteTagsNo": "Never",
|
||||
"WriteTagsSync": "All files; keep in sync with Goodreads",
|
||||
"Year": "Year",
|
||||
"YesCancel": "Yes, Cancel",
|
||||
"Yesterday": "Yesterday"
|
||||
"Yesterday": "Yesterday",
|
||||
"UpdateAvailable": "New update is available"
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"AnalyticsEnabledHelpTextWarning": "Käyttöönotto vaatii uudelleenkäynnistyksen.",
|
||||
"Delete": "Poista",
|
||||
"None": "Ei mitään",
|
||||
"RootFolder": "Juurikansio",
|
||||
"RootFolder": "Pääkansio",
|
||||
"ShowPath": "Näytä sijainti",
|
||||
"SslCertPasswordHelpTextWarning": "Käyttöönotto vaatii uudelleenkäynnistyksen.",
|
||||
"20MinutesTwenty": "20 minuuttia: {0}",
|
||||
@@ -21,7 +21,7 @@
|
||||
"AnalyticsEnabledHelpText": "Lähetä nimettömiä käyttö- ja virhetietoja sovelluksen palvelimille. Tämä sisältää tietoja selaimestasi, verkkokäyttöliittymän sivujen käytöstä, virheraportoinnista sekä käyttöjärjestelmästäsi ja versiosta. Käytämme näitä tietoja ominaisuuksien ja virhekorjauksien painotukseen.",
|
||||
"AppDataDirectory": "AppData-kansio",
|
||||
"ApplyTags": "Toimenpide tunnisteille",
|
||||
"ApplyTagsHelpTexts1": "Miten tunnisteita sovelletaan valittuun kirjailijaan",
|
||||
"ApplyTagsHelpTexts1": "Tunnisteisiin kohdistettavat toimenpiteet:",
|
||||
"ApplyTagsHelpTexts2": "– 'Lisää' syötetyt tunnisteet aiempiin tunnisteisiin",
|
||||
"ApplyTagsHelpTexts3": "– 'Poista' ainoastaan syötetyt tunnisteet",
|
||||
"ApplyTagsHelpTexts4": "– 'Korvaa' kaikki aiemmat tunnisteet tai poista kaikki tunnisteet jättämällä tyhjäksi",
|
||||
@@ -132,7 +132,7 @@
|
||||
"ExtraFileExtensionsHelpTexts1": "Pilkulla eroteltu lista tuotavista oheistiedostoista (.nfo tuodaan nimellä .nfo-orig).",
|
||||
"ExtraFileExtensionsHelpTexts2": "Esimerkkejä: '.sub, .nfo' tai 'sub, nfo'.",
|
||||
"FailedDownloadHandling": "Latauksen käsittely epäonnistui",
|
||||
"FileDateHelpText": "Muuta tiedoston päiväys tuonnin ja uudelleentarkistuksen yhteydessä.",
|
||||
"FileDateHelpText": "Tiedoston päiväyksen muutos tuonnin ja uudellentarkistuksen yhteydessä.",
|
||||
"FileManagement": "Tiedostojen hallinta",
|
||||
"FileNames": "Tiedostonimet",
|
||||
"Filename": "Tiedostonimi",
|
||||
@@ -141,7 +141,7 @@
|
||||
"Fixed": "Korjattu",
|
||||
"Folder": "Kansio",
|
||||
"Folders": "Kansioiden käsittely",
|
||||
"ForMoreInformationOnTheIndividualDownloadClientsClickOnTheInfoButtons": "Lue lisää yksittäisistä lataustyökaluista painamalla 'Lisätietoja'.",
|
||||
"ForMoreInformationOnTheIndividualDownloadClientsClickOnTheInfoButtons": "Lue lisää lataustyökalusta painamalla 'Lisätietoja'.",
|
||||
"ForMoreInformationOnTheIndividualIndexersClickOnTheInfoButtons": "Lue lisää tietolähteestä painamalla 'Lisätietoja'.",
|
||||
"ForMoreInformationOnTheIndividualListsClickOnTheInfoButtons": "Lue lisää tuontilistoista painamalla 'Lisätietoja'.",
|
||||
"GeneralSettings": "Yleiset asetukset",
|
||||
@@ -173,7 +173,7 @@
|
||||
"ImportedTo": "Tuotu kohteeseen",
|
||||
"Importing": "Tiedostojen tuonti",
|
||||
"IncludeHealthWarningsHelpText": "Sisällytä kuntovaroitukset",
|
||||
"IncludeUnknownAuthorItemsHelpText": "Näytä jonossa kohteet, joille ei ole kirjailijaa. Tämä voi sisältää poistettuja kirjailijoita tai mitä tahansa muuta Readarrille luokiteltua.",
|
||||
"IncludeUnknownAuthorItemsHelpText": "Näytä jonossa kohteet, joissa ei ole kirjailijaa. Tämä voi sisältää poistettuja kirjailijoita tai mitä tahansa muuta Readarrille luokiteltua.",
|
||||
"IncludeUnmonitored": "Sisällytä ei valvotut",
|
||||
"Indexer": "Tietolähde",
|
||||
"IndexerPriority": "Tietolähteiden painotus",
|
||||
@@ -302,8 +302,8 @@
|
||||
"ReplaceIllegalCharacters": "Korvaa kielletyt merkit",
|
||||
"RequiredHelpText": "Julkaisun tulee sisältää ainakin yksi näistä termeistä (kirjainkokoa ei huomioida).",
|
||||
"RequiredPlaceHolder": "Lisää rajoitus",
|
||||
"RescanAfterRefreshHelpTextWarning": "Tiedostomuutoksia ei tunnisteta automaattisesti, jollei asetuksena ole 'Aina'.",
|
||||
"RescanAuthorFolderAfterRefresh": "Tutki kirjailijakansio päivityksen jälkeen uudelleen",
|
||||
"RescanAfterRefreshHelpTextWarning": "Readarr ei tunnista tiedostomuutoksia automaattisesti, jollei asetuksena ole 'Aina'.",
|
||||
"RescanAuthorFolderAfterRefresh": "Tarkista kirjailijakansio päivityksen jälkeen uudelleen",
|
||||
"Reset": "Uudista",
|
||||
"ResetAPIKey": "Uudista API-avain",
|
||||
"ResetAPIKeyMessageText": "Haluatko varmasti uudistaa API-avaimesi?",
|
||||
@@ -316,7 +316,7 @@
|
||||
"Retention": "Säilytys",
|
||||
"RetentionHelpText": "Vain Usenet: Aseta nollaan asettamaan rajoittamaton säilytys",
|
||||
"RetryingDownloadInterp": "Yritetään ladata uudelleen {0} osoitteessa {1}",
|
||||
"RootFolders": "Juurikansiot",
|
||||
"RootFolders": "Pääkansiot",
|
||||
"RssSyncIntervalHelpText": "Aikaväli minuutteina. Poista käytöstä asettamalla arvoksi '0' (tämä lopettaa julkaisujen automaattisen sieppauksen).",
|
||||
"SSLCertPassword": "SSL-varmenteen salasana",
|
||||
"SSLCertPath": "SSL-varmenteen sijainti",
|
||||
@@ -349,7 +349,7 @@
|
||||
"ShownAboveEachColumnWhenWeekIsTheActiveView": "Näkyy jokaisen sarakkeen yläpuolella käytettäessä viikkonäkymää.",
|
||||
"Size": " Koko",
|
||||
"SkipFreeSpaceCheck": "Ohita vapaan levytilan tarkistus",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "Käytä, kun vapaata tilaa ei tunnisteta kirjailijoidesi pääkansiosta.",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "Käytä, kun vapaata tilaa ei tunnisteta kirjailijoidesi pääkansiosta",
|
||||
"SorryThatAuthorCannotBeFound": "Valitettavasti kirjailijaa ei löydy.",
|
||||
"SorryThatBookCannotBeFound": "Valitettavasti elokuvaa ei löydy.",
|
||||
"Source": "Lähdekoodi",
|
||||
@@ -416,7 +416,7 @@
|
||||
"UnableToLoadQualityProfiles": "Laatuprofiilien lataus epäonnistui.",
|
||||
"UnableToLoadReleaseProfiles": "Viiveprofiileja ei voi ladata",
|
||||
"UnableToLoadRemotePathMappings": "Etäsijaintien kartoitusten lataus epäonnistui.",
|
||||
"UnableToLoadRootFolders": "Juurikansioiden lataus epäonnistui.",
|
||||
"UnableToLoadRootFolders": "Pääkansioiden lataus epäonnistui.",
|
||||
"UnableToLoadTags": "Tunnisteiden lataus epäonnistui.",
|
||||
"UnableToLoadTheCalendar": "Kalenterin lataus epäonnistui.",
|
||||
"UnableToLoadUISettings": "Käyttöliittymän asetuksien lataus epäonnistui.",
|
||||
@@ -449,7 +449,7 @@
|
||||
"ProxyPasswordHelpText": "Käyttäjätunnus ja salasana tulee syöttää vain tarvittaessa. Muussa tapauksessa jätä kentät tyhjiksi.",
|
||||
"SslCertPathHelpTextWarning": "Käyttöönotto vaatii uudelleenkäynnistyksen.",
|
||||
"UnableToLoadMetadataProfiles": "Metatietoprofiilien lataus epäonnistui.",
|
||||
"DownloadClientCheckDownloadingToRoot": "Lataustyökalu '{0}' sijoittaa lataukset juurikansioon '{1}' ja näin ei pitäisi tehdä, vaan lataukset tulee tallentaa erilliseen sijaintiin.",
|
||||
"DownloadClientCheckDownloadingToRoot": "Lataustyökalu '{0}' sijoittaa lataukset pääkansioon '{1}' ja näin ei pitäisi tehdä, vaan lataukset tulee tallentaa erilliseen sijaintiin.",
|
||||
"ReplaceIllegalCharactersHelpText": "Korvaa laittomat merkit. Jos ei käytössä, laittomat merkit poistetaan.",
|
||||
"OutputPath": "Tallennussijainti",
|
||||
"Progress": "Edistyminen",
|
||||
@@ -499,7 +499,7 @@
|
||||
"NoTagsHaveBeenAddedYet": "Tunnisteita ei ole vielä lisätty. Lisää tunnisteita määrittääksesi kirjailijoille viiveprofiileja, rajoituksia tai ilmoituksia. Paina '{0}' lukeaksesi lisää tunnisteista.",
|
||||
"EnabledHelpText": "Käytä tätä julkaisuprofiilia.",
|
||||
"CreateEmptyAuthorFolders": "Luo kirjailijoille tyhjät kansiot",
|
||||
"RescanAfterRefreshHelpText": "Tutki kirjailijakansio uudelleen kirjailijan päivityksen jälkeen.",
|
||||
"RescanAfterRefreshHelpText": "Tarkista kirjailijakansion sisältö uudelleen elokuvan päivityksen jälkeen.",
|
||||
"ThisCannotBeCancelled": "Tämän peruminen on aloituksen jälkeen mahdollista vain poistamalla kaikki tietolähteet käytöstä.",
|
||||
"UnselectAll": "Poista kaikkien valinta",
|
||||
"DeleteFilesHelpText": "Poista kirjatiedostot ja kirjailijakansio",
|
||||
@@ -539,7 +539,7 @@
|
||||
"Series": "Sarja",
|
||||
"Term": "Ehto",
|
||||
"TheAuthorFolderAndAllOfItsContentWillBeDeleted": "Elokuvakansio '{0}' ja kaikki sen sisältö poistetaan.",
|
||||
"UpdateSelected": "Päivitä valitut",
|
||||
"UpdateSelected": "Päivitä valittu",
|
||||
"Wanted": "Halutut",
|
||||
"DefaultMetadataProfileIdHelpText": "Kansiosta löytyville kirjailijoille oletusarvoisesti asetettava metatietoprofiili.",
|
||||
"DeleteBookFileMessageText": "Haluatko varmasti poistaa sovellusprofiilin {0}?",
|
||||
@@ -636,7 +636,7 @@
|
||||
"SearchFiltered": "Etsi suodatettuja",
|
||||
"RemotePathMappingCheckFilesGenericPermissions": "Lataustyökalu '{0}' ilmoitti tiedostosijainniksi '{1}', mutta Radarr ei näe sitä. Saata joutua muokkaamaan kansion käyttöoikeuksia.",
|
||||
"RemotePathMappingCheckImportFailed": "Radarr ei voinut tuoda elokuvaa. Tarkista loki saadaksesi lisätietoja.",
|
||||
"CouldntFindAnyResultsForTerm": "Haku '{0}' ei tuottanut tuloksia.",
|
||||
"CouldntFindAnyResultsForTerm": "Haku '{0}' ei tuottanut yhtään tuloksia.",
|
||||
"IndexerSearchCheckNoAutomaticMessage": "Ei hakemistoja, joissa automaattinen haku on käytössä, Radarr ei tarjoa automaattisia hakutuloksia",
|
||||
"IndexerSearchCheckNoAvailableIndexersMessage": "Kaikki hakukelpoiset tietolähteet ovat tilapaisesti tavoittamattomissa viimeaikaisten tietolähdevirheiden vuoksi.",
|
||||
"RemotePathMappingCheckDockerFolderMissing": "Käytät Dockeria ja lataustyökalu '{0}' sijoittaa lataukset kohteeseen '{1}', mutta kansiota ei näytä olevan olemassa containerissa. Tarkista etäsijaintiesi kartoitukset ja containerin tallennusmedia-asetukset.",
|
||||
@@ -689,6 +689,5 @@
|
||||
"SizeLimit": "Kokorajoitus",
|
||||
"SystemTimeCheckMessage": "Järjestelmän aika on heittä yli vuorokauden verran. Ajoitetut tehtävät eivät luultavasti toimi oikein ennen ajan korjausta.",
|
||||
"UISettingsSummary": "Kalenterin, päiväyksen ja kellonajan sekä kielen ja heikentyneelle värinäölle sopivan tilan asetukset.",
|
||||
"UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent-tiedon ilmoitti sovellus, joka kommunikoi API:n kanssa",
|
||||
"WatchLibraryForChangesHelpText": "Suorita automaattinen uudelleentutkinta, kun juurikansiossa havaitaan tiedostomuutoksia."
|
||||
"UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent-tiedon ilmoitti sovellus, joka kommunikoi API:n kanssa"
|
||||
}
|
||||
|
||||
@@ -849,29 +849,5 @@
|
||||
"TimeLeft": "Hátralévő idő",
|
||||
"UpdateCheckStartupNotWritableMessage": "A frissítés nem telepíthető, mert a (z) „{0}” indítási mappát a „{1}” felhasználó nem írhatja.",
|
||||
"UpdateCheckStartupTranslocationMessage": "Nem lehet telepíteni a frissítést, mert a (z) „{0}” indítási mappa az Alkalmazások Transzlokációs mappájában található.",
|
||||
"UpdateAvailable": "Új frissítés elérhető",
|
||||
"AddList": "Lista hozzáadása",
|
||||
"ConvertToFormat": "Konvertálás Formátumba",
|
||||
"DataAllBooks": "Összes könyv monitorozása",
|
||||
"InstanceName": "Példány Neve",
|
||||
"RestartRequiredHelpTextWarning": "Újraindítás szükséges a hatálybalépéshez",
|
||||
"DataExistingBooks": "Könyvek monitorozása, ha van fájl, vagy ha még meg sem jelent",
|
||||
"DataFirstBook": "Az első könyvet monitorozása. Az összes többi könyvet figyelmen kívül hagyja",
|
||||
"DataFuturebooks": "Meg nem jelent könyvek monitorozása",
|
||||
"DataLatestBook": "Legutolsó, és jövendőbeli könyvek monitorozása",
|
||||
"DataListMonitorAll": "Az importálási listán lévő szerzők összes könyvének monitorozása",
|
||||
"DataListMonitorNone": "Ne monitorozzon szerzőket vagy könyveket",
|
||||
"DataListMonitorSpecificBook": "Monitorozza a szerzőket, de csak a listán kifejezetten szereplő könyveket",
|
||||
"DataMissingBooks": "Könyvek monitorozása amelyekből nincsen fájl, vagy még nem jelent meg",
|
||||
"DataNewAllBooks": "Összes új könyv monitorozása",
|
||||
"DataNewBooks": "A legújabb letöltött könyv utáni könyv(ek) monitorozása",
|
||||
"DataNewNone": "Ne monitorozzon új könyveket",
|
||||
"DataNone": "Egyetlen könyv sem lesz monitorozva",
|
||||
"MonitorNewBooks": "Az új könyvek monitorozása",
|
||||
"SetReadarrTags": "Readarr címkék beállítása",
|
||||
"Test": "Teszt",
|
||||
"WriteMetadataTags": "Írjon metaadat-címkéket",
|
||||
"EditList": "Lista szerkesztése",
|
||||
"MonitorExistingBooks": "Meglévő könyvek monitorozása",
|
||||
"RenameFiles": "Fájl(ok) átnevezése"
|
||||
"UpdateAvailable": "Új frissítés elérhető"
|
||||
}
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
"APIKey": "Chiave API",
|
||||
"About": "Informazioni",
|
||||
"AddListExclusion": "Aggiungi Lista Esclusioni",
|
||||
"AddingTag": "Aggiungi etichetta",
|
||||
"AdvancedSettingsHiddenClickToShow": "Nascosto, clicca per mostrare",
|
||||
"AddingTag": "Aggiungi tag",
|
||||
"AdvancedSettingsHiddenClickToShow": "Nascosto, premi per mostrare",
|
||||
"AdvancedSettingsShownClickToHide": "Visibile, clicca per nascondere",
|
||||
"Fixed": "Fissato",
|
||||
"Local": "Locale",
|
||||
"Remove": "Rimuovi",
|
||||
"Source": "Fonte",
|
||||
"Tags": "Etichette",
|
||||
"Tags": "Tag",
|
||||
"UpgradeAllowedHelpText": "Se disabilitato la qualità non verrà incrementata",
|
||||
"Uptime": "Tempo di attività",
|
||||
"UseHardlinksInsteadOfCopy": "Usa Hardlink invece che copiare",
|
||||
@@ -22,48 +22,48 @@
|
||||
"UsenetDelayHelpText": "Minuti di attesa prima di prendere una release da Usenet",
|
||||
"Username": "Nome utente",
|
||||
"UsingExternalUpdateMechanismBranchToUseToUpdateReadarr": "Branch da utilizzare per aggiornare Radarr",
|
||||
"UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism": "Ramo utilizzato dal sistema di aggiornamento esterno",
|
||||
"UsingExternalUpdateMechanismBranchUsedByExternalUpdateMechanism": "Branch utilizzato dal sistema di aggiornamento esterno",
|
||||
"Version": "Versione",
|
||||
"WeekColumnHeader": "Intestazione colonna settimana",
|
||||
"Year": "Anno",
|
||||
"YesCancel": "Si, Cancella",
|
||||
"AgeWhenGrabbed": "Età (quando recuperato)",
|
||||
"YesCancel": "Si, annulla",
|
||||
"AgeWhenGrabbed": "Età (quando trovato)",
|
||||
"AlreadyInYourLibrary": "Già presente nella tua libreria",
|
||||
"AlternateTitles": "Titoli Alternativi",
|
||||
"AlternateTitles": "Titoli alternativi",
|
||||
"Analytics": "Analitica",
|
||||
"AnalyticsEnabledHelpText": "Inviare informazioni anonime sull'utilizzo e sugli errori ai server di Readarr. Ciò include informazioni sul tuo browser, quali pagine dell'interfaccia di Readarr usi, la segnalazione di errori così come la versione del sistema operativo e del runtime. Utilizzeremo queste informazioni per dare priorità alle nuove funzioni e alle correzioni di bug.",
|
||||
"AnalyticsEnabledHelpText": "Inviare informazioni anonime sull'utilizzo e sugli errori ai server di Radarr. Ciò include informazioni sul tuo browser, come le pagine di Radarr che utilizzi, la segnalazione di errori e la versione del sistema operativo e del runtime. Utilizzeremo queste informazioni per dare priorità alle funzioni e alle correzioni di bug.",
|
||||
"AppDataDirectory": "Cartella AppData",
|
||||
"ApplyTags": "Applica Etichette",
|
||||
"ApplyTagsHelpTexts1": "Come applicare etichette agli autori selezionati",
|
||||
"ApplyTagsHelpTexts2": "Aggiungi: Aggiunge le etichette alla lista esistente di etichette",
|
||||
"ApplyTagsHelpTexts3": "Rimuovi: Rimuove le etichette inserite",
|
||||
"ApplyTagsHelpTexts1": "Come applicare i tag ai film selezionati",
|
||||
"ApplyTagsHelpTexts2": "Aggiungi: Aggiungere le etichette alla lista esistente di etichette",
|
||||
"ApplyTagsHelpTexts3": "Rimuovere: rimuovi le etichette inserite",
|
||||
"ApplyTagsHelpTexts4": "Sostituire: Sostituisce le etichette con quelle inserite (non inserire nessuna etichette per eliminarle tutte)",
|
||||
"Authentication": "Autenticazione",
|
||||
"AuthenticationMethodHelpText": "Utilizza nome utente e password per accedere a Readarr",
|
||||
"AuthorClickToChangeBook": "Clicca per cambiare libro",
|
||||
"AutoRedownloadFailedHelpText": "Cerca e prova a scaricare automaticamente un'altra versione",
|
||||
"AuthenticationMethodHelpText": "Utilizza nome utente e password per accedere a Radarr",
|
||||
"AuthorClickToChangeBook": "Clicca per cambiare film",
|
||||
"AutoRedownloadFailedHelpText": "Ricerca automatica e tentativo di scaricare un'altra versione",
|
||||
"Automatic": "Automatico",
|
||||
"BackupFolderHelpText": "I percorsi relativi saranno nella cartella AppData di Readarr",
|
||||
"BackupFolderHelpText": "I percorsi relativi saranno sotto la directory AppData di Radarr",
|
||||
"BackupNow": "Effettua il Backup adesso",
|
||||
"BackupRetentionHelpText": "I backup automatici più vecchi del periodo di conservazione verranno eliminati automaticamente",
|
||||
"Backups": "I Backup",
|
||||
"BindAddress": "Indirizzo di Bind",
|
||||
"BindAddressHelpText": "Indirizzo IPv4 valido o '*' per tutte le interfacce",
|
||||
"BindAddressHelpTextWarning": "Richiede il riavvio per avere effetto",
|
||||
"BookIsDownloading": "Libro in download",
|
||||
"BookIsDownloadingInterp": "Libro in download - {0}% {1}",
|
||||
"BindAddressHelpText": "Indirizzo IPV4 valido o '*' per tutte le interfacce",
|
||||
"BindAddressHelpTextWarning": "Richiede il riavvio per avere effetti",
|
||||
"BookIsDownloading": "Film in Download",
|
||||
"BookIsDownloadingInterp": "Film in download - {0}% {1}",
|
||||
"Branch": "Ramo",
|
||||
"BypassProxyForLocalAddresses": "Evita il Proxy per gli Indirizzi Locali",
|
||||
"BypassProxyForLocalAddresses": "Evita il Proxy per gli indirizzi locali",
|
||||
"Calendar": "Calendario",
|
||||
"CalendarWeekColumnHeaderHelpText": "Mostra sopra ogni colonna quando la settimana è la vista attiva",
|
||||
"Cancel": "Annulla",
|
||||
"Cancel": "Cancella",
|
||||
"CancelMessageText": "Sei sicuro di voler cancellare questa operazione in sospeso?",
|
||||
"CertificateValidation": "Convalida del Certificato",
|
||||
"CertificateValidationHelpText": "Cambia quanto è rigorosa la convalida del certificato HTTPS. Non cambiare a meno che tu non comprenda i rischi.",
|
||||
"ChangeFileDate": "Cambiare la Data del File",
|
||||
"ChangeHasNotBeenSavedYet": "Il cambio non è stato ancora salvato",
|
||||
"CertificateValidation": "Convalida del certificato",
|
||||
"CertificateValidationHelpText": "Cambiare il \"grado di severità\" della convalida del certificato HTTPS",
|
||||
"ChangeFileDate": "Cambiare la data del file",
|
||||
"ChangeHasNotBeenSavedYet": "Il cambiamento non è ancora stato ancora salvato",
|
||||
"ChmodFolder": "Permessi Cartella",
|
||||
"ChmodFolderHelpText": "Octal, applicato durante l'importazione/rinomina verso cartelle e file (senza bits di esecuzione)",
|
||||
"ChmodFolderHelpText": "Octal, applicato durante importazione/rinomina di cartelle e file (senza execute bits)",
|
||||
"ChmodFolderHelpTextWarning": "Funziona solo se l'utente di Radarr è il proprietario del file. E' meglio assicurarsi che i client di download impostino i permessi correttamente.",
|
||||
"ChownGroupHelpText": "Nome Gruppo o guida. Usa guida per sistemi remoti.",
|
||||
"ChownGroupHelpTextWarning": "Funziona solo se l'utente di Radarr è il proprietario del file. E' meglio assicurarsi che i client di download usino lo stesso gruppo di Radarr.",
|
||||
@@ -76,63 +76,63 @@
|
||||
"CompletedDownloadHandling": "Gestione dei Download Completati",
|
||||
"ConnectSettings": "Impostazioni di Connessione",
|
||||
"Connections": "Collegamenti",
|
||||
"CopyUsingHardlinksHelpText": "Utilizzare gli Hardlink quando si cerca di copiare file di un torrent che è ancora in seeding",
|
||||
"CopyUsingHardlinksHelpTextWarning": "Occasionalmente i file bloccatti possono impedire la rinomina dei file in seeding. Puoi disattivare temporaneamente il seeding e utilizzare la funzione di rinomina di Readarr per evitare il problema.",
|
||||
"CopyUsingHardlinksHelpText": "Utilizzare gli Hardlink quando si cerca di copiare file da un torrent che è ancora in fase di seeding",
|
||||
"CopyUsingHardlinksHelpTextWarning": "Occasionalmente, i blocchi dei file possono impedire la ridenominazione dei file in fase di seeding. È possibile disattivare temporaneamente il seeding e utilizzare la funzione di rinomina di Radarr per evitare il problema.",
|
||||
"CreateEmptyAuthorFoldersHelpText": "Crea le cartelle dei film mancanti durante la scansione del disco",
|
||||
"CreateGroup": "Crea gruppo",
|
||||
"CutoffHelpText": "Una volta raggiunta questa qualità, Radarr non scaricherà più film",
|
||||
"CutoffUnmet": "Soglia Non Raggiunta",
|
||||
"DBMigration": "Migrazione DB",
|
||||
"Dates": "Date",
|
||||
"DelayProfile": "Profilo di Ritardo",
|
||||
"DelayProfile": "Profili di Ritardo",
|
||||
"DelayProfiles": "Profili di Ritardo",
|
||||
"DelayingDownloadUntilInterp": "Ritardare il download fino al {0} a {1}",
|
||||
"Delete": "Cancella",
|
||||
"DeleteBackup": "Cancella Backup",
|
||||
"DeleteBackupMessageText": "Sei sicuro di voler cancellare il backup '{0}'?",
|
||||
"DeleteDelayProfile": "Cancella Profilo di Ritardo",
|
||||
"DeleteDelayProfile": "Cancellare il profilo di ritardo",
|
||||
"DeleteDelayProfileMessageText": "Sei sicuro di voler cancellare questo profilo di ritardo?",
|
||||
"DeleteDownloadClient": "Cancella il Client di Download",
|
||||
"DeleteDownloadClientMessageText": "Sei sicuro di voler eliminare il client di download '{0}'?",
|
||||
"DeleteEmptyFolders": "Cancella le cartelle vuote",
|
||||
"DeleteEmptyFolders": "Cancellare le cartelle vuote",
|
||||
"DeleteEmptyFoldersHelpText": "Cancellare le cartelle vuote dei film durante la scansione del disco e quando i file di film vengono cancellati",
|
||||
"DeleteImportListExclusion": "Rimuovi Esclusione dalla Lista Importazioni",
|
||||
"DeleteImportListExclusion": "Cancellare la lista delle esclusioni",
|
||||
"DeleteImportListExclusionMessageText": "Sei sicuro di voler cancellare questa lista di esclusioni delle importazioni?",
|
||||
"DeleteImportListMessageText": "Sei sicuro di voler eliminare la lista '{0}'?",
|
||||
"DeleteIndexer": "Cancella Indicizzatore",
|
||||
"DeleteIndexerMessageText": "Sicuro di voler eliminare l'indicizzatore '{0}'?",
|
||||
"DeleteIndexer": "Cancella Indexer",
|
||||
"DeleteIndexerMessageText": "Sei sicuro di voler eliminare l'indexer '{0}'?",
|
||||
"DeleteMetadataProfileMessageText": "Sicuro di voler cancellare il profilo di qualità {0}",
|
||||
"DeleteNotification": "Cancella la Notifica",
|
||||
"DeleteNotification": "Cancella la notifica",
|
||||
"DeleteNotificationMessageText": "Sei sicuro di voler eliminare la notifica '{0}'?",
|
||||
"DeleteQualityProfile": "Cancella il Profilo di Qualità",
|
||||
"DeleteQualityProfile": "Cancellare il profilo di qualità",
|
||||
"DeleteQualityProfileMessageText": "Sicuro di voler cancellare il profilo di qualità {0}",
|
||||
"DeleteReleaseProfile": "Cancellare il profilo di ritardo",
|
||||
"DeleteReleaseProfileMessageText": "Sei sicuro di voler cancellare questo profilo di ritardo?",
|
||||
"DeleteSelectedBookFiles": "Cancellare i film selezionati",
|
||||
"DeleteSelectedBookFilesMessageText": "Sei sicuro di voler eliminare i file del film selezionato?",
|
||||
"DeleteTag": "Elimina Etichetta",
|
||||
"DeleteTagMessageText": "Sei sicuro di voler eliminare l'etichetta '{0}'?",
|
||||
"DestinationPath": "Percorso di Destinazione",
|
||||
"DetailedProgressBar": "Barra di Avanzamento Dettagliata",
|
||||
"DeleteTag": "Cancella Tag",
|
||||
"DeleteTagMessageText": "Sei sicuro di voler eliminare il tag '{0}'?",
|
||||
"DestinationPath": "Percorso di destinazione",
|
||||
"DetailedProgressBar": "Barra di avanzamento dettagliata",
|
||||
"DiskSpace": "Spazio su Disco",
|
||||
"Docker": "Docker",
|
||||
"DownloadClient": "Client di Download",
|
||||
"DownloadClientSettings": "Impostazioni del Client di Download",
|
||||
"DownloadClients": "Clients di Download",
|
||||
"DownloadClient": "Client Download",
|
||||
"DownloadClientSettings": "Impostazioni del client di download",
|
||||
"DownloadClients": "Client Download",
|
||||
"DownloadFailedCheckDownloadClientForMoreDetails": "Download fallito: controllare il client di download per maggiori dettagli",
|
||||
"DownloadFailedInterp": "Download fallito: {0}",
|
||||
"DownloadPropersAndRepacksHelpTexts1": "Aggiornare o meno automaticamente a Proper/Repack",
|
||||
"DownloadWarningCheckDownloadClientForMoreDetails": "Avviso di download: controllare il client di download per maggiori dettagli",
|
||||
"DownloadWarningCheckDownloadClientForMoreDetails": "Problema di download: controllare il client di download per maggiori dettagli",
|
||||
"Edit": "Modifica",
|
||||
"Edition": "Edizione",
|
||||
"Enable": "Abilita",
|
||||
"EnableAutomaticAdd": "Attiva l'Aggiunta Automatica",
|
||||
"EnableAutomaticSearch": "Attiva la Ricerca Automatica",
|
||||
"EnableColorImpairedMode": "Abilita la Modalità Daltonismo",
|
||||
"EnableColorImpairedModeHelpText": "Stile alterato per permettere agli utenti daltonici di distinguere meglio le informazioni codificate a colori",
|
||||
"EnableAutomaticAdd": "Attiva l'aggiunta automatica",
|
||||
"EnableAutomaticSearch": "Attiva la ricerca automatica",
|
||||
"EnableColorImpairedMode": "Abilità la modalità a colori alternati",
|
||||
"EnableColorImpairedModeHelpText": "Stile alterato per permettere agli utenti daltonici di distinguere meglio le informazioni con colori codificati",
|
||||
"EnableCompletedDownloadHandlingHelpText": "Importa automaticamente i download completati dai client di download",
|
||||
"EnableHelpText": "Abilita la creazione del file di metadati per questo tipo di metadati",
|
||||
"EnableInteractiveSearch": "Abilita la Ricerca Interattiva",
|
||||
"EnableInteractiveSearch": "Abilita la ricerca interattiva",
|
||||
"EnableRSS": "Abilita RSS",
|
||||
"EnableSSL": "Abilita SSL",
|
||||
"EnableSslHelpText": " Richiede il riavvio come amministratore per avere effetto",
|
||||
@@ -167,13 +167,13 @@
|
||||
"HasPendingChangesSaveChanges": "Salva Modifiche",
|
||||
"History": "Storia",
|
||||
"Host": "Host",
|
||||
"Hostname": "Nome Host",
|
||||
"Hostname": "Hostname",
|
||||
"ICalFeed": "Feed iCal",
|
||||
"ICalHttpUrlHelpText": "Copia questo URL sul tuo client o clicca per sottoscrivere se il tuo browser supporta Webcal",
|
||||
"ICalLink": "Link iCal",
|
||||
"IconForCutoffUnmet": "L'icona per il taglio non è soddisfatta",
|
||||
"IconTooltip": "In Programma",
|
||||
"IgnoredAddresses": "Indirizzi Ignorati",
|
||||
"IgnoredAddresses": "Indirizzi ignorati",
|
||||
"IgnoredHelpText": "Questa release sarà respinta se contiene uno o più di questi termini (Sensibile al maiuscolo)",
|
||||
"IgnoredPlaceHolder": "Aggiungi una nuova restrizione",
|
||||
"IllRestartLater": "Riavvierò più tardi",
|
||||
@@ -186,9 +186,9 @@
|
||||
"IncludeUnknownAuthorItemsHelpText": "Mostra le voci senza un film nella coda. Ciò potrebbe include film spostati o altro nelle categorie di Radarr",
|
||||
"IncludeUnmonitored": "Includi non Monitorati",
|
||||
"Indexer": "Indicizzatore",
|
||||
"IndexerPriority": "Priorità dell'Indicizzatore",
|
||||
"IndexerPriority": "Priorità dell'indexer",
|
||||
"IndexerSettings": "Impostazioni dell'Indexer",
|
||||
"Indexers": "Indicizzatori",
|
||||
"Indexers": "Indexer",
|
||||
"Interval": "Intervallo",
|
||||
"IsCutoffCutoff": "Taglio",
|
||||
"IsCutoffUpgradeUntilThisQualityIsMetOrExceeded": "Aggiorna finchè questa qualità non è raggiunta o superata",
|
||||
@@ -231,13 +231,13 @@
|
||||
"New": "Nuovo",
|
||||
"NoBackupsAreAvailable": "Nessun Backup disponibile",
|
||||
"NoHistory": "Nessuna Storia",
|
||||
"NoLeaveIt": "No, Lascialo",
|
||||
"NoLeaveIt": "No, lascialo",
|
||||
"NoLimitForAnyRuntime": "Nessun limite di durata",
|
||||
"NoLogFiles": "Nessun file di log",
|
||||
"NoMinimumForAnyRuntime": "Nessuna durata minima",
|
||||
"NoUpdatesAreAvailable": "Nessun aggiornamento disponibile",
|
||||
"None": "Nessuna",
|
||||
"NotificationTriggers": "Attivatori di Notifica",
|
||||
"NotificationTriggers": "Selettori di notifica",
|
||||
"OnGrabHelpText": "Quando viene prelevato",
|
||||
"OnHealthIssueHelpText": "Quando c'è un problema",
|
||||
"OnRenameHelpText": "Durante la rinomina",
|
||||
@@ -246,7 +246,7 @@
|
||||
"Options": "Opzioni",
|
||||
"Original": "Originale",
|
||||
"Overview": "Panoramica",
|
||||
"PackageVersion": "Versione del Pacchetto",
|
||||
"PackageVersion": "Versione del pacchetto",
|
||||
"PageSize": "Dimensione Pagina",
|
||||
"PageSizeHelpText": "Numero di voci da mostrare in ogni pagina",
|
||||
"Password": "Password",
|
||||
@@ -265,7 +265,7 @@
|
||||
"ProtocolHelpText": "Scegli che protocollo(i) usare e quale è preferito quando si deve scegliere tra release altrimenti uguali",
|
||||
"Proxy": "Proxy",
|
||||
"ProxyBypassFilterHelpText": "Usa ',' come separatore, e '*.' come jolly per i sottodomini",
|
||||
"ProxyType": "Tipo di Proxy",
|
||||
"ProxyType": "Tipo di proxy",
|
||||
"ProxyUsernameHelpText": "Devi inserire nome utente e password solo se richiesto. Altrimenti lascia vuoto.",
|
||||
"PublishedDate": "Data di pubblicazione",
|
||||
"Quality": "Qualità",
|
||||
@@ -276,7 +276,7 @@
|
||||
"Queue": "Coda",
|
||||
"RSSSync": "Sync RSS",
|
||||
"RSSSyncInterval": "Intervallo di Sync RSS",
|
||||
"ReadTheWikiForMoreInformation": "Leggi la Wiki per maggiori informazioni",
|
||||
"ReadTheWikiForMoreInformation": "Leggi le Wiki per maggiori informazioni",
|
||||
"ReadarrSupportsAnyIndexerThatUsesTheNewznabStandardAsWellAsOtherIndexersListedBelow": "Radarr supporta qualunque indexer che usi gli standard Newznab, cosi come gli altri Indexer sotto.",
|
||||
"ReadarrTags": "Tag di Radarr",
|
||||
"Real": "Reale",
|
||||
@@ -305,7 +305,7 @@
|
||||
"RemoveSelectedMessageText": "Sei sicuro di voler rimuovere gli elementi selezionati della blacklist?",
|
||||
"RemoveTagExistingTag": "Tag esistente",
|
||||
"RemoveTagRemovingTag": "Sto eliminando il tag",
|
||||
"RemovedFromTaskQueue": "Rimosso dalla coda lavori",
|
||||
"RemovedFromTaskQueue": "Rimuovi dalla coda di lavoro",
|
||||
"RenameBooksHelpText": "Radarr userà i nomi dei file se rinomina è disabilitato",
|
||||
"Reorder": "Riordina",
|
||||
"ReplaceIllegalCharacters": "Sostituisci i caratteri non consentiti",
|
||||
@@ -322,16 +322,16 @@
|
||||
"Restore": "Ripristina",
|
||||
"RestoreBackup": "Ripristina Backup",
|
||||
"Result": "Risultato",
|
||||
"Retention": "Ritenzione",
|
||||
"Retention": "Memorizzazione",
|
||||
"RetentionHelpText": "Solo Usenet: Imposta a zero per una conservazione illimitata",
|
||||
"RetryingDownloadInterp": "Riprovando il download {0} a {1}",
|
||||
"RootFolder": "Cartella Radice",
|
||||
"RootFolders": "Cartelle Radice",
|
||||
"RssSyncIntervalHelpText": "Intervallo in minuti. Imposta zero per disabilitarlo (ciò fermerà il recupero automatico di tutte le release)",
|
||||
"SSLCertPassword": "Password Certificato SSL",
|
||||
"SSLCertPath": "Percorso Certificato SSL",
|
||||
"SSLCertPassword": "Password Cert SSL",
|
||||
"SSLCertPath": "Percorso Cert SSL",
|
||||
"SSLPort": "Porta SSL",
|
||||
"Scheduled": "Programmato",
|
||||
"Scheduled": "In Programma",
|
||||
"Score": "Punto",
|
||||
"ScriptPath": "Percorso dello script",
|
||||
"Search": "Cerca",
|
||||
@@ -339,7 +339,7 @@
|
||||
"SearchForMissing": "Cerca i film mancanti",
|
||||
"SearchSelected": "Cerca il film selezionato",
|
||||
"Security": "Sicurezza",
|
||||
"SendAnonymousUsageData": "Invia dati anonimi sull'uso",
|
||||
"SendAnonymousUsageData": "Invia dati sull'uso anonimamente",
|
||||
"SetPermissions": "Imposta permessi",
|
||||
"SetPermissionsLinuxHelpText": "Eseguire chmod quando i file sono importati/rinominati?",
|
||||
"SetPermissionsLinuxHelpTextWarning": "Se non sei sicuro di cosa facciano queste impostazioni, non cambiarle.",
|
||||
@@ -354,7 +354,7 @@
|
||||
"ShowQualityProfileHelpText": "Mostra profilo qualità sotto il poster",
|
||||
"ShowRelativeDates": "Mostra date relative",
|
||||
"ShowRelativeDatesHelpText": "Mostra date relative (Oggi/Ieri/ecc) o assolute",
|
||||
"ShowSearch": "Mostra Ricerca",
|
||||
"ShowSearch": "Mostra ricerca",
|
||||
"ShowSearchActionHelpText": "Mostra pulsante ricerca al passaggio",
|
||||
"ShowSizeOnDisk": "Mostra spazio su disco",
|
||||
"ShownAboveEachColumnWhenWeekIsTheActiveView": "Mostra sopra ogni colonna quando la settimana è la vista attiva",
|
||||
@@ -378,82 +378,82 @@
|
||||
"SupportsRssvalueRSSIsNotSupportedWithThisIndexer": "RSS non è supportato con questo indexer",
|
||||
"SupportsSearchvalueSearchIsNotSupportedWithThisIndexer": "La ricerca non è supportata dal questo indexer",
|
||||
"SupportsSearchvalueWillBeUsedWhenAutomaticSearchesArePerformedViaTheUIOrByReadarr": "Sarà usata quando la ricerca automatica è eseguita dalla UI o da Radarr",
|
||||
"SupportsSearchvalueWillBeUsedWhenInteractiveSearchIsUsed": "Verrà usato durante la ricerca interattiva",
|
||||
"TagIsNotUsedAndCanBeDeleted": "L'etichetta non è in uso e può essere eliminata",
|
||||
"Tasks": "Attività",
|
||||
"TestAll": "Testa Tutti",
|
||||
"TestAllClients": "Testa Tutti i Client",
|
||||
"TestAllIndexers": "Testa tutti gli Indicizzatori",
|
||||
"SupportsSearchvalueWillBeUsedWhenInteractiveSearchIsUsed": "Sarà usata quando la ricerca interattiva è utilizzata",
|
||||
"TagIsNotUsedAndCanBeDeleted": "Il tag non è usato e può essere eliminato",
|
||||
"Tasks": "Funzioni",
|
||||
"TestAll": "Prova Tutti",
|
||||
"TestAllClients": "Testa tutti i client",
|
||||
"TestAllIndexers": "Testa tutti gli indexer",
|
||||
"TestAllLists": "Testa tutte le liste",
|
||||
"ThisWillApplyToAllIndexersPleaseFollowTheRulesSetForthByThem": "Questo verrà applicato a tutti gli indexer, segui le regole impostate da loro",
|
||||
"TimeFormat": "Formato orario",
|
||||
"Title": "Titolo",
|
||||
"TorrentDelay": "Ritardo del torrent",
|
||||
"TorrentDelayHelpText": "Ritardo in minuti da aspettare prima di prendere un torrent",
|
||||
"Torrents": "Torrents",
|
||||
"Torrents": "Torrent",
|
||||
"TotalFileSize": "Dimensione totale dei file",
|
||||
"UILanguage": "Lingua dell'Interfaccia",
|
||||
"UILanguage": "Lingua della UI",
|
||||
"UILanguageHelpText": "Lingua che Radarr userà per la UI",
|
||||
"UILanguageHelpTextWarning": "Ricaricamento del browser richiesto",
|
||||
"UISettings": "Impostazioni Interfaccia",
|
||||
"URLBase": "Base Url",
|
||||
"UnableToAddANewDownloadClientPleaseTryAgain": "Impossibile aggiungere un nuovo client di download, riprova.",
|
||||
"UILanguageHelpTextWarning": "Richiede il reload del Browser",
|
||||
"UISettings": "Impostazioni UI",
|
||||
"URLBase": "URL di Base",
|
||||
"UnableToAddANewDownloadClientPleaseTryAgain": "Non riesco ad aggiungere un nuovo client di download, riprova.",
|
||||
"UnableToAddANewImportListExclusionPleaseTryAgain": "Non riesco ad aggiungere una nuova lista di esclusione, riprova.",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "Impossibile aggiungere un nuovo Indicizzatore, riprova.",
|
||||
"UnableToAddANewIndexerPleaseTryAgain": "Non riesco ad aggiungere un nuovo indexer, riprova.",
|
||||
"UnableToAddANewListPleaseTryAgain": "Non riesco ad aggiungere una nuova lista, riprova.",
|
||||
"UnableToAddANewMetadataProfilePleaseTryAgain": "Non riesco ad aggiungere un nuovo profilo di qualità, riprova.",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Impossibile aggiungere una nuova notifica, riprova.",
|
||||
"UnableToAddANewNotificationPleaseTryAgain": "Non riesco ad aggiungere una nuova notifica, riprova.",
|
||||
"UnableToAddANewQualityProfilePleaseTryAgain": "Non riesco ad aggiungere un nuovo profilo di qualità, riprova.",
|
||||
"UnableToAddANewRemotePathMappingPleaseTryAgain": "Non riesco ad aggiungere la mappatura di un nuovo percorso remoto, riprova.",
|
||||
"UnableToAddANewRootFolderPleaseTryAgain": "Non riesco ad aggiungere un nuovo formato personalizzato, riprova.",
|
||||
"UnableToLoadBackups": "Impossibile caricare i backup",
|
||||
"UnableToLoadBackups": "Non riesco a caricare i backup",
|
||||
"UnableToLoadDelayProfiles": "Non riesco a caricare i profili di ritardo",
|
||||
"UnableToLoadDownloadClientOptions": "Non riesco a caricare le opzioni del client di download",
|
||||
"UnableToLoadDownloadClients": "Impossibile caricare i client di download",
|
||||
"UnableToLoadGeneralSettings": "Impossibile caricare le impostazioni Generali",
|
||||
"UnableToLoadDownloadClients": "Non riesco a caricare i client di download",
|
||||
"UnableToLoadGeneralSettings": "Non riesco a caricare le impostazioni generali",
|
||||
"UnableToLoadHistory": "Non riesco a caricare la storia",
|
||||
"UnableToLoadImportListExclusions": "Non riesco a caricare le liste di esclusione",
|
||||
"UnableToLoadIndexerOptions": "Non riesco a caricare le opzioni dell'indexer",
|
||||
"UnableToLoadIndexers": "Impossibile caricare gli Indicizzatori",
|
||||
"UnableToLoadIndexers": "Non riesco a caricare l'indexer",
|
||||
"UnableToLoadLists": "Non riesco a caricare le liste",
|
||||
"UnableToLoadMediaManagementSettings": "Non riesco a caricare le impostazioni di Gestione dei Media",
|
||||
"UnableToLoadMetadata": "Non riesco a caricare i metadati",
|
||||
"UnableToLoadNamingSettings": "Non riesco a caricare le impostazioni di denominazione",
|
||||
"UnableToLoadNotifications": "Impossibile caricare le Notifiche",
|
||||
"UnableToLoadNotifications": "Non riesco a caricare le notifiche",
|
||||
"UnableToLoadQualities": "Non riesco a caricare le qualità",
|
||||
"UnableToLoadQualityDefinitions": "Non riesco a caricare le definizioni della qualità",
|
||||
"UnableToLoadQualityProfiles": "Non riesco a caricare i profili della qualità",
|
||||
"UnableToLoadReleaseProfiles": "Non riesco a caricare i profili di ritardo",
|
||||
"UnableToLoadRemotePathMappings": "Non riesco a caricare le mappature del percorso remoto",
|
||||
"UnableToLoadRootFolders": "Non riesco a caricare la cartella root",
|
||||
"UnableToLoadTags": "Impossibile caricare le Etichette",
|
||||
"UnableToLoadTags": "Non riesco a caricare i tag",
|
||||
"UnableToLoadTheCalendar": "Non riesco a caricare il calendario",
|
||||
"UnableToLoadUISettings": "Impossibile caricare le impostazioni interfaccia",
|
||||
"UnableToLoadUISettings": "Non riesco a caricare le impostazioni della UI",
|
||||
"Ungroup": "Separa",
|
||||
"Unmonitored": "Non Seguito",
|
||||
"UnmonitoredHelpText": "Includi i film non monitorati nei feed di iCal",
|
||||
"UpdateAll": "Aggiorna Tutto",
|
||||
"UpdateAutomaticallyHelpText": "Scarica e installa automaticamente gli aggiornamenti. Sarai comunque in grado in installarli da Sistema: Aggiornamenti",
|
||||
"UpdateMechanismHelpText": "Usa l'aggiornamento integrato in Readarr o uno script",
|
||||
"UpdateScriptPathHelpText": "Percorso verso uno script personalizzato che prende un pacchetto di aggiornamento estratto e gestisce il resto del processo di aggiornamento",
|
||||
"UpdateAutomaticallyHelpText": "Download e installazione automatica degli aggiornamenti. Sarai comunque in grado in installarli dal menu Sistema: Aggiornamenti",
|
||||
"UpdateMechanismHelpText": "Usa il programma di aggiornamento incorporato in Radarr o uno script",
|
||||
"UpdateScriptPathHelpText": "Percorso verso uno script che prende un pacchetto di aggiornamento estratto e gestisce il resto del processo di aggiornamento",
|
||||
"Updates": "Aggiornamenti",
|
||||
"UrlBaseHelpTextWarning": "Richiede il riavvio per avere effetti",
|
||||
"AnalyticsEnabledHelpTextWarning": "Richiede il riavvio per avere effetto",
|
||||
"ApiKeyHelpTextWarning": "Richiede il riavvio per avere effetto",
|
||||
"AnalyticsEnabledHelpTextWarning": "Richiede il riavvio per avere effetti",
|
||||
"ApiKeyHelpTextWarning": "Richiede il riavvio per avere effetti",
|
||||
"DeleteRootFolderMessageText": "Sei sicuro di voler eliminare l'indexer '{0}'?",
|
||||
"LoadingBooksFailed": "Caricamento dei file del Film fallito",
|
||||
"ProxyPasswordHelpText": "Devi inserire nome utente e password solo se richiesto. Altrimenti lascia vuoto.",
|
||||
"SslCertPathHelpTextWarning": "Richiede il riavvio per avere effetti",
|
||||
"SslCertPasswordHelpTextWarning": "Richiede il riavvio per avere effetto",
|
||||
"SslCertPasswordHelpTextWarning": "Richiede il riavvio per avere effetti",
|
||||
"UnableToLoadMetadataProfiles": "Non riesco a caricare i profili di ritardo",
|
||||
"DownloadClientCheckDownloadingToRoot": "Il client di download {0} colloca i download nella cartella radice {1}. Non dovresti scaricare in una cartella radice.",
|
||||
"MaintenanceRelease": "Release di Manutenzione: correzione di bug e altri miglioramenti. Vedi la storia dei Commit su Github per maggiori dettagli",
|
||||
"DownloadClientCheckDownloadingToRoot": "Scarica client {0} colloca i download nella cartella principale {1}. Non dovresti scaricare in una cartella principale.",
|
||||
"MaintenanceRelease": "Release di Manutenzione: correzione di bug e altre miglioramenti. Vedi la storia dei Commit su Github per maggiori dettagli",
|
||||
"OutputPath": "Percorso di Destinazione",
|
||||
"ReplaceIllegalCharactersHelpText": "Sostituisci i caratteri non consentiti. Se non selezionato, Radarr invece li rimuoverà",
|
||||
"Progress": "Avanzamento",
|
||||
"Actions": "Azioni",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "I libri cancellati dal disco sono automaticamente non monitorati in Readarr",
|
||||
"BookAvailableButMissing": "Libro Disponibile, ma Mancante",
|
||||
"AutoUnmonitorPreviouslyDownloadedBooksHelpText": "I film cancellati dal disco sono automaticamente non monitorati in Radarr",
|
||||
"BookAvailableButMissing": "Film disponibile, ma Mancante",
|
||||
"DetailedProgressBarHelpText": "Mostra testo sulla barra di avanzamento",
|
||||
"NotAvailable": "Non disponibile",
|
||||
"NotMonitored": "Non monitorato",
|
||||
@@ -465,20 +465,20 @@
|
||||
"Today": "Oggi",
|
||||
"Tomorrow": "Domani",
|
||||
"UI": "Interfaccia",
|
||||
"CloneIndexer": "Clona Indicizzatore",
|
||||
"CloneIndexer": "Clona Indexer",
|
||||
"RemoveFromBlocklist": "Rimuovi della blacklist",
|
||||
"Time": "Ora",
|
||||
"Time": "Orario",
|
||||
"Label": "Etichetta",
|
||||
"UnableToLoadBlocklist": "Non riesco a caricare la BlackList",
|
||||
"Component": "Componente",
|
||||
"Level": "Livello",
|
||||
"ReleaseBranchCheckOfficialBranchMessage": "Il Branch {0} non è un branch valido per le release di Radarr, non riceverai aggiornamenti",
|
||||
"AddMissing": "Aggiungi mancanti",
|
||||
"AddMissing": "Aggiungi ai mancanti",
|
||||
"AddNewItem": "Aggiungi Nuovo Elemento",
|
||||
"Blocklist": "Lista dei Blocchi",
|
||||
"BlocklistHelpText": "Impedisci a Readarr di re-acquisire automaticamente questi file",
|
||||
"BlocklistRelease": "Release in Lista dei Blocchi",
|
||||
"AllowFingerprinting": "Consenti il \"Fingerprinting\"",
|
||||
"Blocklist": "Lista Nera",
|
||||
"BlocklistHelpText": "Impedisci a Radarr di acquisire automaticamente questo versione",
|
||||
"BlocklistRelease": "Release in blacklist",
|
||||
"AllowFingerprinting": "Consenti impronte",
|
||||
"AllExpandedCollapseAll": "Collassa tutto",
|
||||
"AllExpandedExpandAll": "Espandi tutto",
|
||||
"ShowUnknownAuthorItems": "Mostra film sconosciuti",
|
||||
@@ -491,21 +491,21 @@
|
||||
"CreateEmptyAuthorFolders": "Crea le cartelle dei film se non esistono",
|
||||
"All": "Tutti",
|
||||
"RescanAfterRefreshHelpText": "Riscansiona la cartella dopo aver ricaricato il film",
|
||||
"AllowFingerprintingHelpText": "Usa il \"Fingerprinting\" per migliorare la corrispondenza dei libri",
|
||||
"AllowFingerprintingHelpTextWarning": "Questo richiede che Readarr legga parti del file che rallenterà le scansioni e potrebbe causare un’alta attività del disco o della rete.",
|
||||
"AllowAuthorChangeClickToChangeAuthor": "Clicca per cambiare l’autore",
|
||||
"AllowFingerprintingHelpText": "Consenti impronte per migliorare il riconoscimento delle tracce",
|
||||
"AllowFingerprintingHelpTextWarning": "Questo richiede che Lidarr legga le parti dei file e potrebbe causare un’alta attività del disco e della rete.",
|
||||
"AllowAuthorChangeClickToChangeAuthor": "Clicca per cambiare l’artista",
|
||||
"IndexerRssHealthCheckNoIndexers": "Non è disponibile nessun indexer con la sincronizzazione RSS attiva, Radarr non recupererà nuove release automaticamente",
|
||||
"SearchFiltered": "Cerca con Filtri",
|
||||
"DownloadClientCheckNoneAvailableMessage": "Non è disponibile nessun client di download",
|
||||
"DownloadClientCheckNoneAvailableMessage": "Non è disponibile nessun client per il download",
|
||||
"OnBookFileDelete": "Su Elimina file filmato",
|
||||
"OnBookFileDeleteForUpgrade": "Su file filmato Elimina per aggiornamento",
|
||||
"OnHealthIssue": "Quando c'è un problema",
|
||||
"OnRename": "Durante la rinomina",
|
||||
"OnUpgrade": "In aggiornamento",
|
||||
"AppDataLocationHealthCheckMessage": "L'aggiornamento non sarà possibile per evitare la cancellazione di AppData durante l'aggiornamento",
|
||||
"DownloadClientStatusCheckAllClientMessage": "Nessun client di download è disponibile a causa di errori",
|
||||
"DownloadClientStatusCheckSingleClientMessage": "Client per il download non disponibili per errori: {0}",
|
||||
"Filters": "Filtri",
|
||||
"DownloadClientStatusCheckAllClientMessage": "Tutti i client per il download non sono disponibili a causa di errori",
|
||||
"DownloadClientStatusCheckSingleClientMessage": "Client per il download non disponibile per errori: {0}",
|
||||
"Filters": "Filtro",
|
||||
"IndexerSearchCheckNoAutomaticMessage": "Non è disponibile nessun indexer con abilitata la Ricerca Automatica, Radarr non fornirà nessun risultato tramite la ricerca automatica",
|
||||
"RemotePathMappingCheckFolderPermissions": "Radarr può vedere ma non accedere alla directory {0}. Probabilmente per un errore nei permessi.",
|
||||
"RemotePathMappingCheckImportFailed": "Radarr ha fallito nell'importare un film. Controlla i logs per dettagli.",
|
||||
@@ -515,33 +515,33 @@
|
||||
"SettingsRemotePathMappingRemotePathHelpText": "Percorso root alla cartella a cui accede il client di download",
|
||||
"UISettingsSummary": "Opzioni calendario, data e visione dei colori",
|
||||
"UpdateCheckStartupNotWritableMessage": "Impossibile installare l'aggiornamento perché l'utente '{1}' non ha i permessi di scrittura per la cartella di avvio '{0}'.",
|
||||
"UpdateCheckUINotWritableMessage": "Impossibile installare l'aggiornamento perché l'utente '{1}' non ha i permessi di scrittura per la cartella dell'interfaccia '{0}'.",
|
||||
"UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent fornito dalla app che ha chiamato la API",
|
||||
"UpdateCheckUINotWritableMessage": "Impossibile installare l'aggiornamento perché l'utente '{1}' non ha i permessi di scrittura per la cartella di interfaccia '{0}'.",
|
||||
"UserAgentProvidedByTheAppThatCalledTheAPI": "User-Agent esposto dalla app che ha chiamato la API",
|
||||
"UpdateAvailable": "É disponibile un nuovo aggiornamento",
|
||||
"DownloadClientsSettingsSummary": "Client di download, gestione dei download e mappatura dei percorsi remoti",
|
||||
"DownloadClientsSettingsSummary": "Client download, gestione dei download e collegamento a percorsi remoti",
|
||||
"OnBookFileDeleteForUpgradeHelpText": "Su file filmato Elimina per aggiornamento",
|
||||
"CouldntFindAnyResultsForTerm": "Non ho trovato risultati per '{0}'",
|
||||
"IndexerSearchCheckNoAvailableIndexersMessage": "Tutti gli indexer abilitati alla ricerca sono momentaneamente non disponibili a causa di errori",
|
||||
"RemotePathMappingCheckDownloadPermissions": "Radarr può vedere ma non accedere al film scaricato {0}. Probabilmente per un errore nei permessi.",
|
||||
"SettingsRemotePathMappingLocalPathHelpText": "Percorso che Radarr dovrebbe usare per accedere localmente al percorso remoto",
|
||||
"UpdateCheckStartupTranslocationMessage": "Impossibile installare l'aggiornamento perché la cartella '{0}' si trova in una cartella di \"App Translocation\".",
|
||||
"SystemTimeCheckMessage": "L'orario di sistema è sbagliato di più di un giorno. Le attività pianificate potrebbero non essere eseguite correttamente fino alla correzione",
|
||||
"UpdateCheckStartupTranslocationMessage": "Impossibile installare l'aggiornamento perché la cartella '{0}' si trova in una cartella App Translocation.",
|
||||
"SystemTimeCheckMessage": "L'orario di sistema è spento da più di 1 giorno. I task schedulati potrebbero non essere correttamente eseguiti fino al suo ripristino",
|
||||
"General": "Generale",
|
||||
"GeneralSettingsSummary": "Porta, SSL, Nome utente/password, proxy, statistiche e aggiornamenti",
|
||||
"HealthNoIssues": "La tua configurazione non presenta problemi",
|
||||
"ImportListStatusCheckAllClientMessage": "Tutte le liste non sono disponibili a causa di errori",
|
||||
"ImportListStatusCheckSingleClientMessage": "Liste non disponibili a causa di errori: {0}",
|
||||
"ImportMechanismHealthCheckMessage": "Abilita la Gestione dei Download Completati",
|
||||
"IndexerLongTermStatusCheckAllClientMessage": "Nessun Indicizzatore è disponibile da più di 6 ore a causa di errori",
|
||||
"IndexerLongTermStatusCheckSingleClientMessage": "Alcuni Indicizzatori non sono disponibili da più di 6 ore a causa di errori: {0}",
|
||||
"IndexerLongTermStatusCheckAllClientMessage": "Nessun indexer è disponibile da più di 6 ore a causa di errori",
|
||||
"IndexerLongTermStatusCheckSingleClientMessage": "Alcuni indexer non disponibili da più di 6 ore a causa di errori: {0}",
|
||||
"IndexerSearchCheckNoInteractiveMessage": "Non è disponibile nessun indexer con abilitata la Ricerca Interattiva, Radarr non fornirà nessun risultato tramite la ricerca interattiva",
|
||||
"IndexerStatusCheckAllClientMessage": "Nessun Indicizzatore disponibile a causa di errori",
|
||||
"IndexerStatusCheckSingleClientMessage": "Indicizzatori non disponibili a causa di errori: {0}",
|
||||
"IndexerStatusCheckAllClientMessage": "Tutti gli indexer non sono disponibili a causa di errori",
|
||||
"IndexerStatusCheckSingleClientMessage": "Indexer non disponibili a causa di errori: {0}",
|
||||
"Metadata": "Metadata",
|
||||
"Monitor": "Segui",
|
||||
"MountCheckMessage": "La destinazione contenente il percorso di un film è montata in sola lettura: ",
|
||||
"OnGrab": "Al Prelievo",
|
||||
"ProxyCheckBadRequestMessage": "Il test del proxy è fallito. Codice Stato: {0}",
|
||||
"OnGrab": "Quando viene prelevato",
|
||||
"ProxyCheckBadRequestMessage": "Il test del proxy è fallito. Stato: {0}",
|
||||
"ProxyCheckFailedToTestMessage": "Test del proxy fallito: {0}",
|
||||
"QualitySettingsSummary": "Dimensioni delle qualità e denominazione",
|
||||
"Queued": "Messo in coda",
|
||||
@@ -549,12 +549,12 @@
|
||||
"RemotePathMappingCheckBadDockerPath": "Stai utilizzando docker; Il client di download {0} mette i download in {1} ma questo non è un percorso valido {2}. Controlla la mappa dei percorsi remoti e le impostazioni del client di download.",
|
||||
"RemotePathMappingCheckDockerFolderMissing": "Stai utilizzando docker; il download client {0} riporta files in {1} ma questa directory non sembra esistere nel contenitore. Controlla la mappa dei percorsi remoti e le impostazioni dei volumi del container.",
|
||||
"RemotePathMappingCheckGenericPermissions": "Il download client {0} mette i files in {1} ma Radarr non può vedere questa directory. Potrebbe essere necessario aggiustare i permessi della cartella.",
|
||||
"ProxyCheckResolveIpMessage": "Impossibile risolvere l'indirizzo IP per l'Host Configurato del Proxy {0}",
|
||||
"ProxyCheckResolveIpMessage": "Impossibile risolvere l'indirizzo IP per il Proxy {0}",
|
||||
"QueueIsEmpty": "La coda è vuota",
|
||||
"RemotePathMappingCheckWrongOSPath": "Stai utilizzando docker; Il client di download {0} mette i download in {1} ma questo non è un percorso valido {2}. Controlla la mappa dei percorsi remoti e le impostazioni del client di download.",
|
||||
"RootFolderCheckSingleMessage": "Cartella radice mancante: {0}",
|
||||
"TimeLeft": "Tempo Rimanente",
|
||||
"BackupIntervalHelpText": "Intervallo per eseguire il backup del DB e delle impostazioni di Readarr",
|
||||
"BackupIntervalHelpText": "Intervallo per eseguire il backup del DB Lidarr e delle impostazioni",
|
||||
"ConnectSettingsSummary": "Notifiche, collegamenti a media server/player e script personalizzati",
|
||||
"FailedToLoadQueue": "Impossibile caricare la coda",
|
||||
"FileWasDeletedByUpgrade": "Il file è stato eliminato per importare un aggiornamento",
|
||||
@@ -575,31 +575,5 @@
|
||||
"RemotePathMappingCheckFilesGenericPermissions": "Il download client {0} riporta files in {1} ma Radarr non può vedere questa directory. Potrebbe essere necessario aggiustare i permessi della cartella.",
|
||||
"RemotePathMappingCheckFilesWrongOSPath": "Stai utilizzando docker; Il client di download {0} riporta files in {1} ma questo non è un percorso valido {2}. Controlla la mappa dei percorsi remoti e le impostazioni del client di download.",
|
||||
"Save": "Salva",
|
||||
"SettingsRemotePathMappingLocalPath": "Percorso locale",
|
||||
"AuthorIndex": "Indice Autore",
|
||||
"Authors": "Autori",
|
||||
"AutomaticallySwitchEdition": "Cambia Automaticamente Edizione",
|
||||
"BookEditor": "Editore del libro",
|
||||
"BookIndex": "Indice del Libro",
|
||||
"BookList": "Lista Libri",
|
||||
"AddedAuthorSettings": "Impostazioni dell'autore aggiunte",
|
||||
"AddImportListExclusionHelpText": "Evita che vengano aggiunti libri a Readarr dalle Liste di Importazione o dall'Aggiornamento degli Autori",
|
||||
"AnyEditionOkHelpText": "Readarr cambierà automaticamente all'edizione che meglio si abbina al file scaricato",
|
||||
"Author": "Autore",
|
||||
"AuthorEditor": "Editor Autore",
|
||||
"AuthorFolderFormat": "Formato Cartella Autore",
|
||||
"AuthorNameHelpText": "Il nome dell'autore/libro da escludere (può essere qualsiasi cosa significativa)",
|
||||
"Book": "Libro",
|
||||
"AllAuthorBooks": "Tutti i Libri dell'Autore",
|
||||
"AllBooks": "Tutti i Libri",
|
||||
"AllowedLanguages": "Lingue Permesse",
|
||||
"ASIN": "ASIN",
|
||||
"BookMonitoring": "Monitoraggio del libro",
|
||||
"BookNaming": "Nomenclatura del Libro",
|
||||
"Books": "Libri",
|
||||
"BookFileCountBookCountTotalTotalBookCountInterp": "{0} / {1} (Totale: {2})",
|
||||
"BookFileCounttotalBookCountBooksDownloadedInterp": "{0}/{1} libri scaricati",
|
||||
"BookFilesCountMessage": "Nessun file di libri",
|
||||
"AudioFileMetadata": "Scrivi i Metadati sui File Audio",
|
||||
"Duration": "Durata"
|
||||
"SettingsRemotePathMappingLocalPath": "Percorso locale"
|
||||
}
|
||||
|
||||
@@ -30,12 +30,12 @@
|
||||
"BackupNow": "Sikkerhetskopier nå",
|
||||
"BackupRetentionHelpText": "Automatiske sikkerhetskopier som er eldre enn oppbevaringsperioden, blir ryddet opp automatisk",
|
||||
"BindAddress": "Bind adresse",
|
||||
"BindAddressHelpText": "Gyldig IPv4 -adresse eller \"*\" for alle grensesnitt",
|
||||
"BindAddressHelpText": "Gyldig IP4 -adresse eller \"*\" for alle grensesnitt",
|
||||
"BypassProxyForLocalAddresses": "Omgå proxy for lokale adresser",
|
||||
"Cancel": "Avbryt",
|
||||
"CancelMessageText": "Er du sikker på at du vil avbryte denne ventende oppgaven?",
|
||||
"CertificateValidation": "Sertifikatvalidering",
|
||||
"CertificateValidationHelpText": "Endre hvor streng HTTPS -sertifisering validering er. Ikke endre med mindre du forstår risikoene.",
|
||||
"CertificateValidationHelpText": "Endre hvor streng HTTPS -sertifisering validering er",
|
||||
"ChangeHasNotBeenSavedYet": "Endringen er ikke lagret ennå",
|
||||
"ChmodFolder": "chmod mappe",
|
||||
"ChmodFolderHelpText": "Octal, brukt under import/gi nytt navn til mediemapper og filer (uten utføringsbiter)",
|
||||
@@ -63,17 +63,5 @@
|
||||
"Blocklist": "Svarteliste",
|
||||
"BlocklistHelpText": "Hindrer Radarr i å automatisk gripe denne utgivelsen igjen",
|
||||
"BlocklistRelease": "Blacklist -utgivelse",
|
||||
"AppDataLocationHealthCheckMessage": "Oppdatering vil ikke være mulig for å forhindre sletting av AppData på oppdateringen",
|
||||
"CopyUsingHardlinksHelpText": "Bruk harde lenker ved forsøk på å kopiere filer fra torrents som fortsatt blir delt",
|
||||
"Component": "Komponent",
|
||||
"Connect": "Koble til",
|
||||
"Connections": "Tilkoblinger",
|
||||
"ConnectSettings": "Tilkoblingsinnstillinger",
|
||||
"ClientPriority": "Klientprioritet",
|
||||
"CloneIndexer": "Klon indekser",
|
||||
"CloneProfile": "Klon profil",
|
||||
"Columns": "Kolonner",
|
||||
"CompletedDownloadHandling": "Fullført nedlastingshåndtering",
|
||||
"ClickToChangeQuality": "Klikk for å endre kvalitet",
|
||||
"Close": "Lukk"
|
||||
"AppDataLocationHealthCheckMessage": "Oppdatering vil ikke være mulig for å forhindre sletting av AppData på oppdateringen"
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
"BackupRetentionHelpText": "Automatyczne kopie zapasowe starsze niż okres przechowywania zostaną automatycznie wyczyszczone",
|
||||
"Backups": "Kopie zapasowe",
|
||||
"BindAddress": "Adres powiązania",
|
||||
"BindAddressHelpText": "Prawidłowy adres IPv4 lub „*” dla wszystkich interfejsów",
|
||||
"BindAddressHelpText": "Prawidłowy adres IP4 lub „*” dla wszystkich interfejsów",
|
||||
"BindAddressHelpTextWarning": "Wymaga ponownego uruchomienia, aby odniosło skutek",
|
||||
"BookIsDownloading": "Film jest pobierany",
|
||||
"BookIsDownloadingInterp": "Film jest pobierany - {0}% {1}",
|
||||
@@ -90,7 +90,7 @@
|
||||
"Cancel": "Anuluj",
|
||||
"CancelMessageText": "Czy na pewno chcesz anulować to oczekujące zadanie?",
|
||||
"CertificateValidation": "Walidacja certyfikatu",
|
||||
"CertificateValidationHelpText": "Zmień ścisłość walidacji certyfikatu HTTPS. Nie zmieniaj, jeśli nie rozumiesz związanych z tym zagrożeń.",
|
||||
"CertificateValidationHelpText": "Zmień ścisłą walidację certyfikatu HTTPS",
|
||||
"ChangeFileDate": "Zmień datę pliku",
|
||||
"ChangeHasNotBeenSavedYet": "Zmiana nie została jeszcze zapisana",
|
||||
"ChmodFolder": "chmod Folder",
|
||||
@@ -471,7 +471,7 @@
|
||||
"RemoveFromBlocklist": "Usuń z czarnej listy",
|
||||
"SelectAll": "Zaznacz wszystko",
|
||||
"SelectedCountBooksSelectedInterp": "Wybrane filmy: {0}",
|
||||
"ThisCannotBeCancelled": "Nie można tego anulować po uruchomieniu bez wyłączenia wszystkich indekserów.",
|
||||
"ThisCannotBeCancelled": "Nie można tego anulować po uruchomieniu bez ponownego uruchamiania Radarr.",
|
||||
"UnselectAll": "Odznacz wszystko",
|
||||
"UpdateSelected": "Aktualizuj wybrane",
|
||||
"Component": "Składnik",
|
||||
@@ -552,22 +552,5 @@
|
||||
"TheAuthorFolderAndAllOfItsContentWillBeDeleted": "Folder filmów „{0}” i cała jego zawartość zostaną usunięte.",
|
||||
"TimeLeft": "Pozostały czas",
|
||||
"Yesterday": "Wczoraj",
|
||||
"OnGrab": "Na Grab",
|
||||
"SizeLimit": "Ograniczenie rozmiaru",
|
||||
"UpdateAvailable": "Dostępna jest aktualizacja",
|
||||
"IndexerJackettAll": "Indeksery korzystają z nieobsługiwanego punktu końcowego \"wszystkie\" w Jackett: {0}",
|
||||
"RemotePathMappingCheckBadDockerPath": "Korzystasz z Dockera. Klient pobierania {0} umieszcza pobrane pliki w {1}, lecz nie jest to poprawna ścieżka {2}. Zmień ustawienia zdalnego mapowania ścieżek i klienta pobierania.",
|
||||
"RemotePathMappingCheckDockerFolderMissing": "Korzystasz z Dockera. Klient pobierania {0} umieszcza pobrane pliki w {1}, lecz tej folder nie istnieje wewnątrz kontenera. Zmień ustawienia zdalnego mapowania ścieżek i woluminów kontenera.",
|
||||
"RemotePathMappingCheckLocalFolderMissing": "Zdalny klient pobierania {0} umieszcza pobrane pliki w {1}, lecz ten folder nie istnieje. Prawdopodobnie wynika to z brakującego lub nieprawidłowego zdalnego mapowania ścieżki.",
|
||||
"RemotePathMappingCheckWrongOSPath": "Zdalny klient pobierania {0} umieszcza pobrane pliki w {1}, lecz nie jest to poprawna ścieżka {2}. Zmień ustawienia zdalnego mapowania ścieżek i klienta pobierania.",
|
||||
"Started": "Rozpoczęto",
|
||||
"InstanceName": "Nazwa instancji",
|
||||
"InstanceNameHelpText": "Nazwa instancji w zakładce i dla nazwy aplikacji Syslog",
|
||||
"Duration": "Czas trwania",
|
||||
"RemotePathMappingCheckFileRemoved": "Plik {0} został usunięty w trakcie przetwarzania.",
|
||||
"RemotePathMappingCheckFilesLocalWrongOSPath": "Lokalny klient pobierania {0} zgłosił pliki w {1}, lecz nie jest to poprawna ścieżka {2}. Zmień ustawienia klienta pobierania.",
|
||||
"RemotePathMappingCheckLocalWrongOSPath": "Lokalny klient pobierania {0} umieszcza pobrane pliki w {1}, lecz nie jest to poprawna ścieżka {2}. Zmień ustawienia klienta pobierania.",
|
||||
"RemotePathMappingCheckFilesBadDockerPath": "Korzystasz z Dockera. Klient pobierania {0} zgłosił pliki w {1}, lecz nie jest to poprawna ścieżka {2}. Zmień ustawienia zdalnego mapowania ścieżek i klienta pobierania.",
|
||||
"RemotePathMappingCheckFilesWrongOSPath": "Zdalny klient pobierania {0} zgłosił pliki w {1}, lecz nie jest to poprawna ścieżka {2}. Zmień ustawienia zdalnego mapowania ścieżek i klienta pobierania.",
|
||||
"RemotePathMappingCheckRemoteDownloadClient": "Zdalny klient pobierania {0} zgłosił pliki w {1}, lecz ten folder nie istnieje. Prawdopodobnie to wynik brakującego zdalnego mapowania ścieżki."
|
||||
"OnGrab": "Na Grab"
|
||||
}
|
||||
|
||||
@@ -362,7 +362,7 @@
|
||||
"ShownAboveEachColumnWhenWeekIsTheActiveView": "Mostrado acima de cada coluna quando a semana é a exibição ativa",
|
||||
"Size": " Tamanho",
|
||||
"SkipFreeSpaceCheck": "Ignorar verificação de espaço livre",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "Usar quando o Readarr não puder detectar o espaço livre da pasta raiz do seu autor",
|
||||
"SkipFreeSpaceCheckWhenImportingHelpText": "Usar quando o Readarr não conseguir detectar espaço livre na pasta raiz do autor",
|
||||
"SorryThatAuthorCannotBeFound": "Desculpe, esse autor não pode ser encontrado.",
|
||||
"SorryThatBookCannotBeFound": "Desculpe, esse livro não pode ser encontrado.",
|
||||
"Source": "Fonte",
|
||||
@@ -761,7 +761,7 @@
|
||||
"OnRename": "Ao Renomear",
|
||||
"OnUpgrade": "Ao Atualizar",
|
||||
"AppDataLocationHealthCheckMessage": "A atualização não será possível para evitar a exclusão de AppData na atualização",
|
||||
"IndexerSearchCheckNoInteractiveMessage": "Sem indexadores disponíveis com pesquisa interativa habilitada, o Readarr não fornecerá nenhum resultado de pesquisa interativo",
|
||||
"IndexerSearchCheckNoInteractiveMessage": "Nenhum indexador disponível com a pesquisa interativa habilitada, o Readarr não fornecerá nenhum resultado de pesquisa interativo",
|
||||
"ConnectSettingsSummary": "Notificações, conexões com servidores/tocadores de mídia e scripts personalizados",
|
||||
"DownloadClientStatusCheckAllClientMessage": "Todos os clientes download não estão disponíveis devido a falhas",
|
||||
"DownloadClientsSettingsSummary": "Clientes de download, gerenciamento do download e mapeamento remoto de caminhos",
|
||||
@@ -821,7 +821,7 @@
|
||||
"ReadarrSupportsAnyDownloadClient": "Readarr suporta muitos clientes populares de download de torrent e usenet.",
|
||||
"RemotePathMappingCheckDockerFolderMissing": "Você está usando o docker; cliente de download {0} coloca downloads em {1}, mas esse diretório parece não existir dentro do contêiner. Revise seus mapeamentos de caminho remoto e configurações de volume de contêiner.",
|
||||
"RemotePathMappingCheckFilesLocalWrongOSPath": "O cliente de download local {0} relatou arquivos em {1}, mas este não é um caminho {2} válido. Revise as configurações do seu cliente de download.",
|
||||
"RemotePathMappingCheckGenericPermissions": "Cliente para download {0} coloca downloads em {1}, mas Readarr não pode ver este diretório. Você pode precisar ajustar as permissões da pasta.",
|
||||
"RemotePathMappingCheckGenericPermissions": "O cliente de download {0} coloca os downloads em {1}, mas o Readarr não pode ver este diretório. Pode ser necessário ajustar as permissões da pasta.",
|
||||
"RemotePathMappingCheckRemoteDownloadClient": "O cliente de download remoto {0} relatou arquivos em {1}, mas este diretório parece não existir. Provavelmente faltando mapeamento de caminho remoto.",
|
||||
"SettingsRemotePathMappingLocalPathHelpText": "Caminho que Readarr deve usar para acessar o caminho remoto localmente",
|
||||
"RootFolderCheckSingleMessage": "Pasta raiz ausente: {0}",
|
||||
@@ -849,30 +849,5 @@
|
||||
"UISettingsSummary": "Opções de calendário, data e cores prejudicadas",
|
||||
"UpdateCheckStartupNotWritableMessage": "Não é possível instalar a atualização porque a pasta de inicialização '{0}' não pode ser gravada pelo usuário '{1}'.",
|
||||
"UpdateCheckStartupTranslocationMessage": "Não é possível instalar a atualização porque a pasta de inicialização '{0}' está em uma pasta App Translocation.",
|
||||
"TagsSettingsSummary": "Gerenciar etiquetas de autor, perfil, restrição e notificação",
|
||||
"InstanceNameHelpText": "Nome da instância na guia e para o nome do aplicativo Syslog",
|
||||
"AddList": "Adicionar à Lista",
|
||||
"DataExistingBooks": "Monitorar livros que você tem arquivos ou que não foram lançados ainda",
|
||||
"DataListMonitorAll": "Monitorar autores e todos os livros para cada autor incluído na lista de importação",
|
||||
"DataListMonitorNone": "Não monitorar autores ou livros",
|
||||
"DataListMonitorSpecificBook": "Monitorar autores, mas só monitorar livros explicitamente incluídos na lista",
|
||||
"EditList": "Editar Lista",
|
||||
"MonitorExistingBooks": "Monitorar Livros Existentes",
|
||||
"RenameFiles": "Renomear Arquivos",
|
||||
"Test": "Testar",
|
||||
"WriteMetadataTags": "Salvar Etiquetas de Metadados",
|
||||
"RestartRequiredHelpTextWarning": "Requer reinicio para fazer efeito",
|
||||
"InstanceName": "Nome da instância",
|
||||
"ConvertToFormat": "Converter para o Formato",
|
||||
"DataAllBooks": "Monitorar todos os livros",
|
||||
"DataFirstBook": "Monitorar o primeiro livro. Todos os outros livros serão ignorados",
|
||||
"DataFuturebooks": "Monitorar livros que não foram lançados ainda",
|
||||
"DataLatestBook": "Monitorar o último livro e livros futuros",
|
||||
"DataMissingBooks": "Monitorar livros que não tenha arquivos ou não foram lançados ainda",
|
||||
"DataNewAllBooks": "Monitorar todos os novos livros",
|
||||
"DataNewBooks": "Monitorar novos livros lançados depois do mais novo livro existente",
|
||||
"DataNewNone": "Não monitorar nenhum novo livro",
|
||||
"DataNone": "Nenhum livro irá ser monitorado",
|
||||
"MonitorNewBooks": "Monitorar Novos Livros",
|
||||
"SetReadarrTags": "Configurar Etiquetas do Readarr"
|
||||
"TagsSettingsSummary": "Gerenciar etiquetas de autor, perfil, restrição e notificação"
|
||||
}
|
||||
|
||||
@@ -601,8 +601,5 @@
|
||||
"BackupIntervalHelpText": "备份 Lidarr 数据库和设置的时间间隔",
|
||||
"Term": "项",
|
||||
"MetadataProfile": "元数据配置",
|
||||
"MetadataProfiles": "元数据配置",
|
||||
"InstanceName": "中文",
|
||||
"InstanceNameHelpText": "选项卡及日志应用名称",
|
||||
"AddList": "添加列表"
|
||||
"MetadataProfiles": "元数据配置"
|
||||
}
|
||||
|
||||
@@ -439,7 +439,7 @@ namespace NzbDrone.Core.MetadataSource.BookInfo
|
||||
var edition = book.Editions.Value.SingleOrDefault(e => e.ForeignEditionId == id.ToString());
|
||||
|
||||
trimmed.Editions = new List<Edition> { edition };
|
||||
book = trimmed;
|
||||
return trimmed;
|
||||
}
|
||||
|
||||
var authorDict = authors.ToDictionary(x => x.ForeignAuthorId);
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
<PackageReference Include="MailKit" />
|
||||
<PackageReference Include="Newtonsoft.Json" />
|
||||
<PackageReference Include="NLog" />
|
||||
<PackageReference Include="NLog.Targets.Syslog" />
|
||||
<PackageReference Include="RestSharp" />
|
||||
<PackageReference Include="System.IO.Abstractions" />
|
||||
<PackageReference Include="TagLibSharp-Lidarr" />
|
||||
|
||||
@@ -9,7 +9,7 @@ namespace NzbDrone.Core.Validation.Paths
|
||||
private readonly IAppFolderInfo _appFolderInfo;
|
||||
|
||||
public StartupFolderValidator(IAppFolderInfo appFolderInfo)
|
||||
: base("Path cannot be {relationship} the start up folder")
|
||||
: base("Path cannot be an ancestor of the start up folder")
|
||||
{
|
||||
_appFolderInfo = appFolderInfo;
|
||||
}
|
||||
@@ -21,24 +21,7 @@ namespace NzbDrone.Core.Validation.Paths
|
||||
return true;
|
||||
}
|
||||
|
||||
var startupFolder = _appFolderInfo.StartUpFolder;
|
||||
var folder = context.PropertyValue.ToString();
|
||||
|
||||
if (startupFolder.PathEquals(folder))
|
||||
{
|
||||
context.MessageFormatter.AppendArgument("relationship", "set to");
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if (startupFolder.IsParentPath(folder))
|
||||
{
|
||||
context.MessageFormatter.AppendArgument("relationship", "child of");
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
return !_appFolderInfo.StartUpFolder.IsParentPath(context.PropertyValue.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,11 +61,5 @@ namespace NzbDrone.Core.Validation
|
||||
{
|
||||
return ruleBuilder.WithState(v => NzbDroneValidationState.Warning);
|
||||
}
|
||||
|
||||
public static IRuleBuilderOptions<T, string> ContainsReadarr<T>(this IRuleBuilder<T, string> ruleBuilder)
|
||||
{
|
||||
ruleBuilder.SetValidator(new NotEmptyValidator(null));
|
||||
return ruleBuilder.SetValidator(new RegularExpressionValidator("readarr", RegexOptions.IgnoreCase)).WithMessage("Must contain readarr");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,23 +52,12 @@ namespace NzbDrone.Integration.Test.ApiTests
|
||||
{
|
||||
EnsureAuthor("14586394", "43765115", "Andrew Hunter Murray", true);
|
||||
|
||||
var result = WantedMissing.GetPagedIncludeAuthor(0, 15, "releaseDate", "desc", includeAuthor: true);
|
||||
var result = WantedMissing.GetPaged(0, 15, "releaseDate", "desc");
|
||||
|
||||
result.Records.First().Author.Should().NotBeNull();
|
||||
result.Records.First().Author.AuthorName.Should().Be("Andrew Hunter Murray");
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Order(1)]
|
||||
public void missing_should_not_have_author()
|
||||
{
|
||||
EnsureAuthor("14586394", "43765115", "Andrew Hunter Murray", true);
|
||||
|
||||
var result = WantedMissing.GetPagedIncludeAuthor(0, 15, "releaseDate", "desc", includeAuthor: false);
|
||||
|
||||
result.Records.First().Author.Should().BeNull();
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Order(2)]
|
||||
public void cutoff_should_have_monitored_items()
|
||||
@@ -114,25 +103,12 @@ namespace NzbDrone.Integration.Test.ApiTests
|
||||
var author = EnsureAuthor("14586394", "43765115", "Andrew Hunter Murray", true);
|
||||
EnsureBookFile(author, 1, "43765115", Quality.MOBI);
|
||||
|
||||
var result = WantedCutoffUnmet.GetPagedIncludeAuthor(0, 15, "releaseDate", "desc", includeAuthor: true);
|
||||
var result = WantedCutoffUnmet.GetPaged(0, 15, "releaseDate", "desc");
|
||||
|
||||
result.Records.First().Author.Should().NotBeNull();
|
||||
result.Records.First().Author.AuthorName.Should().Be("Andrew Hunter Murray");
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Order(2)]
|
||||
public void cutoff_should_not_have_author()
|
||||
{
|
||||
EnsureProfileCutoff(1, Quality.AZW3);
|
||||
var author = EnsureAuthor("14586394", "43765115", "Andrew Hunter Murray", true);
|
||||
EnsureBookFile(author, 1, "43765115", Quality.MOBI);
|
||||
|
||||
var result = WantedCutoffUnmet.GetPagedIncludeAuthor(0, 15, "releaseDate", "desc", includeAuthor: false);
|
||||
|
||||
result.Records.First().Author.Should().BeNull();
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Order(1)]
|
||||
public void missing_should_have_unmonitored_items()
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using Readarr.Api.V1.Books;
|
||||
using Readarr.Http;
|
||||
using RestSharp;
|
||||
|
||||
namespace NzbDrone.Integration.Test.Client
|
||||
{
|
||||
public class WantedClient : ClientBase<BookResource>
|
||||
{
|
||||
public WantedClient(IRestClient restClient, string apiKey, string resource)
|
||||
: base(restClient, apiKey, resource)
|
||||
{
|
||||
}
|
||||
|
||||
public PagingResource<BookResource> GetPagedIncludeAuthor(int pageNumber, int pageSize, string sortKey, string sortDir, string filterKey = null, string filterValue = null, bool includeAuthor = true)
|
||||
{
|
||||
var request = BuildRequest();
|
||||
request.AddParameter("page", pageNumber);
|
||||
request.AddParameter("pageSize", pageSize);
|
||||
request.AddParameter("sortKey", sortKey);
|
||||
request.AddParameter("sortDir", sortDir);
|
||||
|
||||
if (filterKey != null && filterValue != null)
|
||||
{
|
||||
request.AddParameter("filterKey", filterKey);
|
||||
request.AddParameter("filterValue", filterValue);
|
||||
}
|
||||
|
||||
request.AddParameter("includeAuthor", includeAuthor);
|
||||
|
||||
return Get<PagingResource<BookResource>>(request);
|
||||
}
|
||||
|
||||
public List<BookResource> GetBooksInAuthor(int authorId)
|
||||
{
|
||||
var request = BuildRequest("?authorId=" + authorId.ToString());
|
||||
return Get<List<BookResource>>(request);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -53,8 +53,8 @@ namespace NzbDrone.Integration.Test
|
||||
public ClientBase<RootFolderResource> RootFolders;
|
||||
public AuthorClient Author;
|
||||
public ClientBase<TagResource> Tags;
|
||||
public WantedClient WantedMissing;
|
||||
public WantedClient WantedCutoffUnmet;
|
||||
public ClientBase<BookResource> WantedMissing;
|
||||
public ClientBase<BookResource> WantedCutoffUnmet;
|
||||
|
||||
private List<SignalRMessage> _signalRReceived;
|
||||
|
||||
@@ -118,8 +118,8 @@ namespace NzbDrone.Integration.Test
|
||||
RootFolders = new ClientBase<RootFolderResource>(RestClient, ApiKey);
|
||||
Author = new AuthorClient(RestClient, ApiKey);
|
||||
Tags = new ClientBase<TagResource>(RestClient, ApiKey);
|
||||
WantedMissing = new WantedClient(RestClient, ApiKey, "wanted/missing");
|
||||
WantedCutoffUnmet = new WantedClient(RestClient, ApiKey, "wanted/cutoff");
|
||||
WantedMissing = new ClientBase<BookResource>(RestClient, ApiKey, "wanted/missing");
|
||||
WantedCutoffUnmet = new ClientBase<BookResource>(RestClient, ApiKey, "wanted/cutoff");
|
||||
}
|
||||
|
||||
[OneTimeTearDown]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using FluentValidation;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using NzbDrone.Common.Extensions;
|
||||
@@ -70,13 +70,10 @@ namespace Readarr.Api.V1.Books
|
||||
{
|
||||
if (!authorId.HasValue && !bookIds.Any() && titleSlug.IsNullOrWhiteSpace())
|
||||
{
|
||||
var editionTask = Task.Run(() => _editionService.GetAllMonitoredEditions());
|
||||
var metadataTask = Task.Run(() => _authorService.GetAllAuthors());
|
||||
var books = _bookService.GetAllBooks();
|
||||
|
||||
var editions = editionTask.GetAwaiter().GetResult().GroupBy(x => x.BookId).ToDictionary(x => x.Key, y => y.ToList());
|
||||
|
||||
var authors = metadataTask.GetAwaiter().GetResult().ToDictionary(x => x.AuthorMetadataId);
|
||||
var authors = _authorService.GetAllAuthors().ToDictionary(x => x.AuthorMetadataId);
|
||||
var editions = _editionService.GetAllMonitoredEditions().GroupBy(x => x.BookId).ToDictionary(x => x.Key, y => y.ToList());
|
||||
|
||||
foreach (var book in books)
|
||||
{
|
||||
@@ -141,17 +138,6 @@ namespace Readarr.Api.V1.Books
|
||||
return MapToResource(_bookService.GetBooks(bookIds), false);
|
||||
}
|
||||
|
||||
[HttpGet("{id:int}/overview")]
|
||||
public object Overview(int id)
|
||||
{
|
||||
var overview = _editionService.GetEditionsByBook(id).Single(x => x.Monitored).Overview;
|
||||
return new
|
||||
{
|
||||
id,
|
||||
overview
|
||||
};
|
||||
}
|
||||
|
||||
[RestPostById]
|
||||
public ActionResult<BookResource> AddBook(BookResource bookResource)
|
||||
{
|
||||
|
||||
@@ -112,14 +112,10 @@ namespace Readarr.Api.V1.Books
|
||||
|
||||
private void LinkAuthorStatistics(List<BookResource> resources, List<AuthorStatistics> authorStatistics)
|
||||
{
|
||||
var bookStatsDict = authorStatistics.SelectMany(x => x.BookStatistics).ToDictionary(x => x.BookId);
|
||||
|
||||
foreach (var book in resources)
|
||||
{
|
||||
if (bookStatsDict.TryGetValue(book.Id, out var stats))
|
||||
{
|
||||
book.Statistics = stats.ToResource();
|
||||
}
|
||||
var stats = authorStatistics.SingleOrDefault(ss => ss.AuthorId == book.AuthorId);
|
||||
LinkAuthorStatistics(book, stats);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -72,10 +72,13 @@ namespace Readarr.Api.V1.Books
|
||||
AuthorTitle = authorTitle,
|
||||
SeriesTitle = seriesTitle,
|
||||
Disambiguation = selectedEdition?.Disambiguation,
|
||||
Overview = selectedEdition?.Overview,
|
||||
Images = selectedEdition?.Images ?? new List<MediaCover>(),
|
||||
Links = model.Links.Concat(selectedEdition?.Links ?? new List<Links>()).ToList(),
|
||||
Ratings = selectedEdition?.Ratings ?? new Ratings(),
|
||||
Added = model.Added,
|
||||
Author = model.Author?.Value.ToResource(),
|
||||
Editions = model.Editions?.Value.ToResource() ?? new List<EditionResource>()
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,6 @@ namespace Readarr.Api.V1.Config
|
||||
SharedValidator.RuleFor(c => c.Port).ValidPort();
|
||||
|
||||
SharedValidator.RuleFor(c => c.UrlBase).ValidUrlBase();
|
||||
SharedValidator.RuleFor(c => c.InstanceName).ContainsReadarr().When(c => c.InstanceName.IsNotNullOrWhiteSpace());
|
||||
|
||||
SharedValidator.RuleFor(c => c.Username).NotEmpty().When(c => c.AuthenticationMethod != AuthenticationType.None);
|
||||
SharedValidator.RuleFor(c => c.Password).NotEmpty().When(c => c.AuthenticationMethod != AuthenticationType.None);
|
||||
|
||||
@@ -25,7 +25,6 @@ namespace Readarr.Api.V1.Config
|
||||
public string SslCertPath { get; set; }
|
||||
public string SslCertPassword { get; set; }
|
||||
public string UrlBase { get; set; }
|
||||
public string InstanceName { get; set; }
|
||||
public bool UpdateAutomatically { get; set; }
|
||||
public UpdateMechanism UpdateMechanism { get; set; }
|
||||
public string UpdateScriptPath { get; set; }
|
||||
@@ -67,7 +66,6 @@ namespace Readarr.Api.V1.Config
|
||||
SslCertPath = model.SslCertPath,
|
||||
SslCertPassword = model.SslCertPassword,
|
||||
UrlBase = model.UrlBase,
|
||||
InstanceName = model.InstanceName,
|
||||
UpdateAutomatically = model.UpdateAutomatically,
|
||||
UpdateMechanism = model.UpdateMechanism,
|
||||
UpdateScriptPath = model.UpdateScriptPath,
|
||||
|
||||
@@ -99,8 +99,8 @@ namespace Readarr.Api.V1.History
|
||||
return _historyService.GetByAuthor(authorId, eventType).Select(h => MapToResource(h, includeAuthor, includeBook)).ToList();
|
||||
}
|
||||
|
||||
[HttpPost("failed/{id}")]
|
||||
public object MarkAsFailed([FromRoute] int id)
|
||||
[HttpPost("failed")]
|
||||
public object MarkAsFailed([FromBody] int id)
|
||||
{
|
||||
_failedDownloadService.MarkAsFailed(id);
|
||||
return new { };
|
||||
|
||||
@@ -51,9 +51,6 @@ namespace Readarr.Api.V1.Search
|
||||
{
|
||||
var book = (NzbDrone.Core.Books.Book)result;
|
||||
resource.Book = book.ToResource();
|
||||
resource.Book.Overview = book.Editions.Value.Single(x => x.Monitored).Overview;
|
||||
resource.Book.Author = book.Author.Value.ToResource();
|
||||
resource.Book.Editions = book.Editions.Value.ToResource();
|
||||
resource.ForeignId = book.ForeignBookId;
|
||||
|
||||
var cover = book.Editions.Value.Single(x => x.Monitored).Images.FirstOrDefault(c => c.CoverType == MediaCoverTypes.Cover);
|
||||
|
||||
@@ -59,7 +59,6 @@ namespace Readarr.Api.V1.System
|
||||
return new
|
||||
{
|
||||
AppName = BuildInfo.AppName,
|
||||
InstanceName = _configFileProvider.InstanceName,
|
||||
Version = BuildInfo.Version.ToString(),
|
||||
BuildTime = BuildInfo.BuildDateTime,
|
||||
IsDebug = BuildInfo.IsDebug,
|
||||
|
||||
@@ -49,7 +49,6 @@ namespace Readarr.Http.Frontend
|
||||
builder.AppendLine($" apiKey: '{_apiKey}',");
|
||||
builder.AppendLine($" release: '{BuildInfo.Release}',");
|
||||
builder.AppendLine($" version: '{BuildInfo.Version.ToString()}',");
|
||||
builder.AppendLine($" instanceName: '{_configFileProvider.InstanceName.ToString()}',");
|
||||
builder.AppendLine($" branch: '{_configFileProvider.Branch.ToLower()}',");
|
||||
builder.AppendLine($" analytics: {_analyticsService.IsEnabled.ToString().ToLowerInvariant()},");
|
||||
builder.AppendLine($" userHash: '{HashUtil.AnonymousToken()}',");
|
||||
|
||||
18
yarn.lock
18
yarn.lock
@@ -1368,15 +1368,15 @@
|
||||
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf"
|
||||
integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==
|
||||
|
||||
"@microsoft/signalr@6.0.5":
|
||||
version "6.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@microsoft/signalr/-/signalr-6.0.5.tgz#219f7fa10e94a75a841d3d7140d939fd2c2657e9"
|
||||
integrity sha512-Y6Mny+z71wv2/FiuoqLcraojQRIbyeF/Ao4y+tcZK28JzGGieoulXBJIVQhoxzeM15Xe8xGOX0/5pVlOpwrI8Q==
|
||||
"@microsoft/signalr@6.0.3":
|
||||
version "6.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@microsoft/signalr/-/signalr-6.0.3.tgz#9904efd48cd488e3c1c80930ff9fbb3c9f55895d"
|
||||
integrity sha512-wWGVC2xi8OxNjyir8iQWuyxWHy3Dkakk2Q3VreCE7pDzFAgZ4pId6abJlRPMVIQxkUvUGc8knMW5l3sv2bJ/yw==
|
||||
dependencies:
|
||||
abort-controller "^3.0.0"
|
||||
eventsource "^1.0.7"
|
||||
fetch-cookie "^0.11.0"
|
||||
node-fetch "^2.6.7"
|
||||
node-fetch "^2.6.1"
|
||||
ws "^7.4.5"
|
||||
|
||||
"@mrmlnc/readdir-enhanced@^2.2.1":
|
||||
@@ -5188,10 +5188,10 @@ no-case@^3.0.4:
|
||||
lower-case "^2.0.2"
|
||||
tslib "^2.0.3"
|
||||
|
||||
node-fetch@^2.6.7:
|
||||
version "2.6.7"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
|
||||
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
|
||||
node-fetch@^2.6.1:
|
||||
version "2.6.6"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89"
|
||||
integrity sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==
|
||||
dependencies:
|
||||
whatwg-url "^5.0.0"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user