Compare commits
18 Commits
v4.7.3.773
...
changelog-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0bad606f8c | ||
|
|
b70049c3aa | ||
|
|
a02cd3b1ba | ||
|
|
701e16430b | ||
|
|
4ffeb82b03 | ||
|
|
3196639e51 | ||
|
|
73ce41a912 | ||
|
|
c3bd452bee | ||
|
|
55208eeaf0 | ||
|
|
cd973818fb | ||
|
|
bac4345eed | ||
|
|
03391e087b | ||
|
|
9274cc1254 | ||
|
|
3adacf7970 | ||
|
|
8b117b3f91 | ||
|
|
6f6c5e11a5 | ||
|
|
b9f466bac2 | ||
|
|
305021f13b |
@@ -40,18 +40,9 @@ dotnet_naming_style.instance_field_style.capitalization = camel_case
|
||||
dotnet_naming_style.instance_field_style.required_prefix = _
|
||||
|
||||
# Prefer "var" everywhere
|
||||
csharp_style_var_for_built_in_types = true
|
||||
csharp_style_var_when_type_is_apparent = true
|
||||
csharp_style_var_elsewhere = true
|
||||
# Prefer "out" variables to be declared inline
|
||||
csharp_style_inlined_variable_declaration = true
|
||||
|
||||
# Using directive is unnecessary.
|
||||
dotnet_diagnostic.IDE0005.severity = error
|
||||
# Use var instead of explicit type
|
||||
dotnet_diagnostic.IDE0007.severity = error
|
||||
# Inline variable declaration
|
||||
dotnet_diagnostic.IDE0018.severity = error
|
||||
csharp_style_var_for_built_in_types = true:suggestion
|
||||
csharp_style_var_when_type_is_apparent = true:suggestion
|
||||
csharp_style_var_elsewhere = true:suggestion
|
||||
|
||||
# Stylecop Rules
|
||||
dotnet_diagnostic.SA0001.severity = none
|
||||
@@ -270,7 +261,7 @@ dotnet_diagnostic.CA5397.severity = suggestion
|
||||
|
||||
dotnet_diagnostic.SYSLIB0006.severity = none
|
||||
|
||||
[*.{js,html,hbs,less,css,ts,tsx}]
|
||||
[*.{js,html,js,hbs,less,css}]
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
2
.gitattributes
vendored
@@ -3,7 +3,7 @@
|
||||
|
||||
# Explicitly set bash scripts to have unix endings
|
||||
*.sh text eol=lf
|
||||
distribution/osx/Radarr text eol=lf
|
||||
macOS/Radarr text eol=lf
|
||||
|
||||
# Custom for Visual Studio
|
||||
*.cs diff=csharp
|
||||
|
||||
4
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -76,7 +76,7 @@ body:
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Trace Logs have been provided as applicable. Reports may be closed if the required logs are not provided.
|
||||
description: Trace logs are generally required for all bug reports and contain `trace`. Info logs are invalid for bug reports and do not contain `debug` nor `trace`
|
||||
description: Trace logs are generally required for all bug reports
|
||||
options:
|
||||
- label: I have read and followed the steps in the wiki link above and provided the required trace logs - the logs contain `trace` - that are relevant and show this issue.
|
||||
- label: I have followed the steps in the wiki link above and provided the required trace logs that are relevant and show this issue.
|
||||
required: true
|
||||
|
||||
BIN
Logo/1024.png
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 49 KiB |
BIN
Logo/128.png
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 4.1 KiB |
BIN
Logo/16.png
|
Before Width: | Height: | Size: 331 B After Width: | Height: | Size: 577 B |
BIN
Logo/256.png
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 10 KiB |
BIN
Logo/32.png
|
Before Width: | Height: | Size: 666 B After Width: | Height: | Size: 1.1 KiB |
BIN
Logo/400.png
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 17 KiB |
BIN
Logo/48.png
|
Before Width: | Height: | Size: 987 B After Width: | Height: | Size: 1.7 KiB |
BIN
Logo/512.png
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 21 KiB |
BIN
Logo/64.png
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.9 KiB |
BIN
Logo/800.png
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 49 KiB |
BIN
Logo/text256.png
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 32 KiB |
@@ -9,7 +9,7 @@ variables:
|
||||
testsFolder: './_tests'
|
||||
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
|
||||
nugetCacheFolder: $(Pipeline.Workspace)/.nuget/packages
|
||||
majorVersion: '4.7.3'
|
||||
majorVersion: '4.5.1'
|
||||
minorVersion: $[counter('minorVersion', 2000)]
|
||||
radarrVersion: '$(majorVersion).$(minorVersion)'
|
||||
buildName: '$(Build.SourceBranchName).$(radarrVersion)'
|
||||
@@ -211,8 +211,8 @@ stages:
|
||||
displayName: Fetch Frontend
|
||||
- bash: |
|
||||
./build.sh --packages --installer
|
||||
cp distribution/windows/setup/output/Radarr.*win-x64.exe ${BUILD_ARTIFACTSTAGINGDIRECTORY}/Radarr.${BUILDNAME}.windows-core-x64-installer.exe
|
||||
cp distribution/windows/setup/output/Radarr.*win-x86.exe ${BUILD_ARTIFACTSTAGINGDIRECTORY}/Radarr.${BUILDNAME}.windows-core-x86-installer.exe
|
||||
cp setup/output/Radarr.*win-x64.exe ${BUILD_ARTIFACTSTAGINGDIRECTORY}/Radarr.${BUILDNAME}.windows-core-x64-installer.exe
|
||||
cp setup/output/Radarr.*win-x86.exe ${BUILD_ARTIFACTSTAGINGDIRECTORY}/Radarr.${BUILDNAME}.windows-core-x86-installer.exe
|
||||
displayName: Create Installers
|
||||
- publish: $(Build.ArtifactStagingDirectory)
|
||||
artifact: 'WindowsInstaller'
|
||||
@@ -363,7 +363,7 @@ stages:
|
||||
- bash: |
|
||||
echo "Uploading source maps to sentry"
|
||||
curl -sL https://sentry.io/get-cli/ | bash
|
||||
RELEASENAME="Radarr@${RADARRVERSION}-${BUILD_SOURCEBRANCHNAME}"
|
||||
RELEASENAME="${RADARRVERSION}-${BUILD_SOURCEBRANCHNAME}"
|
||||
sentry-cli releases new --finalize -p radarr -p radarr-ui -p radarr-update "${RELEASENAME}"
|
||||
sentry-cli releases -p radarr-ui files "${RELEASENAME}" upload-sourcemaps _output/UI/ --rewrite
|
||||
sentry-cli releases set-commits --auto "${RELEASENAME}"
|
||||
|
||||
6
build.sh
@@ -21,7 +21,7 @@ UpdateVersionNumber()
|
||||
echo "Updating Version Info"
|
||||
sed -i'' -e "s/<AssemblyVersion>[0-9.*]\+<\/AssemblyVersion>/<AssemblyVersion>$RADARRVERSION<\/AssemblyVersion>/g" src/Directory.Build.props
|
||||
sed -i'' -e "s/<AssemblyConfiguration>[\$()A-Za-z-]\+<\/AssemblyConfiguration>/<AssemblyConfiguration>${BUILD_SOURCEBRANCHNAME}<\/AssemblyConfiguration>/g" src/Directory.Build.props
|
||||
sed -i'' -e "s/<string>10.0.0.0<\/string>/<string>$RADARRVERSION<\/string>/g" distribution/osx/Radarr.app/Contents/Info.plist
|
||||
sed -i'' -e "s/<string>10.0.0.0<\/string>/<string>$RADARRVERSION<\/string>/g" macOS/Radarr.app/Contents/Info.plist
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -184,7 +184,7 @@ PackageMacOSApp()
|
||||
|
||||
rm -rf $folder
|
||||
mkdir -p $folder
|
||||
cp -r distribution/osx/Radarr.app $folder
|
||||
cp -r macOS/Radarr.app $folder
|
||||
mkdir -p $folder/Radarr.app/Contents/MacOS
|
||||
|
||||
echo "Copying Binaries"
|
||||
@@ -246,7 +246,7 @@ BuildInstaller()
|
||||
local framework="$1"
|
||||
local runtime="$2"
|
||||
|
||||
./_inno/ISCC.exe distribution/windows/setup/radarr.iss "//DFramework=$framework" "//DRuntime=$runtime"
|
||||
./_inno/ISCC.exe setup/radarr.iss "//DFramework=$framework" "//DRuntime=$runtime"
|
||||
}
|
||||
|
||||
InstallInno()
|
||||
|
||||
100
changelogs/CHANGELOG-v4.0.5.5977.md
Normal file
@@ -0,0 +1,100 @@
|
||||
# New Beta Release
|
||||
|
||||
Radarr v4.0.5.5977 has been released on `develop`
|
||||
|
||||
A reminder about the `develop` branch
|
||||
|
||||
- **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. This version will receive updates either weeklyish or bi-weeklyish depending on development.**
|
||||
|
||||
# Announcements
|
||||
|
||||
- **Due to undocumented and breaking API changes Qbit v4.4.0 is not supported. It is generally recommended to avoid Qbit .0 releases.** Qbit v4.3.9 is the most recent working version. Qbit v4.4.1 may have issues as well.
|
||||
- **Radarr v4 no longer supports Linux x86 (x32 bit) systems**
|
||||
- x32 Arm is still supported; armv7 is the minimum required architecture
|
||||
- Impacted users have been receiving a healthcheck since May 2021 with 3.2.0
|
||||
- **Radarr v4 no longer builds for mono and mono support has ceased**
|
||||
- Impacted users have been receiving a healthcheck since May 2021 with 3.2.0
|
||||
- **Radarr Breaking API Changes**
|
||||
- Radarr v4 no longer supports the legacy (v0.2) API
|
||||
- Native ASPCore API Controllers (stricter typing and other small API changes)
|
||||
- The json you post needs to actually be strictly valid json now
|
||||
- **FFProbe has replaced MediaInfo**
|
||||
- Similarly MediaInfo is no longer a required dependency
|
||||
- [Jackett `/all` is deprecated and no longer supported. The FAQ has warned about this since May 2021.](https://wiki.servarr.com/radarr/faq#jacketts-all-endpoint)
|
||||
- Radarr is now on .Net6
|
||||
- New builds for OSX Arm64 and Linux Musl Arm32
|
||||
- IMDb Ratings
|
||||
- **Users who do not wish to be on the alpha `nightly` testing branch should take advantage of this parity and switch to `develop`
|
||||
|
||||
# Additional Commentary
|
||||
|
||||
- Lidarr v1 coming to `develop` as beta soon^(tm)
|
||||
- [Readarr official beta on `develop` announced](https://www.reddit.com/r/Readarr/comments/sxvj8y/new_beta_release_develop_v0101248/)
|
||||
- [Radarr Postgres Database Support coming soon (PR#6873)](https://github.com/radarr/radarr/pull/6873)
|
||||
- [Lidarr Postgres Database Support in development (Draft PR#2625)](https://github.com/Lidarr/Lidarr/pull/2625)
|
||||
|
||||
# Releases
|
||||
|
||||
## Native
|
||||
|
||||
- [GitHub Releases](https://github.com/Radarr/Radarr/releases)
|
||||
|
||||
- [Wiki Installation Instructions](https://wiki.servarr.com/radarr/installation)
|
||||
|
||||
## Docker
|
||||
|
||||
- [hotio/Radarr:testing](https://hotio.dev/containers/radarr)
|
||||
|
||||
- [lscr.io/linuxserver/Radarr:develop](https://docs.linuxserver.io/images/docker-radarr)
|
||||
|
||||
## NAS Packages
|
||||
|
||||
- Synology - Please ask the SynoCommunity to update the base package; however, you can update in-app normally
|
||||
|
||||
- QNAP - Please ask the SynoCommunity to update the base package; however, you should be able to update in-app normally
|
||||
|
||||
------------
|
||||
|
||||
# Release Notes
|
||||
|
||||
## v4.0.5.5977 (changes since v4.0.4.5922)
|
||||
|
||||
- Update Synology error codes
|
||||
|
||||
- Fixed: Remove pre-DB from frontend storage
|
||||
|
||||
- Fixed: Removing multiple items from the queue wording
|
||||
|
||||
- Fixed: Improve help text for download client Category
|
||||
|
||||
- New: Update Cert Validation Help Text [common]
|
||||
|
||||
- Fixed: Updated ruTorrent stopped state helptext
|
||||
|
||||
- fixed text box not being uniform to others
|
||||
|
||||
- New: Add backup size information
|
||||
|
||||
- Fix swagger inCinema references
|
||||
|
||||
- Fixed: Recycle bin log message
|
||||
|
||||
- Fix nzbdrone reference
|
||||
|
||||
- additional testcase obfuscation
|
||||
|
||||
- Fixed: IPv4 instead of IP4
|
||||
|
||||
- Report runtime identifier to sentry
|
||||
|
||||
- Update API URL
|
||||
|
||||
- Fixed: No longer require first run as admin on windows
|
||||
|
||||
- Build installer from build.sh
|
||||
|
||||
- Fixed: Enable response compression over https
|
||||
|
||||
- Bump to 4.0.5
|
||||
|
||||
- Other bug fixes and improvements, see GitHub history
|
||||
107
changelogs/CHANGELOG-v4.0.5.5981.md
Normal file
@@ -0,0 +1,107 @@
|
||||
# New Stable Release
|
||||
|
||||
Radarr v4.0.5.5981 has been released on `master`
|
||||
|
||||
- **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. This version will receive updates either weeklyish or bi-weeklyish depending on development.**
|
||||
- **nightly - Current Nightly/Unstable - (Alpha/Unstable) : The bleeding edge. Released as soon as code is committed and passed all automated tests. 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
|
||||
|
||||
- **Due to undocumented and breaking API changes Qbit v4.4.0 is not supported. It is generally recommended to avoid Qbit .0 releases.** Qbit v4.3.9 is the most recent working version. Qbit v4.4.1 may have issues as well.
|
||||
- **Radarr v4 no longer supports Linux x86 (x32 bit) systems**
|
||||
- x32 Arm is still supported; armv7 is the minimum required architecture
|
||||
- Impacted users have been receiving a healthcheck since May 2021 with 3.2.0
|
||||
- **Radarr v4 no longer builds for mono and mono support has ceased**
|
||||
- Impacted users have been receiving a healthcheck since May 2021 with 3.2.0
|
||||
- **Radarr Breaking API Changes**
|
||||
- Radarr v4 no longer supports the legacy (v0.2) API
|
||||
- Native ASPCore API Controllers (stricter typing and other small API changes)
|
||||
- The json you post needs to actually be strictly valid json now
|
||||
- **FFProbe has replaced MediaInfo**
|
||||
- Similarly MediaInfo is no longer a required dependency
|
||||
- [Jackett `/all` is deprecated and no longer supported. The FAQ has warned about this since May 2021.](https://wiki.servarr.com/radarr/faq#jacketts-all-endpoint)
|
||||
- Radarr is now on .Net6
|
||||
- New builds for OSX Arm64 and Linux Musl Arm32
|
||||
- IMDb Ratings
|
||||
|
||||
# Additional Commentary
|
||||
|
||||
- Lidarr v1 coming to `develop` as beta soon^(tm)
|
||||
- [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
|
||||
- [Readarr official beta on `develop` announced](https://www.reddit.com/r/Readarr/comments/sxvj8y/new_beta_release_develop_v0101248/)
|
||||
- [Radarr Postgres Database Support coming soon (PR#6873)](https://github.com/radarr/radarr/pull/6873)
|
||||
- [Lidarr Postgres Database Support in development (Draft PR#2625)](https://github.com/Lidarr/Lidarr/pull/2625)
|
||||
|
||||
# Releases
|
||||
|
||||
## Native
|
||||
|
||||
- [GitHub Releases](https://github.com/Radarr/Radarr/releases)
|
||||
|
||||
- [Wiki Installation Instructions](https://wiki.servarr.com/radarr/installation)
|
||||
|
||||
## Docker
|
||||
|
||||
- [hotio/Radarr:release](https://hotio.dev/containers/radarr)
|
||||
|
||||
- [lscr.io/linuxserver/Radarr:latest](https://docs.linuxserver.io/images/docker-radarr)
|
||||
|
||||
## 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
|
||||
|
||||
## v4.0.5.5981 (changes since v4.0.5.5977)
|
||||
|
||||
- Other bug fixes and improvements, see GitHub history
|
||||
|
||||
## v4.0.5.5977 (changes since v4.0.4.5922)
|
||||
|
||||
- Update Synology error codes
|
||||
|
||||
- Fixed: Remove pre-DB from frontend storage
|
||||
|
||||
- Fixed: Removing multiple items from the queue wording
|
||||
|
||||
- Fixed: Improve help text for download client Category
|
||||
|
||||
- New: Update Cert Validation Help Text [common]
|
||||
|
||||
- Fixed: Updated ruTorrent stopped state helptext
|
||||
|
||||
- fixed text box not being uniform to others
|
||||
|
||||
- New: Add backup size information
|
||||
|
||||
- Fix swagger inCinema references
|
||||
|
||||
- Fixed: Recycle bin log message
|
||||
|
||||
- Fix nzbdrone reference
|
||||
|
||||
- additional testcase obfuscation
|
||||
|
||||
- Fixed: IPv4 instead of IP4
|
||||
|
||||
- Report runtime identifier to sentry
|
||||
|
||||
- Update API URL
|
||||
|
||||
- Fixed: No longer require first run as admin on windows
|
||||
|
||||
- Build installer from build.sh
|
||||
|
||||
- Fixed: Enable response compression over https
|
||||
|
||||
- Bump to 4.0.5
|
||||
|
||||
- Other bug fixes and improvements, see GitHub history
|
||||
180
changelogs/CHANGELOG-v4.1.0.6095.md
Normal file
@@ -0,0 +1,180 @@
|
||||
# New Beta Release
|
||||
|
||||
Radarr v4.1.0.6095 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`**
|
||||
|
||||
- **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. This version will receive updates either weeklyish or bi-weeklyish depending on development.**
|
||||
|
||||
# Announcements
|
||||
|
||||
- **Due to undocumented and breaking API changes Qbit v4.4.0 is not supported. It is generally recommended to avoid Qbit .0 releases.** Qbit v4.3.9 is the most recent working version. Qbit v4.4.1 has issues as well.
|
||||
- **Radarr v4 no longer supports Linux x86 (x32 bit) systems**
|
||||
- x32 Arm is still supported; armv7 is the minimum required architecture
|
||||
- Impacted users have been receiving a healthcheck since May 2021 with 3.2.0
|
||||
- **Radarr v4 no longer builds for mono and mono support has ceased**
|
||||
- Impacted users have been receiving a healthcheck since May 2021 with 3.2.0
|
||||
- **Radarr Breaking API Changes**
|
||||
- Radarr v4 no longer supports the legacy (v0.2) API
|
||||
- Native ASPCore API Controllers (stricter typing and other small API changes)
|
||||
- The json you post needs to actually be strictly valid json now
|
||||
- **FFProbe has replaced MediaInfo**
|
||||
- Similarly MediaInfo is no longer a required dependency
|
||||
- [Jackett `/all` is deprecated and no longer supported. The FAQ has warned about this since May 2021.](https://wiki.servarr.com/radarr/faq#jacketts-all-endpoint)
|
||||
- Radarr is now on .Net6
|
||||
- New builds for OSX Arm64 and Linux Musl Arm32
|
||||
- IMDb Ratings
|
||||
|
||||
# Additional Commentary
|
||||
|
||||
- Lidarr v1 coming to `develop` as beta soon^(tm)
|
||||
- [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
|
||||
- [Readarr official beta on `develop` announced](https://www.reddit.com/r/Readarr/comments/sxvj8y/new_beta_release_develop_v0101248/)
|
||||
- [Radarr Postgres Database Support coming soon (PR#6873)](https://github.com/radarr/radarr/pull/6873)
|
||||
- [Lidarr Postgres Database Support in development (Draft PR#2625)](https://github.com/Lidarr/Lidarr/pull/2625)
|
||||
|
||||
# Releases
|
||||
|
||||
## Native
|
||||
|
||||
- [GitHub Releases](https://github.com/Radarr/Radarr/releases)
|
||||
|
||||
- [Wiki Installation Instructions](https://wiki.servarr.com/radarr/installation)
|
||||
|
||||
## Docker
|
||||
|
||||
- [hotio/Radarr:testing](https://hotio.dev/containers/radarr)
|
||||
|
||||
- [lscr.io/linuxserver/Radarr:develop](https://docs.linuxserver.io/images/docker-radarr)
|
||||
|
||||
## 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
|
||||
|
||||
## v4.1.0.6095 (changes since v4.0.5.5981)
|
||||
|
||||
- Fixed: Validation when testing indexers, import lists, connections and download clients
|
||||
|
||||
- New: Added UDP syslog support
|
||||
|
||||
- Add error handling to Notifiarr connect to reduce Sentry hits
|
||||
|
||||
- Update multi parser test
|
||||
|
||||
- Remove old Multi language workaround
|
||||
|
||||
- Add response size to http responses
|
||||
|
||||
- Linting fixes for frontend following eslint package upgrade
|
||||
|
||||
- FontAwesome 6
|
||||
|
||||
- Bump react-text-truncate to 0.18.0
|
||||
|
||||
- Bump qs to 6.10.3
|
||||
|
||||
- Bump clipboard.js to 2.0.10
|
||||
|
||||
- Change react-custom-scrollbars to react-custom-scrollbars-2
|
||||
|
||||
- Update frontend babel packages
|
||||
|
||||
- Update frontend stylelint packages
|
||||
|
||||
- Update frontend eslint packages
|
||||
|
||||
- Bump Sentry to 3.15.0
|
||||
|
||||
- Bump NLog to 4.7.14
|
||||
|
||||
- Bump FluentMigrator to 3.3.2
|
||||
|
||||
- Bump dotnet to 6.0.3
|
||||
|
||||
- Bump DryIoc to 4.8.8
|
||||
|
||||
- Translated using Weblate (Chinese (Simplified)) [skip ci]
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- Allow more startup time for openapi generation
|
||||
|
||||
- Bump Swashbuckle to 6.3.0
|
||||
|
||||
- Removed non-functional altyear API controller
|
||||
|
||||
- Update API docs
|
||||
|
||||
- API is v3
|
||||
|
||||
- Fix Prowlarr references
|
||||
|
||||
- Autogenerated API docs
|
||||
|
||||
- Translated using Weblate (Portuguese (Brazil)) [skip ci]
|
||||
|
||||
- Translated using Weblate (French) [skip ci]
|
||||
|
||||
- New: Language filter on manual search
|
||||
|
||||
- Fix HistorySpecification tests
|
||||
|
||||
- New: Original Language and Title sort and filter options
|
||||
|
||||
- Fixed: Clearing logs not updating UI once complete
|
||||
|
||||
- Fixed: On Import notifications for webhooks
|
||||
|
||||
- Fixed: Send download client name instead of type for grab events
|
||||
|
||||
- New: Add qBittorrent sequential order and first and last piece priority options
|
||||
|
||||
- Fixed: Profiles with upgrades disabled incorrectly allowing upgrades in some cases
|
||||
|
||||
- New: Add Release group to history for all events
|
||||
|
||||
- Bump FFProbe to 5.0
|
||||
|
||||
- Fixed: Parsing of quality in DP.WEB releases
|
||||
|
||||
- Fixed: Correctly Detect Remux prefixed by Brackets
|
||||
|
||||
- Fixed: Treat 720p BR Remux as BluRay
|
||||
|
||||
- Fixed: Better Cleansing of Tracker Announce Keys
|
||||
|
||||
- New: Dont parse hash as release group
|
||||
|
||||
- New: Support for parsing various Anime Groups
|
||||
|
||||
- Fixed: Dont Parse HDRip as group
|
||||
|
||||
- New: Support for parsing [HDO] as HDO Group
|
||||
|
||||
- Fixed: Updater version number logging
|
||||
|
||||
- Adjusted the Windows LongPath support check for valid segment lengths
|
||||
|
||||
- PWA missing name
|
||||
|
||||
- Translated using Weblate (Chinese (Traditional) (zh_TW)) [skip ci]
|
||||
|
||||
- SimpleTitleRegex catchup
|
||||
|
||||
- Fixed: Assume SABnzbd develop version is 3.0.0 if not specified
|
||||
|
||||
- Bump node build version to 16.X LTS
|
||||
|
||||
- Bump dotnet to 6.0.2
|
||||
|
||||
- Bump version to 4.1.0
|
||||
|
||||
- Fixed: Update from version in logs
|
||||
|
||||
- Other bug fixes and improvements, see GitHub history
|
||||
68
changelogs/CHANGELOG-v4.1.0.6122.md
Normal file
@@ -0,0 +1,68 @@
|
||||
# New Beta Release
|
||||
|
||||
Radarr v4.1.0.6122 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. This version will receive updates either weekly or biweekly depending on development.**
|
||||
- **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
|
||||
|
||||
- Radarr Postgres Database Support has landed in `nightly` and will be coming to `develop` _soon_
|
||||
- Radarr Plex Watchlist Support has landed in `nightly` and will be coming to `develop` _soon_
|
||||
|
||||
# Additional Commentary
|
||||
|
||||
- Lidarr v1 coming to `develop` as beta soon^(tm)
|
||||
- [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
|
||||
- [Readarr official beta on `develop` announced](https://www.reddit.com/r/Readarr/comments/sxvj8y/new_beta_release_develop_v0101248/)
|
||||
- [Lidarr Postgres Database Support in development (Draft PR#2625)](https://github.com/Lidarr/Lidarr/pull/2625)
|
||||
|
||||
# Releases
|
||||
|
||||
## Native
|
||||
|
||||
- [GitHub Releases](https://github.com/Radarr/Radarr/releases)
|
||||
|
||||
- [Wiki Installation Instructions](https://wiki.servarr.com/radarr/installation)
|
||||
|
||||
## Docker
|
||||
|
||||
- [hotio/Radarr:testing](https://hotio.dev/containers/radarr)
|
||||
|
||||
- [lscr.io/linuxserver/Radarr:develop](https://docs.linuxserver.io/images/docker-radarr)
|
||||
|
||||
## 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
|
||||
|
||||
## v4.1.0.6122 (changes since v4.1.0.6095)
|
||||
|
||||
- Fixed: Loading old commands from database
|
||||
|
||||
- Fixed: Scrolling in Firefox in small window (requires refresh)
|
||||
|
||||
- Don't return early after re-running checks after startup grace period
|
||||
|
||||
- Fixed: Delay health check notifications on startup
|
||||
|
||||
- New: Schedule refresh and process monitored download tasks at high priority
|
||||
|
||||
- Fixed: Use Digital Release in ChangeFileDate if no Physical
|
||||
|
||||
- Fixed: Cleanup Temp files after backup creation
|
||||
|
||||
- Centralise image choice, update to latest images
|
||||
|
||||
- Translated using Weblate (Chinese (Simplified) (zh_CN)) [skip ci]
|
||||
|
||||
- Other bug fixes and improvements, see GitHub history
|
||||
198
changelogs/CHANGELOG-v4.1.0.6175.md
Normal file
@@ -0,0 +1,198 @@
|
||||
# New Stable Release
|
||||
|
||||
Radarr v4.1.0.6175 has been released on `master`
|
||||
|
||||
- **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. This version will receive updates either weekly or biweekly depending on development.**
|
||||
- **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
|
||||
|
||||
- Radarr Postgres Database Support has landed in `nightly` and will be coming to `develop` _soon_
|
||||
- Radarr Plex Watchlist Support has landed in `nightly` and will be coming to `develop` _soon_
|
||||
- "FFMpeg 5.0.1" fixes issues with FFprobe crashing on macOS
|
||||
- Radarr improved collections support coming _soon_^(tm)
|
||||
|
||||
# Additional Commentary
|
||||
|
||||
- Lidarr v1 coming to `develop` as beta soon^(tm)
|
||||
- [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
|
||||
- [Readarr official beta on `develop` announced](https://www.reddit.com/r/Readarr/comments/sxvj8y/new_beta_release_develop_v0101248/)
|
||||
- [Lidarr Postgres Database Support in development (Draft PR#2625)](https://github.com/Lidarr/Lidarr/pull/2625)
|
||||
|
||||
# Releases
|
||||
|
||||
## Native
|
||||
|
||||
- [GitHub Releases](https://github.com/Radarr/Radarr/releases)
|
||||
|
||||
- [Wiki Installation Instructions](https://wiki.servarr.com/radarr/installation)
|
||||
|
||||
## Docker
|
||||
|
||||
- [hotio/Radarr:release](https://hotio.dev/containers/radarr)
|
||||
|
||||
- [lscr.io/linuxserver/Radarr:latest](https://docs.linuxserver.io/images/docker-radarr)
|
||||
|
||||
## 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
|
||||
|
||||
## v4.1.0.6175 (changes since v4.1.0.6122)
|
||||
|
||||
- FFMpeg 5.0.1
|
||||
|
||||
- Other bug fixes and improvements, see GitHub history
|
||||
|
||||
## v4.1.0.6122 (changes since v4.1.0.6095)
|
||||
|
||||
- Fixed: Loading old commands from database
|
||||
|
||||
- Fixed: Scrolling in Firefox in small window (requires refresh)
|
||||
|
||||
- Don't return early after re-running checks after startup grace period
|
||||
|
||||
- Fixed: Delay health check notifications on startup
|
||||
|
||||
- New: Schedule refresh and process monitored download tasks at high priority
|
||||
|
||||
- Fixed: Use Digital Release in ChangeFileDate if no Physical
|
||||
|
||||
- Fixed: Cleanup Temp files after backup creation
|
||||
|
||||
- Centralise image choice, update to latest images
|
||||
|
||||
- Translated using Weblate (Chinese (Simplified) (zh_CN)) [skip ci]
|
||||
|
||||
- Other bug fixes and improvements, see GitHub history
|
||||
|
||||
## v4.1.0.6095 (changes since v4.0.5.5981)
|
||||
|
||||
- Fixed: Validation when testing indexers, import lists, connections and download clients
|
||||
|
||||
- New: Added UDP syslog support
|
||||
|
||||
- Add error handling to Notifiarr connect to reduce Sentry hits
|
||||
|
||||
- Update multi parser test
|
||||
|
||||
- Remove old Multi language workaround
|
||||
|
||||
- Add response size to http responses
|
||||
|
||||
- Linting fixes for frontend following eslint package upgrade
|
||||
|
||||
- FontAwesome 6
|
||||
|
||||
- Bump react-text-truncate to 0.18.0
|
||||
|
||||
- Bump qs to 6.10.3
|
||||
|
||||
- Bump clipboard.js to 2.0.10
|
||||
|
||||
- Change react-custom-scrollbars to react-custom-scrollbars-2
|
||||
|
||||
- Update frontend babel packages
|
||||
|
||||
- Update frontend stylelint packages
|
||||
|
||||
- Update frontend eslint packages
|
||||
|
||||
- Bump Sentry to 3.15.0
|
||||
|
||||
- Bump NLog to 4.7.14
|
||||
|
||||
- Bump FluentMigrator to 3.3.2
|
||||
|
||||
- Bump dotnet to 6.0.3
|
||||
|
||||
- Bump DryIoc to 4.8.8
|
||||
|
||||
- Translated using Weblate (Chinese (Simplified)) [skip ci]
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- Allow more startup time for openapi generation
|
||||
|
||||
- Bump Swashbuckle to 6.3.0
|
||||
|
||||
- Removed non-functional altyear API controller
|
||||
|
||||
- Update API docs
|
||||
|
||||
- API is v3
|
||||
|
||||
- Fix Prowlarr references
|
||||
|
||||
- Autogenerated API docs
|
||||
|
||||
- Translated using Weblate (Portuguese (Brazil)) [skip ci]
|
||||
|
||||
- Translated using Weblate (French) [skip ci]
|
||||
|
||||
- New: Language filter on manual search
|
||||
|
||||
- Fix HistorySpecification tests
|
||||
|
||||
- New: Original Language and Title sort and filter options
|
||||
|
||||
- Fixed: Clearing logs not updating UI once complete
|
||||
|
||||
- Fixed: On Import notifications for webhooks
|
||||
|
||||
- Fixed: Send download client name instead of type for grab events
|
||||
|
||||
- New: Add qBittorrent sequential order and first and last piece priority options
|
||||
|
||||
- Fixed: Profiles with upgrades disabled incorrectly allowing upgrades in some cases
|
||||
|
||||
- New: Add Release group to history for all events
|
||||
|
||||
- Bump FFProbe to 5.0
|
||||
|
||||
- Fixed: Parsing of quality in DP.WEB releases
|
||||
|
||||
- Fixed: Correctly Detect Remux prefixed by Brackets
|
||||
|
||||
- Fixed: Treat 720p BR Remux as BluRay
|
||||
|
||||
- Fixed: Better Cleansing of Tracker Announce Keys
|
||||
|
||||
- New: Dont parse hash as release group
|
||||
|
||||
- New: Support for parsing various Anime Groups
|
||||
|
||||
- Fixed: Dont Parse HDRip as group
|
||||
|
||||
- New: Support for parsing [HDO] as HDO Group
|
||||
|
||||
- Fixed: Updater version number logging
|
||||
|
||||
- Adjusted the Windows LongPath support check for valid segment lengths
|
||||
|
||||
- PWA missing name
|
||||
|
||||
- Translated using Weblate (Chinese (Traditional) (zh_TW)) [skip ci]
|
||||
|
||||
- SimpleTitleRegex catchup
|
||||
|
||||
- Fixed: Assume SABnzbd develop version is 3.0.0 if not specified
|
||||
|
||||
- Bump node build version to 16.X LTS
|
||||
|
||||
- Bump dotnet to 6.0.2
|
||||
|
||||
- Bump version to 4.1.0
|
||||
|
||||
- Fixed: Update from version in logs
|
||||
|
||||
- Other bug fixes and improvements, see GitHub history
|
||||
324
changelogs/CHANGELOG-v4.2.0.6438.md
Normal file
@@ -0,0 +1,324 @@
|
||||
# New Beta Release
|
||||
|
||||
Radarr v4.2.0.6438 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. This version will receive updates either weekly or biweekly depending on development.**
|
||||
- **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
|
||||
|
||||
- Radarr Postgres Database Support
|
||||
- Radarr Plex Watchlist Support
|
||||
- Radarr Collections Support
|
||||
|
||||
# Additional Commentary
|
||||
|
||||
- [Lidarr v1 released on `master`](https://www.reddit.com/r/Lidarr/comments/v5fdhi/new_stable_release_master_v1022592/)
|
||||
- [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
|
||||
- [Readarr official beta on `develop` announced](https://www.reddit.com/r/Readarr/comments/sxvj8y/new_beta_release_develop_v0101248/)
|
||||
- Radarr Postgres Database Support in `nightly` and `develop`
|
||||
- Prowlarr Postgres Database Support in `nightly` and `develop`
|
||||
- [Lidarr Postgres Database Support in development (Draft PR#2625)](https://github.com/Lidarr/Lidarr/pull/2625)
|
||||
- \*Arrs Wiki Contributions welcomed and strongly encouraged, simply auth with GitHub on the wiki and update the page
|
||||
|
||||
# Releases
|
||||
|
||||
## Native
|
||||
|
||||
- [GitHub Releases](https://github.com/Radarr/Radarr/releases)
|
||||
|
||||
- [Wiki Installation Instructions](https://wiki.servarr.com/radarr/installation)
|
||||
|
||||
## Docker
|
||||
|
||||
- [hotio/Radarr:testing](https://hotio.dev/containers/radarr)
|
||||
|
||||
- [lscr.io/linuxserver/Radarr:develop](https://docs.linuxserver.io/images/docker-radarr)
|
||||
|
||||
## 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
|
||||
|
||||
## v4.2.0.6438 (changes since v4.1.0.6175)
|
||||
|
||||
- Fixed: Parse Group ZØNEHD
|
||||
|
||||
- New: Parse Group HONE
|
||||
|
||||
- New: (Discord) Include Custom Formats & Score On Grab
|
||||
|
||||
- Translated using Weblate (Catalan) [skip ci]
|
||||
|
||||
- Fixed: User Triggered Auto Searches now ignores monitored status (#7422)
|
||||
|
||||
- Fixed: Postgres timezone issues (#7183)
|
||||
|
||||
- Speed up and reduce meta calls for Imdb Lists when mapping
|
||||
|
||||
- Fixed: ImportListMovies not saved if from a list without TMDBIds
|
||||
|
||||
- Match 'HQCAM' as CAM source (#7412)
|
||||
|
||||
- Fix RefreshMovieServiceFixture folder service mock
|
||||
|
||||
- Fixed: Collections not deleted on Movie Delete
|
||||
|
||||
- Fixed: Bulk Collection RootFolder change failure
|
||||
|
||||
- New: Collection Folder, Genre, QualityProfile Filters
|
||||
|
||||
- Fixed: Trim RootFolderPath on Migration
|
||||
|
||||
- Avoid multiple metadata DB calls on list mapping
|
||||
|
||||
- Fixed: Prevent excluded movies from being added by collections
|
||||
|
||||
- Fixed: Avoid NullRef in MapMovieToTmdbMovie
|
||||
|
||||
- Fixed: Notifiarr - Better HTTP Error Handling
|
||||
|
||||
- Fix Nullref on Collection delete
|
||||
|
||||
- New: (Notifiarr) Custom Formats in OnGrab
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- New: Custom Format Spec Validation
|
||||
|
||||
- Fixed: Don't fail on single failure for Discover bulk add
|
||||
|
||||
- Remove general yarn restore key to avoid cross OS conflict
|
||||
|
||||
- Translated using Weblate (Portuguese (Brazil)) [skip ci]
|
||||
|
||||
- Fixed: Don't call for server notifications on event driven check
|
||||
|
||||
- Rename MovieImportedEvent to MovieFileImportedEvent
|
||||
|
||||
- Fixed: Improved parsing WebDL Releases
|
||||
|
||||
- New: adding a link to tmdb in the import combobox movie search results (#7352)
|
||||
|
||||
- Fixed: Housekeeper doesn't remove collections that have MovieMeta from lists
|
||||
|
||||
- Fixed: Notify on Bulk Adds (Lists, Collections, Imports)
|
||||
|
||||
- Updated NLog Version (#7365)
|
||||
|
||||
- Translated using Weblate (Portuguese (Brazil)) [skip ci]
|
||||
|
||||
- Fixed: Migration 208 fails when collection doesn't have name
|
||||
|
||||
- Fixed: Don't call AddMovies if no movies to add from Collection
|
||||
|
||||
- New: Default to IMDb Ratings in Kodi Metadata
|
||||
|
||||
- Translated using Weblate (Slovak) [skip ci]
|
||||
|
||||
- New: Separate Ratings Columns
|
||||
|
||||
- Fixed: Add support for more Anime release formats
|
||||
|
||||
- Translated using Weblate (Portuguese) [skip ci]
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- New: Bulk Edit Collections Profile, Root, Availability
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- Fixed: Collections Improvements
|
||||
|
||||
- Add back Movie Credits and Alt Titles Indexes
|
||||
|
||||
- Fixed: Validate if equals or child for startup folder
|
||||
|
||||
- New: Notifiarr include Media Info in Download Notifications
|
||||
|
||||
- New: Notifiarr moved from webhook to API
|
||||
|
||||
- Translated using Weblate (German) [skip ci]
|
||||
|
||||
- Use DryIoc for Automoqer, drop Unity dependency
|
||||
|
||||
- Additional logging for partial Plex path scan
|
||||
|
||||
- Translated using Weblate (Chinese (Simplified) (zh_CN)) [skip ci]
|
||||
|
||||
- Fixed: Improved empty root folder failsafe logging (#7341)
|
||||
|
||||
- Fixed: Register PostgresOptions when running in utility mode
|
||||
|
||||
- Fixed: Clarified genre filtering helptext on Trakt lists
|
||||
|
||||
- Fixed: Lithuanian media info parsing
|
||||
|
||||
- Translated using Weblate (Portuguese (Brazil)) [skip ci]
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- Fixed: MovieAdded trigger not available in UI
|
||||
|
||||
- New: Movie Added Notification
|
||||
|
||||
- Cleanup Collections UI Options
|
||||
|
||||
- Fixed: Speed up Collections API Endpoint
|
||||
|
||||
- New: Add DB Indexes for MovieMetadata
|
||||
|
||||
- New: .NET 6.0.5
|
||||
|
||||
- Translated using Weblate (Polish) [skip ci]
|
||||
|
||||
- Fixed: Remove Collection on last Movie delete
|
||||
|
||||
- Fixed: Correctly use loadash in FE Migrations
|
||||
|
||||
- Fixed: Partial Revert CF Validation for more robust solution
|
||||
|
||||
- Ensure .Mono and .Windows projects have all dependencies in build output
|
||||
|
||||
- Fix frontend monitor migration
|
||||
|
||||
- Try to fix CF null error for imported movie files
|
||||
|
||||
- Tweak monitor migration to avoid overwrites of valid settings
|
||||
|
||||
- Fixed: Run Frontend Migration for MonitorType
|
||||
|
||||
- New: Improve validation errors for Custom Formats
|
||||
|
||||
- Fixed: Don't Import Files with lower CF Score
|
||||
|
||||
- Fixed: Parse UHD2BD as BluRay instead of HDTV
|
||||
|
||||
- Fixed: Bluray 576p parsing
|
||||
|
||||
- New: Release Group Custom Format (#7154)
|
||||
|
||||
- Added term "brazilian" to Brazilian Portuguese parsing (#7296)
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- New: Don't default manual import to move
|
||||
|
||||
- Fixed: Cutoff Unmet showing items above lowest accepted quality when upgrades are disabled
|
||||
|
||||
- New: Collections View
|
||||
|
||||
- Translated using Weblate (Portuguese (Brazil)) [skip ci]
|
||||
|
||||
- Translated using Weblate (Portuguese (Brazil)) [skip ci]
|
||||
|
||||
- New: Parse QxR Group r00t
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- New: Instance name in System/Status API endpoint
|
||||
|
||||
- New: Instance name for Page Title
|
||||
|
||||
- New: Instance Name used for Syslog
|
||||
|
||||
- New: Set Instance Name
|
||||
|
||||
- New: Add optional Source Title column to history
|
||||
|
||||
- New: Support for new Nyaa RSS Feed format
|
||||
|
||||
- Fixed: Don't try to add MovieMeta if mapping fails for list items
|
||||
|
||||
- Fixed: Importing file from UNC shared folder without job folder
|
||||
|
||||
- Fixed: No restart requirement for Refresh Monitored interval change
|
||||
|
||||
- Fixed: Correct User-Agent api logging
|
||||
|
||||
- Delete nan.json
|
||||
|
||||
- Delete zh_Hans.json
|
||||
|
||||
- Translated using Weblate (Chinese (Simplified)) [skip ci]
|
||||
|
||||
- Fixed: Wrong translation mapping can be used for file naming and metadata
|
||||
|
||||
- Fixed: Translated fields are mapped incorrectly for existing search results
|
||||
|
||||
- Fixed: UI hiding search results with duplicate GUIDs
|
||||
|
||||
- Fixed: QBittorrent unknown download state: forcedMetaDL
|
||||
|
||||
- Fix migration 207 distinct on tmdbid only for list movie insert
|
||||
|
||||
- Fix metadata migration
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- Rework Movie Metadata data model
|
||||
|
||||
- Temporarily ignore update tests until linux-x86 released
|
||||
|
||||
- New: Add linux-x86 builds
|
||||
|
||||
- New: Support Plex API Path Scan (Similar to autoscan)
|
||||
|
||||
- Fixed: Interactive Search Filter not filtering multiple qualities in the same filter row
|
||||
|
||||
- Added padding to search tab to maintain visual consistancy
|
||||
|
||||
- Fixed: Update ScheduledTask cache LastStartTime on command execution
|
||||
|
||||
- Bump Version to 4.2
|
||||
|
||||
- Bump webpack packages
|
||||
|
||||
- Remove old DotNetVersion method and dep
|
||||
|
||||
- Bump Monotorrent to 2.0.5
|
||||
|
||||
- Fixed: Don't die if Plex watchlist guid node is missing or null
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- New: Add support for Plex Watchlist importing (#5707)
|
||||
|
||||
- New: Add date picker for custom filter dates
|
||||
|
||||
- Make postgres integration tests actually use postgres
|
||||
|
||||
- Fixed: Clarify Qbit Content Path Error
|
||||
|
||||
- Fixed: Use Movie Original Language for Custom Format Original Language (#6882)
|
||||
|
||||
- Fix .editorconfig to disallow `this`
|
||||
|
||||
- FFMpeg 5.0.1
|
||||
|
||||
- Fixed: Properly handle 119 error code from Synology Download Station
|
||||
|
||||
- Translated using Weblate (Hungarian) [skip ci]
|
||||
|
||||
- Fixed: FFprobe failing on MacOS and AV1 streams
|
||||
|
||||
- add 576 resolution back to simple title regex
|
||||
|
||||
- Translated using Weblate (Ukrainian) [skip ci]
|
||||
|
||||
- Set up tests on postgres
|
||||
|
||||
- Allow configuring postgres with environment variables
|
||||
|
||||
- New: Postgres Support
|
||||
|
||||
- Other bug fixes and improvements, see GitHub history
|
||||
100
changelogs/CHANGELOG-v4.2.1.6478.md
Normal file
@@ -0,0 +1,100 @@
|
||||
# New Beta Release
|
||||
|
||||
Radarr v4.2.1.6478 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. This version will receive updates either weekly or biweekly depending on development.**
|
||||
- **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
|
||||
|
||||
- Radarr Postgres Database Support
|
||||
- Radarr Plex Watchlist Support
|
||||
- Radarr Collections Support
|
||||
|
||||
# Additional Commentary
|
||||
|
||||
- [Lidarr v1 released on `master`](https://www.reddit.com/r/Lidarr/comments/v5fdhi/new_stable_release_master_v1022592/)
|
||||
- [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
|
||||
- [Readarr official beta on `develop` announced](https://www.reddit.com/r/Readarr/comments/sxvj8y/new_beta_release_develop_v0101248/)
|
||||
- Radarr Postgres Database Support in `nightly` and `develop`
|
||||
- Prowlarr Postgres Database Support in `nightly` and `develop`
|
||||
- [Lidarr Postgres Database Support in development (Draft PR#2625)](https://github.com/Lidarr/Lidarr/pull/2625)
|
||||
- \*Arrs Wiki Contributions welcomed and strongly encouraged, simply auth with GitHub on the wiki and update the page
|
||||
|
||||
# Releases
|
||||
|
||||
## Native
|
||||
|
||||
- [GitHub Releases](https://github.com/Radarr/Radarr/releases)
|
||||
|
||||
- [Wiki Installation Instructions](https://wiki.servarr.com/radarr/installation)
|
||||
|
||||
## Docker
|
||||
|
||||
- [hotio/Radarr:testing](https://hotio.dev/containers/radarr)
|
||||
|
||||
- [lscr.io/linuxserver/Radarr:develop](https://docs.linuxserver.io/images/docker-radarr)
|
||||
|
||||
## 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
|
||||
|
||||
## v4.2.1.6478 (changes since [v4.2.0.6438](https://www.reddit.com/r/radarr/comments/w3kik4/new_release_develop_v4206438/))
|
||||
|
||||
- Translated using Weblate (Spanish) [skip ci]
|
||||
|
||||
- Regenerate yarn.lock
|
||||
|
||||
- Bump Sentry to 3.20.1
|
||||
|
||||
- Bump dotnet to 6.0.8
|
||||
|
||||
- Changed: Removed Tigole from ExceptionRelease match as is checked in ExceptionReleaseExact.
|
||||
|
||||
- Fixed: Tigole release group not being parsed and matched correctly, requiring manual import.
|
||||
|
||||
- Fixed: Configured recycle bin is excluded from import.
|
||||
|
||||
- Really fix Original Language in Language CF Specification
|
||||
|
||||
- Better Sentry Filtering for AggregateException children
|
||||
|
||||
- Run Postgres tests on 20.04
|
||||
|
||||
- Fixed: Blank Collection on MovieDetails when no Collection for Movie
|
||||
|
||||
- Remove non-functional filters for Trakt Lists
|
||||
|
||||
- Fixed: Original CF shouldn't need to be named "Original"
|
||||
|
||||
- Fixed NullRef in Skyhook Proxy during List Sync
|
||||
|
||||
- Fixed: Remove Notifiarr Environment Option
|
||||
|
||||
- Fixed: Trakt list request now uses correct rules for generating slug (#7449)
|
||||
|
||||
- Fixed: Allow blank ReleaseGroup and Edition from MovieFile edit
|
||||
|
||||
- Fixed: Don't process files that don't have a supported media file extension
|
||||
|
||||
- Fixed: Avoid failure if list contains same movie but without tmdbid
|
||||
|
||||
- Fixed: Log correct path when moving movies (#7439)
|
||||
|
||||
- Fixed: Watch state not preserved on metadata rewrite (#7436)
|
||||
|
||||
- Fixed: NullRefException in TorrentRssParser
|
||||
|
||||
- Bump Version to 4.2.1
|
||||
|
||||
- Other bug fixes and improvements, see GitHub history
|
||||
78
changelogs/CHANGELOG-v4.2.2.6503.md
Normal file
@@ -0,0 +1,78 @@
|
||||
# New Beta Release
|
||||
|
||||
Radarr v4.2.2.6503 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. This version will receive updates either weekly or biweekly depending on development.**
|
||||
- **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
|
||||
|
||||
- Radarr Postgres Database Support
|
||||
- Radarr Plex Watchlist Support
|
||||
- Radarr Collections Support
|
||||
|
||||
# Additional Commentary
|
||||
|
||||
- [Lidarr v1 released on `master`](https://www.reddit.com/r/Lidarr/comments/v5fdhi/new_stable_release_master_v1022592/)
|
||||
- [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
|
||||
- [Readarr official beta on `develop` announced](https://www.reddit.com/r/Readarr/comments/sxvj8y/new_beta_release_develop_v0101248/)
|
||||
- Radarr Postgres Database Support in `nightly` and `develop`
|
||||
- Prowlarr Postgres Database Support in `nightly` and `develop`
|
||||
- [Lidarr Postgres Database Support in development (Draft PR#2625)](https://github.com/Lidarr/Lidarr/pull/2625)
|
||||
- \*Arrs Wiki Contributions welcomed and strongly encouraged, simply auth with GitHub on the wiki and update the page
|
||||
|
||||
# Releases
|
||||
|
||||
## Native
|
||||
|
||||
- [GitHub Releases](https://github.com/Radarr/Radarr/releases)
|
||||
|
||||
- [Wiki Installation Instructions](https://wiki.servarr.com/radarr/installation)
|
||||
|
||||
## Docker
|
||||
|
||||
- [hotio/Radarr:testing](https://hotio.dev/containers/radarr)
|
||||
|
||||
- [lscr.io/linuxserver/Radarr:develop](https://docs.linuxserver.io/images/docker-radarr)
|
||||
|
||||
## 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
|
||||
|
||||
## v4.2.2.6503 (changes since [v4.2.1.6478](https://www.reddit.com/r/radarr/comments/woe62q/new_release_develop_v4216478/))
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- New: (API) Get Collection by TmdbId
|
||||
|
||||
- Added: Ntfy provider for notifications. (#7455)
|
||||
|
||||
- Fixed: Postgres secret regex now less greedy
|
||||
|
||||
- Fixed: Regex in log cleanser taking 10+ minutes on messages longer than 100k. (#7481)
|
||||
|
||||
- New: Add support for Plex Edition tags in naming
|
||||
|
||||
- New: Make Plex imdb tags conditional
|
||||
|
||||
- Fixed: Correctly map movie by original title on import
|
||||
|
||||
- Fixed: UI Error on Collection Filter
|
||||
|
||||
- Fixed: Allow 0 Min on Size CustomFormat Condition
|
||||
|
||||
- New: Add Slovak Language
|
||||
|
||||
- Bump version to 4.2.2
|
||||
|
||||
- Other bug fixes and improvements, see GitHub history
|
||||
478
changelogs/CHANGELOG-v4.2.4.6635.md
Normal file
@@ -0,0 +1,478 @@
|
||||
# New Stable Release
|
||||
|
||||
Radarr v4.2.4.6635 has been released on `master`
|
||||
|
||||
- **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. This version will receive updates either weekly or biweekly depending on development.**
|
||||
- **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
|
||||
|
||||
- Radarr Postgres Database Support
|
||||
- Radarr Plex Watchlist Support
|
||||
- Radarr Collections Support
|
||||
- Existing Collection Lists have been migrated
|
||||
- Some users may experience `Database Malformed` or other migration errors
|
||||
- This is caused by the database having existing corruption.
|
||||
- The solution is to follow the instructions noted on the FAQ for a malformed database. <https://wiki.servarr.com/radarr/faq#i-am-getting-an-error-database-disk-image-is-malformed>
|
||||
- Given this just occurred after an update then if the post-migrated database will not open or cannot be recovered then make a copy of the database from a recent backup and apply the database recovery process to that file then try starting Radarr with the recovered backup file. It should then migrate without issues then.
|
||||
|
||||
# Additional Commentary
|
||||
|
||||
- Radarr Postgres Database Support in `master`
|
||||
- Prowlarr Postgres Database Support in `nightly` and `develop`
|
||||
- [Lidarr Postgres Database Support in development (Draft PR#2625)](https://github.com/Lidarr/Lidarr/pull/2625)
|
||||
- \*Arrs Wiki Contributions welcomed and strongly encouraged, simply auth with GitHub on the wiki and update the page
|
||||
|
||||
# Releases
|
||||
|
||||
## Native
|
||||
|
||||
- [GitHub Releases](https://github.com/Radarr/Radarr/releases)
|
||||
|
||||
- [Wiki Installation Instructions](https://wiki.servarr.com/radarr/installation)
|
||||
|
||||
## Docker
|
||||
|
||||
- [hotio/Radarr:release](https://hotio.dev/containers/radarr)
|
||||
|
||||
- [lscr.io/linuxserver/Radarr:latest](https://docs.linuxserver.io/images/docker-radarr)
|
||||
|
||||
## 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
|
||||
|
||||
## v4.2.4.6635 (changes since v4.1.0.6175)
|
||||
|
||||
- Ignore SQLiteException tests on Azure
|
||||
|
||||
- Correct SQLiteException Sentry filtering
|
||||
|
||||
- Fix TagDetails sql for PG, add test
|
||||
|
||||
- Fixed: Add YTS.AG to the exception Release Groups (#7627)
|
||||
|
||||
- Fixed: Improve RarBG Error Handling
|
||||
|
||||
- fix typo in MovieRepository
|
||||
|
||||
- Fixed: Repack Preference Ignored
|
||||
|
||||
- Fixed: Ignore Movies with null tags when pulling AllMovieTags
|
||||
|
||||
- New: Torrent Seed Ratio no longer advance settings
|
||||
|
||||
- Translated using Weblate (Dutch) [skip ci]
|
||||
|
||||
- Remove unused package 'react-slick'
|
||||
|
||||
- Fixed: Collection Carousel Improvements
|
||||
|
||||
- Translated using Weblate (Portuguese (Brazil)) [skip ci]
|
||||
|
||||
- Clarify Folder as Root Folder (#7598)
|
||||
|
||||
- Fixed: Toolbar Button labels overlap
|
||||
|
||||
- Fixed: Series list jump bar click issues
|
||||
|
||||
- Fixed: Use translated title for sorttitle in Kodi nfo
|
||||
|
||||
- Handle redirects for 308 redirects
|
||||
|
||||
- Fixed: Improve Radarr List help text
|
||||
|
||||
- Fixed: Improve Quality Profile in-use helptext
|
||||
|
||||
- Bump version to 4.2.4
|
||||
|
||||
- FileNameBuilderFixture tests should run on Windows
|
||||
|
||||
- New: Add Latvian language
|
||||
|
||||
- Fixed: Defaults for Trakt Popular List
|
||||
|
||||
- Fixed: Strip additional domains out of release prefix
|
||||
|
||||
- Fixed: Collections not sorting properly on Index
|
||||
|
||||
- Update Bug Report Template
|
||||
|
||||
- Update Bug Report Template [skip ci] [common]
|
||||
|
||||
- Translated using Weblate (Portuguese (Brazil)) [skip ci]
|
||||
|
||||
- Fix: Trace logging postgres cleanse for large json files.
|
||||
|
||||
- Update src/NzbDrone.Core/CustomFormats/Specifications/RegexSpecificationBase.cs
|
||||
|
||||
- New: (UI) Indicate Custom Formats are Case Insensitive
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- New: Add application URL to host configuration settings
|
||||
|
||||
- New: Setting to add Collection to NFO files
|
||||
|
||||
- Really fix UI Error on Collection Filter
|
||||
|
||||
- New: Preserve language tags when importing subtitle files
|
||||
|
||||
- Fixed: Skip extras in 'Extras' subfolder
|
||||
|
||||
- New: Import subtitles from sub folders
|
||||
|
||||
- Bump version to 4.2.3
|
||||
|
||||
- Translated using Weblate (German) [skip ci]
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- New: (API) Get Collection by TmdbId
|
||||
|
||||
- Added: Ntfy provider for notifications. (#7455)
|
||||
|
||||
- Fixed: Postgres secret regex now less greedy
|
||||
|
||||
- Fixed: Regex in log cleanser taking 10+ minutes on messages longer than 100k. (#7481)
|
||||
|
||||
- New: Add support for Plex Edition tags in naming
|
||||
|
||||
- New: Make Plex imdb tags conditional
|
||||
|
||||
- Fixed: Correctly map movie by original title on import
|
||||
|
||||
- Fixed: UI Error on Collection Filter
|
||||
|
||||
- Fixed: Allow 0 Min on Size CustomFormat Condition
|
||||
|
||||
- New: Add Slovak Language
|
||||
|
||||
- Bump version to 4.2.2
|
||||
|
||||
- Translated using Weblate (Spanish) [skip ci]
|
||||
|
||||
- Regenerate yarn.lock
|
||||
|
||||
- Bump Sentry to 3.20.1
|
||||
|
||||
- Bump dotnet to 6.0.8
|
||||
|
||||
- Changed: Removed Tigole from ExceptionRelease match as is checked in ExceptionReleaseExact.
|
||||
|
||||
- Fixed: Tigole release group not being parsed and matched correctly, requiring manual import.
|
||||
|
||||
- Fixed: Configured recycle bin is excluded from import.
|
||||
|
||||
- Really fix Original Language in Language CF Specification
|
||||
|
||||
- Better Sentry Filtering for AggregateException children
|
||||
|
||||
- Run Postgres tests on 20.04
|
||||
|
||||
- Fixed: Blank Collection on MovieDetails when no Collection for Movie
|
||||
|
||||
- Remove non-functional filters for Trakt Lists
|
||||
|
||||
- Fixed: Original CF shouldn't need to be named "Original"
|
||||
|
||||
- Fixed NullRef in Skyhook Proxy during List Sync
|
||||
|
||||
- Fixed: Remove Notifiarr Environment Option
|
||||
|
||||
- Fixed: Trakt list request now uses correct rules for generating slug (#7449)
|
||||
|
||||
- Fixed: Allow blank ReleaseGroup and Edition from MovieFile edit
|
||||
|
||||
- Fixed: Don't process files that don't have a supported media file extension
|
||||
|
||||
- Fixed: Avoid failure if list contains same movie but without tmdbid
|
||||
|
||||
- Fixed: Log correct path when moving movies (#7439)
|
||||
|
||||
- Fixed: Watch state not preserved on metadata rewrite (#7436)
|
||||
|
||||
- Fixed: NullRefException in TorrentRssParser
|
||||
|
||||
- Bump Version to 4.2.1
|
||||
|
||||
- Fixed: Parse Group ZØNEHD
|
||||
|
||||
- New: Parse Group HONE
|
||||
|
||||
- New: (Discord) Include Custom Formats & Score On Grab
|
||||
|
||||
- Translated using Weblate (Catalan) [skip ci]
|
||||
|
||||
- Fixed: User Triggered Auto Searches now ignores monitored status (#7422)
|
||||
|
||||
- Fixed: Postgres timezone issues (#7183)
|
||||
|
||||
- Speed up and reduce meta calls for Imdb Lists when mapping
|
||||
|
||||
- Fixed: ImportListMovies not saved if from a list without TMDBIds
|
||||
|
||||
- Match 'HQCAM' as CAM source (#7412)
|
||||
|
||||
- Fix RefreshMovieServiceFixture folder service mock
|
||||
|
||||
- Fixed: Collections not deleted on Movie Delete
|
||||
|
||||
- Fixed: Bulk Collection RootFolder change failure
|
||||
|
||||
- New: Collection Folder, Genre, QualityProfile Filters
|
||||
|
||||
- Fixed: Trim RootFolderPath on Migration
|
||||
|
||||
- Avoid multiple metadata DB calls on list mapping
|
||||
|
||||
- Fixed: Prevent excluded movies from being added by collections
|
||||
|
||||
- Fixed: Avoid NullRef in MapMovieToTmdbMovie
|
||||
|
||||
- Fixed: Notifiarr - Better HTTP Error Handling
|
||||
|
||||
- Fix Nullref on Collection delete
|
||||
|
||||
- New: (Notifiarr) Custom Formats in OnGrab
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- New: Custom Format Spec Validation
|
||||
|
||||
- Fixed: Don't fail on single failure for Discover bulk add
|
||||
|
||||
- Remove general yarn restore key to avoid cross OS conflict
|
||||
|
||||
- Translated using Weblate (Portuguese (Brazil)) [skip ci]
|
||||
|
||||
- Fixed: Don't call for server notifications on event driven check
|
||||
|
||||
- Rename MovieImportedEvent to MovieFileImportedEvent
|
||||
|
||||
- Fixed: Improved parsing WebDL Releases
|
||||
|
||||
- New: adding a link to tmdb in the import combobox movie search results (#7352)
|
||||
|
||||
- Fixed: Housekeeper doesn't remove collections that have MovieMeta from lists
|
||||
|
||||
- Fixed: Notify on Bulk Adds (Lists, Collections, Imports)
|
||||
|
||||
- Updated NLog Version (#7365)
|
||||
|
||||
- Translated using Weblate (Portuguese (Brazil)) [skip ci]
|
||||
|
||||
- Fixed: Migration 208 fails when collection doesn't have name
|
||||
|
||||
- Fixed: Don't call AddMovies if no movies to add from Collection
|
||||
|
||||
- New: Default to IMDb Ratings in Kodi Metadata
|
||||
|
||||
- Translated using Weblate (Slovak) [skip ci]
|
||||
|
||||
- New: Separate Ratings Columns
|
||||
|
||||
- Fixed: Add support for more Anime release formats
|
||||
|
||||
- Translated using Weblate (Portuguese) [skip ci]
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- New: Bulk Edit Collections Profile, Root, Availability
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- Fixed: Collections Improvements
|
||||
|
||||
- Add back Movie Credits and Alt Titles Indexes
|
||||
|
||||
- Fixed: Validate if equals or child for startup folder
|
||||
|
||||
- New: Notifiarr include Media Info in Download Notifications
|
||||
|
||||
- New: Notifiarr moved from webhook to API
|
||||
|
||||
- Translated using Weblate (German) [skip ci]
|
||||
|
||||
- Use DryIoc for Automoqer, drop Unity dependency
|
||||
|
||||
- Additional logging for partial Plex path scan
|
||||
|
||||
- Translated using Weblate (Chinese (Simplified) (zh_CN)) [skip ci]
|
||||
|
||||
- Fixed: Improved empty root folder failsafe logging (#7341)
|
||||
|
||||
- Fixed: Register PostgresOptions when running in utility mode
|
||||
|
||||
- Fixed: Clarified genre filtering helptext on Trakt lists
|
||||
|
||||
- Fixed: Lithuanian media info parsing
|
||||
|
||||
- Translated using Weblate (Portuguese (Brazil)) [skip ci]
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- Fixed: MovieAdded trigger not available in UI
|
||||
|
||||
- New: Movie Added Notification
|
||||
|
||||
- Cleanup Collections UI Options
|
||||
|
||||
- Fixed: Speed up Collections API Endpoint
|
||||
|
||||
- New: Add DB Indexes for MovieMetadata
|
||||
|
||||
- New: .NET 6.0.5
|
||||
|
||||
- Translated using Weblate (Polish) [skip ci]
|
||||
|
||||
- Fixed: Remove Collection on last Movie delete
|
||||
|
||||
- Fixed: Correctly use loadash in FE Migrations
|
||||
|
||||
- Fixed: Partial Revert CF Validation for more robust solution
|
||||
|
||||
- Ensure .Mono and .Windows projects have all dependencies in build output
|
||||
|
||||
- Fix frontend monitor migration
|
||||
|
||||
- Try to fix CF null error for imported movie files
|
||||
|
||||
- Tweak monitor migration to avoid overwrites of valid settings
|
||||
|
||||
- Fixed: Run Frontend Migration for MonitorType
|
||||
|
||||
- New: Improve validation errors for Custom Formats
|
||||
|
||||
- Fixed: Don't Import Files with lower CF Score
|
||||
|
||||
- Fixed: Parse UHD2BD as BluRay instead of HDTV
|
||||
|
||||
- Fixed: Bluray 576p parsing
|
||||
|
||||
- New: Release Group Custom Format (#7154)
|
||||
|
||||
- Added term "brazilian" to Brazilian Portuguese parsing (#7296)
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- New: Don't default manual import to move
|
||||
|
||||
- Fixed: Cutoff Unmet showing items above lowest accepted quality when upgrades are disabled
|
||||
|
||||
- New: Collections View
|
||||
|
||||
- Translated using Weblate (Portuguese (Brazil)) [skip ci]
|
||||
|
||||
- Translated using Weblate (Portuguese (Brazil)) [skip ci]
|
||||
|
||||
- New: Parse QxR Group r00t
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- New: Instance name in System/Status API endpoint
|
||||
|
||||
- New: Instance name for Page Title
|
||||
|
||||
- New: Instance Name used for Syslog
|
||||
|
||||
- New: Set Instance Name
|
||||
|
||||
- New: Add optional Source Title column to history
|
||||
|
||||
- New: Support for new Nyaa RSS Feed format
|
||||
|
||||
- Fixed: Don't try to add MovieMeta if mapping fails for list items
|
||||
|
||||
- Fixed: Importing file from UNC shared folder without job folder
|
||||
|
||||
- Fixed: No restart requirement for Refresh Monitored interval change
|
||||
|
||||
- Fixed: Correct User-Agent api logging
|
||||
|
||||
- Delete nan.json
|
||||
|
||||
- Delete zh_Hans.json
|
||||
|
||||
- Translated using Weblate (Chinese (Simplified)) [skip ci]
|
||||
|
||||
- Fixed: Wrong translation mapping can be used for file naming and metadata
|
||||
|
||||
- Fixed: Translated fields are mapped incorrectly for existing search results
|
||||
|
||||
- Fixed: UI hiding search results with duplicate GUIDs
|
||||
|
||||
- Fixed: QBittorrent unknown download state: forcedMetaDL
|
||||
|
||||
- Fix migration 207 distinct on tmdbid only for list movie insert
|
||||
|
||||
- Fix metadata migration
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- Rework Movie Metadata data model
|
||||
|
||||
- Temporarily ignore update tests until linux-x86 released
|
||||
|
||||
- New: Add linux-x86 builds
|
||||
|
||||
- New: Support Plex API Path Scan (Similar to autoscan)
|
||||
|
||||
- Fixed: Interactive Search Filter not filtering multiple qualities in the same filter row
|
||||
|
||||
- Added padding to search tab to maintain visual consistancy
|
||||
|
||||
- Fixed: Update ScheduledTask cache LastStartTime on command execution
|
||||
|
||||
- Bump Version to 4.2
|
||||
|
||||
- Bump webpack packages
|
||||
|
||||
- Remove old DotNetVersion method and dep
|
||||
|
||||
- Bump Monotorrent to 2.0.5
|
||||
|
||||
- Fixed: Don't die if Plex watchlist guid node is missing or null
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- New: Add support for Plex Watchlist importing (#5707)
|
||||
|
||||
- New: Add date picker for custom filter dates
|
||||
|
||||
- Make postgres integration tests actually use postgres
|
||||
|
||||
- Fixed: Clarify Qbit Content Path Error
|
||||
|
||||
- Fixed: Use Movie Original Language for Custom Format Original Language (#6882)
|
||||
|
||||
- Fix .editorconfig to disallow `this`
|
||||
|
||||
- FFMpeg 5.0.1
|
||||
|
||||
- Fixed: Properly handle 119 error code from Synology Download Station
|
||||
|
||||
- Translated using Weblate (Hungarian) [skip ci]
|
||||
|
||||
- Fixed: FFprobe failing on MacOS and AV1 streams
|
||||
|
||||
- add 576 resolution back to simple title regex
|
||||
|
||||
- Translated using Weblate (Ukrainian) [skip ci]
|
||||
|
||||
- Set up tests on postgres
|
||||
|
||||
- Allow configuring postgres with environment variables
|
||||
|
||||
- New: Postgres Support
|
||||
|
||||
- Other bug fixes and improvements, see GitHub history
|
||||
305
changelogs/CHANGELOG-v4.5.1.7282.md
Normal file
@@ -0,0 +1,305 @@
|
||||
# New Beta Release
|
||||
|
||||
Radarr v4.5.1.7282 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. This version will receive updates either weekly or biweekly depending on development.**
|
||||
- **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
|
||||
|
||||
- Radarr Plex Watchlist Improvements
|
||||
- Parsing Improvements
|
||||
|
||||
# Additional Commentary
|
||||
|
||||
|
||||
|
||||
# Releases
|
||||
|
||||
## Native
|
||||
|
||||
- [GitHub Releases](https://github.com/Radarr/Radarr/releases)
|
||||
|
||||
- [Wiki Installation Instructions](https://wiki.servarr.com/radarr/installation)
|
||||
|
||||
## Docker
|
||||
|
||||
- [hotio/Radarr:testing](https://hotio.dev/containers/radarr)
|
||||
|
||||
- [lscr.io/linuxserver/Radarr:develop](https://docs.linuxserver.io/images/docker-radarr)
|
||||
|
||||
## 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
|
||||
|
||||
## v4.5.1.7282 (changes since v4.5.0.7106)
|
||||
|
||||
- Add back min availability to bulk movie edit
|
||||
|
||||
- Clean up variable name case
|
||||
|
||||
- Fix Radarr import syncing not matching any root folders.
|
||||
|
||||
- Fix MovieFileLanguageConnector to use MovieLanguage
|
||||
|
||||
- Update UI dependencies
|
||||
|
||||
- Add `inset` to stylelintrc
|
||||
|
||||
- Remove unused babel plugins and fix build with profiling
|
||||
|
||||
- Update all relevant dev tool deps
|
||||
|
||||
- Delete various old config files
|
||||
|
||||
- Use `await using` in LocalizationService
|
||||
|
||||
- Fixed: Provider health checks persist after add until next scheduled check
|
||||
|
||||
- Translated using Weblate (Portuguese (Brazil)) [skip ci]
|
||||
|
||||
- New: Log additional information when processing completed torrents from rTorrent
|
||||
|
||||
- Fix function name and use out var for try get in DownloadClientProvider
|
||||
|
||||
- Add Pull Request Labeler
|
||||
|
||||
- API key improvements
|
||||
|
||||
- Translated using Weblate (Chinese (Simplified) (zh_CN)) [skip ci]
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- New: Notifications when Manual Interaction is required for importing
|
||||
|
||||
- New: On Health Restored notification
|
||||
|
||||
- Why rename many files when few file do trick
|
||||
|
||||
- GracePeriod not Graceperiod
|
||||
|
||||
- Sort translations alphabetically
|
||||
|
||||
- Move vscode settings to the frontend folder
|
||||
|
||||
- Fixed IsValidPath usages
|
||||
|
||||
- New: Improve path validation when handling paths from different OSes
|
||||
|
||||
- Log invalid config file exceptions
|
||||
|
||||
- Add VSCode extension recommendations
|
||||
|
||||
- Fixed: Ensure indexer errors are handled before processing response
|
||||
|
||||
- Align environment variable setting in ProcessProvider with upstream
|
||||
|
||||
- New: Only add version header for API requests
|
||||
|
||||
- Fixed: RootFolderPath not set for Movies from API
|
||||
|
||||
- Fixed: Index UI crash for movies without files
|
||||
|
||||
- New: Add token authentication for ntfy.sh notifications
|
||||
|
||||
- Fixed: Matching of custom formats during movie file import
|
||||
|
||||
- Revert argument exception swallowing for Plex library update
|
||||
|
||||
- New: Improved Plex library updating
|
||||
|
||||
- New: Add release info to webhook/custom script import events
|
||||
|
||||
- New: Don't import movies that don't match grab history
|
||||
|
||||
- Use string interpolation for Newznab request generation
|
||||
|
||||
- Virtualize movie select for manual import with react-window
|
||||
|
||||
- Convert Manual Import to Typescript
|
||||
|
||||
- New: Log content for invalid torrent files
|
||||
|
||||
- Translated using Weblate (Portuguese (Brazil)) [skip ci]
|
||||
|
||||
- Add `tmdbid` to capabilities check in Newznab/Torznab
|
||||
|
||||
- Remove requirement for imdbtitle and imdbyear in Newznab and Torznab
|
||||
|
||||
- Remove duplicate check in RemotePathMappingCheck
|
||||
|
||||
- Fixed: Movie Status in Table View
|
||||
|
||||
- Automated API Docs update
|
||||
|
||||
- New: Add result to commands to report commands that did not complete successfully
|
||||
|
||||
- Translated using Weblate (French) [skip ci]
|
||||
|
||||
- add trace log checkbox to bug report [common]
|
||||
|
||||
- Migrate to FluentValidation 9
|
||||
|
||||
- Fix downloading releases without an indexer
|
||||
|
||||
- Build download requests from indexer implementation
|
||||
|
||||
- bump `lock threads` github action to latest [skip ci]
|
||||
|
||||
- Fixed some aria violations
|
||||
|
||||
- Fixed: Search Button Display on Movie Index
|
||||
|
||||
- Fixed: Unable to search individual movies from Movie Index
|
||||
|
||||
- Fixed: Upgrades blocked: UpgradeSpecification error
|
||||
|
||||
- Fixed: Cannot Toggle Show Search on Movie Index
|
||||
|
||||
- New: Filter Sonarr synchronization based on Root Folders
|
||||
|
||||
- New: Add Original Language as Filter Option in Discover View
|
||||
|
||||
- New: Handle multi title release names split by slash
|
||||
|
||||
- Translated using Weblate (Chinese (Simplified) (zh_CN)) [skip ci]
|
||||
|
||||
- Fixed: Don't import Custom Format downgrades
|
||||
|
||||
- Fixed: Enable parsing of repacks with revision
|
||||
|
||||
- Fixed: Don't clean Kodi library if video is playing and Always Update is disabled
|
||||
|
||||
- Revert "Build download requests from indexer implementation"
|
||||
|
||||
- Fixed: Movie count incorrect in Movie Editor
|
||||
|
||||
- Fixed: Missing Translates
|
||||
|
||||
- Simplify DatabaseType logic
|
||||
|
||||
- Fixed: (Database) Improve Version detection
|
||||
|
||||
- Fixed: Importing from Manual Import ignoring Analyze video files
|
||||
|
||||
- Extract useSelectState from SelectContext
|
||||
|
||||
- Avoid queue failures due to unknown release language processing
|
||||
|
||||
- Fix default value variable name for ImportListExclusion
|
||||
|
||||
- New: Closing Move Movie modal without selecting will cancel save
|
||||
|
||||
- Use augmented languages for queue items
|
||||
|
||||
- New: Use languages from Torznab/Newznab attributes if given
|
||||
|
||||
- New: Use TmdbId from parsing for mapping
|
||||
|
||||
- Cleanup ParsingService
|
||||
|
||||
- Fixed: Pushed releases should be stored as pushed release
|
||||
|
||||
- New: Don't block imports when release was matched by ID if they were grabbed via interactive search
|
||||
|
||||
- Fixed: Queue not showing items with conflicting titles
|
||||
|
||||
- New: Include Movie Match Type in grab event details
|
||||
|
||||
- Fixed: Automatic import of releases when file is not matched to movie
|
||||
|
||||
- Fixed: Don't automatically import if release title doesn't match movie title
|
||||
|
||||
- Fixed: Throw to manual import if multiple movies found during title mapping
|
||||
|
||||
- Build download requests from indexer implementation
|
||||
|
||||
- New: Updated button and calendar outline colors for dark theme
|
||||
|
||||
- Fix loading eslintrc
|
||||
|
||||
- New: Remember add import list exclusion when removing movie
|
||||
|
||||
- Fixed: Movies table not resizing properly when window size changed
|
||||
|
||||
- Fixed: Movie select not working correctly after stopping/starting or changing sort order
|
||||
|
||||
- Improved UI error messages (stack trace and version)
|
||||
|
||||
- New: Increase clickable area of movie select in poster/overview
|
||||
|
||||
- Remove unused ReactDOM import
|
||||
|
||||
- Fixed: File browser
|
||||
|
||||
- Remove movie editor code
|
||||
|
||||
- New: Mass Editor is now part of movie list
|
||||
|
||||
- Added movie index selection
|
||||
|
||||
- Fixed: Restoring scroll position when going back/forward to series list
|
||||
|
||||
- Refactor Movie index to use react-window
|
||||
|
||||
- Add CSS Typings
|
||||
|
||||
- Add Prettier to format TypeScript files
|
||||
|
||||
- Add typescript
|
||||
|
||||
- New: Parsing of more German WEBDL releases
|
||||
|
||||
- Fixed: Parse 720p Remux as 720p BluRay
|
||||
|
||||
- QualityParser - Simplify new expression (IDE0090)
|
||||
|
||||
- Misc HealthCheck Cleanup and Sonarr Alignment
|
||||
|
||||
- Bump Swashbuckle to 6.5.0
|
||||
|
||||
- Fixed: Ensure first history item when marked as failed is the selected item
|
||||
|
||||
- Fixed: Edit Quality Profile not opening
|
||||
|
||||
- Refactor LanguageParser.ParseLanguageTags() to return List<> instead of IEnumerable. Clean up calls to ParseLanguageTags().
|
||||
|
||||
- Include extra tags from existing subtitles when renaming.
|
||||
|
||||
- Translated using Weblate (French) [skip ci]
|
||||
|
||||
- Use BuildInfo.AppName for RARBG appId instead of hardcoded value
|
||||
|
||||
- New: Updated Rarbg request limits
|
||||
|
||||
- New: Report health error if Recycling Bin folder is not writable
|
||||
|
||||
- Update core-js and use defaults for browserlist
|
||||
|
||||
- Update webpack and webpack-cli
|
||||
|
||||
- Use minified jquery
|
||||
|
||||
- Remove unused gulpFile
|
||||
|
||||
- Fix typo in calendarBackgroundColor CSS variable
|
||||
|
||||
- Fix QualityParser Tests
|
||||
|
||||
- Fixed: Parse DVD with 576p Resolution as DVD
|
||||
|
||||
- Auto-reply for Log Label [common]
|
||||
|
||||
- Bump version to 4.5.1
|
||||
|
||||
- Other bug fixes and improvements, see GitHub history
|
||||
2
changelogs/templates/announcements.md
Normal file
@@ -0,0 +1,2 @@
|
||||
- Radarr Plex Watchlist Improvements
|
||||
- Parsing Improvements
|
||||
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. This version will receive updates either weekly or biweekly depending on development.**
|
||||
- **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
@@ -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. This version will receive updates either weekly or biweekly depending on development.**
|
||||
- **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.**
|
||||
0
changelogs/templates/commentary.md
Normal file
5
debian/changelog
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
nzbdrone {version} {branch}; urgency=low
|
||||
|
||||
* Automatic Release.
|
||||
|
||||
-- NzbDrone <contact@nzbdrone.com> Mon, 26 Aug 2013 00:00:00 -0700
|
||||
1
debian/compat
vendored
Normal file
@@ -0,0 +1 @@
|
||||
8
|
||||
12
debian/control
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
Section: web
|
||||
Priority: optional
|
||||
Maintainer: Sonarr <contact@nzbdrone.com>
|
||||
Source: nzbdrone
|
||||
Homepage: https://sonarr.tv
|
||||
Vcs-Git: git@github.com:Sonarr/Sonarr.git
|
||||
Vcs-Browser: https://github.com/Sonarr/Sonarr
|
||||
|
||||
Package: nzbdrone
|
||||
Architecture: all
|
||||
Depends: libmono-cil-dev (>= 3.2), sqlite3 (>= 3.7), mediainfo (>= 0.7.52)
|
||||
Description: Sonarr is an internet PVR
|
||||
24
debian/copyright
vendored
Executable file
@@ -0,0 +1,24 @@
|
||||
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: nzbdrone
|
||||
Source: https://github.com/Sonarr/Sonarr
|
||||
|
||||
Files: *
|
||||
Copyright: 2010-2016 Sonarr <hello@sonarr.tv>
|
||||
|
||||
License: GPL-3.0+
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
.
|
||||
This package is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
.
|
||||
On Debian systems, the complete text of the GNU General
|
||||
Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
|
||||
1
debian/install
vendored
Executable file
@@ -0,0 +1 @@
|
||||
nzbdrone_bin/* opt/NzbDrone
|
||||
13
debian/rules
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/make -f
|
||||
# -*- makefile -*-
|
||||
# Sample debian/rules that uses debhelper.
|
||||
# This file was originally written by Joey Hess and Craig Small.
|
||||
# As a special exception, when this file is copied by dh-make into a
|
||||
# dh-make output file, you may use that output file without restriction.
|
||||
# This special exception was added by Craig Small in version 0.37 of dh-make.
|
||||
|
||||
# Uncomment this to turn on verbose mode.
|
||||
#export DH_VERBOSE=1
|
||||
|
||||
%:
|
||||
dh $@
|
||||
@@ -36,7 +36,7 @@ module.exports = (env) => {
|
||||
},
|
||||
|
||||
entry: {
|
||||
index: 'index.ts'
|
||||
index: 'index.js'
|
||||
},
|
||||
|
||||
resolve: {
|
||||
@@ -66,23 +66,23 @@ module.exports = (env) => {
|
||||
output: {
|
||||
path: distFolder,
|
||||
publicPath: '/',
|
||||
filename: '[name]-[contenthash].js',
|
||||
filename: '[name].js',
|
||||
sourceMapFilename: '[file].map'
|
||||
},
|
||||
|
||||
optimization: {
|
||||
moduleIds: 'deterministic',
|
||||
chunkIds: isProduction ? 'deterministic' : 'named'
|
||||
chunkIds: 'named',
|
||||
splitChunks: {
|
||||
chunks: 'initial',
|
||||
name: 'vendors'
|
||||
}
|
||||
},
|
||||
|
||||
performance: {
|
||||
hints: false
|
||||
},
|
||||
|
||||
experiments: {
|
||||
topLevelAwait: true
|
||||
},
|
||||
|
||||
plugins: [
|
||||
new webpack.DefinePlugin({
|
||||
__DEV__: !isProduction,
|
||||
@@ -90,15 +90,13 @@ module.exports = (env) => {
|
||||
}),
|
||||
|
||||
new MiniCssExtractPlugin({
|
||||
filename: 'Content/styles.css',
|
||||
chunkFilename: 'Content/[id]-[chunkhash].css'
|
||||
filename: 'Content/styles.css'
|
||||
}),
|
||||
|
||||
new HtmlWebpackPlugin({
|
||||
template: 'frontend/src/index.ejs',
|
||||
filename: 'index.html',
|
||||
publicPath: '/',
|
||||
inject: false
|
||||
publicPath: '/'
|
||||
}),
|
||||
|
||||
new FileManagerPlugin({
|
||||
@@ -235,7 +233,6 @@ module.exports = (env) => {
|
||||
{
|
||||
loader: 'url-loader',
|
||||
options: {
|
||||
limit: 10240,
|
||||
mimetype: 'application/font-woff',
|
||||
emitFile: false,
|
||||
name: 'Content/Fonts/[name].[ext]'
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import Alert from 'Components/Alert';
|
||||
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
||||
import ConfirmModal from 'Components/Modal/ConfirmModal';
|
||||
import PageContent from 'Components/Page/PageContent';
|
||||
@@ -157,16 +156,16 @@ class Blocklist extends Component {
|
||||
|
||||
{
|
||||
!isFetching && !!error &&
|
||||
<Alert kind={kinds.DANGER}>
|
||||
<div>
|
||||
{translate('UnableToLoadBlocklist')}
|
||||
</Alert>
|
||||
</div>
|
||||
}
|
||||
|
||||
{
|
||||
isPopulated && !error && !items.length &&
|
||||
<Alert kind={kinds.INFO}>
|
||||
{translate('NoHistoryBlocklist')}
|
||||
</Alert>
|
||||
<div>
|
||||
{translate('NoHistory')}
|
||||
</div>
|
||||
}
|
||||
|
||||
{
|
||||
@@ -210,7 +209,7 @@ class Blocklist extends Component {
|
||||
isOpen={isConfirmRemoveModalOpen}
|
||||
kind={kinds.DANGER}
|
||||
title={translate('RemoveSelected')}
|
||||
message={translate('RemoveSelectedItemBlocklistMessageText')}
|
||||
message={translate('AreYouSureYouWantToRemoveTheSelectedItemsFromBlocklist')}
|
||||
confirmLabel={translate('RemoveSelected')}
|
||||
onConfirm={this.onRemoveSelectedConfirmed}
|
||||
onCancel={this.onConfirmRemoveModalClose}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import Alert from 'Components/Alert';
|
||||
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
||||
import FilterMenu from 'Components/Menu/FilterMenu';
|
||||
import PageContent from 'Components/Page/PageContent';
|
||||
@@ -12,7 +11,7 @@ import Table from 'Components/Table/Table';
|
||||
import TableBody from 'Components/Table/TableBody';
|
||||
import TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';
|
||||
import TablePager from 'Components/Table/TablePager';
|
||||
import { align, icons, kinds } from 'Helpers/Props';
|
||||
import { align, icons } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import HistoryRowConnector from './HistoryRowConnector';
|
||||
|
||||
@@ -84,9 +83,9 @@ class History extends Component {
|
||||
|
||||
{
|
||||
!isFetchingAny && hasError &&
|
||||
<Alert kind={kinds.DANGER}>
|
||||
<div>
|
||||
{translate('UnableToLoadHistory')}
|
||||
</Alert>
|
||||
</div>
|
||||
}
|
||||
|
||||
{
|
||||
@@ -94,9 +93,9 @@ class History extends Component {
|
||||
// wait for the episodes to populate because they are never coming.
|
||||
|
||||
isPopulated && !hasError && !items.length &&
|
||||
<Alert kind={kinds.INFO}>
|
||||
<div>
|
||||
{translate('NoHistory')}
|
||||
</Alert>
|
||||
</div>
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
@@ -4,8 +4,7 @@ import IconButton from 'Components/Link/IconButton';
|
||||
import RelativeDateCellConnector from 'Components/Table/Cells/RelativeDateCellConnector';
|
||||
import TableRowCell from 'Components/Table/Cells/TableRowCell';
|
||||
import TableRow from 'Components/Table/TableRow';
|
||||
import Tooltip from 'Components/Tooltip/Tooltip';
|
||||
import { icons, tooltipPositions } from 'Helpers/Props';
|
||||
import { icons } from 'Helpers/Props';
|
||||
import MovieFormats from 'Movie/MovieFormats';
|
||||
import MovieLanguage from 'Movie/MovieLanguage';
|
||||
import MovieQuality from 'Movie/MovieQuality';
|
||||
@@ -177,14 +176,7 @@ class HistoryRow extends Component {
|
||||
key={name}
|
||||
className={styles.customFormatScore}
|
||||
>
|
||||
<Tooltip
|
||||
anchor={formatCustomFormatScore(
|
||||
customFormatScore,
|
||||
customFormats.length
|
||||
)}
|
||||
tooltip={<MovieFormats formats={customFormats} />}
|
||||
position={tooltipPositions.BOTTOM}
|
||||
/>
|
||||
{formatCustomFormatScore(customFormatScore)}
|
||||
</TableRowCell>
|
||||
);
|
||||
}
|
||||
@@ -265,8 +257,4 @@ HistoryRow.propTypes = {
|
||||
onMarkAsFailedPress: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
HistoryRow.defaultProps = {
|
||||
customFormats: []
|
||||
};
|
||||
|
||||
export default HistoryRow;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import _ from 'lodash';
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import Alert from 'Components/Alert';
|
||||
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
||||
import PageContent from 'Components/Page/PageContent';
|
||||
import PageContentBody from 'Components/Page/PageContentBody';
|
||||
@@ -13,7 +12,7 @@ import Table from 'Components/Table/Table';
|
||||
import TableBody from 'Components/Table/TableBody';
|
||||
import TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';
|
||||
import TablePager from 'Components/Table/TablePager';
|
||||
import { align, icons, kinds } from 'Helpers/Props';
|
||||
import { align, icons } from 'Helpers/Props';
|
||||
import getRemovedItems from 'Utilities/Object/getRemovedItems';
|
||||
import hasDifferentItems from 'Utilities/Object/hasDifferentItems';
|
||||
import translate from 'Utilities/String/translate';
|
||||
@@ -232,17 +231,17 @@ class Queue extends Component {
|
||||
|
||||
{
|
||||
!isRefreshing && hasError ?
|
||||
<Alert kind={kinds.DANGER}>
|
||||
<div>
|
||||
{translate('FailedToLoadQueue')}
|
||||
</Alert> :
|
||||
</div> :
|
||||
null
|
||||
}
|
||||
|
||||
{
|
||||
isAllPopulated && !hasError && !items.length ?
|
||||
<Alert kind={kinds.INFO}>
|
||||
<div>
|
||||
{translate('QueueIsEmpty')}
|
||||
</Alert> :
|
||||
</div> :
|
||||
null
|
||||
}
|
||||
|
||||
|
||||
@@ -16,12 +16,6 @@
|
||||
width: 150px;
|
||||
}
|
||||
|
||||
.customFormatScore {
|
||||
composes: cell from '~Components/Table/Cells/TableRowCell.css';
|
||||
|
||||
width: 55px;
|
||||
}
|
||||
|
||||
.actions {
|
||||
composes: cell from '~Components/Table/Cells/TableRowCell.css';
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
// Please do not change this file!
|
||||
interface CssExports {
|
||||
'actions': string;
|
||||
'customFormatScore': string;
|
||||
'progress': string;
|
||||
'protocol': string;
|
||||
'quality': string;
|
||||
|
||||
@@ -8,15 +8,13 @@ import ProgressBar from 'Components/ProgressBar';
|
||||
import TableRowCell from 'Components/Table/Cells/TableRowCell';
|
||||
import TableSelectCell from 'Components/Table/Cells/TableSelectCell';
|
||||
import TableRow from 'Components/Table/TableRow';
|
||||
import Tooltip from 'Components/Tooltip/Tooltip';
|
||||
import { icons, kinds, tooltipPositions } from 'Helpers/Props';
|
||||
import { icons, kinds } from 'Helpers/Props';
|
||||
import InteractiveImportModal from 'InteractiveImport/InteractiveImportModal';
|
||||
import MovieFormats from 'Movie/MovieFormats';
|
||||
import MovieLanguage from 'Movie/MovieLanguage';
|
||||
import MovieQuality from 'Movie/MovieQuality';
|
||||
import MovieTitleLink from 'Movie/MovieTitleLink';
|
||||
import formatBytes from 'Utilities/Number/formatBytes';
|
||||
import formatCustomFormatScore from 'Utilities/Number/formatCustomFormatScore';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import QueueStatusCell from './QueueStatusCell';
|
||||
import RemoveQueueItemModal from './RemoveQueueItemModal';
|
||||
@@ -44,14 +42,14 @@ class QueueRow extends Component {
|
||||
this.setState({ isRemoveQueueItemModalOpen: true });
|
||||
};
|
||||
|
||||
onRemoveQueueItemModalConfirmed = (blocklist, skipRedownload) => {
|
||||
onRemoveQueueItemModalConfirmed = (blocklist) => {
|
||||
const {
|
||||
onRemoveQueueItemPress,
|
||||
onQueueRowModalOpenOrClose
|
||||
} = this.props;
|
||||
|
||||
onQueueRowModalOpenOrClose(false);
|
||||
onRemoveQueueItemPress(blocklist, skipRedownload);
|
||||
onRemoveQueueItemPress(blocklist);
|
||||
|
||||
this.setState({ isRemoveQueueItemModalOpen: false });
|
||||
};
|
||||
@@ -90,7 +88,6 @@ class QueueRow extends Component {
|
||||
movie,
|
||||
quality,
|
||||
customFormats,
|
||||
customFormatScore,
|
||||
languages,
|
||||
protocol,
|
||||
indexer,
|
||||
@@ -204,24 +201,6 @@ class QueueRow extends Component {
|
||||
);
|
||||
}
|
||||
|
||||
if (name === 'customFormatScore') {
|
||||
return (
|
||||
<TableRowCell
|
||||
key={name}
|
||||
className={styles.customFormatScore}
|
||||
>
|
||||
<Tooltip
|
||||
anchor={formatCustomFormatScore(
|
||||
customFormatScore,
|
||||
customFormats.length
|
||||
)}
|
||||
tooltip={<MovieFormats formats={customFormats} />}
|
||||
position={tooltipPositions.BOTTOM}
|
||||
/>
|
||||
</TableRowCell>
|
||||
);
|
||||
}
|
||||
|
||||
if (name === 'protocol') {
|
||||
return (
|
||||
<TableRowCell key={name}>
|
||||
@@ -386,7 +365,6 @@ QueueRow.propTypes = {
|
||||
movie: PropTypes.object,
|
||||
quality: PropTypes.object.isRequired,
|
||||
customFormats: PropTypes.arrayOf(PropTypes.object),
|
||||
customFormatScore: PropTypes.number.isRequired,
|
||||
languages: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
protocol: PropTypes.string.isRequired,
|
||||
indexer: PropTypes.string,
|
||||
@@ -412,7 +390,6 @@ QueueRow.propTypes = {
|
||||
};
|
||||
|
||||
QueueRow.defaultProps = {
|
||||
customFormats: [],
|
||||
isGrabbing: false,
|
||||
isRemoving: false
|
||||
};
|
||||
|
||||
@@ -22,8 +22,7 @@ class RemoveQueueItemModal extends Component {
|
||||
|
||||
this.state = {
|
||||
remove: true,
|
||||
blocklist: false,
|
||||
skipRedownload: false
|
||||
blocklist: false
|
||||
};
|
||||
}
|
||||
|
||||
@@ -33,8 +32,7 @@ class RemoveQueueItemModal extends Component {
|
||||
resetState = function() {
|
||||
this.setState({
|
||||
remove: true,
|
||||
blocklist: false,
|
||||
skipRedownload: false
|
||||
blocklist: false
|
||||
});
|
||||
};
|
||||
|
||||
@@ -49,10 +47,6 @@ class RemoveQueueItemModal extends Component {
|
||||
this.setState({ blocklist: value });
|
||||
};
|
||||
|
||||
onSkipRedownloadChange = ({ value }) => {
|
||||
this.setState({ skipRedownload: value });
|
||||
};
|
||||
|
||||
onRemoveConfirmed = () => {
|
||||
const state = this.state;
|
||||
|
||||
@@ -76,7 +70,7 @@ class RemoveQueueItemModal extends Component {
|
||||
isPending
|
||||
} = this.props;
|
||||
|
||||
const { remove, blocklist, skipRedownload } = this.state;
|
||||
const { remove, blocklist } = this.state;
|
||||
|
||||
return (
|
||||
<Modal
|
||||
@@ -124,20 +118,6 @@ class RemoveQueueItemModal extends Component {
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
{
|
||||
blocklist ?
|
||||
<FormGroup>
|
||||
<FormLabel>{translate('SkipRedownload')}</FormLabel>
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="skipRedownload"
|
||||
value={skipRedownload}
|
||||
helpText={translate('SkipRedownloadHelpText')}
|
||||
onChange={this.onSkipRedownloadChange}
|
||||
/>
|
||||
</FormGroup> :
|
||||
null
|
||||
}
|
||||
</ModalBody>
|
||||
|
||||
<ModalFooter>
|
||||
|
||||
@@ -23,8 +23,7 @@ class RemoveQueueItemsModal extends Component {
|
||||
|
||||
this.state = {
|
||||
remove: true,
|
||||
blocklist: false,
|
||||
skipRedownload: false
|
||||
blocklist: false
|
||||
};
|
||||
}
|
||||
|
||||
@@ -34,8 +33,7 @@ class RemoveQueueItemsModal extends Component {
|
||||
resetState = function() {
|
||||
this.setState({
|
||||
remove: true,
|
||||
blocklist: false,
|
||||
skipRedownload: false
|
||||
blocklist: false
|
||||
});
|
||||
};
|
||||
|
||||
@@ -50,10 +48,6 @@ class RemoveQueueItemsModal extends Component {
|
||||
this.setState({ blocklist: value });
|
||||
};
|
||||
|
||||
onSkipRedownloadChange = ({ value }) => {
|
||||
this.setState({ skipRedownload: value });
|
||||
};
|
||||
|
||||
onRemoveConfirmed = () => {
|
||||
const state = this.state;
|
||||
|
||||
@@ -77,7 +71,7 @@ class RemoveQueueItemsModal extends Component {
|
||||
allPending
|
||||
} = this.props;
|
||||
|
||||
const { remove, blocklist, skipRedownload } = this.state;
|
||||
const { remove, blocklist } = this.state;
|
||||
|
||||
return (
|
||||
<Modal
|
||||
@@ -94,7 +88,7 @@ class RemoveQueueItemsModal extends Component {
|
||||
|
||||
<ModalBody>
|
||||
<div className={styles.message}>
|
||||
{selectedCount > 1 ? translate('RemoveSelectedItemsQueueMessageText', selectedCount) : translate('RemoveSelectedItemQueueMessageText')}
|
||||
{selectedCount > 1 ? translate('AreYouSureYouWantToRemoveSelectedItemsFromQueue', selectedCount) : translate('AreYouSureYouWantToRemoveSelectedItemFromQueue')}
|
||||
</div>
|
||||
|
||||
{
|
||||
@@ -128,20 +122,6 @@ class RemoveQueueItemsModal extends Component {
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
{
|
||||
blocklist ?
|
||||
<FormGroup>
|
||||
<FormLabel>{translate('SkipRedownload')}</FormLabel>
|
||||
<FormInputGroup
|
||||
type={inputTypes.CHECK}
|
||||
name="skipRedownload"
|
||||
value={skipRedownload}
|
||||
helpText={translate('SkipRedownloadHelpText')}
|
||||
onChange={this.onSkipRedownloadChange}
|
||||
/>
|
||||
</FormGroup> :
|
||||
null
|
||||
}
|
||||
</ModalBody>
|
||||
|
||||
<ModalFooter>
|
||||
@@ -153,7 +133,7 @@ class RemoveQueueItemsModal extends Component {
|
||||
kind={kinds.DANGER}
|
||||
onPress={this.onRemoveConfirmed}
|
||||
>
|
||||
{translate('Remove')}
|
||||
Remove
|
||||
</Button>
|
||||
</ModalFooter>
|
||||
</ModalContent>
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
import { reduce } from 'lodash';
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import Alert from 'Components/Alert';
|
||||
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
||||
import PageContent from 'Components/Page/PageContent';
|
||||
import PageContentBody from 'Components/Page/PageContentBody';
|
||||
import { kinds } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import selectAll from 'Utilities/Table/selectAll';
|
||||
import toggleSelected from 'Utilities/Table/toggleSelected';
|
||||
@@ -107,9 +105,9 @@ class ImportMovie extends Component {
|
||||
|
||||
{
|
||||
!rootFoldersFetching && !!rootFoldersError ?
|
||||
<Alert kind={kinds.DANGER}>
|
||||
<div>
|
||||
{translate('UnableToLoadRootFolders')}
|
||||
</Alert> :
|
||||
</div> :
|
||||
null
|
||||
}
|
||||
|
||||
@@ -118,9 +116,9 @@ class ImportMovie extends Component {
|
||||
!rootFoldersFetching &&
|
||||
rootFoldersPopulated &&
|
||||
!unmappedFolders.length ?
|
||||
<Alert kind={kinds.INFO}>
|
||||
<div>
|
||||
{translate('AllMoviesInPathHaveBeenImported', [path])}
|
||||
</Alert> :
|
||||
</div> :
|
||||
null
|
||||
}
|
||||
|
||||
|
||||
@@ -18,23 +18,17 @@ import styles from './ImportMovieSelectFolder.css';
|
||||
const rootFolderColumns = [
|
||||
{
|
||||
name: 'path',
|
||||
get label() {
|
||||
return translate('Path');
|
||||
},
|
||||
label: translate('Path'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'freeSpace',
|
||||
get label() {
|
||||
return translate('FreeSpace');
|
||||
},
|
||||
label: translate('FreeSpace'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'unmappedFolders',
|
||||
get label() {
|
||||
return translate('UnmappedFolders');
|
||||
},
|
||||
label: translate('UnmappedFolders'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
@@ -98,9 +92,9 @@ class ImportMovieSelectFolder extends Component {
|
||||
|
||||
{
|
||||
!isFetching && error ?
|
||||
<Alert kind={kinds.DANGER}>
|
||||
<div>
|
||||
{translate('UnableToLoadRootFolders')}
|
||||
</Alert> :
|
||||
</div> :
|
||||
null
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ import Switch from 'Components/Router/Switch';
|
||||
import DiscoverMovieConnector from 'DiscoverMovie/DiscoverMovieConnector';
|
||||
import MovieDetailsPageConnector from 'Movie/Details/MovieDetailsPageConnector';
|
||||
import MovieIndex from 'Movie/Index/MovieIndex';
|
||||
import CustomFormatSettingsPage from 'Settings/CustomFormats/CustomFormatSettingsPage';
|
||||
import CustomFormatSettingsConnector from 'Settings/CustomFormats/CustomFormatSettingsConnector';
|
||||
import DownloadClientSettingsConnector from 'Settings/DownloadClients/DownloadClientSettingsConnector';
|
||||
import GeneralSettingsConnector from 'Settings/General/GeneralSettingsConnector';
|
||||
import ImportListSettingsConnector from 'Settings/ImportLists/ImportListSettingsConnector';
|
||||
@@ -148,7 +148,7 @@ function AppRoutes(props) {
|
||||
|
||||
<Route
|
||||
path="/settings/customformats"
|
||||
component={CustomFormatSettingsPage}
|
||||
component={CustomFormatSettingsConnector}
|
||||
/>
|
||||
|
||||
<Route
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import InteractiveImportAppState from 'App/State/InteractiveImportAppState';
|
||||
import MovieFilesAppState from './MovieFilesAppState';
|
||||
import MoviesAppState, { MovieIndexAppState } from './MoviesAppState';
|
||||
import ParseAppState from './ParseAppState';
|
||||
import QueueAppState from './QueueAppState';
|
||||
import SettingsAppState from './SettingsAppState';
|
||||
import TagsAppState from './TagsAppState';
|
||||
@@ -42,7 +41,6 @@ interface AppState {
|
||||
movieFiles: MovieFilesAppState;
|
||||
interactiveImport: InteractiveImportAppState;
|
||||
movieIndex: MovieIndexAppState;
|
||||
parse: ParseAppState;
|
||||
settings: SettingsAppState;
|
||||
movies: MoviesAppState;
|
||||
tags: TagsAppState;
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
import ModelBase from 'App/ModelBase';
|
||||
import { AppSectionItemState } from 'App/State/AppSectionState';
|
||||
import Language from 'Language/Language';
|
||||
import Movie from 'Movie/Movie';
|
||||
import { QualityModel } from 'Quality/Quality';
|
||||
import CustomFormat from 'typings/CustomFormat';
|
||||
|
||||
export interface ParsedMovieInfo {
|
||||
releaseTitle: string;
|
||||
originalTitle: string;
|
||||
movieTitle: string;
|
||||
movieTitles: string[];
|
||||
year: number;
|
||||
quality: QualityModel;
|
||||
languages: Language[];
|
||||
releaseHash: string;
|
||||
releaseGroup?: string;
|
||||
edition?: string;
|
||||
tmdbId?: number;
|
||||
imdbId?: string;
|
||||
}
|
||||
|
||||
export interface ParseModel extends ModelBase {
|
||||
title: string;
|
||||
parsedMovieInfo: ParsedMovieInfo;
|
||||
movie?: Movie;
|
||||
languages?: Language[];
|
||||
customFormats?: CustomFormat[];
|
||||
customFormatScore?: number;
|
||||
}
|
||||
|
||||
type ParseAppState = AppSectionItemState<ParseModel>;
|
||||
|
||||
export default ParseAppState;
|
||||
@@ -1,33 +1,14 @@
|
||||
import AppSectionState, {
|
||||
AppSectionDeleteState,
|
||||
AppSectionSaveState,
|
||||
AppSectionSchemaState,
|
||||
} from 'App/State/AppSectionState';
|
||||
import Language from 'Language/Language';
|
||||
import DownloadClient from 'typings/DownloadClient';
|
||||
import ImportList from 'typings/ImportList';
|
||||
import Indexer from 'typings/Indexer';
|
||||
import Notification from 'typings/Notification';
|
||||
import QualityProfile from 'typings/QualityProfile';
|
||||
import { UiSettings } from 'typings/UiSettings';
|
||||
|
||||
export interface DownloadClientAppState
|
||||
extends AppSectionState<DownloadClient>,
|
||||
AppSectionDeleteState,
|
||||
AppSectionSaveState {}
|
||||
|
||||
export interface ImportListAppState
|
||||
extends AppSectionState<ImportList>,
|
||||
AppSectionDeleteState,
|
||||
AppSectionSaveState {}
|
||||
|
||||
export interface IndexerAppState
|
||||
extends AppSectionState<Indexer>,
|
||||
AppSectionDeleteState,
|
||||
AppSectionSaveState {}
|
||||
|
||||
export interface NotificationAppState
|
||||
extends AppSectionState<Notification>,
|
||||
AppSectionDeleteState {}
|
||||
|
||||
export interface QualityProfilesAppState
|
||||
@@ -39,9 +20,6 @@ export type UiSettingsAppState = AppSectionState<UiSettings>;
|
||||
|
||||
interface SettingsAppState {
|
||||
downloadClients: DownloadClientAppState;
|
||||
importLists: ImportListAppState;
|
||||
indexers: IndexerAppState;
|
||||
notifications: NotificationAppState;
|
||||
language: LanguageSettingsAppState;
|
||||
uiSettings: UiSettingsAppState;
|
||||
qualityProfiles: QualityProfilesAppState;
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import Alert from 'Components/Alert';
|
||||
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
||||
import { kinds } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import AgendaConnector from './Agenda/AgendaConnector';
|
||||
import * as calendarViews from './calendarViews';
|
||||
@@ -33,9 +31,9 @@ class Calendar extends Component {
|
||||
|
||||
{
|
||||
!isFetching && !!error &&
|
||||
<Alert kind={kinds.DANGER}>
|
||||
<div>
|
||||
{translate('UnableToLoadTheCalendar')}
|
||||
</Alert>
|
||||
</div>
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
@@ -28,7 +28,7 @@ function createMapStateToProps() {
|
||||
qualityProfileId: collection.qualityProfileId,
|
||||
minimumAvailability: collection.minimumAvailability,
|
||||
searchForMovie: collection.searchOnAdd,
|
||||
tags: collection.tags || []
|
||||
tags: []
|
||||
};
|
||||
|
||||
const {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import _ from 'lodash';
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import Alert from 'Components/Alert';
|
||||
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
||||
import PageContent from 'Components/Page/PageContent';
|
||||
import PageContentBody from 'Components/Page/PageContentBody';
|
||||
@@ -10,7 +9,7 @@ import PageToolbar from 'Components/Page/Toolbar/PageToolbar';
|
||||
import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';
|
||||
import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
|
||||
import PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';
|
||||
import { align, icons, kinds, sortDirections } from 'Helpers/Props';
|
||||
import { align, icons, sortDirections } from 'Helpers/Props';
|
||||
import styles from 'Movie/Index/MovieIndex.css';
|
||||
import hasDifferentItemsOrOrder from 'Utilities/Object/hasDifferentItemsOrOrder';
|
||||
import translate from 'Utilities/String/translate';
|
||||
@@ -314,9 +313,9 @@ class Collection extends Component {
|
||||
|
||||
{
|
||||
!isFetching && !!error &&
|
||||
<Alert kind={kinds.DANGER}>
|
||||
<div>
|
||||
{translate('UnableToLoadCollections')}
|
||||
</Alert>
|
||||
</div>
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
@@ -2,12 +2,17 @@ import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
import { createSelector } from 'reselect';
|
||||
import createAllMoviesSelector from 'Store/Selectors/createAllMoviesSelector';
|
||||
import createCollectionSelector from 'Store/Selectors/createCollectionSelector';
|
||||
|
||||
function createMapStateToProps() {
|
||||
return createSelector(
|
||||
createCollectionSelector(),
|
||||
(collection) => {
|
||||
createAllMoviesSelector(),
|
||||
(
|
||||
collection,
|
||||
allMovies
|
||||
) => {
|
||||
// If a movie is deleted this selector may fire before the parent
|
||||
// selecors, which will result in an undefined movie, if that happens
|
||||
// we want to return early here and again in the render function to avoid
|
||||
@@ -17,11 +22,21 @@ function createMapStateToProps() {
|
||||
return {};
|
||||
}
|
||||
|
||||
const allGenres = collection.movies.flatMap((movie) => movie.genres);
|
||||
let allGenres = [];
|
||||
let libraryMovies = 0;
|
||||
|
||||
collection.movies.forEach((movie) => {
|
||||
allGenres = allGenres.concat(movie.genres);
|
||||
|
||||
if (allMovies.find((libraryMovie) => libraryMovie.tmdbId === movie.tmdbId)) {
|
||||
libraryMovies++;
|
||||
}
|
||||
});
|
||||
|
||||
return {
|
||||
...collection,
|
||||
genres: Array.from(new Set(allGenres)).slice(0, 3)
|
||||
genres: Array.from(new Set(allGenres)).slice(0, 3),
|
||||
missingMovies: collection.movies.length - libraryMovies
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
@@ -50,7 +50,6 @@ class EditCollectionModalContent extends Component {
|
||||
minimumAvailability,
|
||||
// Id,
|
||||
rootFolderPath,
|
||||
tags,
|
||||
searchOnAdd
|
||||
} = item;
|
||||
|
||||
@@ -127,17 +126,6 @@ class EditCollectionModalContent extends Component {
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup>
|
||||
<FormLabel>{translate('Tags')}</FormLabel>
|
||||
|
||||
<FormInputGroup
|
||||
type={inputTypes.TAG}
|
||||
name="tags"
|
||||
onChange={onInputChange}
|
||||
{...tags}
|
||||
/>
|
||||
</FormGroup>
|
||||
|
||||
<FormGroup>
|
||||
<FormLabel>{translate('SearchOnAdd')}</FormLabel>
|
||||
|
||||
|
||||
@@ -42,7 +42,6 @@ function createMapStateToProps() {
|
||||
qualityProfileId: collection.qualityProfileId,
|
||||
minimumAvailability: collection.minimumAvailability,
|
||||
rootFolderPath: collection.rootFolderPath,
|
||||
tags: collection.tags,
|
||||
searchOnAdd: collection.searchOnAdd
|
||||
};
|
||||
|
||||
|
||||
@@ -28,14 +28,6 @@ function CollectionSortMenu(props) {
|
||||
>
|
||||
{translate('Title')}
|
||||
</SortMenuItem>
|
||||
<SortMenuItem
|
||||
name="missingMovies"
|
||||
sortKey={sortKey}
|
||||
sortDirection={sortDirection}
|
||||
onPress={onSortSelect}
|
||||
>
|
||||
{translate('Missing')}
|
||||
</SortMenuItem>
|
||||
</MenuContent>
|
||||
</SortMenu>
|
||||
);
|
||||
|
||||
@@ -102,7 +102,7 @@ $hoverScale: 1.05;
|
||||
|
||||
position: relative;
|
||||
display: block;
|
||||
background-color: var(--black);
|
||||
background-color: var(--defaultColor);
|
||||
}
|
||||
|
||||
.monitorToggleButton {
|
||||
|
||||
@@ -258,7 +258,7 @@ CollectionOverviews.propTypes = {
|
||||
sortKey: PropTypes.string,
|
||||
overviewOptions: PropTypes.object.isRequired,
|
||||
jumpToCharacter: PropTypes.string,
|
||||
scrollTop: PropTypes.number,
|
||||
scrollTop: PropTypes.number.isRequired,
|
||||
scroller: PropTypes.instanceOf(Element).isRequired,
|
||||
showRelativeDates: PropTypes.bool.isRequired,
|
||||
shortDateFormat: PropTypes.string.isRequired,
|
||||
|
||||
@@ -14,24 +14,9 @@ import { inputTypes } from 'Helpers/Props';
|
||||
import translate from 'Utilities/String/translate';
|
||||
|
||||
const posterSizeOptions = [
|
||||
{
|
||||
key: 'small',
|
||||
get value() {
|
||||
return translate('Small');
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'medium',
|
||||
get value() {
|
||||
return translate('Medium');
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'large',
|
||||
get value() {
|
||||
return translate('Large');
|
||||
}
|
||||
}
|
||||
{ key: 'small', value: translate('Small') },
|
||||
{ key: 'medium', value: translate('Medium') },
|
||||
{ key: 'large', value: translate('Large') }
|
||||
];
|
||||
|
||||
class CollectionOverviewOptionsModalContent extends Component {
|
||||
|
||||
@@ -20,16 +20,12 @@ import styles from './FileBrowserModalContent.css';
|
||||
const columns = [
|
||||
{
|
||||
name: 'type',
|
||||
get label() {
|
||||
return translate('Type');
|
||||
},
|
||||
label: translate('Type'),
|
||||
isVisible: true
|
||||
},
|
||||
{
|
||||
name: 'name',
|
||||
get label() {
|
||||
return translate('Name');
|
||||
},
|
||||
label: translate('Name'),
|
||||
isVisible: true
|
||||
}
|
||||
];
|
||||
|
||||
@@ -10,42 +10,12 @@ import { NAME } from './FilterBuilderRowValue';
|
||||
import styles from './DateFilterBuilderRowValue.css';
|
||||
|
||||
const timeOptions = [
|
||||
{
|
||||
key: 'seconds',
|
||||
get value() {
|
||||
return translate('Seconds');
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'minutes',
|
||||
get value() {
|
||||
return translate('Minutes');
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'hours',
|
||||
get value() {
|
||||
return translate('Hours');
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'days',
|
||||
get value() {
|
||||
return translate('Days');
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'weeks',
|
||||
get value() {
|
||||
return translate('Weeks');
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'months',
|
||||
get value() {
|
||||
return translate('Months');
|
||||
}
|
||||
}
|
||||
{ key: 'seconds', value: translate('Seconds') },
|
||||
{ key: 'minutes', value: translate('Minutes') },
|
||||
{ key: 'hours', value: translate('Hours') },
|
||||
{ key: 'days', value: translate('Days') },
|
||||
{ key: 'weeks', value: translate('Weeks') },
|
||||
{ key: 'months', value: translate('Months') }
|
||||
];
|
||||
|
||||
function isInFilter(filterType) {
|
||||
|
||||
@@ -210,13 +210,11 @@ class FilterBuilderRow extends Component {
|
||||
const selectedFilterBuilderProp = this.selectedFilterBuilderProp;
|
||||
|
||||
const keyOptions = filterBuilderProps.map((availablePropFilter) => {
|
||||
const { name, label } = availablePropFilter;
|
||||
|
||||
return {
|
||||
key: name,
|
||||
value: typeof label === 'function' ? label() : label
|
||||
key: availablePropFilter.name,
|
||||
value: availablePropFilter.label
|
||||
};
|
||||
}).sort((a, b) => a.value.localeCompare(b.value));
|
||||
});
|
||||
|
||||
const ValueComponent = getRowValueConnector(selectedFilterBuilderProp);
|
||||
|
||||
|
||||
@@ -3,24 +3,9 @@ import translate from 'Utilities/String/translate';
|
||||
import FilterBuilderRowValue from './FilterBuilderRowValue';
|
||||
|
||||
const protocols = [
|
||||
{
|
||||
id: 'announced',
|
||||
get name() {
|
||||
return translate('Announced');
|
||||
}
|
||||
},
|
||||
{
|
||||
id: 'inCinemas',
|
||||
get name() {
|
||||
return translate('InCinemas');
|
||||
}
|
||||
},
|
||||
{
|
||||
id: 'released',
|
||||
get name() {
|
||||
return translate('Released');
|
||||
}
|
||||
}
|
||||
{ id: 'announced', name: translate('Announced') },
|
||||
{ id: 'inCinemas', name: translate('InCinemas') },
|
||||
{ id: 'released', name: translate('Released') }
|
||||
];
|
||||
|
||||
function MinimumAvailabilityFilterBuilderRowValue(props) {
|
||||
|
||||
@@ -4,30 +4,10 @@ import FilterBuilderRowValue from './FilterBuilderRowValue';
|
||||
|
||||
const protocols = [
|
||||
{ id: 'tba', name: 'TBA' },
|
||||
{
|
||||
id: 'announced',
|
||||
get name() {
|
||||
return translate('Announced');
|
||||
}
|
||||
},
|
||||
{
|
||||
id: 'inCinemas',
|
||||
get name() {
|
||||
return translate('InCinemas');
|
||||
}
|
||||
},
|
||||
{
|
||||
id: 'released',
|
||||
get name() {
|
||||
return translate('Released');
|
||||
}
|
||||
},
|
||||
{
|
||||
id: 'deleted',
|
||||
get name() {
|
||||
return translate('Deleted');
|
||||
}
|
||||
}
|
||||
{ id: 'announced', name: translate('Announced') },
|
||||
{ id: 'inCinemas', name: translate('InCinemas') },
|
||||
{ id: 'released', name: translate('Released') },
|
||||
{ id: 'deleted', name: translate('Deleted') }
|
||||
];
|
||||
|
||||
function ReleaseStatusFilterBuilderRowValue(props) {
|
||||
|
||||
@@ -4,24 +4,9 @@ import translate from 'Utilities/String/translate';
|
||||
import EnhancedSelectInput from './EnhancedSelectInput';
|
||||
|
||||
const availabilityOptions = [
|
||||
{
|
||||
key: 'announced',
|
||||
get value() {
|
||||
return translate('Announced');
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'inCinemas',
|
||||
get value() {
|
||||
return translate('InCinemas');
|
||||
}
|
||||
},
|
||||
{
|
||||
key: 'released',
|
||||
get value() {
|
||||
return translate('Released');
|
||||
}
|
||||
}
|
||||
{ key: 'announced', value: translate('Announced') },
|
||||
{ key: 'inCinemas', value: translate('InCinemas') },
|
||||
{ key: 'released', value: translate('Released') }
|
||||
];
|
||||
|
||||
function AvailabilitySelectInput(props) {
|
||||
@@ -35,7 +20,7 @@ function AvailabilitySelectInput(props) {
|
||||
if (includeNoChange) {
|
||||
values.unshift({
|
||||
key: 'noChange',
|
||||
value: translate('NoChange'),
|
||||
value: 'No Change',
|
||||
disabled: true
|
||||
});
|
||||
}
|
||||
|
||||
@@ -580,7 +580,7 @@ EnhancedSelectInput.propTypes = {
|
||||
className: PropTypes.string,
|
||||
disabledClassName: PropTypes.string,
|
||||
name: PropTypes.string.isRequired,
|
||||
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.arrayOf(PropTypes.string), PropTypes.arrayOf(PropTypes.number)]).isRequired,
|
||||
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.arrayOf(PropTypes.number)]).isRequired,
|
||||
values: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
isDisabled: PropTypes.bool.isRequired,
|
||||
isFetching: PropTypes.bool.isRequired,
|
||||
|
||||
@@ -265,8 +265,6 @@ FormInputGroup.propTypes = {
|
||||
values: PropTypes.arrayOf(PropTypes.any),
|
||||
type: PropTypes.string.isRequired,
|
||||
kind: PropTypes.oneOf(kinds.all),
|
||||
min: PropTypes.number,
|
||||
max: PropTypes.number,
|
||||
unit: PropTypes.string,
|
||||
buttons: PropTypes.oneOfType([PropTypes.node, PropTypes.arrayOf(PropTypes.node)]),
|
||||
helpText: PropTypes.string,
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React from 'react';
|
||||
import monitorOptions from 'Utilities/Movie/monitorOptions';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import SelectInput from './SelectInput';
|
||||
|
||||
function MovieMonitoredSelectInput(props) {
|
||||
@@ -15,7 +14,7 @@ function MovieMonitoredSelectInput(props) {
|
||||
if (includeNoChange) {
|
||||
values.unshift({
|
||||
key: 'noChange',
|
||||
value: translate('NoChange'),
|
||||
value: 'No Change',
|
||||
disabled: true
|
||||
});
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ function parseValue(props, value) {
|
||||
} = props;
|
||||
|
||||
if (value == null || value === '') {
|
||||
return null;
|
||||
return min;
|
||||
}
|
||||
|
||||
let newValue = isFloat ? parseFloat(value) : parseInt(value);
|
||||
|
||||
@@ -35,8 +35,6 @@ function getType({ type, selectOptionsProviderAction }) {
|
||||
return inputTypes.TEXT;
|
||||
case 'oAuth':
|
||||
return inputTypes.OAUTH;
|
||||
case 'rootFolder':
|
||||
return inputTypes.ROOT_FOLDER_SELECT;
|
||||
default:
|
||||
return inputTypes.TEXT;
|
||||
}
|
||||
@@ -65,7 +63,6 @@ function ProviderFieldFormGroup(props) {
|
||||
name,
|
||||
label,
|
||||
helpText,
|
||||
helpTextWarning,
|
||||
helpLink,
|
||||
placeholder,
|
||||
value,
|
||||
@@ -99,7 +96,6 @@ function ProviderFieldFormGroup(props) {
|
||||
name={name}
|
||||
label={label}
|
||||
helpText={helpText}
|
||||
helpTextWarning={helpTextWarning}
|
||||
helpLink={helpLink}
|
||||
placeholder={placeholder}
|
||||
value={value}
|
||||
@@ -126,7 +122,6 @@ ProviderFieldFormGroup.propTypes = {
|
||||
name: PropTypes.string.isRequired,
|
||||
label: PropTypes.string.isRequired,
|
||||
helpText: PropTypes.string,
|
||||
helpTextWarning: PropTypes.string,
|
||||
helpLink: PropTypes.string,
|
||||
placeholder: PropTypes.string,
|
||||
value: PropTypes.any,
|
||||
|
||||
@@ -5,7 +5,6 @@ import { connect } from 'react-redux';
|
||||
import { createSelector } from 'reselect';
|
||||
import createSortedSectionSelector from 'Store/Selectors/createSortedSectionSelector';
|
||||
import sortByName from 'Utilities/Array/sortByName';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import EnhancedSelectInput from './EnhancedSelectInput';
|
||||
|
||||
function createMapStateToProps() {
|
||||
@@ -25,7 +24,7 @@ function createMapStateToProps() {
|
||||
if (includeNoChange) {
|
||||
values.unshift({
|
||||
key: 'noChange',
|
||||
value: translate('NoChange'),
|
||||
value: 'No Change',
|
||||
disabled: includeNoChangeDisabled
|
||||
});
|
||||
}
|
||||
@@ -70,7 +69,7 @@ class QualityProfileSelectInputConnector extends Component {
|
||||
// Listeners
|
||||
|
||||
onChange = ({ name, value }) => {
|
||||
this.props.onChange({ name, value: value === 'noChange' ? value : parseInt(value) });
|
||||
this.props.onChange({ name, value: parseInt(value) });
|
||||
};
|
||||
|
||||
//
|
||||
|
||||
@@ -3,7 +3,6 @@ import React, { Component } from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
import { createSelector } from 'reselect';
|
||||
import { addRootFolder } from 'Store/Actions/rootFolderActions';
|
||||
import translate from 'Utilities/String/translate';
|
||||
import RootFolderSelectInput from './RootFolderSelectInput';
|
||||
|
||||
const ADD_NEW_KEY = 'addNew';
|
||||
@@ -28,7 +27,7 @@ function createMapStateToProps() {
|
||||
if (includeNoChange) {
|
||||
values.unshift({
|
||||
key: 'noChange',
|
||||
value: translate('NoChange'),
|
||||
value: 'No Change',
|
||||
isDisabled: includeNoChangeDisabled,
|
||||
isMissing: false
|
||||
});
|
||||
|
||||
@@ -61,7 +61,7 @@ class SelectInput extends Component {
|
||||
value={key}
|
||||
{...otherOptionProps}
|
||||
>
|
||||
{typeof optionValue === 'function' ? optionValue() : optionValue}
|
||||
{optionValue}
|
||||
</option>
|
||||
);
|
||||
})
|
||||
@@ -75,7 +75,7 @@ SelectInput.propTypes = {
|
||||
className: PropTypes.string,
|
||||
disabledClassName: PropTypes.string,
|
||||
name: PropTypes.string.isRequired,
|
||||
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number, PropTypes.func]).isRequired,
|
||||
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
|
||||
values: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
isDisabled: PropTypes.bool,
|
||||
hasError: PropTypes.bool,
|
||||
|
||||
@@ -75,18 +75,6 @@ class TagInput extends Component {
|
||||
//
|
||||
// Listeners
|
||||
|
||||
onTagEdit = ({ value, ...otherProps }) => {
|
||||
const currentValue = this.state.value;
|
||||
|
||||
if (currentValue && this.props.onTagReplace) {
|
||||
this.props.onTagReplace(otherProps, { name: currentValue });
|
||||
} else {
|
||||
this.props.onTagDelete(otherProps);
|
||||
}
|
||||
|
||||
this.setState({ value });
|
||||
};
|
||||
|
||||
onInputContainerPress = () => {
|
||||
this._autosuggestRef.input.focus();
|
||||
};
|
||||
@@ -200,7 +188,6 @@ class TagInput extends Component {
|
||||
const {
|
||||
tags,
|
||||
kind,
|
||||
canEdit,
|
||||
tagComponent,
|
||||
onTagDelete
|
||||
} = this.props;
|
||||
@@ -212,10 +199,8 @@ class TagInput extends Component {
|
||||
kind={kind}
|
||||
inputProps={inputProps}
|
||||
isFocused={this.state.isFocused}
|
||||
canEdit={canEdit}
|
||||
tagComponent={tagComponent}
|
||||
onTagDelete={onTagDelete}
|
||||
onTagEdit={this.onTagEdit}
|
||||
onInputContainerPress={this.onInputContainerPress}
|
||||
/>
|
||||
);
|
||||
@@ -238,7 +223,7 @@ class TagInput extends Component {
|
||||
<AutoSuggestInput
|
||||
{...otherProps}
|
||||
forwardedRef={this._setAutosuggestRef}
|
||||
className={className}
|
||||
className={styles.internalInput}
|
||||
inputContainerClassName={classNames(
|
||||
inputContainerClassName,
|
||||
isFocused && styles.isFocused
|
||||
@@ -273,13 +258,11 @@ TagInput.propTypes = {
|
||||
placeholder: PropTypes.string.isRequired,
|
||||
delimiters: PropTypes.arrayOf(PropTypes.string).isRequired,
|
||||
minQueryLength: PropTypes.number.isRequired,
|
||||
canEdit: PropTypes.bool,
|
||||
hasError: PropTypes.bool,
|
||||
hasWarning: PropTypes.bool,
|
||||
tagComponent: PropTypes.elementType.isRequired,
|
||||
onTagAdd: PropTypes.func.isRequired,
|
||||
onTagDelete: PropTypes.func.isRequired,
|
||||
onTagReplace: PropTypes.func
|
||||
onTagDelete: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
TagInput.defaultProps = {
|
||||
@@ -290,7 +273,6 @@ TagInput.defaultProps = {
|
||||
placeholder: '',
|
||||
delimiters: ['Tab', 'Enter', ' ', ','],
|
||||
minQueryLength: 1,
|
||||
canEdit: false,
|
||||
tagComponent: TagInputTag
|
||||
};
|
||||
|
||||
|
||||
@@ -138,7 +138,6 @@ class TagInputConnector extends Component {
|
||||
<TagInput
|
||||
onTagAdd={this.onTagAdd}
|
||||
onTagDelete={this.onTagDelete}
|
||||
onTagReplace={this.onTagReplace}
|
||||
{...this.props}
|
||||
/>
|
||||
);
|
||||
|
||||
@@ -28,10 +28,8 @@ class TagInputInput extends Component {
|
||||
tags,
|
||||
inputProps,
|
||||
kind,
|
||||
canEdit,
|
||||
tagComponent: TagComponent,
|
||||
onTagDelete,
|
||||
onTagEdit
|
||||
onTagDelete
|
||||
} = this.props;
|
||||
|
||||
return (
|
||||
@@ -48,10 +46,8 @@ class TagInputInput extends Component {
|
||||
index={index}
|
||||
tag={tag}
|
||||
kind={kind}
|
||||
canEdit={canEdit}
|
||||
isLastTag={index === tags.length - 1}
|
||||
onDelete={onTagDelete}
|
||||
onEdit={onTagEdit}
|
||||
/>
|
||||
);
|
||||
})
|
||||
@@ -70,10 +66,8 @@ TagInputInput.propTypes = {
|
||||
inputProps: PropTypes.object.isRequired,
|
||||
kind: PropTypes.oneOf(kinds.all).isRequired,
|
||||
isFocused: PropTypes.bool.isRequired,
|
||||
canEdit: PropTypes.bool.isRequired,
|
||||
tagComponent: PropTypes.elementType.isRequired,
|
||||
onTagDelete: PropTypes.func.isRequired,
|
||||
onTagEdit: PropTypes.func.isRequired,
|
||||
onInputContainerPress: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
|
||||
@@ -1,40 +1,5 @@
|
||||
.tag {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
max-width: 100%;
|
||||
composes: link from '~Components/Link/Link.css';
|
||||
|
||||
height: 31px;
|
||||
}
|
||||
|
||||
.link {
|
||||
composes: link from '~Components/Link/Link.css';
|
||||
|
||||
max-width: 100%;
|
||||
line-height: 1px;
|
||||
}
|
||||
|
||||
.linkWithEdit {
|
||||
composes: link from '~Components/Link/Link.css';
|
||||
|
||||
max-width: calc(100% - 9px - 4px - 2px);
|
||||
line-height: 1px;
|
||||
}
|
||||
|
||||
.editContainer {
|
||||
display: inline-block;
|
||||
margin-left: 4px;
|
||||
padding-left: 2px;
|
||||
border-left: 1px solid #eee;
|
||||
}
|
||||
|
||||
.editButton {
|
||||
composes: button from '~Components/Link/IconButton.css';
|
||||
|
||||
width: 9px;
|
||||
}
|
||||
|
||||
.label {
|
||||
composes: label from '~Components/Label.css';
|
||||
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
// This file is automatically generated.
|
||||
// Please do not change this file!
|
||||
interface CssExports {
|
||||
'editButton': string;
|
||||
'editContainer': string;
|
||||
'label': string;
|
||||
'link': string;
|
||||
'linkWithEdit': string;
|
||||
'tag': string;
|
||||
}
|
||||
export const cssExports: CssExports;
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React, { Component } from 'react';
|
||||
import Label from 'Components/Label';
|
||||
import IconButton from 'Components/Link/IconButton';
|
||||
import Link from 'Components/Link/Link';
|
||||
import { icons, kinds } from 'Helpers/Props';
|
||||
import { kinds } from 'Helpers/Props';
|
||||
import tagShape from 'Helpers/Props/Shapes/tagShape';
|
||||
import styles from './TagInputTag.css';
|
||||
|
||||
@@ -25,61 +24,24 @@ class TagInputTag extends Component {
|
||||
});
|
||||
};
|
||||
|
||||
onEdit = () => {
|
||||
const {
|
||||
index,
|
||||
tag,
|
||||
onEdit
|
||||
} = this.props;
|
||||
|
||||
onEdit({
|
||||
index,
|
||||
id: tag.id,
|
||||
value: tag.name
|
||||
});
|
||||
};
|
||||
|
||||
//
|
||||
// Render
|
||||
|
||||
render() {
|
||||
const {
|
||||
tag,
|
||||
kind,
|
||||
canEdit
|
||||
kind
|
||||
} = this.props;
|
||||
|
||||
return (
|
||||
<div
|
||||
<Link
|
||||
className={styles.tag}
|
||||
tabIndex={-1}
|
||||
onPress={this.onDelete}
|
||||
>
|
||||
<Label
|
||||
className={styles.label}
|
||||
kind={kind}
|
||||
>
|
||||
<Link
|
||||
className={canEdit ? styles.linkWithEdit : styles.link}
|
||||
tabIndex={-1}
|
||||
onPress={this.onDelete}
|
||||
>
|
||||
{tag.name}
|
||||
</Link>
|
||||
|
||||
{
|
||||
canEdit ?
|
||||
<div className={styles.editContainer}>
|
||||
<IconButton
|
||||
className={styles.editButton}
|
||||
name={icons.EDIT}
|
||||
size={9}
|
||||
onPress={this.onEdit}
|
||||
/>
|
||||
</div> :
|
||||
null
|
||||
}
|
||||
<Label kind={kind}>
|
||||
{tag.name}
|
||||
</Label>
|
||||
</div>
|
||||
</Link>
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -88,9 +50,7 @@ TagInputTag.propTypes = {
|
||||
index: PropTypes.number.isRequired,
|
||||
tag: PropTypes.shape(tagShape),
|
||||
kind: PropTypes.oneOf(kinds.all).isRequired,
|
||||
canEdit: PropTypes.bool.isRequired,
|
||||
onDelete: PropTypes.func.isRequired,
|
||||
onEdit: PropTypes.func.isRequired
|
||||
onDelete: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
export default TagInputTag;
|
||||
|
||||
@@ -71,20 +71,6 @@ class TextTagInputConnector extends Component {
|
||||
});
|
||||
};
|
||||
|
||||
onTagReplace = (tagToReplace, newTag) => {
|
||||
const {
|
||||
name,
|
||||
valueArray,
|
||||
onChange
|
||||
} = this.props;
|
||||
|
||||
const newValue = [...valueArray];
|
||||
newValue.splice(tagToReplace.index, 1);
|
||||
newValue.push(newTag.name.trim());
|
||||
|
||||
onChange({ name, value: newValue });
|
||||
};
|
||||
|
||||
//
|
||||
// Render
|
||||
|
||||
@@ -94,7 +80,6 @@ class TextTagInputConnector extends Component {
|
||||
tagList={[]}
|
||||
onTagAdd={this.onTagAdd}
|
||||
onTagDelete={this.onTagDelete}
|
||||
onTagReplace={this.onTagReplace}
|
||||
{...this.props}
|
||||
/>
|
||||
);
|
||||
|
||||
@@ -41,7 +41,7 @@ class Icon extends PureComponent {
|
||||
return (
|
||||
<span
|
||||
className={containerClassName}
|
||||
title={typeof title === 'function' ? title() : title}
|
||||
title={title}
|
||||
>
|
||||
{icon}
|
||||
</span>
|
||||
@@ -58,7 +58,7 @@ Icon.propTypes = {
|
||||
name: PropTypes.object.isRequired,
|
||||
kind: PropTypes.string.isRequired,
|
||||
size: PropTypes.number.isRequired,
|
||||
title: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),
|
||||
title: PropTypes.string,
|
||||
isSpinning: PropTypes.bool.isRequired,
|
||||
fixedWidth: PropTypes.bool.isRequired
|
||||
};
|
||||
|
||||
@@ -13,7 +13,7 @@ const messages = [
|
||||
'Loading humorous message... Please Wait',
|
||||
'I could\'ve been faster in Python',
|
||||
'Don\'t forget to rewind your movies',
|
||||
'Congratulations! You are the 1000th visitor.',
|
||||
'Congratulations! you are the 1000th visitor.',
|
||||
'HELP! I\'m being held hostage and forced to write these stupid lines!',
|
||||
'RE-calibrating the internet...',
|
||||
'I\'ll be here all week',
|
||||
|
||||
@@ -33,7 +33,7 @@ class FilterMenuContent extends Component {
|
||||
selectedFilterKey={selectedFilterKey}
|
||||
onPress={onFilterSelect}
|
||||
>
|
||||
{typeof filter.label === 'function' ? filter.label() : filter.label}
|
||||
{filter.label}
|
||||
</FilterMenuItem>
|
||||
);
|
||||
})
|
||||
|
||||
@@ -7,7 +7,6 @@ function ErrorPage(props) {
|
||||
const {
|
||||
version,
|
||||
isLocalStorageSupported,
|
||||
translationsError,
|
||||
moviesError,
|
||||
customFiltersError,
|
||||
tagsError,
|
||||
@@ -21,8 +20,6 @@ function ErrorPage(props) {
|
||||
|
||||
if (!isLocalStorageSupported) {
|
||||
errorMessage = 'Local Storage is not supported or disabled. A plugin or private browsing may have disabled it.';
|
||||
} else if (translationsError) {
|
||||
errorMessage = getErrorMessage(translationsError, 'Failed to load translations from API');
|
||||
} else if (moviesError) {
|
||||
errorMessage = getErrorMessage(moviesError, 'Failed to load movie from API');
|
||||
} else if (customFiltersError) {
|
||||
@@ -55,7 +52,6 @@ function ErrorPage(props) {
|
||||
ErrorPage.propTypes = {
|
||||
version: PropTypes.string.isRequired,
|
||||
isLocalStorageSupported: PropTypes.bool.isRequired,
|
||||
translationsError: PropTypes.object,
|
||||
moviesError: PropTypes.object,
|
||||
customFiltersError: PropTypes.object,
|
||||
tagsError: PropTypes.object,
|
||||
|
||||
@@ -19,8 +19,6 @@ function createCleanMovieSelector() {
|
||||
year,
|
||||
images,
|
||||
alternateTitles = [],
|
||||
tmdbId,
|
||||
imdbId,
|
||||
tags = []
|
||||
} = movie;
|
||||
|
||||
@@ -31,8 +29,6 @@ function createCleanMovieSelector() {
|
||||
year,
|
||||
images,
|
||||
alternateTitles,
|
||||
tmdbId,
|
||||
imdbId,
|
||||
firstCharacter: title.charAt(0).toLowerCase(),
|
||||
tags: tags.reduce((acc, id) => {
|
||||
const matchingTag = allTags.find((tag) => tag.id === id);
|
||||
|
||||
@@ -12,8 +12,6 @@ function MovieSearchResult(props) {
|
||||
year,
|
||||
images,
|
||||
alternateTitles,
|
||||
tmdbId,
|
||||
imdbId,
|
||||
tags
|
||||
} = props;
|
||||
|
||||
@@ -49,22 +47,6 @@ function MovieSearchResult(props) {
|
||||
null
|
||||
}
|
||||
|
||||
{
|
||||
match.key === 'tmdbId' && tmdbId ?
|
||||
<div className={styles.alternateTitle}>
|
||||
TmdbId: {tmdbId}
|
||||
</div> :
|
||||
null
|
||||
}
|
||||
|
||||
{
|
||||
match.key === 'imdbId' && imdbId ?
|
||||
<div className={styles.alternateTitle}>
|
||||
ImdbId: {imdbId}
|
||||
</div> :
|
||||
null
|
||||
}
|
||||
|
||||
{
|
||||
tag ?
|
||||
<div className={styles.tagContainer}>
|
||||
@@ -87,8 +69,6 @@ MovieSearchResult.propTypes = {
|
||||
year: PropTypes.number.isRequired,
|
||||
images: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
alternateTitles: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
tmdbId: PropTypes.number,
|
||||
imdbId: PropTypes.string,
|
||||
tags: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
match: PropTypes.object.isRequired
|
||||
};
|
||||
|
||||
@@ -9,8 +9,6 @@ const fuseOptions = {
|
||||
keys: [
|
||||
'title',
|
||||
'alternateTitles.title',
|
||||
'tmdbId',
|
||||
'imdbId',
|
||||
'tags.label'
|
||||
]
|
||||
};
|
||||
|
||||
@@ -3,7 +3,7 @@ import React, { Component } from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
import { withRouter } from 'react-router-dom';
|
||||
import { createSelector } from 'reselect';
|
||||
import { fetchTranslations, saveDimensions, setIsSidebarVisible } from 'Store/Actions/appActions';
|
||||
import { saveDimensions, setIsSidebarVisible } from 'Store/Actions/appActions';
|
||||
import { fetchCustomFilters } from 'Store/Actions/customFilterActions';
|
||||
import { fetchMovies } from 'Store/Actions/movieActions';
|
||||
import { fetchMovieCollections } from 'Store/Actions/movieCollectionActions';
|
||||
@@ -53,7 +53,6 @@ const selectIsPopulated = createSelector(
|
||||
(state) => state.settings.importLists.isPopulated,
|
||||
(state) => state.system.status.isPopulated,
|
||||
(state) => state.movieCollections.isPopulated,
|
||||
(state) => state.app.translations.isPopulated,
|
||||
(
|
||||
customFiltersIsPopulated,
|
||||
tagsIsPopulated,
|
||||
@@ -63,8 +62,7 @@ const selectIsPopulated = createSelector(
|
||||
indexerFlagsIsPopulated,
|
||||
importListsIsPopulated,
|
||||
systemStatusIsPopulated,
|
||||
movieCollectionsIsPopulated,
|
||||
translationsIsPopulated
|
||||
movieCollectionsIsPopulated
|
||||
) => {
|
||||
return (
|
||||
customFiltersIsPopulated &&
|
||||
@@ -75,8 +73,7 @@ const selectIsPopulated = createSelector(
|
||||
indexerFlagsIsPopulated &&
|
||||
importListsIsPopulated &&
|
||||
systemStatusIsPopulated &&
|
||||
movieCollectionsIsPopulated &&
|
||||
translationsIsPopulated
|
||||
movieCollectionsIsPopulated
|
||||
);
|
||||
}
|
||||
);
|
||||
@@ -91,7 +88,6 @@ const selectErrors = createSelector(
|
||||
(state) => state.settings.importLists.error,
|
||||
(state) => state.system.status.error,
|
||||
(state) => state.movieCollections.error,
|
||||
(state) => state.app.translations.error,
|
||||
(
|
||||
customFiltersError,
|
||||
tagsError,
|
||||
@@ -101,8 +97,7 @@ const selectErrors = createSelector(
|
||||
indexerFlagsError,
|
||||
importListsError,
|
||||
systemStatusError,
|
||||
movieCollectionsError,
|
||||
translationsError
|
||||
movieCollectionsError
|
||||
) => {
|
||||
const hasError = !!(
|
||||
customFiltersError ||
|
||||
@@ -113,8 +108,7 @@ const selectErrors = createSelector(
|
||||
indexerFlagsError ||
|
||||
importListsError ||
|
||||
systemStatusError ||
|
||||
movieCollectionsError ||
|
||||
translationsError
|
||||
movieCollectionsError
|
||||
);
|
||||
|
||||
return {
|
||||
@@ -127,8 +121,7 @@ const selectErrors = createSelector(
|
||||
indexerFlagsError,
|
||||
importListsError,
|
||||
systemStatusError,
|
||||
movieCollectionsError,
|
||||
translationsError
|
||||
movieCollectionsError
|
||||
};
|
||||
}
|
||||
);
|
||||
@@ -190,9 +183,6 @@ function createMapDispatchToProps(dispatch, props) {
|
||||
dispatchFetchStatus() {
|
||||
dispatch(fetchStatus());
|
||||
},
|
||||
dispatchFetchTranslations() {
|
||||
dispatch(fetchTranslations());
|
||||
},
|
||||
onResize(dimensions) {
|
||||
dispatch(saveDimensions(dimensions));
|
||||
},
|
||||
@@ -227,7 +217,6 @@ class PageConnector extends Component {
|
||||
this.props.dispatchFetchImportLists();
|
||||
this.props.dispatchFetchUISettings();
|
||||
this.props.dispatchFetchStatus();
|
||||
this.props.dispatchFetchTranslations();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -254,7 +243,6 @@ class PageConnector extends Component {
|
||||
dispatchFetchImportLists,
|
||||
dispatchFetchUISettings,
|
||||
dispatchFetchStatus,
|
||||
dispatchFetchTranslations,
|
||||
...otherProps
|
||||
} = this.props;
|
||||
|
||||
@@ -296,7 +284,6 @@ PageConnector.propTypes = {
|
||||
dispatchFetchImportLists: PropTypes.func.isRequired,
|
||||
dispatchFetchUISettings: PropTypes.func.isRequired,
|
||||
dispatchFetchStatus: PropTypes.func.isRequired,
|
||||
dispatchFetchTranslations: PropTypes.func.isRequired,
|
||||
onSidebarVisibleChange: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
|
||||
@@ -5,8 +5,8 @@ import { isLocked } from 'Utilities/scrollLock';
|
||||
import styles from './PageContentBody.css';
|
||||
|
||||
interface PageContentBodyProps {
|
||||
className?: string;
|
||||
innerClassName?: string;
|
||||
className: string;
|
||||
innerClassName: string;
|
||||
children: ReactNode;
|
||||
initialScrollTop?: number;
|
||||
onScroll?: (payload: OnScroll) => void;
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
import PropTypes from 'prop-types';
|
||||
import React from 'react';
|
||||
import Alert from 'Components/Alert';
|
||||
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
|
||||
import { kinds } from 'Helpers/Props';
|
||||
|
||||
function PageSectionContent(props) {
|
||||
const {
|
||||
@@ -19,7 +17,7 @@ function PageSectionContent(props) {
|
||||
);
|
||||
} else if (!isFetching && !!error) {
|
||||
return (
|
||||
<Alert kind={kinds.DANGER}>{errorMessage}</Alert>
|
||||
<div>{errorMessage}</div>
|
||||
);
|
||||
} else if (isPopulated && !error) {
|
||||
return (
|
||||
|
||||
@@ -21,34 +21,24 @@ const SIDEBAR_WIDTH = parseInt(dimensions.sidebarWidth);
|
||||
const links = [
|
||||
{
|
||||
iconName: icons.MOVIE_CONTINUING,
|
||||
get title() {
|
||||
return translate('Movies');
|
||||
},
|
||||
title: translate('Movies'),
|
||||
to: '/',
|
||||
alias: '/movies',
|
||||
children: [
|
||||
{
|
||||
get title() {
|
||||
return translate('AddNew');
|
||||
},
|
||||
title: translate('AddNew'),
|
||||
to: '/add/new'
|
||||
},
|
||||
{
|
||||
get title() {
|
||||
return translate('ImportLibrary');
|
||||
},
|
||||
title: translate('ImportLibrary'),
|
||||
to: '/add/import'
|
||||
},
|
||||
{
|
||||
get title() {
|
||||
return translate('Collections');
|
||||
},
|
||||
title: translate('Collections'),
|
||||
to: '/collections'
|
||||
},
|
||||
{
|
||||
get title() {
|
||||
return translate('Discover');
|
||||
},
|
||||
title: translate('Discover'),
|
||||
to: '/add/discover'
|
||||
}
|
||||
]
|
||||
@@ -56,36 +46,26 @@ const links = [
|
||||
|
||||
{
|
||||
iconName: icons.CALENDAR,
|
||||
get title() {
|
||||
return translate('Calendar');
|
||||
},
|
||||
title: translate('Calendar'),
|
||||
to: '/calendar'
|
||||
},
|
||||
|
||||
{
|
||||
iconName: icons.ACTIVITY,
|
||||
get title() {
|
||||
return translate('Activity');
|
||||
},
|
||||
title: translate('Activity'),
|
||||
to: '/activity/queue',
|
||||
children: [
|
||||
{
|
||||
get title() {
|
||||
return translate('Queue');
|
||||
},
|
||||
title: translate('Queue'),
|
||||
to: '/activity/queue',
|
||||
statusComponent: QueueStatusConnector
|
||||
},
|
||||
{
|
||||
get title() {
|
||||
return translate('History');
|
||||
},
|
||||
title: translate('History'),
|
||||
to: '/activity/history'
|
||||
},
|
||||
{
|
||||
get title() {
|
||||
return translate('Blocklist');
|
||||
},
|
||||
title: translate('Blocklist'),
|
||||
to: '/activity/blocklist'
|
||||
}
|
||||
]
|
||||
@@ -93,81 +73,55 @@ const links = [
|
||||
|
||||
{
|
||||
iconName: icons.SETTINGS,
|
||||
get title() {
|
||||
return translate('Settings');
|
||||
},
|
||||
title: translate('Settings'),
|
||||
to: '/settings',
|
||||
children: [
|
||||
{
|
||||
get title() {
|
||||
return translate('MediaManagement');
|
||||
},
|
||||
title: translate('MediaManagement'),
|
||||
to: '/settings/mediamanagement'
|
||||
},
|
||||
{
|
||||
get title() {
|
||||
return translate('Profiles');
|
||||
},
|
||||
title: translate('Profiles'),
|
||||
to: '/settings/profiles'
|
||||
},
|
||||
{
|
||||
get title() {
|
||||
return translate('Quality');
|
||||
},
|
||||
title: translate('Quality'),
|
||||
to: '/settings/quality'
|
||||
},
|
||||
{
|
||||
get title() {
|
||||
return translate('CustomFormats');
|
||||
},
|
||||
title: translate('CustomFormats'),
|
||||
to: '/settings/customformats'
|
||||
},
|
||||
{
|
||||
get title() {
|
||||
return translate('Indexers');
|
||||
},
|
||||
title: translate('Indexers'),
|
||||
to: '/settings/indexers'
|
||||
},
|
||||
{
|
||||
get title() {
|
||||
return translate('DownloadClients');
|
||||
},
|
||||
title: translate('DownloadClients'),
|
||||
to: '/settings/downloadclients'
|
||||
},
|
||||
{
|
||||
get title() {
|
||||
return translate('Lists');
|
||||
},
|
||||
title: translate('Lists'),
|
||||
to: '/settings/importlists'
|
||||
},
|
||||
{
|
||||
get title() {
|
||||
return translate('Connect');
|
||||
},
|
||||
title: translate('Connect'),
|
||||
to: '/settings/connect'
|
||||
},
|
||||
{
|
||||
get title() {
|
||||
return translate('Metadata');
|
||||
},
|
||||
title: translate('Metadata'),
|
||||
to: '/settings/metadata'
|
||||
},
|
||||
{
|
||||
get title() {
|
||||
return translate('Tags');
|
||||
},
|
||||
title: translate('Tags'),
|
||||
to: '/settings/tags'
|
||||
},
|
||||
{
|
||||
get title() {
|
||||
return translate('General');
|
||||
},
|
||||
title: translate('General'),
|
||||
to: '/settings/general'
|
||||
},
|
||||
{
|
||||
get title() {
|
||||
return translate('UI');
|
||||
},
|
||||
title: translate('UI'),
|
||||
to: '/settings/ui'
|
||||
}
|
||||
]
|
||||
@@ -175,46 +129,32 @@ const links = [
|
||||
|
||||
{
|
||||
iconName: icons.SYSTEM,
|
||||
get title() {
|
||||
return translate('System');
|
||||
},
|
||||
title: translate('System'),
|
||||
to: '/system/status',
|
||||
children: [
|
||||
{
|
||||
get title() {
|
||||
return translate('Status');
|
||||
},
|
||||
title: translate('Status'),
|
||||
to: '/system/status',
|
||||
statusComponent: HealthStatusConnector
|
||||
},
|
||||
{
|
||||
get title() {
|
||||
return translate('Tasks');
|
||||
},
|
||||
title: translate('Tasks'),
|
||||
to: '/system/tasks'
|
||||
},
|
||||
{
|
||||
get title() {
|
||||
return translate('Backup');
|
||||
},
|
||||
title: translate('Backup'),
|
||||
to: '/system/backup'
|
||||
},
|
||||
{
|
||||
get title() {
|
||||
return translate('Updates');
|
||||
},
|
||||
title: translate('Updates'),
|
||||
to: '/system/updates'
|
||||
},
|
||||
{
|
||||
get title() {
|
||||
return translate('Events');
|
||||
},
|
||||
title: translate('Events'),
|
||||
to: '/system/events'
|
||||
},
|
||||
{
|
||||
get title() {
|
||||
return translate('LogFiles');
|
||||
},
|
||||
title: translate('LogFiles'),
|
||||
to: '/system/logs/files'
|
||||
}
|
||||
]
|
||||
|
||||
@@ -16,46 +16,6 @@
|
||||
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
|
||||
color: var(--white);
|
||||
transition: width 0.6s ease;
|
||||
|
||||
&.default {
|
||||
background-color: var(--darkGray);
|
||||
}
|
||||
|
||||
&.primary {
|
||||
background-color: var(--primaryColor);
|
||||
}
|
||||
|
||||
&.danger {
|
||||
background-color: var(--dangerColor);
|
||||
|
||||
&:global(.colorImpaired) {
|
||||
background: repeating-linear-gradient(90deg, color(#f05050 shade(5%)), color(#f05050 shade(5%)) 5px, color(#f05050 shade(15%)) 5px, color(#f05050 shade(15%)) 10px);
|
||||
}
|
||||
}
|
||||
|
||||
&.success {
|
||||
background-color: var(--successColor);
|
||||
}
|
||||
|
||||
&.purple {
|
||||
background-color: var(--purple);
|
||||
}
|
||||
|
||||
&.warning {
|
||||
background-color: var(--warningColor);
|
||||
|
||||
&:global(.colorImpaired) {
|
||||
background: repeating-linear-gradient(45deg, #ffa500, #ffa500 5px, color(#ffa500 tint(15%)) 5px, color(#ffa500 tint(15%)) 10px);
|
||||
}
|
||||
}
|
||||
|
||||
&.info {
|
||||
background-color: var(--infoColor);
|
||||
}
|
||||
|
||||
&.queue {
|
||||
background-color: var(--queueColor);
|
||||
}
|
||||
}
|
||||
|
||||
.frontTextContainer {
|
||||
@@ -85,6 +45,42 @@
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.primary {
|
||||
background-color: var(--primaryColor);
|
||||
}
|
||||
|
||||
.danger {
|
||||
background-color: var(--dangerColor);
|
||||
|
||||
&:global(.colorImpaired) {
|
||||
background: repeating-linear-gradient(90deg, color(#f05050 shade(5%)), color(#f05050 shade(5%)) 5px, color(#f05050 shade(15%)) 5px, color(#f05050 shade(15%)) 10px);
|
||||
}
|
||||
}
|
||||
|
||||
.success {
|
||||
background-color: var(--successColor);
|
||||
}
|
||||
|
||||
.purple {
|
||||
background-color: var(--purple);
|
||||
}
|
||||
|
||||
.warning {
|
||||
background-color: var(--warningColor);
|
||||
|
||||
&:global(.colorImpaired) {
|
||||
background: repeating-linear-gradient(45deg, #ffa500, #ffa500 5px, color(#ffa500 tint(15%)) 5px, color(#ffa500 tint(15%)) 10px);
|
||||
}
|
||||
}
|
||||
|
||||
.info {
|
||||
background-color: var(--infoColor);
|
||||
}
|
||||
|
||||
.queue {
|
||||
background-color: var(--queueColor);
|
||||
}
|
||||
|
||||
.small {
|
||||
height: $progressBarSmallHeight;
|
||||
|
||||
|
||||
1
frontend/src/Components/ProgressBar.css.d.ts
vendored
@@ -5,7 +5,6 @@ interface CssExports {
|
||||
'backTextContainer': string;
|
||||
'container': string;
|
||||
'danger': string;
|
||||
'default': string;
|
||||
'frontText': string;
|
||||
'frontTextContainer': string;
|
||||
'info': string;
|
||||
|
||||
@@ -38,7 +38,7 @@ function ProgressBar(props) {
|
||||
{
|
||||
showText && width ?
|
||||
<div
|
||||
className={classNames(styles.backTextContainer, styles[kind])}
|
||||
className={styles.backTextContainer}
|
||||
style={{ width: actualWidth }}
|
||||
>
|
||||
<div className={styles.backText}>
|
||||
@@ -67,7 +67,7 @@ function ProgressBar(props) {
|
||||
{
|
||||
showText ?
|
||||
<div
|
||||
className={classNames(styles.frontTextContainer, styles[kind])}
|
||||
className={styles.frontTextContainer}
|
||||
style={{ width: progressPercent }}
|
||||
>
|
||||
<div
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
import React from 'react';
|
||||
|
||||
type PropertyFunction<T> = () => T;
|
||||
|
||||
interface Column {
|
||||
name: string;
|
||||
label: string | PropertyFunction<string> | React.ReactNode;
|
||||
label: string | React.ReactNode;
|
||||
columnLabel?: string;
|
||||
isSortable?: boolean;
|
||||
isVisible: boolean;
|
||||
|
||||
@@ -107,7 +107,7 @@ function Table(props) {
|
||||
{...getTableHeaderCellProps(otherProps)}
|
||||
{...column}
|
||||
>
|
||||
{typeof column.label === 'function' ? column.label() : column.label}
|
||||
{column.label}
|
||||
</TableHeaderCell>
|
||||
);
|
||||
})
|
||||
|
||||
@@ -30,7 +30,6 @@ class TableHeaderCell extends Component {
|
||||
const {
|
||||
className,
|
||||
name,
|
||||
label,
|
||||
columnLabel,
|
||||
isSortable,
|
||||
isVisible,
|
||||
@@ -54,8 +53,7 @@ class TableHeaderCell extends Component {
|
||||
{...otherProps}
|
||||
component="th"
|
||||
className={className}
|
||||
label={typeof label === 'function' ? label() : label}
|
||||
title={typeof columnLabel === 'function' ? columnLabel() : columnLabel}
|
||||
title={columnLabel}
|
||||
onPress={this.onPress}
|
||||
>
|
||||
{children}
|
||||
@@ -79,8 +77,7 @@ class TableHeaderCell extends Component {
|
||||
TableHeaderCell.propTypes = {
|
||||
className: PropTypes.string,
|
||||
name: PropTypes.string.isRequired,
|
||||
label: PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.node]),
|
||||
columnLabel: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),
|
||||
columnLabel: PropTypes.string,
|
||||
isSortable: PropTypes.bool,
|
||||
isVisible: PropTypes.bool,
|
||||
isModifiable: PropTypes.bool,
|
||||
|
||||