New: Lidarr to Readarr

pull/6/head
Qstick 4 years ago
parent 7359c2a9fa
commit 3b7eb01918

2
.gitattributes vendored

@ -4,7 +4,7 @@
# Explicitly set bash scripts to have unix endings # Explicitly set bash scripts to have unix endings
*.sh text eol=lf *.sh text eol=lf
distribution/debian/* text eol=lf distribution/debian/* text eol=lf
macOS/Lidarr text eol=lf macOS/Readarr text eol=lf
# Custom for Visual Studio # Custom for Visual Studio
*.cs diff=csharp *.cs diff=csharp

@ -2,7 +2,7 @@
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username patreon: # Replace with a single Patreon username
open_collective: lidarr open_collective: readarr
ko_fi: # Replace with a single Ko-fi username ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry

@ -18,7 +18,7 @@ Remove if not opening a bug report
### System Information/Logs ### System Information/Logs
**Lidarr Version:** **Readarr Version:**
**Operating System:** **Operating System:**

@ -24,7 +24,7 @@ If applicable, add screenshots to help explain your problem.
Link to debug logs. Link to debug logs.
**System info (please complete the following information):** **System info (please complete the following information):**
- Lidarr Version: [e.g. 0.3.0.430] - Readarr Version: [e.g. 0.3.0.430]
- Operating System [e.g. iOS] - Operating System [e.g. iOS]
- .net Framework (Windows) or mono (macOS/Linux) Version: [e.g. 4.5 or 5.12] - .net Framework (Windows) or mono (macOS/Linux) Version: [e.g. 4.5 or 5.12]

2
.gitignore vendored

@ -104,7 +104,7 @@ App_Data/*.ldf
_NCrunch_* _NCrunch_*
_TeamCity* _TeamCity*
# Lidarr # Readarr
config.xml config.xml
nzbdrone.log*txt nzbdrone.log*txt
UpdateLogs/ UpdateLogs/

@ -0,0 +1,5 @@
{
"files.associations": {
"*.yaml": "home-assistant"
}
}

@ -1,6 +1,6 @@
# Lidarr Individual Contributor License Agreement # # Readarr Individual Contributor License Agreement #
Thank you for your interest in contributing to Lidarr ("We" or "Us"). Thank you for your interest in contributing to Readarr ("We" or "Us").
This contributor agreement ("Agreement") documents the rights granted by contributors to Us. To make this document effective, please complete the form below. This is a legally binding document, so please read it carefully before agreeing to it. The Agreement may cover more than one software project managed by Us. This contributor agreement ("Agreement") documents the rights granted by contributors to Us. To make this document effective, please complete the form below. This is a legally binding document, so please read it carefully before agreeing to it. The Agreement may cover more than one software project managed by Us.
## 1. Definitions ## ## 1. Definitions ##

@ -1,6 +1,6 @@
# How to Contribute # # How to Contribute #
We're always looking for people to help make Lidarr even better, there are a number of ways to contribute. We're always looking for people to help make Readarr even better, there are a number of ways to contribute.
## Documentation ## ## Documentation ##
Setup guides, FAQ, the more information we have on the wiki the better. Setup guides, FAQ, the more information we have on the wiki the better.
@ -17,18 +17,18 @@ Setup guides, FAQ, the more information we have on the wiki the better.
### Getting started ### ### Getting started ###
1. Fork Lidarr 1. Fork Readarr
2. Clone the repository into your development machine. [*info*](https://help.github.com/articles/working-with-repositories) 2. Clone the repository into your development machine. [*info*](https://help.github.com/articles/working-with-repositories)
3. Grab the submodules `git submodule init && git submodule update` 3. Grab the submodules `git submodule init && git submodule update`
4. Install the required Node Packages `yarn install` 4. Install the required Node Packages `yarn install`
5. Start gulp to monitor your dev environment for any changes that need post processing using `yarn start` command. 5. Start gulp to monitor your dev environment for any changes that need post processing using `yarn start` command.
6. Build the project in Visual Studio, Setting startup project to `NZBDrone.Console` 6. Build the project in Visual Studio, Setting startup project to `NZBDrone.Console`
7. Debug the project in Visual Studio 7. Debug the project in Visual Studio
8. Open http://localhost:8686 8. Open http://localhost:8787
### Contributing Code ### ### Contributing Code ###
- If you're adding a new, already requested feature, please comment on [Github Issues](https://github.com/lidarr/Lidarr/issues "Github Issues") so work is not duplicated (If you want to add something not already on there, please talk to us first) - If you're adding a new, already requested feature, please comment on [Github Issues](https://github.com/readarr/Readarr/issues "Github Issues") so work is not duplicated (If you want to add something not already on there, please talk to us first)
- Rebase from Lidarr's develop branch, don't merge - Rebase from Readarr's develop branch, don't merge
- Make meaningful commits, or squash them - Make meaningful commits, or squash them
- Feel free to make a pull request before work is complete, this will let us see where its at and make comments/suggest improvements - Feel free to make a pull request before work is complete, this will let us see where its at and make comments/suggest improvements
- Reach out to us on the discord if you have any questions - Reach out to us on the discord if you have any questions

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 54 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 54 KiB

@ -1,12 +1,12 @@
# Lidarr # Readarr
[![Build Status](https://dev.azure.com/Lidarr/Lidarr/_apis/build/status/lidarr.Lidarr?branchName=develop)](https://dev.azure.com/Lidarr/Lidarr/_build/latest?definitionId=1&branchName=develop) [![Build Status](https://dev.azure.com/Readarr/Readarr/_apis/build/status/readarr.Readarr?branchName=develop)](https://dev.azure.com/Readarr/Readarr/_build/latest?definitionId=1&branchName=develop)
[![BrowserStack Status](https://automate.browserstack.com/badge.svg?badge_key=Z1I4SVZOMitOdENIMHpkMlN3djJiRVJkTzBpdUJ5Q2ZtWVhnYTFvYS9qcz0tLTM5THJZRkVCZlk0blp5cXFBK1BDYWc9PQ==--67f41b00af03ab78148d3d711f22ca42ab348a52)](https://automate.browserstack.com/public-build/Z1I4SVZOMitOdENIMHpkMlN3djJiRVJkTzBpdUJ5Q2ZtWVhnYTFvYS9qcz0tLTM5THJZRkVCZlk0blp5cXFBK1BDYWc9PQ==--67f41b00af03ab78148d3d711f22ca42ab348a52) [![BrowserStack Status](https://automate.browserstack.com/badge.svg?badge_key=Z1I4SVZOMitOdENIMHpkMlN3djJiRVJkTzBpdUJ5Q2ZtWVhnYTFvYS9qcz0tLTM5THJZRkVCZlk0blp5cXFBK1BDYWc9PQ==--67f41b00af03ab78148d3d711f22ca42ab348a52)](https://automate.browserstack.com/public-build/Z1I4SVZOMitOdENIMHpkMlN3djJiRVJkTzBpdUJ5Q2ZtWVhnYTFvYS9qcz0tLTM5THJZRkVCZlk0blp5cXFBK1BDYWc9PQ==--67f41b00af03ab78148d3d711f22ca42ab348a52)
[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/lidarr.svg)](https://github.com/lidarr/Lidarr/wiki/Docker) [![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/readarr.svg)](https://github.com/readarr/Readarr/wiki/Docker)
![Github Downloads](https://img.shields.io/github/downloads/lidarr/lidarr/total.svg) ![Github Downloads](https://img.shields.io/github/downloads/readarr/readarr/total.svg)
[![Backers on Open Collective](https://opencollective.com/lidarr/backers/badge.svg)](#backers) [![Sponsors on Open Collective](https://opencollective.com/lidarr/sponsors/badge.svg)](#sponsors) [![Backers on Open Collective](https://opencollective.com/readarr/backers/badge.svg)](#backers) [![Sponsors on Open Collective](https://opencollective.com/readarr/sponsors/badge.svg)](#sponsors)
Lidarr is a music collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new tracks from your favorite artists and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available. Readarr is a music collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new tracks from your favorite artists and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.
## Major Features Include: ## Major Features Include:
@ -24,42 +24,42 @@ Lidarr is a music collection manager for Usenet and BitTorrent users. It can mon
## Feature Requests ## Feature Requests
[![Feature Requests](http://feathub.com/lidarr/Lidarr?format=svg)](http://feathub.com/lidarr/Lidarr) [![Feature Requests](http://feathub.com/readarr/Readarr?format=svg)](http://feathub.com/readarr/Readarr)
## Support ## Support
[![Discord](https://img.shields.io/badge/discord-chat-7289DA.svg?maxAge=60)](https://discord.gg/8Y7rDc9) [![Discord](https://img.shields.io/badge/discord-chat-7289DA.svg?maxAge=60)](https://discord.gg/8Y7rDc9)
[![Reddit](https://img.shields.io/badge/reddit-discussion-FF4500.svg?maxAge=60)](https://www.reddit.com/r/lidarr) [![Reddit](https://img.shields.io/badge/reddit-discussion-FF4500.svg?maxAge=60)](https://www.reddit.com/r/readarr)
[![GitHub](https://img.shields.io/badge/github-issues-red.svg?maxAge=60)](https://github.com/Lidarr/Lidarr/issues) [![GitHub](https://img.shields.io/badge/github-issues-red.svg?maxAge=60)](https://github.com/Readarr/Readarr/issues)
[![GitHub Wiki](https://img.shields.io/badge/github-wiki-181717.svg?maxAge=60)](https://github.com/Lidarr/Lidarr/wiki) [![GitHub Wiki](https://img.shields.io/badge/github-wiki-181717.svg?maxAge=60)](https://github.com/Readarr/Readarr/wiki)
## Contributors ## Contributors
This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)]. This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
<a href="https://github.com/lidarr/Lidarr/graphs/contributors"><img src="https://opencollective.com/lidarr/contributors.svg?width=890&button=false" /></a> <a href="https://github.com/readarr/Readarr/graphs/contributors"><img src="https://opencollective.com/readarr/contributors.svg?width=890&button=false" /></a>
## Backers ## Backers
Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/lidarr#backer)] Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/readarr#backer)]
<a href="https://opencollective.com/lidarr#backers" target="_blank"><img src="https://opencollective.com/lidarr/backers.svg?width=890"></a> <a href="https://opencollective.com/readarr#backers" target="_blank"><img src="https://opencollective.com/readarr/backers.svg?width=890"></a>
## Sponsors ## Sponsors
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/lidarr#sponsor)] Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/readarr#sponsor)]
<a href="https://opencollective.com/lidarr/sponsor/0/website" target="_blank"><img src="https://opencollective.com/lidarr/sponsor/0/avatar.svg"></a> <a href="https://opencollective.com/readarr/sponsor/0/website" target="_blank"><img src="https://opencollective.com/readarr/sponsor/0/avatar.svg"></a>
<a href="https://opencollective.com/lidarr/sponsor/1/website" target="_blank"><img src="https://opencollective.com/lidarr/sponsor/1/avatar.svg"></a> <a href="https://opencollective.com/readarr/sponsor/1/website" target="_blank"><img src="https://opencollective.com/readarr/sponsor/1/avatar.svg"></a>
<a href="https://opencollective.com/lidarr/sponsor/2/website" target="_blank"><img src="https://opencollective.com/lidarr/sponsor/2/avatar.svg"></a> <a href="https://opencollective.com/readarr/sponsor/2/website" target="_blank"><img src="https://opencollective.com/readarr/sponsor/2/avatar.svg"></a>
<a href="https://opencollective.com/lidarr/sponsor/3/website" target="_blank"><img src="https://opencollective.com/lidarr/sponsor/3/avatar.svg"></a> <a href="https://opencollective.com/readarr/sponsor/3/website" target="_blank"><img src="https://opencollective.com/readarr/sponsor/3/avatar.svg"></a>
<a href="https://opencollective.com/lidarr/sponsor/4/website" target="_blank"><img src="https://opencollective.com/lidarr/sponsor/4/avatar.svg"></a> <a href="https://opencollective.com/readarr/sponsor/4/website" target="_blank"><img src="https://opencollective.com/readarr/sponsor/4/avatar.svg"></a>
<a href="https://opencollective.com/lidarr/sponsor/5/website" target="_blank"><img src="https://opencollective.com/lidarr/sponsor/5/avatar.svg"></a> <a href="https://opencollective.com/readarr/sponsor/5/website" target="_blank"><img src="https://opencollective.com/readarr/sponsor/5/avatar.svg"></a>
<a href="https://opencollective.com/lidarr/sponsor/6/website" target="_blank"><img src="https://opencollective.com/lidarr/sponsor/6/avatar.svg"></a> <a href="https://opencollective.com/readarr/sponsor/6/website" target="_blank"><img src="https://opencollective.com/readarr/sponsor/6/avatar.svg"></a>
<a href="https://opencollective.com/lidarr/sponsor/7/website" target="_blank"><img src="https://opencollective.com/lidarr/sponsor/7/avatar.svg"></a> <a href="https://opencollective.com/readarr/sponsor/7/website" target="_blank"><img src="https://opencollective.com/readarr/sponsor/7/avatar.svg"></a>
<a href="https://opencollective.com/lidarr/sponsor/8/website" target="_blank"><img src="https://opencollective.com/lidarr/sponsor/8/avatar.svg"></a> <a href="https://opencollective.com/readarr/sponsor/8/website" target="_blank"><img src="https://opencollective.com/readarr/sponsor/8/avatar.svg"></a>
<a href="https://opencollective.com/lidarr/sponsor/9/website" target="_blank"><img src="https://opencollective.com/lidarr/sponsor/9/avatar.svg"></a> <a href="https://opencollective.com/readarr/sponsor/9/website" target="_blank"><img src="https://opencollective.com/readarr/sponsor/9/avatar.svg"></a>
### License ### License

@ -1,3 +0,0 @@
skip_commits:
files:
- '**/**'

@ -7,10 +7,10 @@ variables:
outputFolder: './_output' outputFolder: './_output'
artifactsFolder: './_artifacts' artifactsFolder: './_artifacts'
testsFolder: './_tests' testsFolder: './_tests'
majorVersion: '0.7.1' majorVersion: '0.1.0'
minorVersion: $[counter('minorVersion', 1076)] minorVersion: $[counter('minorVersion', 1)]
lidarrVersion: '$(majorVersion).$(minorVersion)' readarrVersion: '$(majorVersion).$(minorVersion)'
buildName: '$(Build.SourceBranchName).$(lidarrVersion)' buildName: '$(Build.SourceBranchName).$(readarrVersion)'
sentryOrg: 'radarr' sentryOrg: 'radarr'
dotnetVersion: '3.1.102' dotnetVersion: '3.1.102'
@ -45,7 +45,7 @@ stages:
vmImage: $(imageName) vmImage: $(imageName)
steps: steps:
# Set the build name properly. The 'name' property won't recursively expand so hack here: # Set the build name properly. The 'name' property won't recursively expand so hack here:
- powershell: Write-Host "##vso[build.updatebuildnumber]$($env:LIDARRVERSION)" - powershell: Write-Host "##vso[build.updatebuildnumber]$($env:READARRVERSION)"
displayName: Set Build Name displayName: Set Build Name
- checkout: self - checkout: self
submodules: true submodules: true
@ -55,7 +55,7 @@ stages:
inputs: inputs:
version: $(dotnetVersion) version: $(dotnetVersion)
- bash: ./build.sh --backend - bash: ./build.sh --backend
displayName: Build Lidarr Backend displayName: Build Readarr Backend
- bash: | - bash: |
find ${OUTPUTFOLDER} -type f ! -path "*/publish/*" -exec rm -rf {} \; find ${OUTPUTFOLDER} -type f ! -path "*/publish/*" -exec rm -rf {} \;
find ${OUTPUTFOLDER} -depth -empty -type d -exec rm -r "{}" \; find ${OUTPUTFOLDER} -depth -empty -type d -exec rm -r "{}" \;
@ -112,7 +112,7 @@ stages:
submodules: true submodules: true
fetchDepth: 1 fetchDepth: 1
- bash: ./build.sh --frontend - bash: ./build.sh --frontend
displayName: Build Lidarr Frontend displayName: Build Readarr Frontend
env: env:
FORCE_COLOR: 0 FORCE_COLOR: 0
- publish: $(outputFolder) - publish: $(outputFolder)
@ -147,8 +147,8 @@ stages:
- bash: ./build.sh --packages - bash: ./build.sh --packages
displayName: Create Packages displayName: Create Packages
- bash: | - bash: |
setup/inno/ISCC.exe setup/lidarr.iss //DFramework=netcoreapp3.1 setup/inno/ISCC.exe setup/readarr.iss //DFramework=netcoreapp3.1
cp setup/output/Lidarr.*windows.netcoreapp3.1.exe ${BUILD_ARTIFACTSTAGINGDIRECTORY}/Lidarr.${BUILDNAME}.windows-core-x64-installer.exe cp setup/output/Readarr.*windows.netcoreapp3.1.exe ${BUILD_ARTIFACTSTAGINGDIRECTORY}/Readarr.${BUILDNAME}.windows-core-x64-installer.exe
displayName: Create .NET Core Windows installer displayName: Create .NET Core Windows installer
- publish: $(Build.ArtifactStagingDirectory) - publish: $(Build.ArtifactStagingDirectory)
artifact: 'WindowsInstaller' artifact: 'WindowsInstaller'
@ -182,27 +182,27 @@ stages:
displayName: Create Packages displayName: Create Packages
- bash: | - bash: |
find . -name "fpcalc" -exec chmod a+x {} \; find . -name "fpcalc" -exec chmod a+x {} \;
find . -name "Lidarr" -exec chmod a+x {} \; find . -name "Readarr" -exec chmod a+x {} \;
find . -name "Lidarr.Update" -exec chmod a+x {} \; find . -name "Readarr.Update" -exec chmod a+x {} \;
displayName: Set executable bits displayName: Set executable bits
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create Windows Core zip displayName: Create Windows Core zip
inputs: inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Lidarr.$(buildName).windows-core-x64.zip' archiveFile: '$(Build.ArtifactStagingDirectory)/Readarr.$(buildName).windows-core-x64.zip'
archiveType: 'zip' archiveType: 'zip'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/windows/netcoreapp3.1 rootFolderOrFile: $(artifactsFolder)/windows/netcoreapp3.1
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create MacOS Core app displayName: Create MacOS Core app
inputs: inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Lidarr.$(buildName).osx-app-core-x64.zip' archiveFile: '$(Build.ArtifactStagingDirectory)/Readarr.$(buildName).osx-app-core-x64.zip'
archiveType: 'zip' archiveType: 'zip'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/macos-app/netcoreapp3.1 rootFolderOrFile: $(artifactsFolder)/macos-app/netcoreapp3.1
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create MacOS Core tar displayName: Create MacOS Core tar
inputs: inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Lidarr.$(buildName).osx-core-x64.tar.gz' archiveFile: '$(Build.ArtifactStagingDirectory)/Readarr.$(buildName).osx-core-x64.tar.gz'
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
@ -210,7 +210,7 @@ stages:
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create Linux Mono tar displayName: Create Linux Mono tar
inputs: inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Lidarr.$(buildName).linux.tar.gz' archiveFile: '$(Build.ArtifactStagingDirectory)/Readarr.$(buildName).linux.tar.gz'
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
@ -218,7 +218,7 @@ stages:
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create Linux Core tar displayName: Create Linux Core tar
inputs: inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Lidarr.$(buildName).linux-core-x64.tar.gz' archiveFile: '$(Build.ArtifactStagingDirectory)/Readarr.$(buildName).linux-core-x64.tar.gz'
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
@ -226,7 +226,7 @@ stages:
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create ARM32 Core tar displayName: Create ARM32 Core tar
inputs: inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Lidarr.$(buildName).linux-core-arm.tar.gz' archiveFile: '$(Build.ArtifactStagingDirectory)/Readarr.$(buildName).linux-core-arm.tar.gz'
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
@ -234,7 +234,7 @@ stages:
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create Linux Core tar displayName: Create Linux Core tar
inputs: inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Lidarr.$(buildName).linux-core-arm64.tar.gz' archiveFile: '$(Build.ArtifactStagingDirectory)/Readarr.$(buildName).linux-core-arm64.tar.gz'
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
@ -245,9 +245,9 @@ stages:
- bash: | - bash: |
echo "Uploading source maps to sentry" echo "Uploading source maps to sentry"
curl -sL https://sentry.io/get-cli/ | bash curl -sL https://sentry.io/get-cli/ | bash
RELEASENAME="${LIDARRVERSION}-${BUILD_SOURCEBRANCHNAME}" RELEASENAME="${READARRVERSION}-${BUILD_SOURCEBRANCHNAME}"
sentry-cli releases new --finalize -p lidarr -p lidarr-ui -p lidarr-update "${RELEASENAME}" sentry-cli releases new --finalize -p readarr -p readarr-ui -p readarr-update "${RELEASENAME}"
sentry-cli releases -p lidarr-ui files "${RELEASENAME}" upload-sourcemaps _output/UI/ --rewrite sentry-cli releases -p readarr-ui files "${RELEASENAME}" upload-sourcemaps _output/UI/ --rewrite
sentry-cli releases set-commits --auto "${RELEASENAME}" sentry-cli releases set-commits --auto "${RELEASENAME}"
if [[ ${BUILD_SOURCEBRANCH} == "refs/heads/develop" ]]; then if [[ ${BUILD_SOURCEBRANCH} == "refs/heads/develop" ]]; then
sentry-cli releases deploys "${RELEASENAME}" new -e nightly sentry-cli releases deploys "${RELEASENAME}" new -e nightly
@ -287,7 +287,7 @@ stages:
osName: 'Linux' osName: 'Linux'
testName: 'LinuxCore' testName: 'LinuxCore'
imageName: 'ubuntu-18.04' imageName: 'ubuntu-18.04'
pattern: 'Lidarr.**.linux-core-x64.tar.gz' pattern: 'Readarr.**.linux-core-x64.tar.gz'
pool: pool:
vmImage: $(imageName) vmImage: $(imageName)
@ -322,7 +322,7 @@ stages:
chmod a+x _tests/fpcalc chmod a+x _tests/fpcalc
displayName: Set Mono Version and make fpcalc Executable displayName: Set Mono Version and make fpcalc Executable
condition: and(succeeded(), eq(variables['osName'], 'Mac')) condition: and(succeeded(), eq(variables['osName'], 'Mac'))
- bash: find ${TESTSFOLDER} -name "Lidarr.Test.Dummy" -exec chmod a+x {} \; - bash: find ${TESTSFOLDER} -name "Readarr.Test.Dummy" -exec chmod a+x {} \;
displayName: Make Test Dummy Executable displayName: Make Test Dummy Executable
condition: and(succeeded(), ne(variables['osName'], 'Windows')) condition: and(succeeded(), ne(variables['osName'], 'Windows'))
- task: Bash@3 - task: Bash@3
@ -347,16 +347,16 @@ stages:
matrix: matrix:
mono508: mono508:
testName: 'Mono 5.8' testName: 'Mono 5.8'
containerImage: lidarr/testimages:mono-5.8 containerImage: readarr/testimages:mono-5.8
mono520: mono520:
testName: 'Mono 5.20' testName: 'Mono 5.20'
containerImage: lidarr/testimages:mono-5.20 containerImage: readarr/testimages:mono-5.20
mono608: mono608:
testName: 'Mono 6.8' testName: 'Mono 6.8'
containerImage: lidarr/testimages:mono-6.8 containerImage: readarr/testimages:mono-6.8
mono610: mono610:
testName: 'Mono 6.10' testName: 'Mono 6.10'
containerImage: lidarr/testimages:mono-6.10 containerImage: readarr/testimages:mono-6.10
pool: pool:
vmImage: 'ubuntu-18.04' vmImage: 'ubuntu-18.04'
@ -406,17 +406,17 @@ stages:
osName: 'Mac' osName: 'Mac'
testName: 'MacCore' testName: 'MacCore'
imageName: 'macos-10.14' imageName: 'macos-10.14'
pattern: 'Lidarr.**.osx-core-x64.tar.gz' pattern: 'Readarr.**.osx-core-x64.tar.gz'
WindowsCore: WindowsCore:
osName: 'Windows' osName: 'Windows'
testName: 'WindowsCore' testName: 'WindowsCore'
imageName: 'windows-2019' imageName: 'windows-2019'
pattern: 'Lidarr.**.windows-core-x64.zip' pattern: 'Readarr.**.windows-core-x64.zip'
LinuxCore: LinuxCore:
osName: 'Linux' osName: 'Linux'
testName: 'LinuxCore' testName: 'LinuxCore'
imageName: 'ubuntu-18.04' imageName: 'ubuntu-18.04'
pattern: 'Lidarr.**.linux-core-x64.tar.gz' pattern: 'Readarr.**.linux-core-x64.tar.gz'
pool: pool:
vmImage: $(imageName) vmImage: $(imageName)
@ -455,7 +455,7 @@ stages:
displayName: Extract Package displayName: Extract Package
- bash: | - bash: |
mkdir -p ./bin/ mkdir -p ./bin/
cp -r -v ${BUILD_ARTIFACTSTAGINGDIRECTORY}/bin/Lidarr/. ./bin/ cp -r -v ${BUILD_ARTIFACTSTAGINGDIRECTORY}/bin/Readarr/. ./bin/
displayName: Move Package Contents displayName: Move Package Contents
- task: Bash@3 - task: Bash@3
displayName: Run Integration Tests displayName: Run Integration Tests
@ -477,19 +477,19 @@ stages:
matrix: matrix:
mono508: mono508:
testName: 'Mono 5.8' testName: 'Mono 5.8'
containerImage: lidarr/testimages:mono-5.8 containerImage: readarr/testimages:mono-5.8
mono520: mono520:
testName: 'Mono 5.20' testName: 'Mono 5.20'
containerImage: lidarr/testimages:mono-5.20 containerImage: readarr/testimages:mono-5.20
mono608: mono608:
testName: 'Mono 6.8' testName: 'Mono 6.8'
containerImage: lidarr/testimages:mono-6.8 containerImage: readarr/testimages:mono-6.8
mono610: mono610:
testName: 'Mono 6.10' testName: 'Mono 6.10'
containerImage: lidarr/testimages:mono-6.10 containerImage: readarr/testimages:mono-6.10
variables: variables:
pattern: 'Lidarr.**.linux.tar.gz' pattern: 'Readarr.**.linux.tar.gz'
pool: pool:
vmImage: 'ubuntu-18.04' vmImage: 'ubuntu-18.04'
@ -526,7 +526,7 @@ stages:
displayName: Extract Package displayName: Extract Package
- bash: | - bash: |
mkdir -p ./bin/ mkdir -p ./bin/
cp -r -v ${BUILD_ARTIFACTSTAGINGDIRECTORY}/bin/Lidarr/. ./bin/ cp -r -v ${BUILD_ARTIFACTSTAGINGDIRECTORY}/bin/Readarr/. ./bin/
displayName: Move Package Contents displayName: Move Package Contents
- task: Bash@3 - task: Bash@3
displayName: Run Integration Tests displayName: Run Integration Tests
@ -553,17 +553,17 @@ stages:
Linux: Linux:
osName: 'Linux' osName: 'Linux'
imageName: 'ubuntu-18.04' imageName: 'ubuntu-18.04'
pattern: 'Lidarr.**.linux-core-x64.tar.gz' pattern: 'Readarr.**.linux-core-x64.tar.gz'
failBuild: true failBuild: true
Mac: Mac:
osName: 'Mac' osName: 'Mac'
imageName: 'macos-10.14' # Fails due to firefox not being installed on image imageName: 'macos-10.14' # Fails due to firefox not being installed on image
pattern: 'Lidarr.**.osx-core-x64.tar.gz' pattern: 'Readarr.**.osx-core-x64.tar.gz'
failBuild: false failBuild: false
Windows: Windows:
osName: 'Windows' osName: 'Windows'
imageName: 'windows-2019' imageName: 'windows-2019'
pattern: 'Lidarr.**.windows-core-x64.zip' pattern: 'Readarr.**.windows-core-x64.zip'
failBuild: true failBuild: true
pool: pool:
@ -595,7 +595,7 @@ stages:
displayName: Extract Package displayName: Extract Package
- bash: | - bash: |
mkdir -p ./bin/ mkdir -p ./bin/
cp -r -v ${BUILD_ARTIFACTSTAGINGDIRECTORY}/bin/Lidarr/. ./bin/ cp -r -v ${BUILD_ARTIFACTSTAGINGDIRECTORY}/bin/Readarr/. ./bin/
displayName: Move Package Contents displayName: Move Package Contents
- bash: | - bash: |
if [[ $OSNAME == "Mac" ]]; then if [[ $OSNAME == "Mac" ]]; then
@ -652,7 +652,7 @@ stages:
submodules: true submodules: true
fetchDepth: 1 fetchDepth: 1
- bash: ./build.sh --lint - bash: ./build.sh --lint
displayName: Lint Lidarr Frontend displayName: Lint Readarr Frontend
env: env:
FORCE_COLOR: 0 FORCE_COLOR: 0
@ -667,12 +667,12 @@ stages:
SONAR_SCANNER_OPTS: '' SONAR_SCANNER_OPTS: ''
inputs: inputs:
SonarCloud: 'SonarCloud' SonarCloud: 'SonarCloud'
organization: 'lidarr' organization: 'readarr'
scannerMode: 'CLI' scannerMode: 'CLI'
configMode: 'manual' configMode: 'manual'
cliProjectKey: 'lidarr_Lidarr.UI' cliProjectKey: 'readarr_Readarr.UI'
cliProjectName: 'LidarrUI' cliProjectName: 'ReadarrUI'
cliProjectVersion: '$(lidarrVersion)' cliProjectVersion: '$(readarrVersion)'
cliSources: './frontend' cliSources: './frontend'
- task: SonarCloudAnalyze@1 - task: SonarCloudAnalyze@1
@ -694,14 +694,14 @@ stages:
- task: SonarCloudPrepare@1 - task: SonarCloudPrepare@1
inputs: inputs:
SonarCloud: 'SonarCloud' SonarCloud: 'SonarCloud'
organization: 'lidarr' organization: 'readarr'
scannerMode: 'MSBuild' scannerMode: 'MSBuild'
projectKey: 'lidarr_Lidarr' projectKey: 'readarr_Readarr'
projectName: 'Lidarr' projectName: 'Readarr'
projectVersion: '$(lidarrVersion)' projectVersion: '$(readarrVersion)'
extraProperties: | extraProperties: |
sonar.exclusions=**/obj/**,**/*.dll,**/NzbDrone.Core.Test/Files/**/*,./frontend/**,**/ExternalModules/**,./src/Libraries/** sonar.exclusions=**/obj/**,**/*.dll,**/NzbDrone.Core.Test/Files/**/*,./frontend/**,**/ExternalModules/**,./src/Libraries/**
sonar.coverage.exclusions=**/Lidarr.Api.V1/**/*,**/MonoTorrent/**/*,**/Marr.Data/**/* sonar.coverage.exclusions=**/Readarr.Api.V1/**/*,**/MonoTorrent/**/*,**/Marr.Data/**/*
sonar.cs.opencover.reportsPaths=$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml sonar.cs.opencover.reportsPaths=$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml
sonar.cs.nunit.reportsPaths=$(Build.SourcesDirectory)/TestResult.xml sonar.cs.nunit.reportsPaths=$(Build.SourcesDirectory)/TestResult.xml
- bash: | - bash: |

@ -19,11 +19,11 @@ ProgressEnd()
UpdateVersionNumber() UpdateVersionNumber()
{ {
if [ "$LIDARRVERSION" != "" ]; then if [ "$READARRVERSION" != "" ]; then
echo "Updating Version Info" echo "Updating Version Info"
sed -i'' -e "s/<AssemblyVersion>[0-9.*]\+<\/AssemblyVersion>/<AssemblyVersion>$LIDARRVERSION<\/AssemblyVersion>/g" src/Directory.Build.props sed -i'' -e "s/<AssemblyVersion>[0-9.*]\+<\/AssemblyVersion>/<AssemblyVersion>$READARRVERSION<\/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/<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>$LIDARRVERSION<\/string>/g" macOS/Lidarr.app/Contents/Info.plist sed -i'' -e "s/<string>10.0.0.0<\/string>/<string>$READARRVERSION<\/string>/g" macOS/Readarr.app/Contents/Info.plist
fi fi
} }
@ -49,7 +49,7 @@ Build()
rm -rf $outputFolder rm -rf $outputFolder
rm -rf $testPackageFolder rm -rf $testPackageFolder
slnFile=src/Lidarr.sln slnFile=src/Readarr.sln
if [ $os = "windows" ]; then if [ $os = "windows" ]; then
platform=Windows platform=Windows
@ -93,7 +93,7 @@ PackageFiles()
rm -rf $folder rm -rf $folder
mkdir -p $folder mkdir -p $folder
cp -r $outputFolder/$framework/$runtime/publish/* $folder cp -r $outputFolder/$framework/$runtime/publish/* $folder
cp -r $outputFolder/Lidarr.Update/$framework/$runtime/publish $folder/Lidarr.Update cp -r $outputFolder/Readarr.Update/$framework/$runtime/publish $folder/Readarr.Update
cp -r $outputFolder/UI $folder cp -r $outputFolder/UI $folder
echo "Adding LICENSE" echo "Adding LICENSE"
@ -107,7 +107,7 @@ PackageLinux()
ProgressStart "Creating $runtime Package for $framework" ProgressStart "Creating $runtime Package for $framework"
local folder=$artifactsFolder/$runtime/$framework/Lidarr local folder=$artifactsFolder/$runtime/$framework/Readarr
PackageFiles "$folder" "$framework" "$runtime" PackageFiles "$folder" "$framework" "$runtime"
@ -115,14 +115,14 @@ PackageLinux()
rm -f $folder/ServiceUninstall.* rm -f $folder/ServiceUninstall.*
rm -f $folder/ServiceInstall.* rm -f $folder/ServiceInstall.*
echo "Removing Lidarr.Windows" echo "Removing Readarr.Windows"
rm $folder/Lidarr.Windows.* rm $folder/Readarr.Windows.*
echo "Adding Lidarr.Mono to UpdatePackage" echo "Adding Readarr.Mono to UpdatePackage"
cp $folder/Lidarr.Mono.* $folder/Lidarr.Update cp $folder/Readarr.Mono.* $folder/Readarr.Update
if [ "$framework" = "netcoreapp3.1" ]; then if [ "$framework" = "netcoreapp3.1" ]; then
cp $folder/Mono.Posix.NETStandard.* $folder/Lidarr.Update cp $folder/Mono.Posix.NETStandard.* $folder/Readarr.Update
cp $folder/libMonoPosixHelper.* $folder/Lidarr.Update cp $folder/libMonoPosixHelper.* $folder/Readarr.Update
fi fi
ProgressEnd "Creating $runtime Package for $framework" ProgressEnd "Creating $runtime Package for $framework"
@ -134,27 +134,27 @@ PackageMacOS()
ProgressStart "Creating MacOS Package for $framework" ProgressStart "Creating MacOS Package for $framework"
local folder=$artifactsFolder/macos/$framework/Lidarr local folder=$artifactsFolder/macos/$framework/Readarr
PackageFiles "$folder" "$framework" "osx-x64" PackageFiles "$folder" "$framework" "osx-x64"
if [ "$framework" = "net462" ]; then if [ "$framework" = "net462" ]; then
echo "Adding Startup script" echo "Adding Startup script"
cp macOS/Lidarr $folder cp macOS/Readarr $folder
fi fi
echo "Removing Service helpers" echo "Removing Service helpers"
rm -f $folder/ServiceUninstall.* rm -f $folder/ServiceUninstall.*
rm -f $folder/ServiceInstall.* rm -f $folder/ServiceInstall.*
echo "Removing Lidarr.Windows" echo "Removing Readarr.Windows"
rm $folder/Lidarr.Windows.* rm $folder/Readarr.Windows.*
echo "Adding Lidarr.Mono to UpdatePackage" echo "Adding Readarr.Mono to UpdatePackage"
cp $folder/Lidarr.Mono.* $folder/Lidarr.Update cp $folder/Readarr.Mono.* $folder/Readarr.Update
if [ "$framework" = "netcoreapp3.1" ]; then if [ "$framework" = "netcoreapp3.1" ]; then
cp $folder/Mono.Posix.NETStandard.* $folder/Lidarr.Update cp $folder/Mono.Posix.NETStandard.* $folder/Readarr.Update
cp $folder/libMonoPosixHelper.* $folder/Lidarr.Update cp $folder/libMonoPosixHelper.* $folder/Readarr.Update
fi fi
ProgressEnd 'Creating MacOS Package' ProgressEnd 'Creating MacOS Package'
@ -170,14 +170,14 @@ PackageMacOSApp()
rm -rf $folder rm -rf $folder
mkdir -p $folder mkdir -p $folder
cp -r macOS/Lidarr.app $folder cp -r macOS/Readarr.app $folder
mkdir -p $folder/Lidarr.app/Contents/MacOS mkdir -p $folder/Readarr.app/Contents/MacOS
echo "Copying Binaries" echo "Copying Binaries"
cp -r $artifactsFolder/macos/$framework/Lidarr/* $folder/Lidarr.app/Contents/MacOS cp -r $artifactsFolder/macos/$framework/Readarr/* $folder/Readarr.app/Contents/MacOS
echo "Removing Update Folder" echo "Removing Update Folder"
rm -r $folder/Lidarr.app/Contents/MacOS/Lidarr.Update rm -r $folder/Readarr.app/Contents/MacOS/Readarr.Update
ProgressEnd 'Creating macOS App Package' ProgressEnd 'Creating macOS App Package'
} }
@ -188,17 +188,17 @@ PackageWindows()
ProgressStart "Creating Windows Package for $framework" ProgressStart "Creating Windows Package for $framework"
local folder=$artifactsFolder/windows/$framework/Lidarr local folder=$artifactsFolder/windows/$framework/Readarr
PackageFiles "$folder" "$framework" "win-x64" PackageFiles "$folder" "$framework" "win-x64"
echo "Removing Lidarr.Mono" echo "Removing Readarr.Mono"
rm -f $folder/Lidarr.Mono.* rm -f $folder/Readarr.Mono.*
rm -f $folder/Mono.Posix.NETStandard.* rm -f $folder/Mono.Posix.NETStandard.*
rm -f $folder/libMonoPosixHelper.* rm -f $folder/libMonoPosixHelper.*
echo "Adding Lidarr.Windows to UpdatePackage" echo "Adding Readarr.Windows to UpdatePackage"
cp $folder/Lidarr.Windows.* $folder/Lidarr.Update cp $folder/Readarr.Windows.* $folder/Readarr.Update
ProgressEnd 'Creating Windows Package' ProgressEnd 'Creating Windows Package'
} }

8
debian/control vendored

@ -2,11 +2,11 @@ Section: web
Priority: optional Priority: optional
Maintainer: Sonarr <contact@nzbdrone.com> Maintainer: Sonarr <contact@nzbdrone.com>
Source: nzbdrone Source: nzbdrone
Homepage: https://lidarr.audio Homepage: https://readarr.audio
Vcs-Git: git@github.com:lidarr/Lidarr.git Vcs-Git: git@github.com:readarr/Readarr.git
Vcs-Browser: https://github.com/lidarr/Lidarr Vcs-Browser: https://github.com/readarr/Readarr
Package: nzbdrone Package: nzbdrone
Architecture: all Architecture: all
Depends: libmono-cil-dev (>= 3.2), sqlite3 (>= 3.7), mediainfo (>= 0.7.52) Depends: libmono-cil-dev (>= 3.2), sqlite3 (>= 3.7), mediainfo (>= 0.7.52)
Description: Lidarr is a music collection manager Description: Readarr is a music collection manager

4
debian/copyright vendored

@ -1,9 +1,9 @@
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: nzbdrone Upstream-Name: nzbdrone
Source: https://github.com/lidarr/Lidarr Source: https://github.com/readarr/Readarr
Files: * Files: *
Copyright: 2010-2016 Lidarr <hello@lidarr.audio> Copyright: 2010-2016 Readarr <hello@readarr.audio>
License: GPL-3.0+ License: GPL-3.0+

@ -217,7 +217,7 @@ function HistoryDetails(props) {
reasonMessage = 'File was deleted by via UI'; reasonMessage = 'File was deleted by via UI';
break; break;
case 'MissingFromDisk': case 'MissingFromDisk':
reasonMessage = 'Lidarr was unable to find the file on disk so it was removed'; reasonMessage = 'Readarr was unable to find the file on disk so it was removed';
break; break;
case 'Upgrade': case 'Upgrade':
reasonMessage = 'File was deleted to import an upgrade'; reasonMessage = 'File was deleted to import an upgrade';

@ -60,7 +60,7 @@ class QueueOptions extends Component {
type={inputTypes.CHECK} type={inputTypes.CHECK}
name="includeUnknownArtistItems" name="includeUnknownArtistItems"
value={includeUnknownArtistItems} value={includeUnknownArtistItems}
helpText="Show items without a artist in the queue, this could include removed artists, movies or anything else in Lidarr's category" helpText="Show items without a artist in the queue, this could include removed artists, movies or anything else in Readarr's category"
onChange={this.onOptionChange} onChange={this.onOptionChange}
/> />
</FormGroup> </FormGroup>

@ -114,7 +114,7 @@ class RemoveQueueItemModal extends Component {
type={inputTypes.CHECK} type={inputTypes.CHECK}
name="blacklist" name="blacklist"
value={blacklist} value={blacklist}
helpText="Prevents Lidarr from automatically grabbing this release again" helpText="Prevents Readarr from automatically grabbing this release again"
onChange={this.onBlacklistChange} onChange={this.onBlacklistChange}
/> />
</FormGroup> </FormGroup>
@ -127,7 +127,7 @@ class RemoveQueueItemModal extends Component {
type={inputTypes.CHECK} type={inputTypes.CHECK}
name="skipredownload" name="skipredownload"
value={skipredownload} value={skipredownload}
helpText="Prevents Lidarr from trying download an alternative release for this item" helpText="Prevents Readarr from trying download an alternative release for this item"
onChange={this.onSkipReDownloadChange} onChange={this.onSkipReDownloadChange}
/> />
</FormGroup> </FormGroup>

@ -117,7 +117,7 @@ class RemoveQueueItemsModal extends Component {
type={inputTypes.CHECK} type={inputTypes.CHECK}
name="blacklist" name="blacklist"
value={blacklist} value={blacklist}
helpText="Prevents Lidarr from automatically grabbing these files again" helpText="Prevents Readarr from automatically grabbing these files again"
onChange={this.onBlacklistChange} onChange={this.onBlacklistChange}
/> />
</FormGroup> </FormGroup>
@ -130,7 +130,7 @@ class RemoveQueueItemsModal extends Component {
type={inputTypes.CHECK} type={inputTypes.CHECK}
name="skipredownload" name="skipredownload"
value={skipredownload} value={skipredownload}
helpText="Prevents Lidarr from trying download alternative releases for the removed items" helpText="Prevents Readarr from trying download alternative releases for the removed items"
onChange={this.onSkipReDownloadChange} onChange={this.onSkipReDownloadChange}
/> />
</FormGroup> </FormGroup>

@ -97,7 +97,7 @@ class DeleteAlbumModalContent extends Component {
type={inputTypes.CHECK} type={inputTypes.CHECK}
name="addImportListExclusion" name="addImportListExclusion"
value={addImportListExclusion} value={addImportListExclusion}
helpText="Prevent album from being added to Lidarr by Import Lists or Artist Refresh" helpText="Prevent album from being added to Readarr by Import Lists or Artist Refresh"
kind={kinds.DANGER} kind={kinds.DANGER}
onChange={this.onAddImportListExclusionChange} onChange={this.onAddImportListExclusionChange}
/> />

@ -35,7 +35,7 @@ class DeleteAlbumModalContentConnector extends Component {
this.props.onModalClose(true); this.props.onModalClose(true);
this.props.push(`${window.Lidarr.urlBase}/artist/${this.props.foreignArtistId}`); this.props.push(`${window.Readarr.urlBase}/artist/${this.props.foreignArtistId}`);
} }
// //

@ -64,7 +64,7 @@ class EditAlbumModalContent extends Component {
<FormInputGroup <FormInputGroup
type={inputTypes.CHECK} type={inputTypes.CHECK}
name="monitored" name="monitored"
helpText="Lidarr will search for and download album" helpText="Readarr will search for and download album"
{...monitored} {...monitored}
onChange={onInputChange} onChange={onInputChange}
/> />
@ -76,7 +76,7 @@ class EditAlbumModalContent extends Component {
<FormInputGroup <FormInputGroup
type={inputTypes.CHECK} type={inputTypes.CHECK}
name="anyReleaseOk" name="anyReleaseOk"
helpText="Lidarr will automatically switch to the release best matching downloaded tracks" helpText="Readarr will automatically switch to the release best matching downloaded tracks"
{...anyReleaseOk} {...anyReleaseOk}
onChange={onInputChange} onChange={onInputChange}
/> />

@ -8,7 +8,7 @@ import AppRoutes from './AppRoutes';
function App({ store, history }) { function App({ store, history }) {
return ( return (
<DocumentTitle title="Lidarr"> <DocumentTitle title="Readarr">
<Provider store={store}> <Provider store={store}>
<ConnectedRouter history={history}> <ConnectedRouter history={history}>
<PageConnector> <PageConnector>

@ -54,7 +54,7 @@ function AppRoutes(props) {
/> />
{ {
window.Lidarr.urlBase && window.Readarr.urlBase &&
<Route <Route
exact={true} exact={true}
path="/" path="/"

@ -25,12 +25,12 @@ function AppUpdatedModalContent(props) {
return ( return (
<ModalContent onModalClose={onModalClose}> <ModalContent onModalClose={onModalClose}>
<ModalHeader> <ModalHeader>
Lidarr Updated Readarr Updated
</ModalHeader> </ModalHeader>
<ModalBody> <ModalBody>
<div> <div>
Version <span className={styles.version}>{version}</span> of Lidarr has been installed, in order to get the latest changes you'll need to reload Lidarr. Version <span className={styles.version}>{version}</span> of Readarr has been installed, in order to get the latest changes you'll need to reload Readarr.
</div> </div>
{ {

@ -33,7 +33,7 @@ function createMapDispatchToProps(dispatch, props) {
}, },
onSeeChangesPress() { onSeeChangesPress() {
window.location = `${window.Lidarr.urlBase}/system/updates`; window.location = `${window.Readarr.urlBase}/system/updates`;
} }
}; };
} }

@ -27,11 +27,11 @@ function ConnectionLostModal(props) {
<ModalBody> <ModalBody>
<div> <div>
Lidarr has lost its connection to the backend and will need to be reloaded to restore functionality. Readarr has lost its connection to the backend and will need to be reloaded to restore functionality.
</div> </div>
<div className={styles.automatic}> <div className={styles.automatic}>
Lidarr will try to connect automatically, or you can click reload below. Readarr will try to connect automatically, or you can click reload below.
</div> </div>
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>

@ -112,7 +112,7 @@ class DeleteArtistModalContent extends Component {
type={inputTypes.CHECK} type={inputTypes.CHECK}
name="addImportListExclusion" name="addImportListExclusion"
value={addImportListExclusion} value={addImportListExclusion}
helpText="Prevent artist from being added to Lidarr by Import lists" helpText="Prevent artist from being added to Readarr by Import lists"
kind={kinds.DANGER} kind={kinds.DANGER}
onChange={this.onAddImportListExclusionChange} onChange={this.onAddImportListExclusionChange}
/> />

@ -55,7 +55,7 @@ class ArtistDetailsPageConnector extends Component {
componentDidUpdate(prevProps) { componentDidUpdate(prevProps) {
if (!this.props.foreignArtistId) { if (!this.props.foreignArtistId) {
this.props.push(`${window.Lidarr.urlBase}/`); this.props.push(`${window.Readarr.urlBase}/`);
return; return;
} }
} }

@ -290,7 +290,7 @@ class ArtistEditorFooter extends Component {
isDisabled={!selectedCount || isOrganizingArtist || isRetaggingArtist} isDisabled={!selectedCount || isOrganizingArtist || isRetaggingArtist}
onPress={this.onTagsPress} onPress={this.onTagsPress}
> >
Set Lidarr Tags Set Readarr Tags
</SpinnerButton> </SpinnerButton>
</div> </div>

@ -22,7 +22,7 @@ function getUrls(state) {
tags tags
} = state; } = state;
let icalUrl = `${window.location.host}${window.Lidarr.urlBase}/feed/v1/calendar/Lidarr.ics?`; let icalUrl = `${window.location.host}${window.Readarr.urlBase}/feed/v1/calendar/Readarr.ics?`;
if (unmonitored) { if (unmonitored) {
icalUrl += 'unmonitored=true&'; icalUrl += 'unmonitored=true&';
@ -32,7 +32,7 @@ function getUrls(state) {
icalUrl += `tags=${tags.toString()}&`; icalUrl += `tags=${tags.toString()}&`;
} }
icalUrl += `pastDays=${pastDays}&futureDays=${futureDays}&apikey=${window.Lidarr.apiKey}`; icalUrl += `pastDays=${pastDays}&futureDays=${futureDays}&apikey=${window.Readarr.apiKey}`;
const iCalHttpUrl = `${window.location.protocol}//${icalUrl}`; const iCalHttpUrl = `${window.location.protocol}//${icalUrl}`;
const iCalWebCalUrl = `webcal://${icalUrl}`; const iCalWebCalUrl = `webcal://${icalUrl}`;
@ -107,7 +107,7 @@ class CalendarLinkModalContent extends Component {
return ( return (
<ModalContent onModalClose={onModalClose}> <ModalContent onModalClose={onModalClose}>
<ModalHeader> <ModalHeader>
Lidarr Calendar Feed Readarr Calendar Feed
</ModalHeader> </ModalHeader>
<ModalBody> <ModalBody>

@ -132,7 +132,7 @@ CircularProgressBar.defaultProps = {
containerClassName: styles.circularProgressBarContainer, containerClassName: styles.circularProgressBarContainer,
size: 60, size: 60,
strokeWidth: 5, strokeWidth: 5,
strokeColor: colors.lidarrGreen, strokeColor: colors.readarrGreen,
showProgressText: false showProgressText: false
}; };

@ -21,7 +21,7 @@ function ErrorBoundaryError(props) {
<div className={styles.imageContainer}> <div className={styles.imageContainer}>
<img <img
className={styles.image} className={styles.image}
src={`${window.Lidarr.urlBase}/Content/Images/error.png`} src={`${window.Readarr.urlBase}/Content/Images/error.png`}
/> />
</div> </div>

@ -128,7 +128,7 @@ class FileBrowserModalContent extends Component {
className={styles.mappedDrivesWarning} className={styles.mappedDrivesWarning}
kind={kinds.WARNING} kind={kinds.WARNING}
> >
Mapped network drives are not available when running as a Windows Service, see the <Link className={styles.faqLink} to="https://github.com/Lidarr/Lidarr/wiki/FAQ">FAQ</Link> for more information. Mapped network drives are not available when running as a Windows Service, see the <Link className={styles.faqLink} to="https://github.com/Readarr/Readarr/wiki/FAQ">FAQ</Link> for more information.
</Alert> </Alert>
} }

@ -47,13 +47,13 @@ class Link extends Component {
el = 'a'; el = 'a';
linkProps.href = to; linkProps.href = to;
linkProps.target = target || '_self'; linkProps.target = target || '_self';
} else if (to.startsWith(`${window.Lidarr.urlBase}/`)) { } else if (to.startsWith(`${window.Readarr.urlBase}/`)) {
el = RouterLink; el = RouterLink;
linkProps.to = to; linkProps.to = to;
linkProps.target = target; linkProps.target = target;
} else { } else {
el = RouterLink; el = RouterLink;
linkProps.to = `${window.Lidarr.urlBase}/${to.replace(/^\//, '')}`; linkProps.to = `${window.Readarr.urlBase}/${to.replace(/^\//, '')}`;
linkProps.target = target; linkProps.target = target;
} }
} }

@ -4,7 +4,7 @@ import styles from './LoadingMessage.css';
const messages = [ const messages = [
'Downloading more RAM', 'Downloading more RAM',
'Now in Technicolor', 'Now in Technicolor',
'Previously on Lidarr...', 'Previously on Readarr...',
'Bleep Bloop.', 'Bleep Bloop.',
'Locating the required gigapixels to render...', 'Locating the required gigapixels to render...',
'Spinning up the hamster wheel...', 'Spinning up the hamster wheel...',

@ -13,7 +13,7 @@ function NotFound({ message }) {
<img <img
className={styles.image} className={styles.image}
src={`${window.Lidarr.urlBase}/Content/Images/404.png`} src={`${window.Readarr.urlBase}/Content/Images/404.png`}
/> />
</div> </div>
</PageContent> </PageContent>

@ -16,7 +16,7 @@ function ErrorPage(props) {
systemStatusError systemStatusError
} = props; } = props;
let errorMessage = 'Failed to load Lidarr'; let errorMessage = 'Failed to load Readarr';
if (!isLocalStorageSupported) { if (!isLocalStorageSupported) {
errorMessage = 'Local Storage is not supported or disabled. A plugin or private browsing may have disabled it.'; errorMessage = 'Local Storage is not supported or disabled. A plugin or private browsing may have disabled it.';

@ -54,11 +54,11 @@ function createMapStateToProps() {
function createMapDispatchToProps(dispatch, props) { function createMapDispatchToProps(dispatch, props) {
return { return {
onGoToArtist(foreignArtistId) { onGoToArtist(foreignArtistId) {
dispatch(push(`${window.Lidarr.urlBase}/artist/${foreignArtistId}`)); dispatch(push(`${window.Readarr.urlBase}/artist/${foreignArtistId}`));
}, },
onGoToAddNewArtist(query) { onGoToAddNewArtist(query) {
dispatch(push(`${window.Lidarr.urlBase}/add/search?term=${encodeURIComponent(query)}`)); dispatch(push(`${window.Readarr.urlBase}/add/search?term=${encodeURIComponent(query)}`));
} }
}; };
} }

@ -53,11 +53,11 @@ class PageHeader extends Component {
<div className={styles.logoContainer}> <div className={styles.logoContainer}>
<Link <Link
className={styles.logoLink} className={styles.logoLink}
to={`${window.Lidarr.urlBase}/`} to={`${window.Readarr.urlBase}/`}
> >
<img <img
className={styles.logo} className={styles.logo}
src={`${window.Lidarr.urlBase}/Content/Images/logo.svg`} src={`${window.Readarr.urlBase}/Content/Images/logo.svg`}
/> />
</Link> </Link>
</div> </div>
@ -76,7 +76,7 @@ class PageHeader extends Component {
<IconButton <IconButton
className={styles.donate} className={styles.donate}
name={icons.HEART} name={icons.HEART}
to="https://opencollective.com/lidarr" to="https://opencollective.com/readarr"
size={14} size={14}
/> />
<PageHeaderActionsMenuConnector <PageHeaderActionsMenuConnector

@ -62,7 +62,7 @@ function PageHeaderActionsMenu(props) {
{ {
formsAuth && formsAuth &&
<MenuItem <MenuItem
to={`${window.Lidarr.urlBase}/logout`} to={`${window.Readarr.urlBase}/logout`}
noRouter={true} noRouter={true}
> >
<Icon <Icon

@ -15,7 +15,7 @@ import LoadingPage from './LoadingPage';
import Page from './Page'; import Page from './Page';
function testLocalStorage() { function testLocalStorage() {
const key = 'lidarrTest'; const key = 'readarrTest';
try { try {
localStorage.setItem(key, key); localStorage.setItem(key, key);

@ -14,7 +14,7 @@ function PageContent(props) {
return ( return (
<ErrorBoundary errorComponent={PageContentError}> <ErrorBoundary errorComponent={PageContentError}>
<DocumentTitle title={title ? `${title} - Lidarr` : 'Lidarr'}> <DocumentTitle title={title ? `${title} - Readarr` : 'Readarr'}>
<div className={className}> <div className={className}>
{children} {children}
</div> </div>

@ -430,7 +430,7 @@ class PageSidebar extends Component {
transform transform
} = this.state; } = this.state;
const urlBase = window.Lidarr.urlBase; const urlBase = window.Readarr.urlBase;
const pathname = urlBase ? location.pathname.substr(urlBase.length) || '/' : location.pathname; const pathname = urlBase ? location.pathname.substr(urlBase.length) || '/' : location.pathname;
const activeParent = getActiveParent(pathname); const activeParent = getActiveParent(pathname);

@ -59,7 +59,7 @@ function Logger(minimumLogLevel) {
} }
Logger.prototype.cleanse = function(message) { Logger.prototype.cleanse = function(message) {
const apikey = new RegExp(`access_token=${window.Lidarr.apiKey}`, 'g'); const apikey = new RegExp(`access_token=${window.Readarr.apiKey}`, 'g');
return message.replace(apikey, 'access_token=(removed)'); return message.replace(apikey, 'access_token=(removed)');
}; };
@ -99,11 +99,11 @@ class SignalRConnector extends Component {
componentDidMount() { componentDidMount() {
console.log('[signalR] starting'); console.log('[signalR] starting');
const url = `${window.Lidarr.urlBase}/signalr/messages`; const url = `${window.Readarr.urlBase}/signalr/messages`;
this.connection = new signalR.HubConnectionBuilder() this.connection = new signalR.HubConnectionBuilder()
.configureLogging(new Logger(signalR.LogLevel.Information)) .configureLogging(new Logger(signalR.LogLevel.Information))
.withUrl(`${url}?access_token=${window.Lidarr.apiKey}`) .withUrl(`${url}?access_token=${window.Readarr.apiKey}`)
.withAutomaticReconnect({ .withAutomaticReconnect({
nextRetryDelayInMilliseconds: (retryContext) => { nextRetryDelayInMilliseconds: (retryContext) => {
if (retryContext.elapsedMilliseconds > 180000) { if (retryContext.elapsedMilliseconds > 180000) {

@ -214,7 +214,7 @@ class InteractiveSearchRow extends Component {
isOpen={this.state.isConfirmGrabModalOpen} isOpen={this.state.isConfirmGrabModalOpen}
kind={kinds.WARNING} kind={kinds.WARNING}
title="Grab Release" title="Grab Release"
message={`Lidarr was unable to determine which artist and album this release was for. Lidarr may be unable to automatically import this release. Do you want to grab '${title}'?`} message={`Readarr was unable to determine which artist and album this release was for. Readarr may be unable to automatically import this release. Do you want to grab '${title}'?`}
confirmLabel="Grab" confirmLabel="Grab"
onConfirm={this.onGrabConfirm} onConfirm={this.onGrabConfirm}
onCancel={this.onGrabCancel} onCancel={this.onGrabCancel}

@ -100,7 +100,7 @@ class AddNewItem extends Component {
className={styles.searchInput} className={styles.searchInput}
name="searchBox" name="searchBox"
value={term} value={term}
placeholder="eg. Breaking Benjamin, lidarr:854a1807-025b-42a8-ba8c-2a39717f1d25" placeholder="eg. Breaking Benjamin, readarr:854a1807-025b-42a8-ba8c-2a39717f1d25"
autoFocus={true} autoFocus={true}
onChange={this.onSearchInputChange} onChange={this.onSearchInputChange}
/> />
@ -163,7 +163,7 @@ class AddNewItem extends Component {
<div> <div>
You can also search using the You can also search using the
<Link to="https://musicbrainz.org/search"> MusicBrainz ID </Link> <Link to="https://musicbrainz.org/search"> MusicBrainz ID </Link>
of an artist e.g. lidarr:cc197bad-dc9c-440d-a5b5-d52ba2e14234 of an artist e.g. readarr:cc197bad-dc9c-440d-a5b5-d52ba2e14234
</div> </div>
</div> </div>
} }
@ -175,7 +175,7 @@ class AddNewItem extends Component {
<div> <div>
You can also search using the You can also search using the
<Link to="https://musicbrainz.org/search"> MusicBrainz ID </Link> <Link to="https://musicbrainz.org/search"> MusicBrainz ID </Link>
of an artist e.g. lidarr:cc197bad-dc9c-440d-a5b5-d52ba2e14234 of an artist e.g. readarr:cc197bad-dc9c-440d-a5b5-d52ba2e14234
</div> </div>
</div> </div>
} }

@ -50,7 +50,7 @@ class AddDownloadClientModalContent extends Component {
<div> <div>
<Alert kind={kinds.INFO}> <Alert kind={kinds.INFO}>
<div>Lidarr supports any downloadClient that uses the Newznab standard, as well as other downloadClients listed below.</div> <div>Readarr supports any downloadClient that uses the Newznab standard, as well as other downloadClients listed below.</div>
<div>For more information on the individual downloadClients, click on the info buttons.</div> <div>For more information on the individual downloadClients, click on the info buttons.</div>
</Alert> </Alert>

@ -88,7 +88,7 @@ function EditRemotePathMappingModalContent(props) {
<FormInputGroup <FormInputGroup
type={inputTypes.PATH} type={inputTypes.PATH}
name="localPath" name="localPath"
helpText="Path that Lidarr should use to access the remote path locally" helpText="Path that Readarr should use to access the remote path locally"
{...localPath} {...localPath}
onChange={onInputChange} onChange={onInputChange}
/> />

@ -24,7 +24,7 @@ function AnalyticSettings(props) {
<FormInputGroup <FormInputGroup
type={inputTypes.CHECK} type={inputTypes.CHECK}
name="analyticsEnabled" name="analyticsEnabled"
helpText="Send anonymous usage and error information to Lidarr's servers. This includes information on your browser, which Lidarr WebUI pages you use, error reporting as well as OS and runtime version. We will use this information to prioritize features and bug fixes." helpText="Send anonymous usage and error information to Readarr's servers. This includes information on your browser, which Readarr WebUI pages you use, error reporting as well as OS and runtime version. We will use this information to prioritize features and bug fixes."
helpTextWarning="Requires restart to take effect" helpTextWarning="Requires restart to take effect"
onChange={onInputChange} onChange={onInputChange}
{...analyticsEnabled} {...analyticsEnabled}

@ -34,7 +34,7 @@ function BackupSettings(props) {
<FormInputGroup <FormInputGroup
type={inputTypes.PATH} type={inputTypes.PATH}
name="backupFolder" name="backupFolder"
helpText="Relative paths will be under Lidarr's AppData directory" helpText="Relative paths will be under Readarr's AppData directory"
onChange={onInputChange} onChange={onInputChange}
{...backupFolder} {...backupFolder}
/> />
@ -50,7 +50,7 @@ function BackupSettings(props) {
type={inputTypes.NUMBER} type={inputTypes.NUMBER}
name="backupInterval" name="backupInterval"
unit="days" unit="days"
helpText="Interval to backup the Lidarr DB and settings" helpText="Interval to backup the Readarr DB and settings"
onChange={onInputChange} onChange={onInputChange}
{...backupInterval} {...backupInterval}
/> />

@ -179,9 +179,9 @@ class GeneralSettings extends Component {
<ConfirmModal <ConfirmModal
isOpen={this.state.isRestartRequiredModalOpen} isOpen={this.state.isRestartRequiredModalOpen}
kind={kinds.DANGER} kind={kinds.DANGER}
title="Restart Lidarr" title="Restart Readarr"
message={ message={
`Lidarr requires a restart to apply changes, do you want to restart now? ${isWindowsService ? 'Depending which user is running the Lidarr service you may need to restart Lidarr as admin once before the service will start automatically.' : ''}` `Readarr requires a restart to apply changes, do you want to restart now? ${isWindowsService ? 'Depending which user is running the Readarr service you may need to restart Readarr as admin once before the service will start automatically.' : ''}`
} }
cancelLabel="I'll restart later" cancelLabel="I'll restart later"
confirmLabel="Restart Now" confirmLabel="Restart Now"

@ -156,7 +156,7 @@ function HostSettings(props) {
<FormInputGroup <FormInputGroup
type={inputTypes.CHECK} type={inputTypes.CHECK}
name="launchBrowser" name="launchBrowser"
helpText=" Open a web browser and navigate to Lidarr homepage on app start." helpText=" Open a web browser and navigate to Readarr homepage on app start."
onChange={onInputChange} onChange={onInputChange}
{...launchBrowser} {...launchBrowser}
/> />

@ -84,7 +84,7 @@ class SecuritySettings extends Component {
type={inputTypes.SELECT} type={inputTypes.SELECT}
name="authenticationMethod" name="authenticationMethod"
values={authenticationMethodOptions} values={authenticationMethodOptions}
helpText="Require Username and Password to access Lidarr" helpText="Require Username and Password to access Readarr"
helpTextWarning="Requires restart to take effect" helpTextWarning="Requires restart to take effect"
onChange={onInputChange} onChange={onInputChange}
{...authenticationMethod} {...authenticationMethod}

@ -55,8 +55,8 @@ function UpdateSettings(props) {
<FormInputGroup <FormInputGroup
type={inputTypes.AUTO_COMPLETE} type={inputTypes.AUTO_COMPLETE}
name="branch" name="branch"
helpText="Branch to use to update Lidarr" helpText="Branch to use to update Readarr"
helpLink="https://github.com/Lidarr/Lidarr/wiki/Release-Branches" helpLink="https://github.com/Readarr/Readarr/wiki/Release-Branches"
{...branch} {...branch}
values={branchValues} values={branchValues}
onChange={onInputChange} onChange={onInputChange}
@ -92,8 +92,8 @@ function UpdateSettings(props) {
type={inputTypes.SELECT} type={inputTypes.SELECT}
name="updateMechanism" name="updateMechanism"
values={updateOptions} values={updateOptions}
helpText="Use Lidarr's built-in updater or a script" helpText="Use Readarr's built-in updater or a script"
helpLink="https://github.com/Lidarr/Lidarr/wiki/Updating" helpLink="https://github.com/Readarr/Readarr/wiki/Updating"
onChange={onInputChange} onChange={onInputChange}
{...updateMechanism} {...updateMechanism}
/> />

@ -50,7 +50,7 @@ class AddImportListModalContent extends Component {
<div> <div>
<Alert kind={kinds.INFO}> <Alert kind={kinds.INFO}>
<div>Lidarr supports multiple lists for importing Albums and Artists into the database.</div> <div>Readarr supports multiple lists for importing Albums and Artists into the database.</div>
<div>For more information on the individual lists, click on the info buttons.</div> <div>For more information on the individual lists, click on the info buttons.</div>
</Alert> </Alert>
{ {

@ -115,7 +115,7 @@ function EditImportListModalContent(props) {
<FormInputGroup <FormInputGroup
type={inputTypes.CHECK} type={inputTypes.CHECK}
name="enableAutomaticAdd" name="enableAutomaticAdd"
helpText={'Add artist/albums to Lidarr when syncs are performed via the UI or by Lidarr'} helpText={'Add artist/albums to Readarr when syncs are performed via the UI or by Readarr'}
{...enableAutomaticAdd} {...enableAutomaticAdd}
onChange={onInputChange} onChange={onInputChange}
/> />
@ -186,7 +186,7 @@ function EditImportListModalContent(props) {
</FormGroup> </FormGroup>
<FormGroup> <FormGroup>
<FormLabel>Lidarr Tags</FormLabel> <FormLabel>Readarr Tags</FormLabel>
<FormInputGroup <FormInputGroup
type={inputTypes.TAG} type={inputTypes.TAG}

@ -50,7 +50,7 @@ class AddIndexerModalContent extends Component {
<div> <div>
<Alert kind={kinds.INFO}> <Alert kind={kinds.INFO}>
<div>Lidarr supports any indexer that uses the Newznab standard, as well as other indexers listed below.</div> <div>Readarr supports any indexer that uses the Newznab standard, as well as other indexers listed below.</div>
<div>For more information on the individual indexers, click on the info buttons.</div> <div>For more information on the individual indexers, click on the info buttons.</div>
</Alert> </Alert>

@ -95,7 +95,7 @@ function EditIndexerModalContent(props) {
<FormInputGroup <FormInputGroup
type={inputTypes.CHECK} type={inputTypes.CHECK}
name="enableAutomaticSearch" name="enableAutomaticSearch"
helpText={supportsSearch.value ? 'Will be used when automatic searches are performed via the UI or by Lidarr' : undefined} helpText={supportsSearch.value ? 'Will be used when automatic searches are performed via the UI or by Readarr' : undefined}
helpTextWarning={supportsSearch.value ? undefined : 'Search is not supported with this indexer'} helpTextWarning={supportsSearch.value ? undefined : 'Search is not supported with this indexer'}
isDisabled={!supportsSearch.value} isDisabled={!supportsSearch.value}
{...enableAutomaticSearch} {...enableAutomaticSearch}

@ -88,7 +88,7 @@ function IndexerOptions(props) {
unit="minutes" unit="minutes"
helpText="Interval in minutes. Set to zero to disable (this will stop all automatic release grabbing)" helpText="Interval in minutes. Set to zero to disable (this will stop all automatic release grabbing)"
helpTextWarning="This will apply to all indexers, please follow the rules set forth by them" helpTextWarning="This will apply to all indexers, please follow the rules set forth by them"
helpLink="https://github.com/Lidarr/Lidarr/wiki/RSS-Sync" helpLink="https://github.com/Readarr/Readarr/wiki/RSS-Sync"
onChange={onInputChange} onChange={onInputChange}
{...settings.rssSyncInterval} {...settings.rssSyncInterval}
/> />

@ -140,7 +140,7 @@ class MediaManagement extends Component {
<FormInputGroup <FormInputGroup
type={inputTypes.CHECK} type={inputTypes.CHECK}
name="skipFreeSpaceCheckWhenImporting" name="skipFreeSpaceCheckWhenImporting"
helpText="Use when Lidarr is unable to detect free space from your artist root folder" helpText="Use when Readarr is unable to detect free space from your artist root folder"
onChange={onInputChange} onChange={onInputChange}
{...settings.skipFreeSpaceCheckWhenImporting} {...settings.skipFreeSpaceCheckWhenImporting}
/> />
@ -175,7 +175,7 @@ class MediaManagement extends Component {
type={inputTypes.CHECK} type={inputTypes.CHECK}
name="copyUsingHardlinks" name="copyUsingHardlinks"
helpText="Use Hardlinks when trying to copy files from torrents that are still being seeded" helpText="Use Hardlinks when trying to copy files from torrents that are still being seeded"
helpTextWarning="Occasionally, file locks may prevent renaming files that are being seeded. You may temporarily disable seeding and use Lidarr's rename function as a work around." helpTextWarning="Occasionally, file locks may prevent renaming files that are being seeded. You may temporarily disable seeding and use Readarr's rename function as a work around."
onChange={onInputChange} onChange={onInputChange}
{...settings.copyUsingHardlinks} {...settings.copyUsingHardlinks}
/> />
@ -225,7 +225,7 @@ class MediaManagement extends Component {
<FormInputGroup <FormInputGroup
type={inputTypes.CHECK} type={inputTypes.CHECK}
name="autoUnmonitorPreviouslyDownloadedTracks" name="autoUnmonitorPreviouslyDownloadedTracks"
helpText="Tracks deleted from disk are automatically unmonitored in Lidarr" helpText="Tracks deleted from disk are automatically unmonitored in Readarr"
onChange={onInputChange} onChange={onInputChange}
{...settings.autoUnmonitorPreviouslyDownloadedTracks} {...settings.autoUnmonitorPreviouslyDownloadedTracks}
/> />
@ -282,7 +282,7 @@ class MediaManagement extends Component {
type={inputTypes.SELECT} type={inputTypes.SELECT}
name="rescanAfterRefresh" name="rescanAfterRefresh"
helpText="Rescan the artist folder after refreshing the artist" helpText="Rescan the artist folder after refreshing the artist"
helpTextWarning="Lidarr will not automatically detect changes to files when not set to 'Always'" helpTextWarning="Readarr will not automatically detect changes to files when not set to 'Always'"
values={rescanAfterRefreshOptions} values={rescanAfterRefreshOptions}
onChange={onInputChange} onChange={onInputChange}
{...settings.rescanAfterRefresh} {...settings.rescanAfterRefresh}
@ -299,7 +299,7 @@ class MediaManagement extends Component {
type={inputTypes.SELECT} type={inputTypes.SELECT}
name="allowFingerprinting" name="allowFingerprinting"
helpText="Use fingerprinting to improve accuracy of track matching" helpText="Use fingerprinting to improve accuracy of track matching"
helpTextWarning="This requires Lidarr to read parts of the file which will slow down scans and may cause high disk or network activity." helpTextWarning="This requires Readarr to read parts of the file which will slow down scans and may cause high disk or network activity."
values={allowFingerprintingOptions} values={allowFingerprintingOptions}
onChange={onInputChange} onChange={onInputChange}
{...settings.allowFingerprinting} {...settings.allowFingerprinting}
@ -386,7 +386,7 @@ class MediaManagement extends Component {
<FormInputGroup <FormInputGroup
type={inputTypes.TEXT} type={inputTypes.TEXT}
name="fileChmod" name="fileChmod"
helpText="Octal, applied to media files when imported/renamed by Lidarr" helpText="Octal, applied to media files when imported/renamed by Readarr"
onChange={onInputChange} onChange={onInputChange}
{...settings.fileChmod} {...settings.fileChmod}
/> />
@ -401,7 +401,7 @@ class MediaManagement extends Component {
<FormInputGroup <FormInputGroup
type={inputTypes.TEXT} type={inputTypes.TEXT}
name="folderChmod" name="folderChmod"
helpText="Octal, applied to artist/album folders created by Lidarr" helpText="Octal, applied to artist/album folders created by Readarr"
values={fileDateOptions} values={fileDateOptions}
onChange={onInputChange} onChange={onInputChange}
{...settings.folderChmod} {...settings.folderChmod}

@ -153,7 +153,7 @@ class Naming extends Component {
<FormInputGroup <FormInputGroup
type={inputTypes.CHECK} type={inputTypes.CHECK}
name="renameTracks" name="renameTracks"
helpText="Lidarr will use the existing file name if renaming is disabled" helpText="Readarr will use the existing file name if renaming is disabled"
onChange={onInputChange} onChange={onInputChange}
{...settings.renameTracks} {...settings.renameTracks}
/> />

@ -156,12 +156,12 @@ function EditRootFolderModalContent(props) {
</FormGroup> </FormGroup>
<FormGroup> <FormGroup>
<FormLabel>Default Lidarr Tags</FormLabel> <FormLabel>Default Readarr Tags</FormLabel>
<FormInputGroup <FormInputGroup
type={inputTypes.TAG} type={inputTypes.TAG}
name="defaultTags" name="defaultTags"
helpText="Default Lidarr Tags for artists detected in this folder" helpText="Default Readarr Tags for artists detected in this folder"
{...defaultTags} {...defaultTags}
onChange={onInputChange} onChange={onInputChange}
/> />

@ -54,7 +54,7 @@ function MetadataProvider(props) {
type={inputTypes.TEXT} type={inputTypes.TEXT}
name="metadataSource" name="metadataSource"
helpText="Alternative Metadata Source (Leave blank for default)" helpText="Alternative Metadata Source (Leave blank for default)"
helpLink="https://github.com/Lidarr/Lidarr/wiki/Metadata-Source" helpLink="https://github.com/Readarr/Readarr/wiki/Metadata-Source"
onChange={onInputChange} onChange={onInputChange}
{...settings.metadataSource} {...settings.metadataSource}
/> />
@ -70,7 +70,7 @@ function MetadataProvider(props) {
type={inputTypes.SELECT} type={inputTypes.SELECT}
name="writeAudioTags" name="writeAudioTags"
helpTextWarning="Selecting 'All files' will alter existing files when they are imported." helpTextWarning="Selecting 'All files' will alter existing files when they are imported."
helpLink="https://github.com/Lidarr/Lidarr/wiki/Write-Tags" helpLink="https://github.com/Readarr/Readarr/wiki/Write-Tags"
values={writeAudioTagOptions} values={writeAudioTagOptions}
onChange={onInputChange} onChange={onInputChange}
{...settings.writeAudioTags} {...settings.writeAudioTags}
@ -83,7 +83,7 @@ function MetadataProvider(props) {
<FormInputGroup <FormInputGroup
type={inputTypes.CHECK} type={inputTypes.CHECK}
name="scrubAudioTags" name="scrubAudioTags"
helpText="Remove existing tags from files, leaving only those added by Lidarr." helpText="Remove existing tags from files, leaving only those added by Readarr."
onChange={onInputChange} onChange={onInputChange}
{...settings.scrubAudioTags} {...settings.scrubAudioTags}
/> />

@ -39,7 +39,7 @@ function NotificationEventItems(props) {
<div> <div>
<FormInputHelpText <FormInputHelpText
text="Select which events should trigger this notification" text="Select which events should trigger this notification"
link="https://github.com/lidarr/Lidarr/wiki/Connections" link="https://github.com/readarr/Readarr/wiki/Connections"
/> />
<div className={styles.events}> <div className={styles.events}>
<div> <div>

@ -182,7 +182,7 @@ class EditQualityProfileModalContent extends Component {
name="cutoff" name="cutoff"
{...cutoff} {...cutoff}
values={qualities} values={qualities}
helpText="Once this quality is reached Lidarr will no longer download albums" helpText="Once this quality is reached Readarr will no longer download albums"
onChange={onCutoffChange} onChange={onCutoffChange}
/> />
</FormGroup> </FormGroup>

@ -14,7 +14,7 @@ function Tags(props) {
if (!items.length) { if (!items.length) {
return ( return (
<div>No tags have been added yet. Add tags to link artists with delay profiles, restrictions, or notifications. Click <Link to='https://github.com/lidarr/Lidarr/wiki/Tags'>here</Link> to find out more about tags in Lidarr.</div> <div>No tags have been added yet. Add tags to link artists with delay profiles, restrictions, or notifications. Click <Link to='https://github.com/readarr/Readarr/wiki/Tags'>here</Link> to find out more about tags in Readarr.</div>
); );
} }

@ -1,4 +1,4 @@
if (window.Lidarr.analytics) { if (window.Readarr.analytics) {
const d = document; const d = document;
const g = d.createElement('script'); const g = d.createElement('script');
const s = d.getElementsByTagName('script')[0]; const s = d.getElementsByTagName('script')[0];

@ -31,7 +31,7 @@ export const defaultState = {
messages: { messages: {
items: [] items: []
}, },
version: window.Lidarr.version, version: window.Readarr.version,
isUpdated: false, isUpdated: false,
isConnected: true, isConnected: true,
isReconnecting: false, isReconnecting: false,

@ -13,7 +13,7 @@ import createHandleActions from './Creators/createHandleActions';
// Variables // Variables
export const section = 'oAuth'; export const section = 'oAuth';
const callbackUrl = `${window.location.origin}${window.Lidarr.urlBase}/oauth.html`; const callbackUrl = `${window.location.origin}${window.Readarr.urlBase}/oauth.html`;
// //
// State // State

@ -88,7 +88,7 @@ const config = {
slicer, slicer,
serialize, serialize,
merge, merge,
key: 'lidarr' key: 'readarr'
}; };
export default function createPersistState() { export default function createPersistState() {

@ -37,7 +37,7 @@ function identity(stuff) {
function stripUrlBase(frame) { function stripUrlBase(frame) {
if (frame.filename && window.Radarr.urlBase) { if (frame.filename && window.Radarr.urlBase) {
frame.filename = frame.filename.replace(window.Lidarr.urlBase, ''); frame.filename = frame.filename.replace(window.Readarr.urlBase, '');
} }
return frame; return frame;
} }
@ -74,14 +74,14 @@ export default function createSentryMiddleware() {
release, release,
userHash, userHash,
isProduction isProduction
} = window.Lidarr; } = window.Readarr;
if (!analytics) { if (!analytics) {
return; return;
} }
const dsn = isProduction ? 'https://3639f9e2e2ae4872846b1c30d3122106@sentry.radarr.video/12' : const dsn = isProduction ? 'https://c2c8e08845994dbfb7eddb158b408172@sentry.radarr.video/18' :
'https://099b1f21a5794acebd3160859035bda7@sentry.radarr.video/14'; 'https://c2c8e08845994dbfb7eddb158b408172@sentry.radarr.video/18';
sentry.init({ sentry.init({
dsn, dsn,

@ -1,4 +1,4 @@
const lidarrGreen = '#00A65B'; const readarrGreen = '#00A65B';
module.exports = { module.exports = {
textColor: '#515253', textColor: '#515253',
@ -15,10 +15,10 @@ module.exports = {
successColor: '#27c24c', successColor: '#27c24c',
dangerColor: '#f05050', dangerColor: '#f05050',
warningColor: '#ffa500', warningColor: '#ffa500',
infoColor: lidarrGreen, infoColor: readarrGreen,
purple: '#7a43b6', purple: '#7a43b6',
pink: '#ff69b4', pink: '#ff69b4',
lidarrGreen, readarrGreen,
helpTextColor: '#909293', helpTextColor: '#909293',
darkGray: '#888', darkGray: '#888',
gray: '#adadad', gray: '#adadad',
@ -27,7 +27,7 @@ module.exports = {
// Theme Colors // Theme Colors
themeBlue: lidarrGreen, themeBlue: readarrGreen,
themeAlternateBlue: '#00a65b', themeAlternateBlue: '#00a65b',
themeRed: '#c4273c', themeRed: '#c4273c',
themeDarkColor: '#353535', themeDarkColor: '#353535',

@ -96,7 +96,7 @@ class BackupRow extends Component {
<TableRowCell> <TableRowCell>
<Link <Link
to={`${window.Lidarr.urlBase}${path}`} to={`${window.Readarr.urlBase}${path}`}
noRouter={true} noRouter={true}
> >
{name} {name}

@ -196,7 +196,7 @@ class RestoreBackupModalContent extends Component {
<ModalFooter> <ModalFooter>
<div className={styles.additionalInfo}> <div className={styles.additionalInfo}>
Note: Lidarr will automatically restart and reload the UI during the restore process. Note: Readarr will automatically restart and reload the UI during the restore process.
</div> </div>
<Button onPress={onModalClose}> <Button onPress={onModalClose}>

@ -16,27 +16,27 @@ class MoreInfo extends Component {
<DescriptionList> <DescriptionList>
<DescriptionListItemTitle>Home page</DescriptionListItemTitle> <DescriptionListItemTitle>Home page</DescriptionListItemTitle>
<DescriptionListItemDescription> <DescriptionListItemDescription>
<Link to="https://lidarr.audio/">lidarr.audio</Link> <Link to="https://readarr.audio/">readarr.audio</Link>
</DescriptionListItemDescription> </DescriptionListItemDescription>
<DescriptionListItemTitle>Wiki</DescriptionListItemTitle> <DescriptionListItemTitle>Wiki</DescriptionListItemTitle>
<DescriptionListItemDescription> <DescriptionListItemDescription>
<Link to="https://github.com/lidarr/Lidarr/wiki">wiki.lidarr.audio</Link> <Link to="https://github.com/readarr/Readarr/wiki">wiki.readarr.audio</Link>
</DescriptionListItemDescription> </DescriptionListItemDescription>
<DescriptionListItemTitle>Reddit</DescriptionListItemTitle> <DescriptionListItemTitle>Reddit</DescriptionListItemTitle>
<DescriptionListItemDescription> <DescriptionListItemDescription>
<Link to="https://www.reddit.com/r/Lidarr/">Lidarr</Link> <Link to="https://www.reddit.com/r/Readarr/">Readarr</Link>
</DescriptionListItemDescription> </DescriptionListItemDescription>
<DescriptionListItemTitle>Discord</DescriptionListItemTitle> <DescriptionListItemTitle>Discord</DescriptionListItemTitle>
<DescriptionListItemDescription> <DescriptionListItemDescription>
<Link to="https://discord.gg/8Y7rDc9">#lidarr on Discord</Link> <Link to="https://discord.gg/8Y7rDc9">#readarr on Discord</Link>
</DescriptionListItemDescription> </DescriptionListItemDescription>
<DescriptionListItemTitle>Donations</DescriptionListItemTitle> <DescriptionListItemTitle>Donations</DescriptionListItemTitle>
<DescriptionListItemDescription> <DescriptionListItemDescription>
<Link to="https://opencollective.com/lidarr">Donate to Lidarr</Link> <Link to="https://opencollective.com/readarr">Donate to Readarr</Link>
</DescriptionListItemDescription> </DescriptionListItemDescription>
<DescriptionListItemTitle>Sonarr Donations</DescriptionListItemTitle> <DescriptionListItemTitle>Sonarr Donations</DescriptionListItemTitle>
@ -46,12 +46,12 @@ class MoreInfo extends Component {
<DescriptionListItemTitle>Source</DescriptionListItemTitle> <DescriptionListItemTitle>Source</DescriptionListItemTitle>
<DescriptionListItemDescription> <DescriptionListItemDescription>
<Link to="https://github.com/lidarr/Lidarr/">github.com/Lidarr/Lidarr</Link> <Link to="https://github.com/readarr/Readarr/">github.com/Readarr/Readarr</Link>
</DescriptionListItemDescription> </DescriptionListItemDescription>
<DescriptionListItemTitle>Feature Requests</DescriptionListItemTitle> <DescriptionListItemTitle>Feature Requests</DescriptionListItemTitle>
<DescriptionListItemDescription> <DescriptionListItemDescription>
<Link to="https://github.com/lidarr/Lidarr/issues">github.com/Lidarr/Lidarr/issues</Link> <Link to="https://github.com/readarr/Readarr/issues">github.com/Readarr/Readarr/issues</Link>
</DescriptionListItemDescription> </DescriptionListItemDescription>
</DescriptionList> </DescriptionList>

@ -89,7 +89,7 @@ class Updates extends Component {
size={30} size={30}
/> />
<div className={styles.upToDateMessage}> <div className={styles.upToDateMessage}>
The latest version of Lidarr is already installed The latest version of Readarr is already installed
</div> </div>
{ {

@ -1,7 +1,7 @@
import $ from 'jquery'; import $ from 'jquery';
const absUrlRegex = /^(https?:)?\/\//i; const absUrlRegex = /^(https?:)?\/\//i;
const apiRoot = window.Lidarr.apiRoot; const apiRoot = window.Readarr.apiRoot;
function isRelative(ajaxOptions) { function isRelative(ajaxOptions) {
return !absUrlRegex.test(ajaxOptions.url); return !absUrlRegex.test(ajaxOptions.url);
@ -25,7 +25,7 @@ function addRootUrl(ajaxOptions) {
function addApiKey(ajaxOptions) { function addApiKey(ajaxOptions) {
ajaxOptions.headers = ajaxOptions.headers || {}; ajaxOptions.headers = ajaxOptions.headers || {};
ajaxOptions.headers['X-Api-Key'] = window.Lidarr.apiKey; ajaxOptions.headers['X-Api-Key'] = window.Readarr.apiKey;
} }
export default function createAjaxRequest(originalAjaxOptions) { export default function createAjaxRequest(originalAjaxOptions) {

@ -1,3 +1,3 @@
export default function getPathWithUrlBase(path) { export default function getPathWithUrlBase(path) {
return `${window.Lidarr.urlBase}${path}`; return `${window.Readarr.urlBase}${path}`;
} }

@ -240,7 +240,7 @@ class CutoffUnmet extends Component {
Are you sure you want to search for all {totalRecords} Cutoff Unmet albums? Are you sure you want to search for all {totalRecords} Cutoff Unmet albums?
</div> </div>
<div> <div>
This cannot be cancelled once started without restarting Lidarr. This cannot be cancelled once started without restarting Readarr.
</div> </div>
</div> </div>
} }

@ -257,7 +257,7 @@ class Missing extends Component {
Are you sure you want to search for all {totalRecords} missing albums? Are you sure you want to search for all {totalRecords} missing albums?
</div> </div>
<div> <div>
This cannot be cancelled once started without restarting Lidarr. This cannot be cancelled once started without restarting Readarr.
</div> </div>
</div> </div>
} }

@ -11,7 +11,7 @@
<!-- Windows Phone --> <!-- Windows Phone -->
<meta name="msapplication-navbutton-color" content="#3a3f51" /> <meta name="msapplication-navbutton-color" content="#3a3f51" />
<meta name="description" content="Lidarr"> <meta name="description" content="Readarr">
<link <link
rel="apple-touch-icon" rel="apple-touch-icon"
@ -50,7 +50,7 @@
<link rel="stylesheet" type="text/css" href="/Content/Fonts/fonts.css"> <link rel="stylesheet" type="text/css" href="/Content/Fonts/fonts.css">
<!-- webpack bundles head --> <!-- webpack bundles head -->
<title>Lidarr</title> <title>Readarr</title>
<!-- <!--
The super basic styling for .root will live here, The super basic styling for .root will live here,

@ -11,7 +11,7 @@
<!-- Windows Phone --> <!-- Windows Phone -->
<meta name="msapplication-navbutton-color" content="#3a3f51" /> <meta name="msapplication-navbutton-color" content="#3a3f51" />
<meta name="description" content="Lidarr" /> <meta name="description" content="Readarr" />
<link <link
rel="apple-touch-icon" rel="apple-touch-icon"
@ -50,7 +50,7 @@
<link rel="stylesheet" type="text/css" href="/Content/styles.css" /> <link rel="stylesheet" type="text/css" href="/Content/styles.css" />
<link rel="stylesheet" type="text/css" href="/Content/Fonts/fonts.css" /> <link rel="stylesheet" type="text/css" href="/Content/Fonts/fonts.css" />
<title>Login - Lidarr</title> <title>Login - Readarr</title>
<style> <style>
body { body {
@ -251,7 +251,7 @@
</span> </span>
<a <a
href="https://github.com/lidarr/Lidarr/wiki/Forgot-my-Password" href="https://github.com/readarr/Readarr/wiki/Forgot-my-Password"
class="forgot-password" class="forgot-password"
>Forgot your password?</a >Forgot your password?</a
> >
@ -269,7 +269,7 @@
<span>&copy;</span> <span>&copy;</span>
<span id="year"></span> <span id="year"></span>
<span>-</span> <span>-</span>
<span>Lidarr</span> <span>Readarr</span>
</div> </div>
</div> </div>
</div> </div>

@ -1,2 +1,2 @@
/* eslint no-undef: 0 */ /* eslint no-undef: 0 */
__webpack_public_path__ = `${window.Lidarr.urlBase}/`; __webpack_public_path__ = `${window.Readarr.urlBase}/`;

@ -4,8 +4,8 @@
DIR=$(cd "$(dirname "$0")"; pwd) DIR=$(cd "$(dirname "$0")"; pwd)
#change these values to match your app #change these values to match your app
EXE_PATH="$DIR/Lidarr.exe" EXE_PATH="$DIR/Readarr.exe"
APPNAME="Lidarr" APPNAME="Readarr"
#set up environment #set up environment
if [[ -x '/opt/local/bin/mono' ]]; then if [[ -x '/opt/local/bin/mono' ]]; then

@ -11,15 +11,15 @@
<key>CFBundleDevelopmentRegion</key> <key>CFBundleDevelopmentRegion</key>
<string>English</string> <string>English</string>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>Lidarr</string> <string>Readarr</string>
<key>CFBundleIconFile</key> <key>CFBundleIconFile</key>
<string>lidarr.icns</string> <string>readarr.icns</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>com.osx.lidarr.audio</string> <string>com.osx.readarr.audio</string>
<key>CFBundleInfoDictionaryVersion</key> <key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string> <string>6.0</string>
<key>CFBundleName</key> <key>CFBundleName</key>
<string>Lidarr</string> <string>Readarr</string>
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>

@ -1,7 +1,7 @@
{ {
"name": "lidarr", "name": "readarr",
"version": "1.0.0", "version": "1.0.0",
"description": "Lidarr", "description": "Readarr",
"scripts": { "scripts": {
"build": "gulp build", "build": "gulp build",
"start": "gulp watch", "start": "gulp watch",
@ -14,9 +14,9 @@
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git://github.com/Lidarr/Lidarr.git" "url": "git://github.com/Readarr/Readarr.git"
}, },
"author": "Team Lidarr", "author": "Team Readarr",
"license": "GPL-3.0", "license": "GPL-3.0",
"readmeFilename": "readme.md", "readmeFilename": "readme.md",
"dependencies": { "dependencies": {

@ -1,3 +1,3 @@
REM SET BUILD_NUMBER=1 REM SET BUILD_NUMBER=1
REM SET branch=develop REM SET branch=develop
inno\ISCC.exe lidarr.iss inno\ISCC.exe readarr.iss

@ -1,14 +1,14 @@
; Script generated by the Inno Setup Script Wizard. ; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define AppName "Lidarr" #define AppName "Readarr"
#define AppPublisher "Team Lidarr" #define AppPublisher "Team Readarr"
#define AppURL "https://lidarr.audio/" #define AppURL "https://readarr.audio/"
#define ForumsURL "https://forums.lidarr.audio/" #define ForumsURL "https://forums.readarr.audio/"
#define AppExeName "Lidarr.exe" #define AppExeName "Readarr.exe"
#define BaseVersion GetEnv('MAJORVERSION') #define BaseVersion GetEnv('MAJORVERSION')
#define BuildNumber GetEnv('MINORVERSION') #define BuildNumber GetEnv('MINORVERSION')
#define BuildVersion GetEnv('LIDARRVERSION') #define BuildVersion GetEnv('READARRVERSION')
#define BranchName GetEnv('BUILD_SOURCEBRANCHNAME') #define BranchName GetEnv('BUILD_SOURCEBRANCHNAME')
[Setup] [Setup]
@ -22,15 +22,15 @@ AppPublisher={#AppPublisher}
AppPublisherURL={#AppURL} AppPublisherURL={#AppURL}
AppSupportURL={#ForumsURL} AppSupportURL={#ForumsURL}
AppUpdatesURL={#AppURL} AppUpdatesURL={#AppURL}
DefaultDirName={commonappdata}\Lidarr\bin DefaultDirName={commonappdata}\Readarr\bin
DisableDirPage=yes DisableDirPage=yes
DefaultGroupName={#AppName} DefaultGroupName={#AppName}
DisableProgramGroupPage=yes DisableProgramGroupPage=yes
OutputBaseFilename=Lidarr.{#BranchName}.{#BuildVersion}.windows.{#Framework} OutputBaseFilename=Readarr.{#BranchName}.{#BuildVersion}.windows.{#Framework}
SolidCompression=yes SolidCompression=yes
AppCopyright=Creative Commons 3.0 License AppCopyright=Creative Commons 3.0 License
AllowUNCPath=False AllowUNCPath=False
UninstallDisplayIcon={app}\Lidarr.exe UninstallDisplayIcon={app}\Readarr.exe
DisableReadyPage=True DisableReadyPage=True
CompressionThreads=2 CompressionThreads=2
Compression=lzma2/normal Compression=lzma2/normal
@ -48,29 +48,29 @@ Name: "startupShortcut"; Description: "Create shortcut in Startup folder (Starts
Name: "none"; Description: "Do not start automatically"; GroupDescription: "Start automatically"; Flags: exclusive unchecked Name: "none"; Description: "Do not start automatically"; GroupDescription: "Start automatically"; Flags: exclusive unchecked
[Files] [Files]
Source: "..\_artifacts\windows\{#Framework}\Lidarr\Lidarr.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "..\_artifacts\windows\{#Framework}\Readarr\Readarr.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\_artifacts\windows\{#Framework}\Lidarr\*"; Excludes: "Lidarr.Update"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "..\_artifacts\windows\{#Framework}\Readarr\*"; Excludes: "Readarr.Update"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons] [Icons]
Name: "{group}\{#AppName}"; Filename: "{app}\{#AppExeName}"; Parameters: "/icon" Name: "{group}\{#AppName}"; Filename: "{app}\{#AppExeName}"; Parameters: "/icon"
Name: "{commondesktop}\{#AppName}"; Filename: "{app}\{#AppExeName}"; Parameters: "/icon" Name: "{commondesktop}\{#AppName}"; Filename: "{app}\{#AppExeName}"; Parameters: "/icon"
Name: "{userstartup}\{#AppName}"; Filename: "{app}\Lidarr.exe"; WorkingDir: "{app}"; Tasks: startupShortcut Name: "{userstartup}\{#AppName}"; Filename: "{app}\Readarr.exe"; WorkingDir: "{app}"; Tasks: startupShortcut
[Run] [Run]
Filename: "{app}\Lidarr.Console.exe"; StatusMsg: "Removing previous Windows Service"; Parameters: "/u"; Flags: runhidden waituntilterminated; Filename: "{app}\Readarr.Console.exe"; StatusMsg: "Removing previous Windows Service"; Parameters: "/u"; Flags: runhidden waituntilterminated;
Filename: "{app}\Lidarr.Console.exe"; Description: "Enable Access from Other Devices"; StatusMsg: "Enabling Remote access"; Parameters: "/registerurl"; Flags: postinstall runascurrentuser runhidden waituntilterminated; Tasks: startupShortcut none; Filename: "{app}\Readarr.Console.exe"; Description: "Enable Access from Other Devices"; StatusMsg: "Enabling Remote access"; Parameters: "/registerurl"; Flags: postinstall runascurrentuser runhidden waituntilterminated; Tasks: startupShortcut none;
Filename: "{app}\Lidarr.Console.exe"; StatusMsg: "Installing Windows Service"; Parameters: "/i"; Flags: runhidden waituntilterminated; Tasks: windowsService Filename: "{app}\Readarr.Console.exe"; StatusMsg: "Installing Windows Service"; Parameters: "/i"; Flags: runhidden waituntilterminated; Tasks: windowsService
Filename: "{app}\Lidarr.exe"; Description: "Open Lidarr Web UI"; Flags: postinstall skipifsilent nowait; Tasks: windowsService; Filename: "{app}\Readarr.exe"; Description: "Open Readarr Web UI"; Flags: postinstall skipifsilent nowait; Tasks: windowsService;
Filename: "{app}\Lidarr.exe"; Description: "Start Lidarr"; Flags: postinstall skipifsilent nowait; Tasks: startupShortcut none; Filename: "{app}\Readarr.exe"; Description: "Start Readarr"; Flags: postinstall skipifsilent nowait; Tasks: startupShortcut none;
[UninstallRun] [UninstallRun]
Filename: "{app}\lidarr.console.exe"; Parameters: "/u"; Flags: waituntilterminated skipifdoesntexist Filename: "{app}\readarr.console.exe"; Parameters: "/u"; Flags: waituntilterminated skipifdoesntexist
[Code] [Code]
function PrepareToInstall(var NeedsRestart: Boolean): String; function PrepareToInstall(var NeedsRestart: Boolean): String;
var var
ResultCode: Integer; ResultCode: Integer;
begin begin
Exec(ExpandConstant('{commonappdata}\Lidarr\bin\Lidarr.Console.exe'), '/u', '', 0, ewWaitUntilTerminated, ResultCode) Exec(ExpandConstant('{commonappdata}\Readarr\bin\Readarr.Console.exe'), '/u', '', 0, ewWaitUntilTerminated, ResultCode)
end; end;

@ -1,5 +1,5 @@
<Project> <Project>
<!-- Common to all Lidarr Projects --> <!-- Common to all Readarr Projects -->
<PropertyGroup> <PropertyGroup>
<CodeAnalysisRuleSet>$(SolutionDir)Stylecop.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>$(SolutionDir)Stylecop.ruleset</CodeAnalysisRuleSet>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors> <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
@ -9,35 +9,35 @@
<RuntimeIdentifiers>win-x64;osx-x64;linux-x64;linux-arm;linux-arm64</RuntimeIdentifiers> <RuntimeIdentifiers>win-x64;osx-x64;linux-x64;linux-arm;linux-arm64</RuntimeIdentifiers>
<ExcludedRuntimeFrameworkPairs>win-x64:net462;osx-x64:net462;linux-arm:net462;linux-arm64:net462</ExcludedRuntimeFrameworkPairs> <ExcludedRuntimeFrameworkPairs>win-x64:net462;osx-x64:net462;linux-arm:net462;linux-arm64:net462</ExcludedRuntimeFrameworkPairs>
<LidarrRootDir>$(MSBuildThisFileDirectory)..\</LidarrRootDir> <ReadarrRootDir>$(MSBuildThisFileDirectory)..\</ReadarrRootDir>
<!-- Specifies the type of output --> <!-- Specifies the type of output -->
<LidarrOutputType>Library</LidarrOutputType> <ReadarrOutputType>Library</ReadarrOutputType>
<LidarrOutputType Condition="$(MSBuildProjectName.Contains('.Test'))">Test</LidarrOutputType> <ReadarrOutputType Condition="$(MSBuildProjectName.Contains('.Test'))">Test</ReadarrOutputType>
<LidarrOutputType Condition="'$(MSBuildProjectName)'=='ServiceInstall'">Exe</LidarrOutputType> <ReadarrOutputType Condition="'$(MSBuildProjectName)'=='ServiceInstall'">Exe</ReadarrOutputType>
<LidarrOutputType Condition="'$(MSBuildProjectName)'=='ServiceUninstall'">Exe</LidarrOutputType> <ReadarrOutputType Condition="'$(MSBuildProjectName)'=='ServiceUninstall'">Exe</ReadarrOutputType>
<LidarrOutputType Condition="'$(MSBuildProjectName)'=='Lidarr'">Exe</LidarrOutputType> <ReadarrOutputType Condition="'$(MSBuildProjectName)'=='Readarr'">Exe</ReadarrOutputType>
<LidarrOutputType Condition="'$(MSBuildProjectName)'=='Lidarr.Console'">Exe</LidarrOutputType> <ReadarrOutputType Condition="'$(MSBuildProjectName)'=='Readarr.Console'">Exe</ReadarrOutputType>
<LidarrOutputType Condition="'$(MSBuildProjectName)'=='Lidarr.Update'">Update</LidarrOutputType> <ReadarrOutputType Condition="'$(MSBuildProjectName)'=='Readarr.Update'">Update</ReadarrOutputType>
<!-- Specifies whether it's one of our own libraries --> <!-- Specifies whether it's one of our own libraries -->
<LidarrProject>false</LidarrProject> <ReadarrProject>false</ReadarrProject>
<LidarrProject Condition="$(MSBuildProjectName.StartsWith('Lidarr'))">true</LidarrProject> <ReadarrProject Condition="$(MSBuildProjectName.StartsWith('Readarr'))">true</ReadarrProject>
<LidarrProject Condition="$(MSBuildProjectName.StartsWith('ServiceInstall'))">true</LidarrProject> <ReadarrProject Condition="$(MSBuildProjectName.StartsWith('ServiceInstall'))">true</ReadarrProject>
<LidarrProject Condition="$(MSBuildProjectName.StartsWith('ServiceUninstall'))">true</LidarrProject> <ReadarrProject Condition="$(MSBuildProjectName.StartsWith('ServiceUninstall'))">true</ReadarrProject>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<Configuration Condition="'$(Configuration)'==''">Release</Configuration> <Configuration Condition="'$(Configuration)'==''">Release</Configuration>
<!-- Centralize intermediate and default outputs --> <!-- Centralize intermediate and default outputs -->
<BaseIntermediateOutputPath>$(LidarrRootDir)_temp\obj\$(MSBuildProjectName)\</BaseIntermediateOutputPath> <BaseIntermediateOutputPath>$(ReadarrRootDir)_temp\obj\$(MSBuildProjectName)\</BaseIntermediateOutputPath>
<IntermediateOutputPath>$(LidarrRootDir)_temp\obj\$(MSBuildProjectName)\$(Configuration)\</IntermediateOutputPath> <IntermediateOutputPath>$(ReadarrRootDir)_temp\obj\$(MSBuildProjectName)\$(Configuration)\</IntermediateOutputPath>
<OutputPath>$(LidarrRootDir)_temp\bin\$(Configuration)\$(MSBuildProjectName)\</OutputPath> <OutputPath>$(ReadarrRootDir)_temp\bin\$(Configuration)\$(MSBuildProjectName)\</OutputPath>
<!-- Output to _output and _tests respectively --> <!-- Output to _output and _tests respectively -->
<OutputPath Condition="'$(LidarrProject)'=='true'">$(LidarrRootDir)_output\</OutputPath> <OutputPath Condition="'$(ReadarrProject)'=='true'">$(ReadarrRootDir)_output\</OutputPath>
<OutputPath Condition="'$(LidarrOutputType)'=='Test'">$(LidarrRootDir)_tests\</OutputPath> <OutputPath Condition="'$(ReadarrOutputType)'=='Test'">$(ReadarrRootDir)_tests\</OutputPath>
<OutputPath Condition="'$(LidarrOutputType)'=='Update'">$(LidarrRootDir)_output\Lidarr.Update\</OutputPath> <OutputPath Condition="'$(ReadarrOutputType)'=='Update'">$(ReadarrRootDir)_output\Readarr.Update\</OutputPath>
<!-- Paths relative to project file for better readability --> <!-- Paths relative to project file for better readability -->
<BaseIntermediateOutputPath>$([MSBuild]::MakeRelative('$(MSBuildProjectDirectory)', '$(BaseIntermediateOutputPath)'))</BaseIntermediateOutputPath> <BaseIntermediateOutputPath>$([MSBuild]::MakeRelative('$(MSBuildProjectDirectory)', '$(BaseIntermediateOutputPath)'))</BaseIntermediateOutputPath>
@ -48,17 +48,17 @@
</PropertyGroup> </PropertyGroup>
<!-- Test projects need bindingRedirects --> <!-- Test projects need bindingRedirects -->
<PropertyGroup Condition="'$(LidarrOutputType)'=='Test'"> <PropertyGroup Condition="'$(ReadarrOutputType)'=='Test'">
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
<SelfContained>false</SelfContained> <SelfContained>false</SelfContained>
</PropertyGroup> </PropertyGroup>
<!-- Set the Product and Version info for our own projects --> <!-- Set the Product and Version info for our own projects -->
<PropertyGroup Condition="'$(LidarrProject)'=='true'"> <PropertyGroup Condition="'$(ReadarrProject)'=='true'">
<Product>Lidarr</Product> <Product>Readarr</Product>
<Company>lidarr.audio</Company> <Company>readarr.audio</Company>
<Copyright>Copyright 2017-$([System.DateTime]::Now.ToString('yyyy')) lidarr.audio (GNU General Public v3)</Copyright> <Copyright>Copyright 2017-$([System.DateTime]::Now.ToString('yyyy')) readarr.audio (GNU General Public v3)</Copyright>
<!-- Should be replaced by CI --> <!-- Should be replaced by CI -->
<AssemblyVersion>10.0.0.*</AssemblyVersion> <AssemblyVersion>10.0.0.*</AssemblyVersion>
@ -72,7 +72,7 @@
</PropertyGroup> </PropertyGroup>
<!-- Set the AssemblyConfiguration attribute for projects --> <!-- Set the AssemblyConfiguration attribute for projects -->
<ItemGroup Condition="'$(LidarrProject)'=='true'"> <ItemGroup Condition="'$(ReadarrProject)'=='true'">
<AssemblyAttribute Include="System.Reflection.AssemblyConfigurationAttribute"> <AssemblyAttribute Include="System.Reflection.AssemblyConfigurationAttribute">
<_Parameter1>$(AssemblyConfiguration)</_Parameter1> <_Parameter1>$(AssemblyConfiguration)</_Parameter1>
</AssemblyAttribute> </AssemblyAttribute>
@ -80,7 +80,7 @@
<PropertyGroup> <PropertyGroup>
<!-- For now keep the NzbDrone namespace --> <!-- For now keep the NzbDrone namespace -->
<RootNamespace Condition="'$(LidarrProject)'=='true'">$(MSBuildProjectName.Replace('Lidarr','NzbDrone'))</RootNamespace> <RootNamespace Condition="'$(ReadarrProject)'=='true'">$(MSBuildProjectName.Replace('Readarr','NzbDrone'))</RootNamespace>
</PropertyGroup> </PropertyGroup>
<!-- Allow building net framework using mono --> <!-- Allow building net framework using mono -->
@ -92,7 +92,7 @@
</ItemGroup> </ItemGroup>
<!-- Set up stylecop --> <!-- Set up stylecop -->
<ItemGroup Condition="'$(LidarrProject)'=='true'"> <ItemGroup Condition="'$(ReadarrProject)'=='true'">
<!-- StyleCop analysis --> <!-- StyleCop analysis -->
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118"> <PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>

@ -1,12 +0,0 @@
using Lidarr.Http;
namespace Lidarr.Api.V1
{
public abstract class LidarrV1FeedModule : LidarrModule
{
protected LidarrV1FeedModule(string resource)
: base("/feed/v1/" + resource.Trim('/'))
{
}
}
}

@ -1,12 +0,0 @@
using Lidarr.Http;
namespace Lidarr.Api.V1
{
public abstract class LidarrV1Module : LidarrModule
{
protected LidarrV1Module(string resource)
: base("/api/v1/" + resource.Trim('/'))
{
}
}
}

@ -1,8 +1,8 @@
using FluentAssertions; using FluentAssertions;
using Lidarr.Http.ClientSchema;
using NUnit.Framework; using NUnit.Framework;
using NzbDrone.Core.Annotations; using NzbDrone.Core.Annotations;
using NzbDrone.Test.Common; using NzbDrone.Test.Common;
using Readarr.Http.ClientSchema;
namespace NzbDrone.Api.Test.ClientSchemaTests namespace NzbDrone.Api.Test.ClientSchemaTests
{ {

@ -13,8 +13,8 @@
<PackageReference Include="coverlet.collector" Version="1.1.0" PrivateAssets="all" /> <PackageReference Include="coverlet.collector" Version="1.1.0" PrivateAssets="all" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\NzbDrone.Core\Lidarr.Core.csproj" /> <ProjectReference Include="..\NzbDrone.Core\Readarr.Core.csproj" />
<ProjectReference Include="..\NzbDrone.Test.Common\Lidarr.Test.Common.csproj" /> <ProjectReference Include="..\NzbDrone.Test.Common\Readarr.Test.Common.csproj" />
<ProjectReference Include="..\Lidarr.Http\Lidarr.Http.csproj" /> <ProjectReference Include="..\Readarr.Http\Readarr.Http.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

@ -42,12 +42,12 @@ namespace NzbDrone.Automation.Test
_runner.KillAll(); _runner.KillAll();
_runner.Start(); _runner.Start();
driver.Url = "http://localhost:8686"; driver.Url = "http://localhost:8787";
var page = new PageBase(driver); var page = new PageBase(driver);
page.WaitForNoSpinner(); page.WaitForNoSpinner();
driver.ExecuteScript("window.Lidarr.NameViews = true;"); driver.ExecuteScript("window.Readarr.NameViews = true;");
GetPageErrors().Should().BeEmpty(); GetPageErrors().Should().BeEmpty();
} }

@ -11,6 +11,6 @@
<PackageReference Include="Selenium.Support" Version="3.141.0" /> <PackageReference Include="Selenium.Support" Version="3.141.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\NzbDrone.Test.Common\Lidarr.Test.Common.csproj" /> <ProjectReference Include="..\NzbDrone.Test.Common\Readarr.Test.Common.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

@ -49,7 +49,7 @@ namespace NzbDrone.Common.Test
public void GetValue_Success() public void GetValue_Success()
{ {
const string key = "Port"; const string key = "Port";
const string value = "8686"; const string value = "8787";
var result = Subject.GetValue(key, value); var result = Subject.GetValue(key, value);
@ -60,7 +60,7 @@ namespace NzbDrone.Common.Test
public void GetInt_Success() public void GetInt_Success()
{ {
const string key = "Port"; const string key = "Port";
const int value = 8686; const int value = 8787;
var result = Subject.GetValueInt(key, value); var result = Subject.GetValueInt(key, value);
@ -89,7 +89,7 @@ namespace NzbDrone.Common.Test
[Test] [Test]
public void GetPort_Success() public void GetPort_Success()
{ {
const int value = 8686; const int value = 8787;
var result = Subject.Port; var result = Subject.Port;

@ -169,14 +169,14 @@ namespace NzbDrone.Common.Test.Http
} }
var request = new HttpRequestBuilder($"https://{_httpBinHost}/redirect-to") var request = new HttpRequestBuilder($"https://{_httpBinHost}/redirect-to")
.AddQueryParam("url", $"https://lidarr.audio/") .AddQueryParam("url", $"https://readarr.audio/")
.Build(); .Build();
request.AllowAutoRedirect = true; request.AllowAutoRedirect = true;
var response = Subject.Get(request); var response = Subject.Get(request);
response.StatusCode.Should().Be(HttpStatusCode.OK); response.StatusCode.Should().Be(HttpStatusCode.OK);
response.Content.Should().Contain("Lidarr"); response.Content.Should().Contain("Readarr");
ExceptionVerification.ExpectedErrors(0); ExceptionVerification.ExpectedErrors(0);
} }
@ -203,7 +203,7 @@ namespace NzbDrone.Common.Test.Http
var userAgent = response.Resource.Headers["User-Agent"].ToString(); var userAgent = response.Resource.Headers["User-Agent"].ToString();
userAgent.Should().Contain("Lidarr"); userAgent.Should().Contain("Readarr");
} }
[TestCase("Accept", "text/xml, text/rss+xml, application/rss+xml")] [TestCase("Accept", "text/xml, text/rss+xml, application/rss+xml")]
@ -222,7 +222,7 @@ namespace NzbDrone.Common.Test.Http
{ {
var file = GetTempFilePath(); var file = GetTempFilePath();
Assert.Throws<WebException>(() => Subject.DownloadFile("https://download.lidarr.audio/wrongpath", file)); Assert.Throws<WebException>(() => Subject.DownloadFile("https://download.readarr.audio/wrongpath", file));
File.Exists(file).Should().BeFalse(); File.Exists(file).Should().BeFalse();

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save