1
0
mirror of https://github.com/Radarr/Radarr.git synced 2026-04-18 21:35:51 -04:00

Compare commits

...

620 Commits

Author SHA1 Message Date
Robin Dadswell bdc7733faf Fixed: Clarify delay profile bypass only applies to preferred protocol 2021-05-27 07:48:55 -04:00
Qstick 7f4be53db0 Bump version 3.2.1 2021-05-27 07:48:24 -04:00
Weblate 27d998d6f2 Added translation using Weblate (Chinese (Traditional) (zh_TW)) [skip ci]
Translated using Weblate (Portuguese (Brazil)) [skip ci]

Currently translated at 100.0% (1104 of 1104 strings)

Translated using Weblate (Hungarian) [skip ci]

Currently translated at 100.0% (1104 of 1104 strings)

Co-authored-by: Csaba <csab0825@gmail.com>
Co-authored-by: Lizandra Candido da Silva <lizandra.c.s@gmail.com>
Co-authored-by: Qstick <qstick@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/hu/
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/pt_BR/
Translation: Servarr/Radarr
2021-05-26 23:41:04 -04:00
Evan J 5eb593f453 Update login.html
(cherry picked from commit e8f58eb9be583639909c0ac9b3dc3b40db8c7a53)
2021-05-24 20:40:35 -04:00
Servarr 4652db0583 Translations update from Weblate (#6348)
* Translated using Weblate (Portuguese (Brazil)) [skip ci]

Currently translated at 99.7% (1101 of 1104 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/pt_BR/

* Translated using Weblate (Portuguese (Brazil)) [skip ci]

Currently translated at 99.8% (1102 of 1104 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/pt_BR/

* Translated using Weblate (Portuguese (Brazil)) [skip ci]

Currently translated at 99.7% (1101 of 1104 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/pt_BR/

* Translated using Weblate (Portuguese (Brazil)) [skip ci]

Currently translated at 99.7% (1101 of 1104 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/pt_BR/

Co-authored-by: Lizandra Candido da Silva <lizandra.c.s@gmail.com>
2021-05-24 00:41:35 -04:00
Qstick 35d43480bf Fixed: Errors in queue after Movie deleted
Fixes #5899
Fixes RADARR-17A
2021-05-23 23:14:56 -04:00
Qstick 3e7c136a7f Fixed: ArgumentException on Import List Root Folder Check 2021-05-23 21:36:07 -04:00
Qstick 05f9f6b413 Fixed: Check movie null before trying to use it 2021-05-23 21:26:01 -04:00
Robin Dadswell 67f6eb544a New: Indexer Categories no longer Advanced option 2021-05-23 21:19:53 -04:00
Robin Dadswell 3c11e934a8 Fixed: Parsing service error for multi language releases when movie not mapped 2021-05-23 16:41:33 -04:00
Robin Dadswell 627a39b8fc Fix: Root Folder Downloads check giving errors when RuTorrent is used 2021-05-23 16:41:33 -04:00
Qstick 95c7b96dff Fixed: Health MovieEditor link goes nowhere 2021-05-20 18:47:24 -04:00
Robin Dadswell dadd59fc3a Fix ESLint (#6335)
(cherry picked from commit c3837c9f7b50534e3eafe1d9fbaf360fee4588b7)

Co-authored-by: Mark McDowall <mark@mcdowall.ca>
2021-05-19 23:36:50 +01:00
Daniel Martin Gonzalez e67d3d3666 New: Add missing properties to Connection Webhook (#6333) 2021-05-18 19:41:13 +01:00
Qstick f4718243ed Fixed: NZBGet Settings reference Sabnzbd 2021-05-17 22:15:10 -04:00
Robin Dadswell fcec787eb6 Show User Agent in System->Tasks for externally triggered commands (#6327)
* Show User Agent in System->Tasks for externally triggered commands

(cherry picked from commit fe8f319f7bfdadb7218b6313ada6cae1d2a35ad8)

* Translations

Co-authored-by: Taloth Saldono <Taloth@users.noreply.github.com>
2021-05-17 21:45:23 -04:00
Qstick 5fe8f65d64 Fixed: Filter Unknown from Profile Language Select 2021-05-15 18:11:06 -04:00
JohnBednarczyk c2a21cd238 Added custom languages to the top 2021-05-15 18:11:06 -04:00
Daniel Martin Gonzalez a31ca4e80b New: Telegram Notification - Add Upgrade Movie Support 2021-05-15 18:10:30 -04:00
Michael Higgins db14ac4605 New: Update scenename from API (#6132)
* update scenename from API

* Update MovieFileListResource.cs

* Update MovieFileModule.cs

null checks similar to Sonarr pull request

* Update MovieFileModule.cs

add blank line

* Update MovieFileModule.cs

include isSceneTitle check

* Update MovieFileModule.cs

fix namespace

* Update MovieFileModule.cs
2021-05-15 18:08:04 -04:00
Robin Dadswell 5f229b78be Fixed: Multi language release being rejected when indexer profile is setup for original and any other language (#6311) 2021-05-15 16:52:15 +01:00
ta264 543f2e7ddc Don't run build for weblate PRs
(cherry picked from commit 62221c2a7fc959dfe47af7bc98622d81eba3419b)
2021-05-14 06:59:03 -04:00
Servarr d6b7ab6260 Translations update from Weblate (#6295)
* Added translation using Weblate (Chinese (Traditional)) [skip ci]

* Translated using Weblate (Danish) [skip ci]

Currently translated at 97.0% (1068 of 1101 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/da/

* Translated using Weblate (Hungarian) [skip ci]

Currently translated at 100.0% (1101 of 1101 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/hu/

* Translated using Weblate (Portuguese (Brazil)) [skip ci]

Currently translated at 100.0% (1101 of 1101 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/pt_BR/

* Deleted translation using Weblate (Chinese (Traditional))  [skip ci]

* Translated using Weblate (Hungarian) [skip ci]

Currently translated at 100.0% (1102 of 1102 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/hu/

Co-authored-by: ted09080037 <ted09080037@gmail.com>
Co-authored-by: lechuck <theghostpirate@gmail.com>
Co-authored-by: Csaba <csab0825@gmail.com>
Co-authored-by: Havok Dan <havokdan@yahoo.com.br>
Co-authored-by: Qstick <qstick@gmail.com>
2021-05-12 20:50:14 -04:00
Robin Dadswell d7ab9292fb Fixed: restoring scroll position when going back to index page (#6308)
(cherry picked from commit 1bc52d0138c7bcb94ffce31ec05f675387612a62)

Co-authored-by: ta264 <ta264@users.noreply.github.com>
2021-05-12 12:36:20 +01:00
Robin Dadswell 4300d8d8c6 New: TMDb Keyword List support (#6297) 2021-05-12 12:36:01 +01:00
Qstick 446b2ffff9 New: Letterboxd Links for Movies 2021-05-11 23:59:44 -04:00
Mark McDowall 695720b552 New: Add rel="noreferrer" to all external links
(cherry picked from commit c722e9112496062313d09df16b169873f910f2a1)
2021-05-10 23:45:06 -04:00
Qstick c47934c5ca Fixed: Alignment of Certification and Runtime on Add Movie 2021-05-10 23:41:21 -04:00
bakerboy448 9938737cd7 fix minimumAcailability typo and truncate version to 3 [skip ci] 2021-05-10 22:59:03 -04:00
bakerboy448 58326f05e0 remove legacy swagger doc [skip ci] 2021-05-10 22:59:03 -04:00
Robin Dadswell 04ad5ec9c0 Fixed: Interactive Search Release Rejected tooltip no longer covers download button 2021-05-10 19:06:46 -04:00
crbrz 2c008384dd Fixed: Links to search results not always working on interactive search
Co-authored-by: Cristi <cristi@emailaddressmanager.com>
2021-05-09 18:54:54 +01:00
Servarr a9b605c872 Translations update from Weblate (#6276)
* Translated using Weblate (Dutch) [skip ci]

Currently translated at 100.0% (1078 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/nl/

* Translated using Weblate (German) [skip ci]

Currently translated at 100.0% (1101 of 1101 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/de/

Co-authored-by: ProjectHydra31 <kay@timmerman.io>
Co-authored-by: reloxx <reloxx@interia.pl>
2021-05-09 10:28:34 -04:00
Robin Dadswell cd9b469823 fixups 2021-05-09 08:15:10 -04:00
Mark McDowall df4bfa501c Fixed files that were using incorrect imports
(cherry picked from commit a3bb2f1c32fc1e0c49d0d1fe24c04940453f5431)
2021-05-09 08:15:10 -04:00
Mark McDowall 194a1e5154 Updated create-react-class package
(cherry picked from commit 8acc0f77b677e4713d0f3d6f059b948a3aaca450)
2021-05-09 08:15:10 -04:00
Mark McDowall e53b2bb83c Update react-autosuggest, react-focus-lock, react-lazyload react-slider and react-tabs packages
(cherry picked from commit 2964d0bb6da089be863199514c1e7ed4ca2832f7)
2021-05-09 08:15:10 -04:00
Qstick 10772c09ef Update microsoft/signalr package
(cherry picked from commit afe1d695d0071fa321d655425f5badc4d7a1f6c2)
2021-05-09 08:15:10 -04:00
Qstick f9ed15409a Update connected-react-router
(cherry picked from commit d64980ce6b1eeeffc8c7b0a938b70c18bdda5067)
2021-05-09 08:15:10 -04:00
Qstick f75ab93458 Updated react-dnd and added touch support
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
(cherry picked from commit 0b85b506e226cf1bf1f2d28eb7ed441108cc154d)

to be squashed
2021-05-09 08:15:10 -04:00
Qstick 7755a8bd3b Updated redux and react-redux packages
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
(cherry picked from commit 699da04eb3a0db3fa3eb89f5f61dcf90749e9df2)
2021-05-09 08:15:10 -04:00
Qstick 017c7998be Update react and react-dom packages
(cherry picked from commit e3968f90b23cdb9a875b474d159787e84d480bf7)
2021-05-09 08:15:10 -04:00
Qstick f40ddfef10 Update jquery, filesize, qs packages
(cherry picked from commit c60858aed5c3607e0df192caf02e6a400c76e172)
2021-05-09 08:15:10 -04:00
Qstick 80049909eb Update clipboard, lodash, mobile-detect
(cherry picked from commit 9a30173e8defb49a8a24159c35f4982b4f791e02)
2021-05-09 08:15:10 -04:00
Qstick fc22264f89 Update classnames
(cherry picked from commit 8f2e73045ac682c2e9abb3a1f3894a4ca16eb650)
2021-05-09 08:15:10 -04:00
Qstick aba2e10b5c Update sentry packages
(cherry picked from commit adb01c2f8685de2abaf5ebf37000f3765e52b086)
2021-05-09 08:15:10 -04:00
Qstick 4b6874d551 Update fontawesome packages
(cherry picked from commit ef0c9472d94ff72ec186684c8c773af7ceaa8073)
2021-05-09 08:15:10 -04:00
Qstick 58934a30ce Update postcss packages
(cherry picked from commit 408089957ab8a9dc6a21b485853b9d86a9ace59f)
2021-05-09 08:15:10 -04:00
Qstick 33a960f325 Update core-js package
(cherry picked from commit f383e57e7de33c6a071083e8282ea69238ef8987)

to be sqaushed
2021-05-09 08:15:10 -04:00
Qstick 8560ff43fe Update lint packages
(cherry picked from commit 871a6272322e3fad58f70f410e1aa21feb4ff9ad)
2021-05-09 08:15:10 -04:00
Qstick c88a47b275 Upgrade babel packages
(cherry picked from commit 1af730ffb82c14693911942718e2c171123f6ccb)
2021-05-09 08:15:10 -04:00
Qstick 67fe9101d9 Update to webpack 5, remove gulp
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
(cherry picked from commit 4ef2174226a0210f756f180dded8567d659589e2)
2021-05-09 08:15:10 -04:00
Robin Dadswell af99c78352 New: Allow user to choose whether delay profile should apply to release of the highest enabled quality (#6218)
(cherry picked from commit d668e923af83ab7f1589d947fec9f40a3919e0b8)

Co-authored-by: Taloth Saldono <Taloth@users.noreply.github.com>
2021-05-09 00:45:04 +01:00
Robin Dadswell df3253f55c Improved logic for root folder downloading health check (#6287) 2021-05-09 00:43:56 +01:00
Robin Dadswell b9abc1be11 Add missing On Delete Notifications to Mailgun notifications
(cherry picked from commit a824fa44d21328d9c8bbb1ccfd6d247d4ff5c888)
2021-05-08 18:13:51 +01:00
Skyler Mäntysaari 5c0ee04271 New: Mailgun connection
(cherry picked from commit 55752a6c6213c1d83d347ba0f6870aa6c1cc0770)
2021-05-08 18:13:51 +01:00
Qstick 5e2cd3798b Move support bot to Github Action [skip ci]
[common]
2021-05-07 18:48:35 -04:00
Qstick 83041b1d37 Delete todobot config [skip ci] 2021-05-07 18:40:14 -04:00
Robin Dadswell 9f6c48191b New: Errors for Mono Health checks on X86 and BSD (except FreeBSD) based Operating Systems 2021-05-07 23:38:10 +01:00
Robin Dadswell 5696fa2efe Fixed: Wiki links on all health checks 2021-05-07 23:38:10 +01:00
Robin Dadswell d38311b717 New: Localised all health check strings 2021-05-07 23:38:10 +01:00
Robin Dadswell aa522066ee New: Mono health check moved from warning to error 2021-05-07 23:38:10 +01:00
Robin Dadswell d2ba70c4d7 Fixed: Added wiki fragments to indexer health checks 2021-05-07 23:38:10 +01:00
Robin Dadswell ca2e62492d Fixed: Import Lists messages can now show in UI 2021-05-07 17:08:19 +01:00
bakerboy448 02bcb4d865 Fixed: Incorrectly identifying YTS.LT as Lithuanian Language
New: Detect YTS.LT as a Release Group
2021-05-07 12:04:15 -04:00
ta264 36962f176f Always access config file via provider to utilise lock 2021-05-07 11:52:03 +01:00
ta264 0a2afe692f Fail build on BSD integration test fails 2021-05-07 11:52:03 +01:00
ta264 5140ee8f2e Don't start integration tests too soon
(cherry picked from commit b284f40716269dc4f641323b8293f40dfda8a424)
2021-05-07 11:52:03 +01:00
Servarr e47ceae0c5 Translations update from Weblate (#6272)
* Translated using Weblate (French) [skip ci]

Currently translated at 100.0% (1078 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/fr/

* Translated using Weblate (Italian) [skip ci]

Currently translated at 100.0% (1078 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/it/

* Translated using Weblate (Hungarian) [skip ci]

Currently translated at 100.0% (1078 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/hu/

* Translated using Weblate (Turkish) [skip ci]

Currently translated at 99.2% (1070 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/tr/

* Translated using Weblate (Portuguese (Brazil)) [skip ci]

Currently translated at 100.0% (1078 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/pt_BR/

Co-authored-by: Florian <sephrat.flo@gmail.com>
Co-authored-by: memnos <fabrassi@gmail.com>
Co-authored-by: Csaba <csab0825@gmail.com>
Co-authored-by: batuhankrmn <batuhankrmn3@gmail.com>
Co-authored-by: Ivo Capanema <ivoliveirabh@hotmail.com>
2021-05-06 07:49:42 -04:00
Qstick 906f8c1049 Bump version 3.2.0 2021-05-04 07:40:13 -04:00
bakerboy448 27e871656e New: DiscordNotifier is now Notifiarr (#6263)
[common]
2021-05-03 22:14:06 +01:00
bakerboy448 1ff147c541 fix bot discord link [skip ci] 2021-05-02 21:43:21 +01:00
Mark McDowall 7028bfb082 Fixed broken tests
(cherry picked from commit 16156192c5f1abd929bcd825186b9f153507a46e)
2021-05-02 21:42:34 +01:00
Mark McDowall efdb9c20d4 Fixed: Removing completed download from SABnzbd
Closes #4445

(cherry picked from commit c669be317fffa252d59851e9a8ca9e56032a01fb)
2021-05-02 21:42:34 +01:00
Qstick 9bf872c9fa Delete reaction.yml
[skip ci]
2021-05-01 10:10:45 -04:00
Csaba feaeda9186 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (1078 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/servarr/radarr/hu/
2021-04-30 18:54:18 -04:00
Mark McDowall e9cf9d05f5 Fixed: Refresh queue count when navigating Activity: Queue
(cherry picked from commit 0a2b109a3fe101e260b623d0768240ef8b7a47ae)
2021-04-29 22:47:32 -04:00
nitsua a1211f54de Move the warning icona and download icon next to the release so it is never out of viewport 2021-04-29 22:46:51 -04:00
Qstick c7b5e6204c Bump Version 3.1.1 2021-04-29 18:53:40 -04:00
ta264 788404ee27 Utilisation of amended coverlet package to fix randomly failing tests 2021-04-27 14:40:49 +01:00
bakerboy448 8ef4429b9e New: ISO 8601 Date in log files
Closes #6224
2021-04-25 10:36:14 -04:00
Robin Dadswell 7c5fc1e4b0 New: Adds SSL option to Kodi connections (#6219) 2021-04-24 18:43:26 +01:00
Robin Dadswell c66f7abea5 Fixed: Parsing RSS with null values (#6220) 2021-04-24 18:43:06 +01:00
Robin Dadswell ce6f52552a Fixed: Incorrectly grabbing revision downgrades (#6194) 2021-04-24 18:14:27 +01:00
Will Segatto 7807e2e13a Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 100.0% (1078 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2021-04-23 14:57:01 +00:00
Will Segatto d5aa73fe8f Translated using Weblate (Portuguese) [skip ci]
Currently translated at 100.0% (1078 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2021-04-23 14:57:00 +00:00
bakerboy448 cb5bf86d8e Update indexer category help text
closes #6209

(cherrypicked from sonarr 8d2d9078ff8f6daf50aef2dded3f96dae93252cc)
2021-04-22 20:22:47 -04:00
Robin Dadswell 8d17f0b1db Fixed: Round durationseconds in Kodi metadata (#6204) 2021-04-20 18:41:54 +01:00
angelsky11 2e62aad279 Translated using Weblate (Chinese (Simplified) (zh_CN)) [skip ci]
Currently translated at 100.0% (1078 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/zh_CN/
2021-04-20 08:56:58 +00:00
Mark McDowall f2c9fcde7c New: Remove completed downloads from disk when removing from SABnzbd
(cherry picked from commit ac8283d7339b3d9e8ccf70f3d1ff031d1b0a71d1)
2021-04-19 15:04:22 -04:00
bakerboy448 2716bd6ae1 Fixed: Not capturing D-Z0N3 preceded with .-
Closes #6044
2021-04-17 21:29:35 -04:00
Mark McDowall b67f6b98ae Set timeout for sending email
Closes #6171
2021-04-17 16:39:13 -04:00
Mark McDowall 7de2c8d41f Refactor Email and add more logging
(cherry picked from sonarr 5301620ecfd6cffb6014e986d1ce5b6bbaace93a)
closes #6168
2021-04-17 16:39:13 -04:00
Mark McDowall 5dabec5cc8 Fixed: Links to Sonarr now uses auth cookie
(cherry picked from commit a47cb2390eb5151ed19388def46b0bb165d27647)
2021-04-13 20:56:18 -04:00
Robin Dadswell fc61687e82 New: Calendar iCal feed includes Digital Release events 2021-04-13 10:01:15 +01:00
nitsua 398fc4dca2 Add certification and runtime to search results (#6154) 2021-04-12 20:49:37 -04:00
Robin Dadswell f883cab6db bump to Dotnet 5.0.5 2021-04-12 15:17:11 +01:00
Robin Dadswell 0a18898e36 Sentry logging exceptions and some trace logging
Co-authored-by: Taloth Saldono <Taloth@users.noreply.github.com>
2021-04-12 12:19:51 +01:00
Robin Dadswell 19d533b50a Fixed: Search Missing Movies on Calendar 2021-04-12 12:14:23 +01:00
bakerboy448 4ce98d689d New: Detect 'FRA' and 'FRE' as French Language
Fixes #6136
2021-04-09 21:18:10 +01:00
bakerboy448 ef9c1bf0a4 New: Detect 'castellano' as Spanish Language
Fixes #6152
2021-04-09 21:18:10 +01:00
bakerboy448 bec8312d61 remove a sonarr and show reference 2021-04-09 21:18:10 +01:00
Daniel Martin Gonzalez ac5736c05b New: Add option to import from any Trakt user's personal list 2021-04-09 12:06:21 +01:00
Robin Dadswell 35abd99b3f Fixed: Some connection settings being invisibly enabled on creation 2021-04-08 15:21:01 +01:00
Florian 0fb8aabb41 Translated using Weblate (French) [skip ci]
Currently translated at 100.0% (1078 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2021-04-07 17:57:08 +00:00
Qstick cbc14a1a2c New: Make Rarbg category selection more intuitive
[common]

Fixes #6138
Fixes #6139
2021-04-03 11:56:09 -04:00
kingii98 627ab64fd0 Translated using Weblate (Russian) [skip ci]
Currently translated at 99.1% (1069 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ru/
2021-04-02 19:56:52 +00:00
Anonymous 7fdfd0cfb7 Translated using Weblate (Arabic) [skip ci]
Currently translated at 99.7% (1075 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ar/
2021-04-01 16:57:14 +00:00
Anonymous 4052e7160c Translated using Weblate (Chinese (Simplified) (zh_CN)) [skip ci]
Currently translated at 99.3% (1071 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/zh_CN/
2021-04-01 16:57:14 +00:00
Anonymous f5d3defa52 Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 100.0% (1078 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2021-04-01 16:57:13 +00:00
Will Segatto 4cb87309b2 Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 100.0% (1078 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2021-04-01 16:57:13 +00:00
Anonymous c6ec9c316d Translated using Weblate (Thai) [skip ci]
Currently translated at 99.4% (1072 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/th/
2021-04-01 16:57:12 +00:00
Anonymous fc26f78558 Translated using Weblate (Bulgarian) [skip ci]
Currently translated at 99.4% (1072 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/bg/
2021-04-01 16:57:11 +00:00
Anonymous 4eaad6ca4b Translated using Weblate (Hindi) [skip ci]
Currently translated at 99.4% (1072 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hi/
2021-04-01 16:57:10 +00:00
Anonymous 7abbe2c8c0 Translated using Weblate (Romanian) [skip ci]
Currently translated at 98.9% (1067 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ro/
2021-04-01 16:57:09 +00:00
Anonymous 40839424be Translated using Weblate (Vietnamese) [skip ci]
Currently translated at 99.4% (1072 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/vi/
2021-04-01 16:57:09 +00:00
Anonymous 3234cff09c Translated using Weblate (Turkish) [skip ci]
Currently translated at 99.0% (1068 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/tr/
2021-04-01 16:57:08 +00:00
Anonymous d715bb4437 Translated using Weblate (Swedish) [skip ci]
Currently translated at 99.4% (1072 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2021-04-01 16:57:08 +00:00
Anonymous df88d9a8bf Translated using Weblate (Russian) [skip ci]
Currently translated at 99.1% (1069 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ru/
2021-04-01 16:57:07 +00:00
Anonymous a3f4695442 Translated using Weblate (Portuguese) [skip ci]
Currently translated at 100.0% (1078 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2021-04-01 16:57:06 +00:00
Anonymous 321ce87d4d Translated using Weblate (Polish) [skip ci]
Currently translated at 99.3% (1071 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pl/
2021-04-01 16:57:05 +00:00
Anonymous 30e9a7a1b9 Translated using Weblate (Dutch) [skip ci]
Currently translated at 99.4% (1072 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2021-04-01 16:57:05 +00:00
Anonymous f26b00444f Translated using Weblate (Korean) [skip ci]
Currently translated at 99.4% (1072 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ko/
2021-04-01 16:57:04 +00:00
Anonymous e088a7258e Translated using Weblate (Japanese) [skip ci]
Currently translated at 99.4% (1072 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ja/
2021-04-01 16:57:03 +00:00
Anonymous f705692fb7 Translated using Weblate (Icelandic) [skip ci]
Currently translated at 99.4% (1072 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/is/
2021-04-01 16:57:03 +00:00
Anonymous 92feeb49a6 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (1078 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2021-04-01 16:57:02 +00:00
Anonymous 0d7d647291 Translated using Weblate (Hebrew) [skip ci]
Currently translated at 99.4% (1072 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/he/
2021-04-01 16:57:01 +00:00
Anonymous 2ddaef5c50 Translated using Weblate (Finnish) [skip ci]
Currently translated at 99.4% (1072 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fi/
2021-04-01 16:57:01 +00:00
Anonymous 0aaf0f702b Translated using Weblate (Greek) [skip ci]
Currently translated at 98.9% (1067 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/el/
2021-04-01 16:57:00 +00:00
Anonymous 97e9d64397 Translated using Weblate (Danish) [skip ci]
Currently translated at 99.0% (1068 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/da/
2021-04-01 16:56:59 +00:00
Anonymous f1583dcb13 Translated using Weblate (Czech) [skip ci]
Currently translated at 99.4% (1072 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/cs/
2021-04-01 16:56:58 +00:00
Anonymous dc4dbf4610 Translated using Weblate (Italian) [skip ci]
Currently translated at 97.3% (1049 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2021-04-01 16:56:58 +00:00
Anonymous bb21798c42 Translated using Weblate (Spanish) [skip ci]
Currently translated at 99.7% (1075 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2021-04-01 16:56:57 +00:00
Anonymous 07b2890f30 Translated using Weblate (French) [skip ci]
Currently translated at 99.7% (1075 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2021-04-01 16:56:57 +00:00
Anonymous d9534a857f Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (1078 of 1078 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2021-04-01 16:56:51 +00:00
Robin Dadswell 2b17b5310e Fixed: Show size on disk when deleting movies 2021-03-31 13:03:49 +01:00
Anonymous b330a15431 Translated using Weblate (Arabic) [skip ci]
Currently translated at 99.7% (1074 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ar/
2021-03-31 08:57:12 +00:00
Anonymous ad79250783 Translated using Weblate (Chinese (Simplified) (zh_CN)) [skip ci]
Currently translated at 99.3% (1070 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/zh_CN/
2021-03-31 08:57:12 +00:00
Anonymous 845b96508f Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 99.0% (1067 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2021-03-31 08:57:11 +00:00
Anonymous cff95eb251 Translated using Weblate (Thai) [skip ci]
Currently translated at 99.4% (1071 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/th/
2021-03-31 08:57:10 +00:00
Anonymous d8542f4689 Translated using Weblate (Bulgarian) [skip ci]
Currently translated at 99.4% (1071 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/bg/
2021-03-31 08:57:10 +00:00
Anonymous 99642f15fe Translated using Weblate (Hindi) [skip ci]
Currently translated at 99.4% (1071 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hi/
2021-03-31 08:57:09 +00:00
Anonymous 5d1c600062 Translated using Weblate (Romanian) [skip ci]
Currently translated at 98.9% (1066 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ro/
2021-03-31 08:57:08 +00:00
Anonymous 5cee22f207 Translated using Weblate (Vietnamese) [skip ci]
Currently translated at 99.4% (1071 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/vi/
2021-03-31 08:57:07 +00:00
Anonymous bb3871e9ea Translated using Weblate (Turkish) [skip ci]
Currently translated at 99.0% (1067 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/tr/
2021-03-31 08:57:06 +00:00
Anonymous 434c095c54 Translated using Weblate (Swedish) [skip ci]
Currently translated at 99.4% (1071 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2021-03-31 08:57:06 +00:00
Anonymous 4808fb1429 Translated using Weblate (Russian) [skip ci]
Currently translated at 99.1% (1068 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ru/
2021-03-31 08:57:05 +00:00
Anonymous 7dd6805512 Translated using Weblate (Portuguese) [skip ci]
Currently translated at 99.8% (1075 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2021-03-31 08:57:04 +00:00
Anonymous c31070ab91 Translated using Weblate (Polish) [skip ci]
Currently translated at 99.3% (1070 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pl/
2021-03-31 08:57:04 +00:00
Anonymous e6974eb99e Translated using Weblate (Dutch) [skip ci]
Currently translated at 99.4% (1071 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2021-03-31 08:57:03 +00:00
Anonymous a72e3d78d7 Translated using Weblate (Korean) [skip ci]
Currently translated at 99.4% (1071 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ko/
2021-03-31 08:57:03 +00:00
Anonymous 7c707babff Translated using Weblate (Japanese) [skip ci]
Currently translated at 99.4% (1071 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ja/
2021-03-31 08:57:02 +00:00
Anonymous 3b254fd54f Translated using Weblate (Icelandic) [skip ci]
Currently translated at 99.4% (1071 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/is/
2021-03-31 08:57:01 +00:00
Anonymous d9e9df6c26 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (1077 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2021-03-31 08:57:00 +00:00
Anonymous c6b969cd61 Translated using Weblate (Hebrew) [skip ci]
Currently translated at 99.4% (1071 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/he/
2021-03-31 08:57:00 +00:00
Anonymous 5ccee34107 Translated using Weblate (Finnish) [skip ci]
Currently translated at 99.4% (1071 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fi/
2021-03-31 08:56:59 +00:00
Anonymous b8724c384a Translated using Weblate (Greek) [skip ci]
Currently translated at 98.9% (1066 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/el/
2021-03-31 08:56:58 +00:00
Anonymous acd82e36c5 Translated using Weblate (Danish) [skip ci]
Currently translated at 99.0% (1067 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/da/
2021-03-31 08:56:57 +00:00
Anonymous afd2b7a29e Translated using Weblate (Czech) [skip ci]
Currently translated at 99.4% (1071 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/cs/
2021-03-31 08:56:57 +00:00
Anonymous 74a26b02db Translated using Weblate (Italian) [skip ci]
Currently translated at 97.3% (1048 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2021-03-31 08:56:53 +00:00
Anonymous 356926a445 Translated using Weblate (Spanish) [skip ci]
Currently translated at 99.7% (1074 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2021-03-31 08:56:52 +00:00
Anonymous 19128e70e7 Translated using Weblate (French) [skip ci]
Currently translated at 99.7% (1074 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2021-03-31 08:56:51 +00:00
Anonymous aa75bc241d Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (1077 of 1077 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2021-03-31 08:56:51 +00:00
Robin Dadswell 88780f33a4 New: Health Check for Downloads to Root Folder
[common]
2021-03-30 08:58:36 +01:00
Qstick 1ed30713f5 Fixed: Perform normal search when id search fails
Fixes #6123
2021-03-29 22:33:10 -04:00
Qstick 3b3dbfec60 Fixed: Default Newznab cats and descriptions
Fixes #5965
2021-03-29 22:33:10 -04:00
bakerboy448 e011614570 Update parser tests to be generic
closes #5889
2021-03-29 22:23:07 -04:00
Qstick 2a1b2187ba Update bug_report.md 2021-03-29 22:13:50 -04:00
bakerboy448 ea3a6171fa Fixed: Cleanse Notifiarr APIKey from logs
[common]
2021-03-29 22:09:22 -04:00
woiza c9477d4b5a Added /rootfolder to swagger.json 2021-03-29 22:20:08 +01:00
ta264 cc466b9e5b Prompt upgrade to mono version on DSM and FreeBSD 2021-03-24 13:21:17 -04:00
bakerboy448 e9ece8a319 Fixed: Typos in Naming Modal 2021-03-24 13:19:02 -04:00
Mark McDowall 22a5304ad8 Fixed: Interactive import modal horizontal scrolling on Firefox mobile
(cherry picked from commit 6c505937dacfa82e965adaaac407c888a1caacce)
2021-03-24 00:30:30 -04:00
Qstick bcb16d484a Fix discord link in issue template 2021-03-23 17:17:59 -04:00
servarr[bot] 50ebd283dd Fixed: Unnecessary idle cpu usage
sonarr ref 4386

(cherry picked from commit 5a69801877eb72899dd9867c39a1b88b7114fe5b)

Co-authored-by: Taloth Saldono <Taloth@users.noreply.github.com>
2021-03-22 23:21:15 +00:00
bakerboy448 53b9332675 Fixed: Qbittorrent api errors when only one of two seed criteria was configured
Fixed: Qbittorrent API errors when only one of two seed criteria was configured
2021-03-21 21:47:33 +00:00
Robin Dadswell bfc969c45c New: TMDb Lists using V4 api 2021-03-20 21:08:45 +00:00
Csaba 31770cd889 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2021-03-19 23:56:47 +00:00
Robin Dadswell 6267497fc0 Fixed: User TMBd lists paging 2021-03-18 09:05:33 +00:00
Robin Dadswell efeb216383 New: Import List by TMDb Company ID 2021-03-18 09:05:33 +00:00
Robin Dadswell 8eb0f33718 Pull Sonarr commit 'Log Skyhook connection failures with more info.' (#6060)
* Log Skyhook connection failures with more info.

(cherry picked from commit 6672650b6b5e152e82fb3ad38a0a158d66c0b83d)

* Log Skyhook connection failures with more info.

(cherry picked from commit f57cf1561beb7ee4a1b3afcdf391488fc7c04d02)

Co-authored-by: Taloth Saldono <Taloth@users.noreply.github.com>
2021-03-17 15:50:03 +00:00
Havok Dan 176bf7ce32 Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 99.1% (1067 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2021-03-15 11:56:46 +00:00
Qstick 4340b6b922 Add a few more cutoff spec logs 2021-03-14 23:38:15 -04:00
Qstick ec2c7ec5af Bump to Net 5.0.4 2021-03-14 23:07:49 -04:00
nitsua f3fb67a62e Fixed: Setting seed criteria while torrent is still being loaded by qbittorrent
Taloth fixed, gitextension dropped the cherry pick link
2021-03-14 22:56:17 -04:00
Taloth Saldono ec8d1c4ae6 Fixed post-install update check not running
(cherry picked from commit eea6be459d5dbfafb9a5285046282c25c4697242)
2021-03-14 22:54:01 -04:00
Anonymous ea3e523f8d Translated using Weblate (Arabic) [skip ci]
Currently translated at 99.9% (1075 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ar/
2021-03-13 21:57:12 +00:00
Anonymous e50550bb33 Translated using Weblate (Chinese (Simplified) (zh_CN)) [skip ci]
Currently translated at 99.5% (1071 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/zh_CN/
2021-03-13 21:57:11 +00:00
Anonymous e0957bfd20 Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 99.1% (1067 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2021-03-13 21:57:10 +00:00
Anonymous 582322adfb Translated using Weblate (Thai) [skip ci]
Currently translated at 99.6% (1072 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/th/
2021-03-13 21:57:10 +00:00
Anonymous 7a3964c42a Translated using Weblate (Bulgarian) [skip ci]
Currently translated at 99.6% (1072 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/bg/
2021-03-13 21:57:09 +00:00
Anonymous b2f6c4dcdc Translated using Weblate (Hindi) [skip ci]
Currently translated at 99.6% (1072 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hi/
2021-03-13 21:57:07 +00:00
Anonymous 45f8700689 Translated using Weblate (Romanian) [skip ci]
Currently translated at 99.1% (1067 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ro/
2021-03-13 21:57:06 +00:00
Anonymous 7c5fe561e0 Translated using Weblate (Vietnamese) [skip ci]
Currently translated at 99.6% (1072 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/vi/
2021-03-13 21:57:06 +00:00
Anonymous 5145a4a211 Translated using Weblate (Turkish) [skip ci]
Currently translated at 99.2% (1068 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/tr/
2021-03-13 21:57:05 +00:00
Anonymous 2aa2164763 Translated using Weblate (Swedish) [skip ci]
Currently translated at 99.6% (1072 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2021-03-13 21:57:04 +00:00
Anonymous 05bde70b14 Translated using Weblate (Russian) [skip ci]
Currently translated at 99.3% (1069 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ru/
2021-03-13 21:57:03 +00:00
Anonymous d8c138694d Translated using Weblate (Portuguese) [skip ci]
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2021-03-13 21:57:02 +00:00
Anonymous ad8504fa89 Translated using Weblate (Polish) [skip ci]
Currently translated at 99.5% (1071 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pl/
2021-03-13 21:57:02 +00:00
Anonymous 2f26a955d1 Translated using Weblate (Dutch) [skip ci]
Currently translated at 99.6% (1072 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2021-03-13 21:57:01 +00:00
Anonymous 3d7808745b Translated using Weblate (Korean) [skip ci]
Currently translated at 99.6% (1072 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ko/
2021-03-13 21:57:00 +00:00
Anonymous 1d7082593d Translated using Weblate (Japanese) [skip ci]
Currently translated at 99.6% (1072 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ja/
2021-03-13 21:57:00 +00:00
Anonymous 82420d6956 Translated using Weblate (Icelandic) [skip ci]
Currently translated at 99.6% (1072 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/is/
2021-03-13 21:56:59 +00:00
Anonymous 77b84be8d1 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2021-03-13 21:56:58 +00:00
Anonymous 24330beca9 Translated using Weblate (Hebrew) [skip ci]
Currently translated at 99.6% (1072 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/he/
2021-03-13 21:56:57 +00:00
Anonymous dd50f1c564 Translated using Weblate (Finnish) [skip ci]
Currently translated at 99.6% (1072 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fi/
2021-03-13 21:56:56 +00:00
Anonymous 4f63015a3e Translated using Weblate (Greek) [skip ci]
Currently translated at 99.1% (1067 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/el/
2021-03-13 21:56:56 +00:00
Anonymous 568185c908 Translated using Weblate (Danish) [skip ci]
Currently translated at 99.2% (1068 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/da/
2021-03-13 21:56:55 +00:00
Anonymous b56525de27 Translated using Weblate (Czech) [skip ci]
Currently translated at 99.6% (1072 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/cs/
2021-03-13 21:56:54 +00:00
Anonymous 4673736b67 Translated using Weblate (Italian) [skip ci]
Currently translated at 97.4% (1049 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2021-03-13 21:56:54 +00:00
Anonymous ffae7d6b31 Translated using Weblate (Spanish) [skip ci]
Currently translated at 99.9% (1075 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2021-03-13 21:56:53 +00:00
Anonymous 42146fc366 Translated using Weblate (French) [skip ci]
Currently translated at 99.9% (1075 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2021-03-13 21:56:46 +00:00
Anonymous de6a465370 Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (1076 of 1076 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2021-03-13 21:56:45 +00:00
bakerboy448 bef12f10a8 Fixed: Missing Translates 2021-03-12 16:19:35 -05:00
bakerboy448 8064a43dee Fixed: Updates to System > More Info 2021-03-12 16:19:35 -05:00
nitsua 3c2e127601 Add a donations section to System for each arr
[Common]
2021-03-12 08:43:59 -05:00
ta264 6ea370870d Don't fail build on BSD integration test fail 2021-03-11 00:18:42 +00:00
servarr[bot] f6f8934ce3 Make it clearer that Maximum size is the global limit.
(cherry picked from commit a848e575cd37eb3cc421a66fc6b4bbfb26782d8e)

Co-authored-by: Taloth Saldono <Taloth@users.noreply.github.com>
2021-03-10 22:21:48 +00:00
Will Segatto 3c59b6aac0 Translated using Weblate (Portuguese) [skip ci]
Currently translated at 100.0% (1073 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2021-03-09 23:56:43 +00:00
Robin Dadswell 2e0d603f4a Fixed: Spelling of Separate in Email Notification Settings 2021-03-09 22:23:11 +00:00
Mark McDowall e8972f2273 Fixed: Don't set cookies for static resources
(cherry picked from commit 6619350f87a8f6ddedfea0cc8ca5b1e9ab006091)
2021-03-09 07:19:32 -05:00
Robin Dadswell 578ce25166 Fix: Consistent SSL option for Download Clients
Closes #4323

(cherry picked from commit 85f4cbe94c6f00352e0d4a38f337fb9417d3032b)
2021-03-08 22:59:11 +00:00
Mark McDowall fc12770495 Fixed: Set SameSite=Strict for SonarrAuth cookie
(cherry picked from commit 675c72f02e7565a937b40c23ec27df6d86f95dc3)
2021-03-08 00:00:35 -05:00
Mark McDowall 5d5e66f0d7 Fixed: Cache headers for static resources
Towards #4356

(cherry picked from commit efd9fe9ad0f08aa55a59a3b8365d8bdd471ffa8b)
2021-03-07 20:14:23 -05:00
Mark McDowall fe2af13fae Just one Application Version header
(cherry picked from commit ab502ffda41aaae8bccaa4f33c62e3fca61b277f)
2021-03-07 20:13:44 -05:00
Robin Dadswell 10205da1c3 Generalized RateLimit logic to all indexers based on indexer id
Co-authored-by: Taloth Saldono <Taloth@users.noreply.github.com>
2021-03-07 23:28:37 +00:00
Robin Dadswell 914d3764dc linting fix 2021-03-07 17:39:02 -05:00
Mark McDowall 59f8a4d2e2 Fixed: Remove selected in queue
(cherry picked from commit 4ed5fefcc6e362cb5c62ec639ee64571c97f9b5b)
2021-03-07 17:17:30 -05:00
Taloth Saldono 024000275d Added mechanism for package maintainers to produce a health check error.
(cherry picked from commit 7da02c236aa03e6aef011130526040c1cb8399fc)
2021-03-07 11:14:40 -05:00
Mark McDowall a3723b5ad7 Fixed: Restoring a backup with a different API didn't reload properly 2021-03-07 10:58:26 -05:00
Qstick e9e034d193 Fixed: Removal of previous service
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2021-03-07 10:54:23 -05:00
Mark McDowall 52dbcfe852 Fixed: Queue refresh closing manual import from queue if items change
(cherry picked from commit e9818b9982d868648d714a37527f1b066486c5df)
2021-03-07 09:31:40 -05:00
Anonymous f488fe75e0 Translated using Weblate (Hebrew) [skip ci]
Currently translated at 99.6% (1069 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/he/
2021-03-06 23:57:10 +00:00
Anonymous 47e85e6388 Translated using Weblate (Finnish) [skip ci]
Currently translated at 99.6% (1069 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fi/
2021-03-06 23:57:09 +00:00
Anonymous 3264de3a96 Translated using Weblate (Polish) [skip ci]
Currently translated at 99.5% (1068 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pl/
2021-03-06 23:57:08 +00:00
Anonymous 1c04aad92e Translated using Weblate (Greek) [skip ci]
Currently translated at 99.1% (1064 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/el/
2021-03-06 23:57:07 +00:00
Anonymous 3b2cf55788 Translated using Weblate (Danish) [skip ci]
Currently translated at 99.2% (1065 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/da/
2021-03-06 23:57:06 +00:00
Anonymous b66ce95139 Translated using Weblate (Russian) [skip ci]
Currently translated at 99.3% (1066 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ru/
2021-03-06 23:57:06 +00:00
Anonymous f6753bf2c2 Translated using Weblate (Arabic) [skip ci]
Currently translated at 99.9% (1072 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ar/
2021-03-06 23:57:04 +00:00
Anonymous 2a981c3bbc Translated using Weblate (Portuguese) [skip ci]
Currently translated at 99.9% (1072 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2021-03-06 23:57:03 +00:00
Anonymous 82004b6535 Translated using Weblate (French) [skip ci]
Currently translated at 99.9% (1072 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2021-03-06 23:57:03 +00:00
Anonymous eb36a1c134 Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 99.1% (1064 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2021-03-06 23:57:02 +00:00
Anonymous 02109437e4 Translated using Weblate (Spanish) [skip ci]
Currently translated at 99.9% (1072 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2021-03-06 23:57:01 +00:00
Anonymous 38872ffc0a Translated using Weblate (Vietnamese) [skip ci]
Currently translated at 99.6% (1069 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/vi/
2021-03-06 23:57:00 +00:00
Anonymous 5e940330b4 Translated using Weblate (Bulgarian) [skip ci]
Currently translated at 99.6% (1069 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/bg/
2021-03-06 23:56:59 +00:00
Anonymous 53b3b58477 Translated using Weblate (Chinese (Simplified) (zh_CN)) [skip ci]
Currently translated at 99.5% (1068 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/zh_CN/
2021-03-06 23:56:58 +00:00
Anonymous d6101259ad Translated using Weblate (Dutch) [skip ci]
Currently translated at 99.6% (1069 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2021-03-06 23:56:57 +00:00
Anonymous cf94178623 Translated using Weblate (Swedish) [skip ci]
Currently translated at 99.6% (1069 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2021-03-06 23:56:56 +00:00
Anonymous 999f6cbcd3 Translated using Weblate (Thai) [skip ci]
Currently translated at 99.6% (1069 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/th/
2021-03-06 23:56:55 +00:00
Anonymous f0191525a1 Translated using Weblate (Czech) [skip ci]
Currently translated at 99.6% (1069 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/cs/
2021-03-06 23:56:54 +00:00
Anonymous 596803cf0b Translated using Weblate (Romanian) [skip ci]
Currently translated at 99.1% (1064 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ro/
2021-03-06 23:56:53 +00:00
Anonymous e90465c4ae Translated using Weblate (Hindi) [skip ci]
Currently translated at 99.6% (1069 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hi/
2021-03-06 23:56:52 +00:00
Anonymous 0c21467411 Translated using Weblate (Icelandic) [skip ci]
Currently translated at 99.6% (1069 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/is/
2021-03-06 23:56:51 +00:00
Anonymous d9d1d8ecad Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (1073 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2021-03-06 23:56:50 +00:00
Anonymous d9faeb11c2 Translated using Weblate (Japanese) [skip ci]
Currently translated at 99.6% (1069 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ja/
2021-03-06 23:56:50 +00:00
Anonymous 7b13ec0dbd Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (1073 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2021-03-06 23:56:49 +00:00
Anonymous 6ffc57c106 Translated using Weblate (Italian) [skip ci]
Currently translated at 97.4% (1046 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2021-03-06 23:56:48 +00:00
Anonymous ee1bcb20dc Translated using Weblate (Korean) [skip ci]
Currently translated at 99.6% (1069 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ko/
2021-03-06 23:56:47 +00:00
Anonymous 19d8604022 Translated using Weblate (Turkish) [skip ci]
Currently translated at 99.2% (1065 of 1073 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/tr/
2021-03-06 23:56:46 +00:00
Robin Dadswell 5926ca5d8a New: On Movie Delete and On Movie File Delete Notifications 2021-03-05 23:30:08 +00:00
Qstick 24de3fdee6 Remove trailing whitespace in HttpResponce 2021-03-04 13:29:15 -05:00
Qstick be40a0d738 Run Analysis on Linux main build (leaving in failed state to test) 2021-03-04 13:16:44 -05:00
Florian 2b97352661 Translated using Weblate (French) [skip ci]
Currently translated at 99.9% (1067 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2021-03-04 12:56:42 +00:00
Qstick 88bc44f7ba Handle 303 and 307 redirects in Http Requests
(cherry picked from commit d6cf370bcdf0aa0d11010c5791332986afb50ddd)
2021-03-03 23:46:51 -05:00
nameproof 95527218af Translated using Weblate (Swedish) [skip ci]
Currently translated at 99.6% (1064 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2021-03-02 20:56:42 +00:00
Qstick 8a062d1cba Fixed: Remove AwesomeHD
Fixes #5978
2021-02-28 21:30:33 -05:00
Qstick 4acd885f19 Fixed: Cleanse Tracker Announce Keys from logs
Co-Authored-By: bakerboy448 <55419169+bakerboy448@users.noreply.github.com>
Co-Authored-By: Taloth <Taloth@users.noreply.github.com>
2021-02-28 21:30:33 -05:00
Qstick a19c292779 Update Contributing [skip ci] 2021-02-28 21:11:10 -05:00
Qstick aa9880b8dd New: Trakt Recommended Lists
Fixes #5980

Co-Authored-By: Michael Casey <7644535+Snarkenfaugister@users.noreply.github.com>
2021-02-28 21:09:15 -05:00
Qstick abe8a06c11 Add Parse endpoint to V3 API 2021-02-28 20:51:48 -05:00
bakerboy448 7ea749e93c Fixed: TMDB link in discord notifcation from .com to .org
Closes: #5975
2021-02-26 16:50:59 -05:00
Qstick f85fc5e578 Update Discord link on MoreInfo page 2021-02-26 12:38:43 -05:00
Mathieu Gagné 20e3a357a5 Updates typo 2021-02-25 21:50:14 -05:00
Qstick 60ac9d3ad7 Update Readme Discord Link 2021-02-24 21:55:58 -05:00
jpalenz77 e5fc423f29 Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (1068 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2021-02-24 13:56:41 +00:00
Qstick 3f5ff23210 Update NuGet.config 2021-02-21 13:37:59 -05:00
nitsua a9792973ee Fixed: Mark as Failed errors (#5939)
Originally by Markus McDowall (cherry picked from commit 12fafb24578d39df2eabd2331558b2da961fe8b6)

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>

Fixes: #5907
Fixes: #5938
2021-02-14 10:28:30 -05:00
Qstick 90289de22c Fix Import List Root Folder Check to run on Import List update 2021-02-14 01:49:21 -05:00
Qstick a68011988e Fixed: Error checking if files should be deleted after import won't leave import in limbo
Fixes #5917

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2021-02-14 01:19:25 -05:00
Mark McDowall 2fd030bd5c New: Health check for import lists with missing root folders
New: Show missing root folder path in edit for Import List

Closes #5908

(cherry picked from commit ae196af2ad368d49fde2358f0987ed7650c7f29c)
2021-02-14 01:16:36 -05:00
Mark McDowall 33cd9f555e Fixed: Unable to close indexer category select input on mobile
(cherry picked from commit e42d1af5ff8f3eb987195caa7ec8a0bbaf4a00c3)
2021-02-14 01:16:36 -05:00
Robin Dadswell 94df76b6e6 Added default state for release date and cinema release on poster view (#5932) 2021-02-14 01:11:50 -05:00
woiza 065846464d Added RootFolderPath prop in swagger.json (#5880) [skip ci] 2021-02-14 01:01:27 -05:00
ta264 108609d064 New: .NET 5 support for FreeBSD 11+ 2021-02-11 09:17:33 +00:00
nitsua 0fcad533eb Fixed maintenance release not showing as such in AppUpdatedModal
Originally by Taloth 4559eed0ecf4b87b8aa16a86d2161ac72fbf54e5
2021-02-10 16:32:38 -05:00
ta264 c7b5a42bea Bump to .net to 5.0.3 2021-02-10 12:44:44 +00:00
bakerboy448 fa6b7ad287 Fixed: Map 4k H265 releases as 4k 2021-02-08 12:55:18 -05:00
bakerboy448 b51ce06e04 Fixed: Correctly Map 2160p releases that are BRRips as 2160p
Closes #5639
2021-02-08 12:55:18 -05:00
Mark McDowall 63cf10c29a Fixed: Restoring backup from zip file on disk
(cherry picked from commit 5960035d5d660a923e11b0300833b60c64271522)
2021-02-08 12:33:46 -05:00
Qstick 6b5e743583 Fixed: Don't ignore default Boolean in db serialization 2021-02-08 10:35:16 -05:00
Mark McDowall 743946b929 Update column properties when restoring persisted state
(cherry picked from commit 653db8290e0a7737348d911d322c4218c3b5b677)
2021-02-07 20:41:04 -05:00
Qstick cf89533b37 Translated using Weblate (Arabic) [skip ci]
Currently translated at 100.0% (1068 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ar/
2021-02-07 23:30:46 +00:00
Qstick 7031a8fe44 Added translation using Weblate (Arabic) [skip ci] 2021-02-07 23:26:19 +00:00
Matt Evans d8c962a911 Fixed: Detect Dolby Vision as HDR
Co-Authored-By: Taloth <Taloth@users.noreply.github.com>

#5860
2021-02-07 17:24:12 -05:00
Qstick 6702c7d21b New: Add Arabic Language
Fixes #5883
2021-02-07 17:13:57 -05:00
Qstick e64dd799e6 Add API Integration tests to ensure RemoteUrl is really remote 2021-02-07 17:04:44 -05:00
Qstick 47c2a15b70 Fixed: RemoteUrl overridden for Movie call with TmdbId param 2021-02-07 16:13:56 -05:00
Mark McDowall 4bf726cc66 Fixed: Table column order resetting after refresh
#4297

(cherry picked from commit 044cb563a6488c16916ea7617d1f91404330b06f)
2021-02-07 15:34:28 -05:00
Qstick dd61480d60 Fixed: Settings fields being altered during save
[common]
Fixes #5871
2021-02-07 10:09:46 -05:00
Qstick b0753ab153 Fix DownloadStation integration in DSM 7
[common]
Fixes #5567
2021-02-07 08:58:29 -05:00
TheCatLady 281afe7d9d Fix typo 2021-02-06 21:22:50 -05:00
TheCatLady bd0fe16b52 Handle additional groups/encoders that do not follow -RlsGrp format 2021-02-06 21:22:50 -05:00
ta264 901723b8e3 New: Log out body for bad API requests 2021-02-06 21:21:43 -05:00
ta264 3a146ea667 Fixed: Adding indexers from presets 2021-02-06 21:21:43 -05:00
bakerboy448 88b9a47c79 bump chrome driver from 86 to 88
(cherry picked from commit d7813c2255b05e68931503a61c214fa2efc4bde8)
2021-02-06 16:07:23 -05:00
bakerboy448 fe5445ba31 update FR template [skip ci] 2021-02-06 11:26:58 -05:00
foXaCe 39f08b6283 Translated using Weblate (French) [skip ci]
Currently translated at 100.0% (1068 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2021-02-06 05:40:42 +00:00
Qstick 8831fd7b50 Fixed: Grab ImdbId and TmdbId from Rarbg results 2021-02-05 00:06:15 -05:00
Qstick 70e4324a7c Add crossorigin use-credentials attribute to manifest tag
[common]
Fixes #5863
2021-02-04 23:04:26 -05:00
Qstick 35a53c5627 New: Store FileId on Import History Events 2021-02-04 22:22:26 -05:00
Qstick 9b85f328a6 New: Allow Manual Search when Movie not monitored
Fixes #3235
2021-02-04 21:20:32 -05:00
bakerboy448 012fe53acc Fixed: Don't Parse TMDb id and IMDb id as group 2021-02-04 21:05:02 -05:00
bakerboy448 566c1405c2 New: Handle select groups that do not follow -RlsGrp format
Closes #3550
2021-02-04 21:05:02 -05:00
Qstick 83c637e8cb Fixed: Two VideoCodec naming token options
Fixes #5862
2021-02-04 20:54:44 -05:00
ta264 fd612f9258 Bump Dapper to 2.0.78 2021-02-04 20:22:04 -05:00
ta264 621edba82d New: Faster initial movie load 2021-02-04 20:22:04 -05:00
ta264 f03dfda2f0 New: Use System.Text.Json for Nancy and SignalR 2021-02-04 20:22:04 -05:00
Csaba e623efefd3 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (1068 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2021-02-04 09:40:41 +00:00
Qstick 7742a81782 Fixed: Use Tag Label instead of db Id for Kodi Metadata
Fixes #5713
2021-02-03 23:42:48 -05:00
Taloth Saldono 8588d2e2a3 Fixed: Validation of new qbittorrent max-ratio action config
(cherry picked from commit d1c3ae17491726320c58561548a21d83dae7fe7d)
2021-02-03 23:34:12 -05:00
bakerboy448 86c5f06c5b Fixed: Awesome HD website link updated (#5832) 2021-02-02 22:50:33 -05:00
nitsua 6d7fb3de25 Fixed: Status on search showing queue status instead of missing (#5854)
Fix status on search to show a downloading status when it is in queue
Fix for monitor not being set to true when adding from search
2021-02-02 21:57:27 -05:00
Qstick a0d2af54e8 Fixed: Naming Token Regex can fail on certain Cultures (#5855)
[common]
2021-02-02 21:45:13 -05:00
Qstick ad3ddd11cf [API Docs] Document Queue endpoints 2021-02-02 21:42:25 -05:00
foXaCe 1372abecc0 Translated using Weblate (French) [skip ci]
Currently translated at 99.9% (1067 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2021-02-02 23:40:48 +00:00
Havok Dan 3ddbd30604 Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 99.2% (1060 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2021-02-02 23:40:42 +00:00
reloxx eff2e11652 Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (1068 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2021-02-02 23:40:41 +00:00
Qstick aa95781d5d Fixed: RootFolders may not load when adding collections
Fixes #5753
2021-02-01 23:20:30 -05:00
Taloth Saldono 6e46720d7b Fixed: FLAC audio channels in media info
(cherry picked from commit ab45910e5643aa8390797ae98af94eac690b3bb5)
2021-02-01 13:08:57 -05:00
Anonymous 7e70166b62 Translated using Weblate (Turkish) [skip ci]
Currently translated at 99.3% (1061 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/tr/
2021-01-31 07:45:10 +00:00
Anonymous 444305aa65 Translated using Weblate (Danish) [skip ci]
Currently translated at 99.3% (1061 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/da/
2021-01-31 07:45:09 +00:00
Anonymous 8fd1f75e21 Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 98.9% (1057 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2021-01-31 07:45:07 +00:00
Anonymous 625cdab04a Translated using Weblate (Romanian) [skip ci]
Currently translated at 99.2% (1060 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ro/
2021-01-31 07:45:07 +00:00
Anonymous 325a9c34e3 Translated using Weblate (Hindi) [skip ci]
Currently translated at 99.7% (1065 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hi/
2021-01-31 07:45:06 +00:00
Anonymous a7e4078c53 Translated using Weblate (German) [skip ci]
Currently translated at 99.7% (1065 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2021-01-31 07:45:04 +00:00
Anonymous d2bfddc182 Translated using Weblate (Italian) [skip ci]
Currently translated at 97.5% (1042 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2021-01-31 07:45:03 +00:00
Anonymous a6777015f7 Translated using Weblate (Hebrew) [skip ci]
Currently translated at 99.7% (1065 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/he/
2021-01-31 07:45:02 +00:00
Anonymous f8b211c561 Translated using Weblate (Polish) [skip ci]
Currently translated at 99.6% (1064 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pl/
2021-01-31 07:45:01 +00:00
Anonymous fce86db9c5 Translated using Weblate (Russian) [skip ci]
Currently translated at 99.4% (1062 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ru/
2021-01-31 07:45:00 +00:00
Anonymous 2ff07a1368 Translated using Weblate (Czech) [skip ci]
Currently translated at 99.7% (1065 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/cs/
2021-01-31 07:44:58 +00:00
Anonymous 208b17e9f5 Translated using Weblate (Thai) [skip ci]
Currently translated at 99.7% (1065 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/th/
2021-01-31 07:44:57 +00:00
Anonymous e0ce7b3294 Translated using Weblate (Spanish) [skip ci]
Currently translated at 99.9% (1067 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2021-01-31 07:44:56 +00:00
Anonymous 7af75da694 Translated using Weblate (Finnish) [skip ci]
Currently translated at 99.7% (1065 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fi/
2021-01-31 07:44:55 +00:00
Anonymous 86213d91a2 Translated using Weblate (Chinese (Simplified) (zh_CN)) [skip ci]
Currently translated at 99.6% (1064 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/zh_CN/
2021-01-31 07:44:54 +00:00
Anonymous eed4a4ec68 Translated using Weblate (Swedish) [skip ci]
Currently translated at 99.7% (1065 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2021-01-31 07:44:53 +00:00
Anonymous 24d4390550 Translated using Weblate (Portuguese) [skip ci]
Currently translated at 99.9% (1067 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2021-01-31 07:44:52 +00:00
Anonymous 4983cb9745 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 99.9% (1067 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2021-01-31 07:44:51 +00:00
Anonymous e71e386cb1 Translated using Weblate (Korean) [skip ci]
Currently translated at 99.7% (1065 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ko/
2021-01-31 07:44:50 +00:00
Anonymous d03a37ed60 Translated using Weblate (Icelandic) [skip ci]
Currently translated at 99.7% (1065 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/is/
2021-01-31 07:44:49 +00:00
Anonymous 5ea88f6bcd Translated using Weblate (Greek) [skip ci]
Currently translated at 99.2% (1060 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/el/
2021-01-31 07:44:48 +00:00
Anonymous d74415a3d7 Translated using Weblate (Bulgarian) [skip ci]
Currently translated at 99.7% (1065 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/bg/
2021-01-31 07:44:46 +00:00
Anonymous f4deefd21e Translated using Weblate (Dutch) [skip ci]
Currently translated at 99.7% (1065 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2021-01-31 07:44:45 +00:00
Anonymous 6296356e42 Translated using Weblate (French) [skip ci]
Currently translated at 99.9% (1067 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2021-01-31 07:44:44 +00:00
Anonymous a777880a91 Translated using Weblate (Vietnamese) [skip ci]
Currently translated at 99.7% (1065 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/vi/
2021-01-31 07:44:43 +00:00
Anonymous eb311f33ef Translated using Weblate (Japanese) [skip ci]
Currently translated at 99.7% (1065 of 1068 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ja/
2021-01-31 07:44:42 +00:00
bakerboy448 34ba436204 New: Additional Discover Enhancements 2021-01-31 02:16:32 -05:00
bakerboy448 45bb108127 Fixed: Movie Recommendations not excluding movies on the exclusion list 2021-01-31 02:16:32 -05:00
Taloth Saldono 0443cc34c6 Fixed enter in modal confirmation dialogs
(cherry picked from commit 930742ae2c69a530afe60f76a5824f2722540df8)
2021-01-31 02:12:27 -05:00
Mark McDowall 6ad6bf270f New: Parsing of '[WEB]' as WebDL
Fixes #5742

(cherry picked from commit ba2ca7ee2929f8ed5411e11e9a96001a37723dcc)
2021-01-31 02:02:42 -05:00
Jesse Chan 2237624333 Initial support for Flood (#5552)
* Initial support for Flood

* Flip StartOnAdd to AddPaused
2021-01-31 01:46:01 -05:00
Robin Dadswell 39d11b4669 replaced words with icons and matched the sort for consistency 2021-01-31 01:44:42 -05:00
Robin Dadswell 70faa123ee capitlisation 2021-01-31 01:44:42 -05:00
Robin Dadswell f4869e6bc9 added words next to the release dates 2021-01-31 01:44:42 -05:00
Robin Dadswell 2a3fc81b8a added translation 2021-01-31 01:44:42 -05:00
Robin Dadswell a2182e2fca removed unnecessary lines 2021-01-31 01:44:42 -05:00
Robin Dadswell fe23c985a2 linting fixes 2021-01-31 01:44:42 -05:00
Robin Dadswell 4ffd0d2ddb Added missed property 2021-01-31 01:44:42 -05:00
Robin Dadswell efd3aad6b0 started adding new option for cinema release 2021-01-31 01:44:42 -05:00
Robin Dadswell 11b4967629 tidied up unnecesarry lines and added translation line 2021-01-31 01:44:42 -05:00
Robin Dadswell b6e46ad8fd updated date order to be InCinemas and then the earlier of either Physical/Digital Release 2021-01-31 01:44:42 -05:00
Robin Dadswell c28b62da2a added sort by calculated release date 2021-01-31 01:44:42 -05:00
Robin Dadswell 600c7e3391 fixed releasedate sorting for inCinemas/digitalRelease/physicalRelease 2021-01-31 01:44:42 -05:00
Robin Dadswell 7107aeaddc minor fixes based on feedback 2021-01-31 01:44:42 -05:00
Robin Dadswell 913766f9af tidied up to only have getRelativeDate once per item 2021-01-31 01:44:42 -05:00
Robin Dadswell 9e7ea6f55b linting fix 2021-01-31 01:44:42 -05:00
Robin Dadswell c2c4186965 formatted date 2021-01-31 01:44:42 -05:00
Robin Dadswell 1a755bd3c0 added option and start of info 2021-01-31 01:44:42 -05:00
Qstick e5f66da087 New: Don't process files during Manual Import if there are more than 100 items
Fixes #5357

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2021-01-31 01:17:01 -05:00
Qstick 2a93686360 New: Reprocess items after selection in Manual Import
Fixes #5199

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2021-01-31 01:06:39 -05:00
Qstick f33f004aa9 Fixed: Sorting interactive search by quality for unknown movie results
Fixes #5026
2021-01-31 00:39:44 -05:00
Qstick 30293bc7cc Cleanup MoviesSearchService 2021-01-30 23:24:52 -05:00
Qstick a1db7a8f1e Fixed: Sorting in Interactive search duplicates results
Fixes #5760
Fixes #5765

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
Co-Authored-By: Taloth <Taloth@users.noreply.github.com>
2021-01-30 22:47:06 -05:00
Qstick 539fcb91c9 Bump Version to 3.1.0 2021-01-30 22:28:16 -05:00
Taloth Saldono 970848acc3 Fixed: OSX version detection
Fixes #5615
2021-01-30 22:27:08 -05:00
Mark McDowall 2b7a383886 Fixed: Managing display profiles on mobile
Fixes #5761

(cherry picked from commit c2fcdb445776d3898be7938216cf8ace65a1a236)
2021-01-30 22:22:25 -05:00
Qstick 4dc67c027b Fixed accounting for zero terminator in long path limitation
Fixes #5763

Co-Authored-By: Taloth <Taloth@users.noreply.github.com>
2021-01-30 22:20:39 -05:00
Taloth Saldono a12395b468 Cleanup Movie Scanned Handler 2021-01-30 22:16:37 -05:00
Qstick 19dceb35fa Better task interval fetching
Fixes #5700

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2021-01-30 22:04:15 -05:00
Qstick b56043504b Simplify Quality size limit logic
Fixes #5701
2021-01-30 22:01:29 -05:00
Qstick f2efdd8b6d Update indexer category parameters for the other nyaa
Fixes #5372
2021-01-30 22:01:04 -05:00
foXaCe 13b14f4d38 Translated using Weblate (French) [skip ci]
Currently translated at 100.0% (1062 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2021-01-31 00:40:46 +00:00
bakerboy448 ecc2996669 Fix: Correct wording for Blacklist Help Text 2021-01-30 19:40:41 -05:00
Taloth Saldono 1df31f9059 Fixed duplicate UpdateHistory items
(cherry picked from commit ad9e709d96a4c8635f52e9ee8623fa805e628de6)
2021-01-30 16:05:03 -05:00
Mark McDowall 79d4e0da80 Fixed: Update modal error
(cherry picked from commit 6d911581c3604a69b4a58c07da39ffb2a10fbf8d)
2021-01-30 16:05:03 -05:00
Taloth Saldono 0dcb07f170 Fixed corrupt Update History due to date-time notation 2021-01-30 16:05:03 -05:00
Taloth Saldono e8040a0819 Fixed test 2021-01-30 16:05:03 -05:00
Qstick 553a8f2a0a New: Show previously installed version in Updates UI
Co-Authored-By: Taloth <Taloth@users.noreply.github.com>
2021-01-30 16:05:03 -05:00
Qstick c892b827af Fixed: Don't run recommendations if Sqlite < 3.9
Fixes #5833
2021-01-30 14:40:44 -05:00
bakerboy448 1b36b512d7 fix sonarresque references 2021-01-28 14:25:13 -05:00
ta264 560dc1ffed Fix logging of startup location 2021-01-27 19:17:45 +00:00
ta264 14d43e6d6b Fixed: Built-in updater for mono version
The change to set ExecutingApplication in 26a04c9fd broke mono - it
returned the location of the mono executable and not radarr.

It seems that there was a change in behaviour in net5.0 which means we
can no longer use the same code in both cases.
2021-01-27 19:17:45 +00:00
Anonymous bc1e131e49 Translated using Weblate (Chinese (Simplified) (zh_CN)) [skip ci]
Currently translated at 99.7% (1059 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/zh_CN/
2021-01-27 18:40:59 +00:00
Anonymous 61509b53d1 Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 99.0% (1052 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2021-01-27 18:40:58 +00:00
Anonymous b7f680ac98 Translated using Weblate (Thai) [skip ci]
Currently translated at 99.8% (1060 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/th/
2021-01-27 18:40:58 +00:00
Anonymous c9526b7dfd Translated using Weblate (Bulgarian) [skip ci]
Currently translated at 99.8% (1060 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/bg/
2021-01-27 18:40:57 +00:00
Anonymous 9f6bca0810 Translated using Weblate (Hindi) [skip ci]
Currently translated at 99.8% (1060 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hi/
2021-01-27 18:40:56 +00:00
Anonymous 114549ca7b Translated using Weblate (Romanian) [skip ci]
Currently translated at 99.3% (1055 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ro/
2021-01-27 18:40:55 +00:00
Anonymous 481863ca1f Translated using Weblate (Vietnamese) [skip ci]
Currently translated at 99.8% (1060 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/vi/
2021-01-27 18:40:54 +00:00
Anonymous 13e55f7c37 Translated using Weblate (Turkish) [skip ci]
Currently translated at 99.4% (1056 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/tr/
2021-01-27 18:40:54 +00:00
Anonymous 397442f32e Translated using Weblate (Swedish) [skip ci]
Currently translated at 99.8% (1060 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2021-01-27 18:40:53 +00:00
Anonymous 71ae27fc0c Translated using Weblate (Russian) [skip ci]
Currently translated at 99.5% (1057 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ru/
2021-01-27 18:40:53 +00:00
Anonymous 286468e6ab Translated using Weblate (Portuguese) [skip ci]
Currently translated at 100.0% (1062 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2021-01-27 18:40:52 +00:00
Will Segatto aafd82ba73 Translated using Weblate (Portuguese) [skip ci]
Currently translated at 100.0% (1062 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2021-01-27 18:40:52 +00:00
Anonymous cff5c03af3 Translated using Weblate (Polish) [skip ci]
Currently translated at 99.7% (1059 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pl/
2021-01-27 18:40:51 +00:00
Anonymous c394fcc085 Translated using Weblate (Dutch) [skip ci]
Currently translated at 99.8% (1060 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2021-01-27 18:40:50 +00:00
Anonymous a6f237bd70 Translated using Weblate (Korean) [skip ci]
Currently translated at 99.8% (1060 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ko/
2021-01-27 18:40:50 +00:00
Anonymous 013915be62 Translated using Weblate (Japanese) [skip ci]
Currently translated at 99.8% (1060 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ja/
2021-01-27 18:40:49 +00:00
Anonymous 9bec7d2ad0 Translated using Weblate (Icelandic) [skip ci]
Currently translated at 99.8% (1060 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/is/
2021-01-27 18:40:49 +00:00
Anonymous 808797f403 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (1062 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2021-01-27 18:40:48 +00:00
Anonymous 230a3df3f3 Translated using Weblate (Hebrew) [skip ci]
Currently translated at 99.8% (1060 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/he/
2021-01-27 18:40:47 +00:00
Anonymous 26f2b6a3d9 Translated using Weblate (Finnish) [skip ci]
Currently translated at 99.8% (1060 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fi/
2021-01-27 18:40:47 +00:00
Anonymous e039dd81df Translated using Weblate (Greek) [skip ci]
Currently translated at 99.3% (1055 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/el/
2021-01-27 18:40:46 +00:00
Anonymous cd6dd33359 Translated using Weblate (Danish) [skip ci]
Currently translated at 99.4% (1056 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/da/
2021-01-27 18:40:45 +00:00
Anonymous 8803ef4dbd Translated using Weblate (Czech) [skip ci]
Currently translated at 99.8% (1060 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/cs/
2021-01-27 18:40:45 +00:00
Anonymous 5f0b2c91a1 Translated using Weblate (Italian) [skip ci]
Currently translated at 97.6% (1037 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2021-01-27 18:40:45 +00:00
Anonymous 1684fbb119 Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (1062 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2021-01-27 18:40:41 +00:00
Anonymous 326bcdc18c Translated using Weblate (French) [skip ci]
Currently translated at 96.9% (1030 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2021-01-27 18:40:40 +00:00
Anonymous ac0845eedf Translated using Weblate (German) [skip ci]
Currently translated at 99.8% (1060 of 1062 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2021-01-27 18:40:40 +00:00
woiza aa00959010 Fix wrong type for Movie->titleSlug and Rating->value in api docs (#5824) [skip-ci] 2021-01-25 21:31:11 -05:00
Mark McDowall 986f8d43c0 Fixed: Update path before importing to ensure it hasn't changed
Closes #5654
Closes #5682
Closes #5780

(cherry picked from commit ca34f64eb0a8f26be66030988284b17c9d65f460)
2021-01-25 21:26:34 -05:00
Qstick 07f5312d43 Fixed: Don't double load Quality Definitions 2021-01-25 21:20:15 -05:00
ta264 7754589353 New: Check SQLite is at least version 3.9.0 2021-01-25 17:50:16 +00:00
ta264 8428de7a00 Fixed: Update Mono version check now minimum is 5.20 2021-01-25 17:50:16 +00:00
nameproof d210082dad Translated using Weblate (Swedish) [skip ci]
Currently translated at 99.8% (1059 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2021-01-25 16:40:43 +00:00
jpalenz77 4f9df6a114 Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2021-01-25 16:40:39 +00:00
Havok Dan a5726cd65e Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 99.0% (1051 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2021-01-25 16:40:38 +00:00
tenshiak 3bfb08c3ff Treat subbed as unknown language (#5677)
* Subbed releases shouldn't report as different lang

* Add tests for subbed releases

* Remove whitespace
2021-01-24 23:53:15 -05:00
Mark McDowall ceeea9f7c6 Fixed: Queue refresh closing manual import from queue if items change
(cherry picked from commit f5d690aa7b703e6fc0cd7eeced177a28cfed4962)
2021-01-24 23:51:35 -05:00
Qstick 83b1e037d5 Fix Enum.GetName call 2021-01-24 23:35:34 -05:00
Qstick 9cc5343547 Fixed: HealthCheck level returns "Type" for Custom Scripts
Fixes #5803
2021-01-24 22:37:15 -05:00
ta264 e3cc4f4cb1 Fixed: Set musl status at compile time
[common]
2021-01-24 22:13:36 -05:00
Laurie Richards f0bb614360 Fix: Youtube trailers do not play from scraped data
Currently the scraper puts an https:// link, this is not compatible with the YouTube plugin, it needs to be in plugin format with YouTube ID
2021-01-23 12:35:11 -05:00
jpalenz77 9241f4a40d Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2021-01-21 14:40:36 +00:00
ta264 8e6157074d Use ghcr.io for test images 2021-01-19 21:43:53 +00:00
Csaba 188b02e5c7 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2021-01-20 05:40:36 +00:00
bakerboy448 acb8e1d3c8 New: Renamed Quick Import to Move Automatically
Closes: #5667
2021-01-18 20:50:16 -05:00
bakerboy448 ab31cccfb2 .git updates for labels [skip ci] 2021-01-18 20:49:52 -05:00
bakerboy448 42afaa17ee update bug template [skip ci]
[common]
2021-01-18 20:49:52 -05:00
Qstick c6123a076f Fix Tests from Site Image Changes 2021-01-18 13:17:10 -05:00
reloxx 0f0aaeef4b Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2021-01-18 13:05:47 +00:00
Qstick 2983e27dcd Fixed: Size Filter for Interactive Search missing ValueType 2021-01-18 08:05:38 -05:00
Qstick a18036eed4 Add Logo to the Loading Screen for.... clarity 2021-01-18 08:05:38 -05:00
Qstick 2013e1f580 Replace SmtpClient with Mailkit 2021-01-18 08:05:38 -05:00
Qstick 1e396ead5e Bump NetFramework to 4.7.2 2021-01-18 08:05:38 -05:00
ta264 5ea3ad45cb Hack: ignore wonky depedencies in signalR js client 2021-01-18 08:05:38 -05:00
ta264 26a04c9fd1 New: Build with NET5 2021-01-18 08:05:38 -05:00
ta264 7f29af6d4d Move test harness packages to Directory.Build.props 2021-01-18 08:05:38 -05:00
Robin Dadswell 92f3a18e17 Fixed: Error handling when cannot create folder in Recycling Bin
(cherry picked from commit c05fccb90d64d92836603b55d4bd30d5cbdb96a5)
2021-01-17 14:06:30 -05:00
bakerboy448 7836246b05 Fixed: Parse standalone UHD as 4K if no other resolution info is present 2021-01-17 13:07:24 -05:00
Taloth Saldono e2b2061ee1 Fixed: Unnecessary certificate validation errors on localhost/loopback
(cherry picked from commit c28cafba0a1b92f065541ebdae9db06ab1e5ac82)
2021-01-16 23:29:39 -05:00
Taloth Saldono 8d651e6f7a Fixed Agenda Time wrapping
(cherry picked from commit 63607ad5415e9a900696a32933551c27e336784c)
2021-01-16 23:29:12 -05:00
Mark McDowall 25c0ed1cd0 New: Treat Manual Bad in history as failed
(cherry picked from commit ab478fd64bdf2b710fb865006858a1a7dbdbad21)
2021-01-16 21:45:26 -05:00
Qstick 638db3d8d7 Fix name of max NumberInput in QualityDefinition.js
(cherry picked from commit a225b34806be6a206345acef3a6820df5a4be2e0)
2021-01-13 20:16:06 -05:00
nitsua 3a5d18f52d Add tooltips to the icons in the Files tab
Fixes: #5712
2021-01-13 17:44:12 -05:00
nitsua c8d0a6a4ea Correct an instance of sonarr in one of the validation error output examples 2021-01-13 17:43:21 -05:00
nitsua 553b8b1945 Add movie status to the main search page if the movie is already in the db (label on small screen otherwise progress bar under poster)
Fix issues with yellow/grey movie status color not showing up properly
Refactor the getMovieStatus to be more generic
2021-01-11 22:52:48 -05:00
Qstick e263d066da Remove TODO [skip ci] 2021-01-11 19:47:07 -05:00
Havok Dan cdaf88efa1 Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 99.1% (1052 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2021-01-11 14:40:33 +00:00
bakerboy448 ea801665e4 Fixed: Correctly Parse Release Groups with a - in their name
[common]
2021-01-10 20:32:58 -05:00
bakerboy448 a81b6f41af Fixed: Parse 'Assembly Cut' as an Edition
Closes #5716
2021-01-10 18:10:17 -05:00
faxity 177d77db69 Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2021-01-10 13:40:33 +00:00
Qstick 8dafa29f8c Bump Radarr Version 3.0.2 2021-01-08 21:42:24 -05:00
Qstick 6b3bdb4f88 Bump Sentry 2.1.8 / SentryJS 5.29.2 2021-01-08 21:41:44 -05:00
Mark McDowall 56bb319934 Use createHandleActions for adding/removing commands so itemMap is synced properly
(cherry picked from commit 99be6a7e4065b77c910df6444a468fedc23e90cc)
2021-01-08 20:58:53 -05:00
Qstick 6de847a361 Fixed: Don't try to clean Update Folder if it doesn't exist
(cherry picked from commit 24f96fa2a4c1fd92f6433ec94edf6e55b7c83d89)
2021-01-08 20:56:16 -05:00
Mark McDowall 94591dea93 New: Removing update folder from temp folder during housekeeping
(cherry picked from commit c1d060ff58fc466f4a2cc232bff07294cf224a9a)
2021-01-08 20:55:16 -05:00
bakerboy448 5cb20b0dac Fixed: Parsing of 4Kto1080p as 1080p
(cherry picked from commit 056a699daf2ed0b8314f0b4d6bdec20cd24818c3)
2021-01-08 20:09:41 -05:00
bakerboy448 69954c50cb it's 2021 now [skip ci] 2021-01-08 17:32:11 -05:00
Anonymous e5d72bb995 Translated using Weblate (Korean) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ko/
2021-01-07 21:15:57 +00:00
Anonymous ae7c78ba48 Translated using Weblate (Hebrew) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/he/
2021-01-07 21:14:42 +00:00
Anonymous 84498d9e92 Translated using Weblate (Danish) [skip ci]
Currently translated at 99.6% (1057 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/da/
2021-01-07 21:13:33 +00:00
Anonymous d12b75e223 Translated using Weblate (Russian) [skip ci]
Currently translated at 99.7% (1058 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ru/
2021-01-07 21:12:34 +00:00
Anonymous b27367088e Translated using Weblate (Polish) [skip ci]
Currently translated at 99.9% (1060 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pl/
2021-01-07 21:12:32 +00:00
Anonymous 570bc87ab7 Translated using Weblate (Greek) [skip ci]
Currently translated at 99.5% (1056 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/el/
2021-01-07 21:11:25 +00:00
pannbiff 1ae4c53e27 Translated using Weblate (Swedish) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2021-01-07 21:10:19 +00:00
Anonymous cd84045161 Translated using Weblate (Vietnamese) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/vi/
2021-01-07 21:10:17 +00:00
Anonymous 667fdc64e3 Translated using Weblate (Spanish) [skip ci]
Currently translated at 97.9% (1039 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2021-01-07 21:09:02 +00:00
Anonymous e424264504 Translated using Weblate (Portuguese) [skip ci]
Currently translated at 97.7% (1037 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2021-01-07 21:08:44 +00:00
ta264 7716c31ebd Translated using Weblate (Bulgarian) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/bg/
2021-01-07 21:08:29 +00:00
Anonymous 6d729416d9 Translated using Weblate (Italian) [skip ci]
Currently translated at 97.8% (1038 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2021-01-07 21:07:20 +00:00
Anonymous 1668978fc6 Translated using Weblate (Chinese (Simplified) (zh_CN)) [skip ci]
Currently translated at 99.9% (1060 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/zh_CN/
2021-01-07 21:07:07 +00:00
Anonymous 874840c921 Translated using Weblate (Finnish) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fi/
2021-01-07 21:07:05 +00:00
Anonymous defd08addf Translated using Weblate (Icelandic) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/is/
2021-01-07 21:05:48 +00:00
Anonymous c072e0a2ca Translated using Weblate (Turkish) [skip ci]
Currently translated at 99.6% (1057 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/tr/
2021-01-07 21:04:34 +00:00
Anonymous d9ce781dfa Translated using Weblate (Dutch) [skip ci]
Currently translated at 99.9% (1060 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2021-01-07 21:03:30 +00:00
Anonymous a438d43c57 Translated using Weblate (French) [skip ci]
Currently translated at 97.1% (1031 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2021-01-07 21:03:27 +00:00
ta264 81f0fd38ac Translated using Weblate (French) [skip ci]
Currently translated at 97.1% (1031 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2021-01-07 21:03:17 +00:00
Anonymous bbc9de464c Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 98.7% (1048 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2021-01-07 21:03:15 +00:00
ta264 0738e35583 Translated using Weblate (Hindi) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hi/
2021-01-07 21:03:14 +00:00
Anonymous 6e2f13f76b Translated using Weblate (Romanian) [skip ci]
Currently translated at 99.5% (1056 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ro/
2021-01-07 21:02:05 +00:00
Anonymous 2fb36f7c6c Translated using Weblate (Japanese) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ja/
2021-01-07 21:01:12 +00:00
Anonymous 5ead82903c Translated using Weblate (Czech) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/cs/
2021-01-07 20:59:51 +00:00
Anonymous b4c03aae6d Translated using Weblate (Thai) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/th/
2021-01-07 20:58:38 +00:00
pannbiff 2a8a2ce3b0 Translated using Weblate (Swedish) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2021-01-07 20:05:55 +00:00
Anonymous c75a9dfe34 Translated using Weblate (Swedish) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2021-01-07 20:05:55 +00:00
Qstick 7410a2db5d Remove validation test for From Addresses 2021-01-06 23:50:34 -05:00
Qstick 74c89e1d44 Enforce Selection of Credit Type on Person Lists
Fixes: #5684
2021-01-06 23:19:31 -05:00
Qstick f120b84c43 Fixed: Allow "Pretty" From Address for Email
Fixes #5497
2021-01-06 23:11:15 -05:00
Qstick 88ec106ec6 Better validation for Imdb Ids from lists
Fixes #5674
2021-01-06 23:06:07 -05:00
wangerry 99b75a3089 Translated using Weblate (Chinese (Simplified)) [skip ci]
Currently translated at 98.6% (1047 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/zh_CN/
2021-01-06 11:43:28 +00:00
Forsefrits 50592d5bb6 Translated using Weblate (Dutch) [skip ci]
Currently translated at 96.6% (1025 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2021-01-06 11:43:28 +00:00
Qstick 9fce6b1026 Really ignore ResizeObserver loop errors
(cherry picked from commit 99a7540fe4dc5160f6487cfe810e99166ee4582e)
2021-01-05 22:54:25 -05:00
Csaba 5f32627bfb Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2021-01-04 20:43:22 +00:00
Mark McDowall 56b658cc96 Fixed: Restored robots.txt
(cherry picked from commit 37501094d7256e4dbe13de33b392933f6d475553)
2020-12-31 16:39:23 -05:00
nitsua c22ae12c1f Move the Movie column next to the Folder colum for easier matching (#5078)
Fixes: #5075
2020-12-30 23:30:55 -05:00
tenshiak 4bac44e893 New: Better Polish language Release Parsing (#5592)
* Parse Polish language

* Tests for parsing Polish language
2020-12-30 22:50:45 -05:00
jasimancas 1c58e26183 - Change <writer> to <credits> 2020-12-30 22:30:46 -05:00
jasimancas 4d965955d1 - Add rating 2020-12-30 22:30:46 -05:00
jasimancas 23b9d657ce no message 2020-12-30 22:30:46 -05:00
jasimancas c046c3c229 - Added new ratings scheme
- Added the fields userrating, top250, outline, tagline, playcount, lastplayed, country empty for use in Kodi (need this field in database)
- Added Director and Writer
- Added overview to set (empty, need this field in database)
- Change ID to TMDB (previously IMDB)
- Set True TMDB UniqueID instead of IMDB
- Modified thumb's sentence
- Remove <tmdbid>
- Reordered XML to match Kodi schema (https://kodi.wiki/view/NFO_files/Movies)
2020-12-30 22:30:46 -05:00
jasimancas f734ba2323 Schematize NFO in XBMC with Kodi format: https://kodi.wiki/view/NFO_files/Movies 2020-12-30 22:30:46 -05:00
bakerboy448 44fa36373c reword library import do not use for downloads text 2020-12-30 22:12:27 -05:00
bakerboy448 e6afcb68f3 update mac icon 2020-12-29 21:15:05 -05:00
Qstick c8c900251a Update PushoverSettings.cs
Fixes #5635
2020-12-29 14:35:22 -05:00
pannbiff 915e7ce589 Translated using Weblate (Swedish) [skip ci]
Currently translated at 60.5% (642 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2020-12-29 08:43:20 +00:00
Qstick 5bab42b712 Fix LocalizationServiceFixture Test 2020-12-27 21:56:25 -05:00
Qstick f499e846d9 Fixed: Grab correct translation on case sensitive file systems 2020-12-27 21:07:20 -05:00
Qstick 80a744eff5 Fixed: 'iso-8859-2' is not a supported encoding name 2020-12-26 10:58:38 -05:00
Lizandra Candido da Silva 82dfaf0ea5 Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 98.7% (1048 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2020-12-26 09:43:18 +00:00
Qstick 8f78953191 Change Skip Refresh Log to Debug 2020-12-25 00:23:09 -05:00
Havok Dan 9261efa843 Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 98.7% (1048 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2020-12-24 21:43:18 +00:00
Qstick b9a8166f9f Rename recentfeed.json to RecentFeed.json 2020-12-24 13:16:32 -05:00
Taloth Saldono 8cccde48c1 Fixed test file casing
(cherry picked from commit a7ca139e13375e73074508d74b9590f5446d3b09)
2020-12-24 13:16:32 -05:00
ta264 96384521c5 Fixed: FolderWritable check for CIFS shares mounted in Unix
This reverts commit 8c892a732e.
2020-12-24 17:29:38 +00:00
ta264 f90211b0d3 Fixed: UI hanging after scrolling movie list too fast
[common]
2020-12-24 12:21:17 -05:00
Qstick d1bebd3e5b Fix RemotePathMappingCheckFixture 2020-12-24 02:43:29 -05:00
Qstick a32bc21907 Fix Wiki Links for Hardcoded Fragments 2020-12-24 02:37:08 -05:00
Qstick 4f7dc94b94 Fix BasicRepository Tests when not on UTC
[common]
2020-12-24 01:02:24 -05:00
bakerboy448 5ca1a1d086 fix contributing port [skip ci] 2020-12-23 12:21:59 -05:00
angelsky11 7d763b8ba0 Translated using Weblate (Chinese (Simplified)) [skip ci]
Currently translated at 98.6% (1047 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/zh_CN/
2020-12-23 08:43:20 +00:00
reloxx 23c197bd3b Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-12-23 08:43:19 +00:00
ta264 8c892a732e Revert "Fixed: FolderWritable check for CIFS shares mounted in Unix"
This reverts commit a71874db8d.
2020-12-23 08:28:19 +00:00
bakerboy448 140547e42a Fixed: '/movie' URL Base breaking UI navigation 2020-12-22 14:59:34 -05:00
Qstick 3ab9af0663 New: Portuguese (Brazil) Language Support 2020-12-22 13:41:18 -05:00
ta264 a71874db8d Fixed: FolderWritable check for CIFS shares mounted in Unix
See https://github.com/dotnet/runtime/issues/42790

Implemented workaround in https://github.com/dotnet/runtime/issues/42790#issuecomment-700362617

[common]
2020-12-22 15:58:20 +00:00
angelsky11 226ee34fec Translated using Weblate (Chinese (Simplified)) [skip ci]
Currently translated at 97.7% (1037 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/zh_CN/
2020-12-22 15:17:20 +00:00
angelsky11 eb5add1198 Translated using Weblate (Chinese (Simplified)) [skip ci]
Currently translated at 82.8% (879 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/zh_CN/
2020-12-22 07:43:18 +00:00
bakerboy448 3759625386 New: Improved Discover recommendations
New: Movies existing in Library no longer show as a Discover Recommendations
2020-12-21 22:50:30 -05:00
angelsky11 b85f3f0e35 Translated using Weblate (Chinese (Simplified)) [skip ci]
Currently translated at 81.3% (863 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/zh_CN/
2020-12-21 18:25:55 +00:00
ta264 286b083da4 Fixed: Restoring large database backups
Remove Kestrel's default 28.6MB upload limit

[common]
2020-12-21 17:39:16 +00:00
angelsky11 912273b5dd Translated using Weblate (Chinese (Simplified)) [skip ci]
Currently translated at 80.5% (855 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/zh_CN/
2020-12-21 17:38:33 +00:00
angelsky11 73d1486392 Translated using Weblate (Chinese (Simplified)) [skip ci]
Currently translated at 70.4% (748 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/zh_CN/
2020-12-21 02:43:23 +00:00
angelsky11 063c6fb85c Translated using Weblate (Chinese (Simplified)) [skip ci]
Currently translated at 55.7% (592 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/zh_CN/
2020-12-20 07:43:29 +00:00
bakerboy448 c95573a7da fix readme wiki badge [skip ci]
also re order
2020-12-19 18:10:25 -05:00
Qstick a6cf524fe7 Remove “Preview” from tab description text 2020-12-19 14:49:29 -05:00
reloxx bb264e9a8a Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-12-18 20:43:15 +00:00
wangerry ca0cabe985 Translated using Weblate (Chinese (Simplified)) [skip ci]
Currently translated at 11.8% (126 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/zh_CN/
2020-12-18 02:43:18 +00:00
Lizandra Candido da Silva 48c3aea9bb Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 98.3% (1044 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2020-12-17 07:43:17 +00:00
kingii98 4122b82601 Translated using Weblate (Russian) [skip ci]
Currently translated at 99.5% (1056 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ru/
2020-12-17 07:43:17 +00:00
Csaba 3abf67aaf0 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-12-17 07:43:16 +00:00
pannbiff 2b860aab36 Translated using Weblate (Swedish) [skip ci]
Currently translated at 60.4% (641 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2020-12-16 01:01:24 +00:00
bakerboy448 85bfcd72ff Fix: Bad Translate when removing Activity from queue
(also sort)
2020-12-15 20:01:18 -05:00
faxity df15c636a4 Translated using Weblate (Dutch) [skip ci]
Currently translated at 88.0% (934 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-12-15 05:34:23 +00:00
Forsefrits 1136de29e5 Translated using Weblate (Dutch) [skip ci]
Currently translated at 78.9% (838 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-12-14 10:34:21 +00:00
Qstick ffcb34f9f0 Ignore ResizeObserver loop limit errors
[common]
2020-12-12 14:04:16 -05:00
Qstick 877b6c0fcf Change to once a day for locking [skip ci] 2020-12-10 10:09:03 -05:00
reloxx 854c1a6866 Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-12-10 11:34:17 +00:00
hotio cd8ed08376 Translated using Weblate (Dutch) [skip ci]
Currently translated at 77.1% (819 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-12-09 22:34:19 +00:00
Csaba b64c938188 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-12-09 22:34:18 +00:00
reloxx bd930f3b8d Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (1061 of 1061 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-12-09 22:34:17 +00:00
Qstick 0880cd6ffc Allow manually run lock [skip ci] 2020-12-08 23:47:46 -05:00
Qstick c2a96ff485 Run Lock every 10 minutes for test [skip ci] 2020-12-08 23:31:03 -05:00
Qstick 21e92e7fcf Update lock.yml 2020-12-08 23:15:46 -05:00
Qstick 96f0bb2f90 Lock Issues Workflow [skip ci] 2020-12-08 23:01:29 -05:00
Qstick c0e1b97f29 Bump Version to 3.0.1 2020-12-08 22:01:53 -05:00
Qstick fd4fb88ce1 New: Add Validations for Recycle Bin Folder
[common]
2020-12-08 21:53:42 -05:00
bakerboy448 003686d68f Fixed: Clarify Language around Importing a Library
New: Library Import renamed from (sidebar) Import to Library Import
2020-12-07 22:48:34 -05:00
wangerry 3e0e4ba1fd Translated using Weblate (Chinese (Simplified)) [skip ci]
Currently translated at 11.3% (120 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/zh_CN/
2020-12-07 21:49:30 +00:00
Pavel 45ecfb05f4 Translated using Weblate (Russian) [skip ci]
Currently translated at 100.0% (1058 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ru/
2020-12-07 21:49:27 +00:00
wangerry ab620d373c Translated using Weblate (Chinese (Simplified)) [skip ci]
Currently translated at 0.1% (1 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/zh_CN/
2020-12-06 12:48:37 +00:00
Pavel 9b3faefc8e Translated using Weblate (Russian) [skip ci]
Currently translated at 68.7% (727 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ru/
2020-12-06 12:48:37 +00:00
Qstick dd577f9db0 Added translation using Weblate (Chinese (Simplified)) [skip ci] 2020-12-05 14:35:07 +00:00
Qstick 5c0939d9df Deleted translation using Weblate (Chinese (Simplified)) [skip ci] 2020-12-05 14:33:44 +00:00
Qstick bdb818b1b6 Added translation using Weblate (Chinese (Simplified)) [skip ci] 2020-12-05 14:26:06 +00:00
Qstick 4550ef13a4 Don't call AllMovies twice for each AddMovie validation 2020-12-04 23:23:20 -05:00
Lizandra Candido da Silva 98f0769c5d Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 98.3% (1041 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2020-12-05 00:21:18 +00:00
jpalenz77 6f854ddd56 Translated using Weblate (Spanish) [skip ci]
Currently translated at 78.3% (829 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-12-05 00:21:18 +00:00
pannbiff 98ae094733 Translated using Weblate (Swedish) [skip ci]
Currently translated at 60.3% (638 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2020-12-05 00:21:18 +00:00
Pavel 15e4dc18b9 Translated using Weblate (Russian) [skip ci]
Currently translated at 36.2% (383 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ru/
2020-12-05 00:21:18 +00:00
Qstick d5a7479b2e Fix typo in DeleteMovieFolder label [skip ci] 2020-12-04 19:21:00 -05:00
Na0mir e1bff99a93 Translated using Weblate (French) [skip ci]
Currently translated at 84.0% (889 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-12-04 20:50:04 +00:00
Julien Orain 9d31aed9da fix feature requests link 2020-12-04 15:06:33 +00:00
Qstick 9fbc1df74c Fixed: Persist SearchOnAdd setting value in local cache 2020-12-03 22:34:42 -05:00
Qstick 2d9c77ec5e Fixed: If v0.2 DB Exists back it up during update 2020-12-03 21:12:31 -05:00
Havok Dan ede7d37cae Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 96.2% (1018 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2020-12-03 12:52:57 +00:00
Lizandra Candido da Silva b580b4f829 Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 96.2% (1018 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2020-12-03 12:52:56 +00:00
ta264 4f281669fc Fixed: Use QBittorrent category savepath for healthcheck
[common]
2020-12-02 22:25:35 -05:00
Lizandra Candido da Silva 9fbedc32ed Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 88.7% (939 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2020-12-02 23:35:15 +00:00
Havok Dan 745007209e Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 88.7% (939 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2020-12-02 23:35:11 +00:00
ta264 3e1cfe0033 Don't nag linux x86 users to switch to net core 2020-12-02 19:09:02 +00:00
Lizandra Candido da Silva 94b94041a8 Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 55.8% (591 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2020-12-02 18:56:07 +00:00
Havok Dan 791a32b939 Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 55.8% (591 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2020-12-02 18:56:07 +00:00
Lizandra Candido da Silva af395f554e Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 54.2% (574 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2020-12-02 18:49:07 +00:00
Lizandra Candido da Silva 39640a710f Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 53.5% (567 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2020-12-02 18:47:21 +00:00
Havok Dan 6557f72600 Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 53.5% (567 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2020-12-02 18:47:20 +00:00
Lizandra Candido da Silva 14b127e60d Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 47.3% (501 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2020-12-02 18:20:18 +00:00
Havok Dan e6e6205799 Translated using Weblate (Portuguese (Brazil)) [skip ci]
Currently translated at 47.3% (501 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt_BR/
2020-12-02 18:20:18 +00:00
Qstick 083c4750fb Fixed: Leading zeros on MI Info
Fixes #5433
2020-12-01 23:15:41 -05:00
Qstick 099d0b6e67 More API Docs [skip ci] 2020-12-01 22:31:33 -05:00
pannbiff 17615e9ace Translated using Weblate (Swedish) [skip ci]
Currently translated at 60.2% (637 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2020-12-01 10:49:13 +00:00
Csaba 9179b9e0eb Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (1058 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-12-01 10:49:11 +00:00
reloxx 3389cc0cf8 Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (1058 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-12-01 10:49:10 +00:00
userdocs 21c297024f Update swagger.json (#5439) [skip ci]
Fix: /API Key/apikey generation when using the https://radarr.video/docs/api/ and setting an api key.

It currently generates this output which will not work with Radarr v3

```
curl -X GET "http://localhost:7878/api/v3/system/status?API%20Key=awawfaw" -H "accept: application/json"
```
2020-11-30 23:17:47 -05:00
Qstick c4324c8e47 Fixed: Migrate fails for Sonarr contaminated DBs 2020-11-30 23:17:11 -05:00
nitsua ac8fa1ee93 Adjust CSS so titles are wrap instead of truncate
Fixes #5350
2020-11-29 23:04:03 -05:00
memnos 93cff9c6ef Translated using Weblate (Italian) [skip ci]
Currently translated at 80.8% (855 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2020-11-30 03:50:33 +00:00
reloxx 3d0e993a53 Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (1058 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-11-30 03:50:33 +00:00
bakerboy448 87330c8ab9 Fixed: Incorrect reference to preferred words in proper setting helptext (#5430) 2020-11-29 22:50:28 -05:00
Qstick 785ad5d62e Fixed: Sample generation failing for {Movie OriginalTitle}
Fixes #5426
2020-11-29 22:32:49 -05:00
bakerboy448 0ddf19d384 add API Doc Link to ReadMe [skip ci] 2020-11-29 16:45:41 -05:00
634 changed files with 34363 additions and 10072 deletions
+12 -1
View File
@@ -110,13 +110,13 @@ dotnet_diagnostic.SA1643.severity = none
dotnet_diagnostic.SA1648.severity = none dotnet_diagnostic.SA1648.severity = none
dotnet_diagnostic.SA1649.severity = none dotnet_diagnostic.SA1649.severity = none
dotnet_diagnostic.SA1651.severity = none dotnet_diagnostic.SA1651.severity = none
dotnet_diagnostic.SX1101.severity = warning
dotnet_diagnostic.SX1309.severity = warning dotnet_diagnostic.SX1309.severity = warning
# Microsoft Analyzers that fail and need to be sorted thru # Microsoft Analyzers that fail and need to be sorted thru
dotnet_diagnostic.ASP0000.severity = suggestion dotnet_diagnostic.ASP0000.severity = suggestion
dotnet_diagnostic.CA1000.severity = suggestion dotnet_diagnostic.CA1000.severity = suggestion
dotnet_diagnostic.CA1001.severity = suggestion dotnet_diagnostic.CA1001.severity = suggestion
dotnet_diagnostic.CA1002.severity = suggestion
dotnet_diagnostic.CA1003.severity = suggestion dotnet_diagnostic.CA1003.severity = suggestion
dotnet_diagnostic.CA1008.severity = suggestion dotnet_diagnostic.CA1008.severity = suggestion
dotnet_diagnostic.CA1010.severity = suggestion dotnet_diagnostic.CA1010.severity = suggestion
@@ -163,10 +163,16 @@ dotnet_diagnostic.CA1304.severity = suggestion
dotnet_diagnostic.CA1305.severity = suggestion dotnet_diagnostic.CA1305.severity = suggestion
dotnet_diagnostic.CA1307.severity = suggestion dotnet_diagnostic.CA1307.severity = suggestion
dotnet_diagnostic.CA1308.severity = suggestion dotnet_diagnostic.CA1308.severity = suggestion
dotnet_diagnostic.CA1309.severity = suggestion
dotnet_diagnostic.CA1310.severity = suggestion
dotnet_diagnostic.CA1401.severity = suggestion dotnet_diagnostic.CA1401.severity = suggestion
dotnet_diagnostic.CA1416.severity = suggestion
dotnet_diagnostic.CA1507.severity = suggestion dotnet_diagnostic.CA1507.severity = suggestion
dotnet_diagnostic.CA1508.severity = suggestion
dotnet_diagnostic.CA1707.severity = suggestion dotnet_diagnostic.CA1707.severity = suggestion
dotnet_diagnostic.CA1708.severity = suggestion
dotnet_diagnostic.CA1710.severity = suggestion dotnet_diagnostic.CA1710.severity = suggestion
dotnet_diagnostic.CA1711.severity = suggestion
dotnet_diagnostic.CA1712.severity = suggestion dotnet_diagnostic.CA1712.severity = suggestion
dotnet_diagnostic.CA1714.severity = suggestion dotnet_diagnostic.CA1714.severity = suggestion
dotnet_diagnostic.CA1715.severity = suggestion dotnet_diagnostic.CA1715.severity = suggestion
@@ -175,12 +181,14 @@ dotnet_diagnostic.CA1717.severity = suggestion
dotnet_diagnostic.CA1720.severity = suggestion dotnet_diagnostic.CA1720.severity = suggestion
dotnet_diagnostic.CA1721.severity = suggestion dotnet_diagnostic.CA1721.severity = suggestion
dotnet_diagnostic.CA1724.severity = suggestion dotnet_diagnostic.CA1724.severity = suggestion
dotnet_diagnostic.CA1725.severity = suggestion
dotnet_diagnostic.CA1801.severity = suggestion dotnet_diagnostic.CA1801.severity = suggestion
dotnet_diagnostic.CA1802.severity = suggestion dotnet_diagnostic.CA1802.severity = suggestion
dotnet_diagnostic.CA1805.severity = suggestion dotnet_diagnostic.CA1805.severity = suggestion
dotnet_diagnostic.CA1806.severity = suggestion dotnet_diagnostic.CA1806.severity = suggestion
dotnet_diagnostic.CA1810.severity = suggestion dotnet_diagnostic.CA1810.severity = suggestion
dotnet_diagnostic.CA1812.severity = suggestion dotnet_diagnostic.CA1812.severity = suggestion
dotnet_diagnostic.CA1813.severity = suggestion
dotnet_diagnostic.CA1814.severity = suggestion dotnet_diagnostic.CA1814.severity = suggestion
dotnet_diagnostic.CA1815.severity = suggestion dotnet_diagnostic.CA1815.severity = suggestion
dotnet_diagnostic.CA1816.severity = suggestion dotnet_diagnostic.CA1816.severity = suggestion
@@ -202,6 +210,7 @@ dotnet_diagnostic.CA2101.severity = suggestion
dotnet_diagnostic.CA2119.severity = suggestion dotnet_diagnostic.CA2119.severity = suggestion
dotnet_diagnostic.CA2153.severity = suggestion dotnet_diagnostic.CA2153.severity = suggestion
dotnet_diagnostic.CA2200.severity = suggestion dotnet_diagnostic.CA2200.severity = suggestion
dotnet_diagnostic.CA2201.severity = suggestion
dotnet_diagnostic.CA2207.severity = suggestion dotnet_diagnostic.CA2207.severity = suggestion
dotnet_diagnostic.CA2208.severity = suggestion dotnet_diagnostic.CA2208.severity = suggestion
dotnet_diagnostic.CA2211.severity = suggestion dotnet_diagnostic.CA2211.severity = suggestion
@@ -247,6 +256,8 @@ dotnet_diagnostic.CA5374.severity = suggestion
dotnet_diagnostic.CA5379.severity = suggestion dotnet_diagnostic.CA5379.severity = suggestion
dotnet_diagnostic.CA5384.severity = suggestion dotnet_diagnostic.CA5384.severity = suggestion
dotnet_diagnostic.CA5385.severity = suggestion dotnet_diagnostic.CA5385.severity = suggestion
dotnet_diagnostic.CA5392.severity = suggestion
dotnet_diagnostic.CA5394.severity = suggestion
dotnet_diagnostic.CA5397.severity = suggestion dotnet_diagnostic.CA5397.severity = suggestion
+17 -15
View File
@@ -1,35 +1,37 @@
--- ---
name: Bug Report name: Bug Report
about: Support Requests will be closed immediately, if you are unsure go to our Reddit or Discord first. Exceptions do not mean you found a bug! about: Support Requests will be closed immediately, if you are not 100% certain this is a bug please go to our Reddit or Discord first. Exceptions do not mean you found a bug!
title: '' title: ''
labels: bug labels: 'Type: Bug'
assignees: '' assignees: ''
--- ---
<!-- Support Requests will be closed immediately, if you are unsure go to our Reddit or Discord first. Exceptions do not mean you found a bug! -->
**Describe the bug** **Describe the bug**
A clear and concise description of what the bug is. <!-- A clear and concise description of what the bug is. -->
**To Reproduce** **To Reproduce**
Steps to reproduce the behavior: <!-- Steps to reproduce the behavior:
1. Go to '...' 1. Go to '...'
2. Click on '....' 2. Click on '....'
3. Scroll down to '....' 3. Scroll down to '....'
4. See error 4. See error -->
**Expected behavior** **Expected behavior**
A clear and concise description of what you expected to happen. <!-- A clear and concise description of what you expected to happen.-->
**Screenshots** **Screenshots**
If applicable, add screenshots to help explain your problem. <!-- If applicable, add screenshots to help explain your problem.-->
**Platform Information (please complete the following information):** **Platform Information (please complete the following information):**
- OS: [e.g. Windows 10 2004 / Ubuntu 20.10] - OS: <!-- [e.g. Windows 10 2004 / Ubuntu 20.04] -->
- Docker: [Yes/No] - Docker: <!-- [Yes/No] -->
- Mono or.NET Core Version: [e.g. Mono 5.8 or .Net Core 3.1.10] (found under System -> Status) - Mono or .NET Version (System -> Status): <!--[e.g. Mono 5.8 or .Net Core 3.1.10 or .NET 5.0.1] -->
- Browser and Version [e.g. chrome 86.0.4240.198] (Only needed for UI issues) - Browser and Version (Only needed for UI issues): <!--[e.g. chrome 86.0.4240.198] -->
- Radarr Version [e.g. 3.0.0.2956] - Radarr Version: <!--[e.g. 3.0.1.4259, 3.0.2.4369]-->
- Radarr Branch [e.g. master] - Radarr Branch: <!--[e.g. master, develop]-->
**Trace Logs** **Trace Logs**
Turn on Trace logs under Settings -> General and wait for the bug to occur again. **Upload the full log file here (or another site (e.g. pastebin) and link it). Issues will be closed, if they do not include this!** Turn on Trace logs under Settings -> General and wait for the bug to occur again.
**Upload the full log file here (or another site (e.g. pastebin) and link it). Issues will be closed, if they do not include this!**
<!-- Trace logs are named Radarr.trace.txt or Radarr.trace.#.txt and will contain "trace" in them-->
+1 -1
View File
@@ -1,7 +1,7 @@
blank_issues_enabled: false blank_issues_enabled: false
contact_links: contact_links:
- name: Support via Discord - name: Support via Discord
url: https://discord.gg/r5wJPt9 url: https://radarr.video/discord
about: Chat with users and devs on support and setup related topics. about: Chat with users and devs on support and setup related topics.
- name: Support via Reddit - name: Support via Reddit
url: https://reddit.com/r/radarr url: https://reddit.com/r/radarr
+4 -4
View File
@@ -8,13 +8,13 @@ assignees: ''
--- ---
**Is your feature request related to a problem? Please describe.** **Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] <!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
**Describe the solution you'd like** **Describe the solution you'd like**
A clear and concise description of what you want to happen. <!-- A clear and concise description of what you want to happen. -->
**Describe alternatives you've considered** **Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered. <!-- A clear and concise description of any alternative solutions or features you've considered. -->
**Additional context** **Additional context**
Add any other context or screenshots about the feature request here. <!-- Add any other context or screenshots about the feature request here. -->
-2
View File
@@ -1,2 +0,0 @@
todo:
keyword: "TODO"
-38
View File
@@ -1,38 +0,0 @@
# Configuration for Lock Threads - https://github.com/dessant/lock-threads-app
# Number of days of inactivity before a closed issue or pull request is locked
daysUntilLock: 60
# Skip issues and pull requests created before a given timestamp. Timestamp must
# follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable
skipCreatedBefore: false
# Issues and pull requests with these labels will be ignored. Set to `[]` to disable
exemptLabels: []
# Label to add before locking, such as `outdated`. Set to `false` to disable
lockLabel: false
# Comment to post before locking. Set to `false` to disable
lockComment: >
This thread has been automatically locked since there has not been
any recent activity after it was closed. Please open a new issue for
related bugs.
# Assign `resolved` as the reason for locking. Set to `false` to disable
setLockReason: true
# Limit to only `issues` or `pulls`
# only: issues
# Optionally, specify configuration settings just for `issues` or `pulls`
# issues:
# exemptLabels:
# - help-wanted
# lockLabel: outdated
# pulls:
# daysUntilLock: 30
# Repository to extend settings from
# _extends: repo
-1
View File
@@ -1 +0,0 @@
+1 -3
View File
@@ -5,12 +5,10 @@ daysUntilClose: 7
# Issues with these labels will never be considered stale # Issues with these labels will never be considered stale
exemptLabels: exemptLabels:
- feature request - feature request
- parser - 'Status: Confirmed'
- confirmed
- sonarr-pull - sonarr-pull
- lidarr-pull - lidarr-pull
- readarr-pull - readarr-pull
- v3
# Label to use when marking an issue as stale # Label to use when marking an issue as stale
staleLabel: stale staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable # Comment to post when marking an issue as stale. Set to `false` to disable
-13
View File
@@ -1,13 +0,0 @@
# Configuration for support-requests - https://github.com/dessant/support-requests
# Label used to mark issues as support requests
supportLabel: support
# Comment to post on issues marked as support requests. Add a link
# to a support page, or set to `false` to disable
supportComment: >
We use the issue tracker exclusively for bug reports and feature requests.
However, this issue appears to be a support request. Please hop over onto our [Discord](https://discord.gg/r5wJPt9) or [Subreddit](https://reddit.com/r/radarr)
# Whether to close issues marked as support requests
close: true
# Whether to lock issues marked as support requests
lock: false
+21
View File
@@ -0,0 +1,21 @@
name: 'Lock threads'
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * *'
jobs:
lock:
runs-on: ubuntu-latest
steps:
- uses: dessant/lock-threads@v2
with:
github-token: ${{ github.token }}
issue-lock-inactive-days: '90'
issue-exclude-created-before: ''
issue-exclude-labels: ''
issue-lock-labels: ''
issue-lock-comment: ''
issue-lock-reason: 'resolved'
process-only: ''
+21
View File
@@ -0,0 +1,21 @@
name: 'Support requests'
on:
issues:
types: [labeled, unlabeled, reopened]
jobs:
support:
runs-on: ubuntu-latest
steps:
- uses: dessant/support-requests@v2
with:
github-token: ${{ github.token }}
support-label: 'Type: Support'
issue-comment: >
:wave: @{issue-author}, we use the issue tracker exclusively
for bug reports and feature requests. However, this issue appears
to be a support request. Please hop over onto our [Discord](https://radarr.video/discord)
or [Subreddit](https://reddit.com/r/radarr)
close-issue: true
lock-issue: false
+5 -5
View File
@@ -11,19 +11,19 @@ Setup guides, FAQ, the more information we have on the [wiki](https://wiki.serva
- Visual Studio 2019 or higher (https://www.visualstudio.com/vs/). The community version is free and works (https://www.visualstudio.com/downloads/). - Visual Studio 2019 or higher (https://www.visualstudio.com/vs/). The community version is free and works (https://www.visualstudio.com/downloads/).
- HTML/Javascript editor of choice (VS Code/Sublime Text/Webstorm/Atom/etc) - HTML/Javascript editor of choice (VS Code/Sublime Text/Webstorm/Atom/etc)
- [Git](https://git-scm.com/downloads) - [Git](https://git-scm.com/downloads)
- [NodeJS](https://nodejs.org/en/download/) (Node 10.X.X or higher) - [NodeJS](https://nodejs.org/en/download/) (Node 12.X.X or higher)
- [Yarn](https://yarnpkg.com/) - [Yarn](https://yarnpkg.com/)
- .NET Core 3.1. - .NET Core 5.0.
### Getting started ### ### Getting started ###
1. Fork Radarr 1. Fork Radarr
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://docs.github.com/en/github/creating-cloning-and-archiving-repositories/cloning-a-repository-from-github)
3. Install the required Node Packages `yarn install` 3. Install the required Node Packages `yarn install`
4. Start gulp to monitor your dev environment for any changes that need post processing using `yarn start` command. 4. Start gulp to monitor your dev environment for any changes that need post processing using `yarn start` command.
5. Build the project in Visual Studio, Setting startup project to `Radarr.Console` and framework to `netcoreapp31` 5. Build the project in Visual Studio, Setting startup project to `Radarr.Console` and framework to `net5.0`
6. Debug the project in Visual Studio 6. Debug the project in Visual Studio
7. Open http://localhost:8686 7. Open http://localhost:7878
### Contributing Code ### ### Contributing Code ###
- If you're adding a new, already requested feature, please comment on [Github Issues](https://github.com/Radarr/Radarr/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/Radarr/Radarr/issues "Github Issues") so work is not duplicated (If you want to add something not already on there, please talk to us first)
+10 -8
View File
@@ -28,18 +28,20 @@ Radarr is a movie collection manager for Usenet and BitTorrent users. It can mon
* Adding metadata such as posters and information for Kodi and others to use * Adding metadata such as posters and information for Kodi and others to use
* Advanced customization for profiles, such that Radarr will always download the copy you want * Advanced customization for profiles, such that Radarr will always download the copy you want
## Feature Requests
[Feature Requests](https://github.com/lidarr/Radarr/issues/new?assignees=&labels=Type%3A+Enhancement&template=feature_request.md&title=)
## Support ## Support
Note: GitHub Issues are for Bugs and Feature Requests Only
[![Discord](https://img.shields.io/badge/discord-chat-7289DA.svg?maxAge=60)](https://discord.gg/r5wJPt9) [![Discord](https://img.shields.io/badge/discord-chat-7289DA.svg?maxAge=60)](https://radarr.video/discord)
[![Reddit](https://img.shields.io/badge/reddit-discussion-FF4500.svg?maxAge=60)](https://www.reddit.com/r/Radarr) [![Reddit](https://img.shields.io/badge/reddit-discussion-FF4500.svg?maxAge=60)](https://www.reddit.com/r/Radarr)
[![GitHub - Bugs and Feature Requests Only](https://img.shields.io/badge/github-issues-red.svg?maxAge=60)](https://github.com/Radarr/Radarr/issues) [![GitHub - Bugs and Feature Requests Only](https://img.shields.io/badge/github-issues-red.svg?maxAge=60)](https://github.com/Radarr/Radarr/issues)
[![Wiki](https://img.shields.io/badge/github-wiki-181717.svg?maxAge=60)](https://wiki.servarr.com/Radarr) [![Wiki](https://img.shields.io/badge/servarr-wiki-181717.svg?maxAge=60)](https://wiki.servarr.com/Radarr)
## Contributors ## Feature Requests
[Feature Requests](https://github.com/Radarr/Radarr/issues/new?assignees=&labels=Type%3A+Enhancement&template=feature_request.md&title=)
## Contributors & Developers
[API Documentation](https://radarr.video/docs/api/)
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/Radarr/Radarr/graphs/contributors"><img src="https://opencollective.com/Radarr/contributors.svg?width=890&button=false" /></a> <a href="https://github.com/Radarr/Radarr/graphs/contributors"><img src="https://opencollective.com/Radarr/contributors.svg?width=890&button=false" /></a>
@@ -72,4 +74,4 @@ Thank you to [<img src="/Logo/jetbrains.svg" alt="JetBrains" width="32"> JetBrai
### License ### License
* [GNU GPL v3](http://www.gnu.org/licenses/gpl.html) * [GNU GPL v3](http://www.gnu.org/licenses/gpl.html)
* Copyright 2010-2020 * Copyright 2010-2021
+138 -49
View File
@@ -7,13 +7,13 @@ variables:
outputFolder: './_output' outputFolder: './_output'
artifactsFolder: './_artifacts' artifactsFolder: './_artifacts'
testsFolder: './_tests' testsFolder: './_tests'
majorVersion: '3.0.0' majorVersion: '3.2.1'
minorVersion: $[counter('minorVersion', 2000)] minorVersion: $[counter('minorVersion', 2000)]
radarrVersion: '$(majorVersion).$(minorVersion)' radarrVersion: '$(majorVersion).$(minorVersion)'
buildName: '$(Build.SourceBranchName).$(radarrVersion)' buildName: '$(Build.SourceBranchName).$(radarrVersion)'
sentryOrg: 'servarr' sentryOrg: 'servarr'
sentryUrl: 'https://sentry.servarr.com' sentryUrl: 'https://sentry.servarr.com'
dotnetVersion: '3.1.404' dotnetVersion: '5.0.202'
yarnCacheFolder: $(Pipeline.Workspace)/.yarn yarnCacheFolder: $(Pipeline.Workspace)/.yarn
trigger: trigger:
@@ -23,7 +23,12 @@ trigger:
- master - master
pr: pr:
- develop branches:
include:
- develop
paths:
exclude:
- src/NzbDrone.Core/Localization/Core
stages: stages:
- stage: Setup - stage: Setup
@@ -59,18 +64,21 @@ stages:
Linux: Linux:
osName: 'Linux' osName: 'Linux'
imageName: 'ubuntu-18.04' imageName: 'ubuntu-18.04'
enableAnalysis: 'true'
Mac: Mac:
osName: 'Mac' osName: 'Mac'
imageName: 'macos-10.14' imageName: 'macos-10.14'
enableAnalysis: 'false'
Windows: Windows:
osName: 'Windows' osName: 'Windows'
imageName: 'windows-2019' imageName: 'windows-2019'
enableAnalysis: 'false'
pool: pool:
vmImage: $(imageName) vmImage: $(imageName)
variables: variables:
# Disable stylecop here - linting errors get caught by the analyze task # Disable stylecop here - linting errors get caught by the analyze task
EnableAnalyzers: 'false' EnableAnalyzers: $(enableAnalysis)
steps: steps:
- checkout: self - checkout: self
submodules: true submodules: true
@@ -79,7 +87,18 @@ stages:
displayName: 'Install .net core' displayName: 'Install .net core'
inputs: inputs:
version: $(dotnetVersion) version: $(dotnetVersion)
- bash: ./build.sh --backend - bash: |
BUNDLEDVERSIONS=${AGENT_TOOLSDIRECTORY}/dotnet/sdk/${DOTNETVERSION}/Microsoft.NETCoreSdk.BundledVersions.props
echo $BUNDLEDVERSIONS
grep osx-x64 $BUNDLEDVERSIONS
if grep -q freebsd-x64 $BUNDLEDVERSIONS; then
echo "BSD already enabled"
else
echo "Enabling BSD support"
sed -i.ORI 's/osx-x64/osx-x64;freebsd-x64/' $BUNDLEDVERSIONS
fi
displayName: Enable FreeBSD Support
- bash: ./build.sh --backend --enable-bsd
displayName: Build Radarr Backend displayName: Build Radarr Backend
- bash: | - bash: |
find ${OUTPUTFOLDER} -type f ! -path "*/publish/*" -exec rm -rf {} \; find ${OUTPUTFOLDER} -type f ! -path "*/publish/*" -exec rm -rf {} \;
@@ -92,23 +111,27 @@ stages:
artifact: '$(osName)Backend' artifact: '$(osName)Backend'
displayName: Publish Backend displayName: Publish Backend
condition: and(succeeded(), eq(variables['osName'], 'Windows')) condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- publish: '$(testsFolder)/netcoreapp3.1/win-x64/publish' - publish: '$(testsFolder)/net5.0/win-x64/publish'
artifact: WindowsCoreTests artifact: WindowsCoreTests
displayName: Publish Windows Test Package displayName: Publish Windows Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows')) condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- publish: '$(testsFolder)/net462/linux-x64/publish' - publish: '$(testsFolder)/net472/linux-x64/publish'
artifact: LinuxTests artifact: LinuxTests
displayName: Publish Linux Mono Test Package displayName: Publish Linux Mono Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows')) condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- publish: '$(testsFolder)/netcoreapp3.1/linux-x64/publish' - publish: '$(testsFolder)/net5.0/linux-x64/publish'
artifact: LinuxCoreTests artifact: LinuxCoreTests
displayName: Publish Linux Test Package displayName: Publish Linux Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows')) condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- publish: '$(testsFolder)/netcoreapp3.1/linux-musl-x64/publish' - publish: '$(testsFolder)/net5.0/linux-musl-x64/publish'
artifact: LinuxMuslCoreTests artifact: LinuxMuslCoreTests
displayName: Publish Linux Musl Test Package displayName: Publish Linux Musl Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows')) condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- publish: '$(testsFolder)/netcoreapp3.1/osx-x64/publish' - publish: '$(testsFolder)/net5.0/freebsd-x64/publish'
artifact: FreebsdCoreTests
displayName: Publish FreeBSD Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- publish: '$(testsFolder)/net5.0/osx-x64/publish'
artifact: MacCoreTests artifact: MacCoreTests
displayName: Publish MacOS Test Package displayName: Publish MacOS Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows')) condition: and(succeeded(), eq(variables['osName'], 'Windows'))
@@ -135,7 +158,7 @@ stages:
- task: NodeTool@0 - task: NodeTool@0
displayName: Set Node.js version displayName: Set Node.js version
inputs: inputs:
versionSpec: '10.x' versionSpec: '12.x'
- checkout: self - checkout: self
submodules: true submodules: true
fetchDepth: 1 fetchDepth: 1
@@ -184,12 +207,12 @@ stages:
- bash: ./build.sh --packages - bash: ./build.sh --packages
displayName: Create Packages displayName: Create Packages
- bash: | - bash: |
setup/inno/ISCC.exe setup/radarr.iss //DFramework=netcoreapp3.1 //DRuntime=win-x86 setup/inno/ISCC.exe setup/radarr.iss //DFramework=net5.0 //DRuntime=win-x86
cp setup/output/Radarr.*windows.netcoreapp3.1.exe ${BUILD_ARTIFACTSTAGINGDIRECTORY}/Radarr.${BUILDNAME}.windows-core-x86-installer.exe cp setup/output/Radarr.*windows.net5.0.exe ${BUILD_ARTIFACTSTAGINGDIRECTORY}/Radarr.${BUILDNAME}.windows-core-x86-installer.exe
displayName: Create .NET Core Windows installer displayName: Create .NET Core Windows installer
- bash: | - bash: |
setup/inno/ISCC.exe setup/radarr.iss //DFramework=netcoreapp3.1 //DRuntime=win-x64 setup/inno/ISCC.exe setup/radarr.iss //DFramework=net5.0 //DRuntime=win-x64
cp setup/output/Radarr.*windows.netcoreapp3.1.exe ${BUILD_ARTIFACTSTAGINGDIRECTORY}/Radarr.${BUILDNAME}.windows-core-x64-installer.exe cp setup/output/Radarr.*windows.net5.0.exe ${BUILD_ARTIFACTSTAGINGDIRECTORY}/Radarr.${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'
@@ -219,7 +242,7 @@ stages:
artifactName: WindowsFrontend artifactName: WindowsFrontend
targetPath: _output targetPath: _output
displayName: Fetch Frontend displayName: Fetch Frontend
- bash: ./build.sh --packages - bash: ./build.sh --packages --enable-bsd
displayName: Create Packages displayName: Create Packages
- bash: | - bash: |
find . -name "Radarr" -exec chmod a+x {} \; find . -name "Radarr" -exec chmod a+x {} \;
@@ -231,21 +254,21 @@ stages:
archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).windows-core-x64.zip' archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).windows-core-x64.zip'
archiveType: 'zip' archiveType: 'zip'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/win-x64/netcoreapp3.1 rootFolderOrFile: $(artifactsFolder)/win-x64/net5.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create Windows x86 Core zip displayName: Create Windows x86 Core zip
inputs: inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).windows-core-x86.zip' archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).windows-core-x86.zip'
archiveType: 'zip' archiveType: 'zip'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/win-x86/netcoreapp3.1 rootFolderOrFile: $(artifactsFolder)/win-x86/net5.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create MacOS Core app displayName: Create MacOS Core app
inputs: inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).osx-app-core-x64.zip' archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).osx-app-core-x64.zip'
archiveType: 'zip' archiveType: 'zip'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/macos-app/netcoreapp3.1 rootFolderOrFile: $(artifactsFolder)/macos-app/net5.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create MacOS Core tar displayName: Create MacOS Core tar
inputs: inputs:
@@ -253,7 +276,7 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/macos/netcoreapp3.1 rootFolderOrFile: $(artifactsFolder)/macos/net5.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create Linux Mono tar displayName: Create Linux Mono tar
inputs: inputs:
@@ -261,7 +284,7 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-x64/net462 rootFolderOrFile: $(artifactsFolder)/linux-x64/net472
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create Linux Core tar displayName: Create Linux Core tar
inputs: inputs:
@@ -269,7 +292,7 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-x64/netcoreapp3.1 rootFolderOrFile: $(artifactsFolder)/linux-x64/net5.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create Linux Musl Core tar displayName: Create Linux Musl Core tar
inputs: inputs:
@@ -277,7 +300,7 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-musl-x64/netcoreapp3.1 rootFolderOrFile: $(artifactsFolder)/linux-musl-x64/net5.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create ARM32 Linux Core tar displayName: Create ARM32 Linux Core tar
inputs: inputs:
@@ -285,7 +308,7 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-arm/netcoreapp3.1 rootFolderOrFile: $(artifactsFolder)/linux-arm/net5.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create ARM64 Linux Core tar displayName: Create ARM64 Linux Core tar
inputs: inputs:
@@ -293,7 +316,7 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-arm64/netcoreapp3.1 rootFolderOrFile: $(artifactsFolder)/linux-arm64/net5.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create ARM64 Linux Musl Core tar displayName: Create ARM64 Linux Musl Core tar
inputs: inputs:
@@ -301,7 +324,15 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-musl-arm64/netcoreapp3.1 rootFolderOrFile: $(artifactsFolder)/linux-musl-arm64/net5.0
- task: ArchiveFiles@2
displayName: Create FreeBSD Core Core tar
inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).freebsd-core-x64.tar.gz'
archiveType: 'tar'
tarCompression: 'gz'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/freebsd-x64/net5.0
- publish: $(Build.ArtifactStagingDirectory) - publish: $(Build.ArtifactStagingDirectory)
artifact: 'Packages' artifact: 'Packages'
displayName: Publish Packages displayName: Publish Packages
@@ -355,24 +386,34 @@ stages:
displayName: Unit Native displayName: Unit Native
dependsOn: Prepare dependsOn: Prepare
condition: and(succeeded(), eq(dependencies.Prepare.outputs['setVar.backendNotUpdated'], '0')) condition: and(succeeded(), eq(dependencies.Prepare.outputs['setVar.backendNotUpdated'], '0'))
workspace:
clean: all
strategy: strategy:
matrix: matrix:
MacCore: MacCore:
osName: 'Mac' osName: 'Mac'
testName: 'MacCore' testName: 'MacCore'
poolName: 'Azure Pipelines'
imageName: 'macos-10.14' imageName: 'macos-10.14'
WindowsCore: WindowsCore:
osName: 'Windows' osName: 'Windows'
testName: 'WindowsCore' testName: 'WindowsCore'
poolName: 'Azure Pipelines'
imageName: 'windows-2019' imageName: 'windows-2019'
LinuxCore: LinuxCore:
osName: 'Linux' osName: 'Linux'
testName: 'LinuxCore' testName: 'LinuxCore'
poolName: 'Azure Pipelines'
imageName: 'ubuntu-18.04' imageName: 'ubuntu-18.04'
pattern: 'Radarr.**.linux-core-x64.tar.gz' FreebsdCore:
osName: 'Linux'
testName: 'FreebsdCore'
poolName: 'FreeBSD'
imageName:
pool: pool:
name: $(poolName)
vmImage: $(imageName) vmImage: $(imageName)
steps: steps:
@@ -381,6 +422,7 @@ stages:
displayName: 'Install .net core' displayName: 'Install .net core'
inputs: inputs:
version: $(dotnetVersion) version: $(dotnetVersion)
condition: ne(variables['poolName'], 'FreeBSD')
- task: DownloadPipelineArtifact@2 - task: DownloadPipelineArtifact@2
displayName: Download Test Artifact displayName: Download Test Artifact
inputs: inputs:
@@ -393,7 +435,7 @@ stages:
sudo apt-get update sudo apt-get update
sudo apt-get install -y --allow-unauthenticated libmediainfo-dev libmediainfo0v5 mediainfo sudo apt-get install -y --allow-unauthenticated libmediainfo-dev libmediainfo0v5 mediainfo
displayName: Install mediainfo displayName: Install mediainfo
condition: and(succeeded(), eq(variables['osName'], 'Linux')) condition: and(succeeded(), eq(variables['testName'], 'LinuxCore'))
- powershell: Set-Service SCardSvr -StartupType Manual - powershell: Set-Service SCardSvr -StartupType Manual
displayName: Enable Windows Test Service displayName: Enable Windows Test Service
condition: and(succeeded(), eq(variables['osName'], 'Windows')) condition: and(succeeded(), eq(variables['osName'], 'Windows'))
@@ -431,19 +473,19 @@ stages:
mono520: mono520:
testName: 'Mono 5.20' testName: 'Mono 5.20'
artifactName: LinuxTests artifactName: LinuxTests
containerImage: servarr/testimages:mono-5.20 containerImage: ghcr.io/servarr/testimages:mono-5.20
mono610: mono610:
testName: 'Mono 6.10' testName: 'Mono 6.10'
artifactName: LinuxTests artifactName: LinuxTests
containerImage: servarr/testimages:mono-6.10 containerImage: ghcr.io/servarr/testimages:mono-6.10
mono612: mono612:
testName: 'Mono 6.12' testName: 'Mono 6.12'
artifactName: LinuxTests artifactName: LinuxTests
containerImage: servarr/testimages:mono-6.12 containerImage: ghcr.io/servarr/testimages:mono-6.12
alpine: alpine:
testName: 'Musl Net Core' testName: 'Musl Net Core'
artifactName: LinuxMuslCoreTests artifactName: LinuxMuslCoreTests
containerImage: servarr/testimages:alpine containerImage: ghcr.io/servarr/testimages:alpine
pool: pool:
vmImage: 'ubuntu-18.04' vmImage: 'ubuntu-18.04'
@@ -508,17 +550,17 @@ stages:
osName: 'Mac' osName: 'Mac'
testName: 'MacCore' testName: 'MacCore'
imageName: 'macos-10.14' imageName: 'macos-10.14'
pattern: 'Radarr.**.osx-core-x64.tar.gz' pattern: 'Radarr.*.osx-core-x64.tar.gz'
WindowsCore: WindowsCore:
osName: 'Windows' osName: 'Windows'
testName: 'WindowsCore' testName: 'WindowsCore'
imageName: 'windows-2019' imageName: 'windows-2019'
pattern: 'Radarr.**.windows-core-x64.zip' pattern: 'Radarr.*.windows-core-x64.zip'
LinuxCore: LinuxCore:
osName: 'Linux' osName: 'Linux'
testName: 'LinuxCore' testName: 'LinuxCore'
imageName: 'ubuntu-18.04' imageName: 'ubuntu-18.04'
pattern: 'Radarr.**.linux-core-x64.tar.gz' pattern: 'Radarr.*.linux-core-x64.tar.gz'
pool: pool:
vmImage: $(imageName) vmImage: $(imageName)
@@ -571,6 +613,52 @@ stages:
failTaskOnFailedTests: true failTaskOnFailedTests: true
displayName: Publish Test Results displayName: Publish Test Results
- job: Integration_FreeBSD
displayName: Integration Native FreeBSD
dependsOn: Prepare
condition: and(succeeded(), eq(dependencies.Prepare.outputs['setVar.backendNotUpdated'], '0'))
workspace:
clean: all
variables:
pattern: 'Radarr.*.freebsd-core-x64.tar.gz'
pool:
name: 'FreeBSD'
steps:
- checkout: none
- task: DownloadPipelineArtifact@2
displayName: Download Test Artifact
inputs:
buildType: 'current'
artifactName: 'FreebsdCoreTests'
targetPath: $(testsFolder)
- task: DownloadPipelineArtifact@2
displayName: Download Build Artifact
inputs:
buildType: 'current'
artifactName: Packages
itemPattern: '/$(pattern)'
targetPath: $(Build.ArtifactStagingDirectory)
- bash: |
mkdir -p ${BUILD_ARTIFACTSTAGINGDIRECTORY}/bin
tar xf ${BUILD_ARTIFACTSTAGINGDIRECTORY}/$(pattern) -C ${BUILD_ARTIFACTSTAGINGDIRECTORY}/bin
displayName: Extract Package
- bash: |
mkdir -p ./bin/
cp -r -v ${BUILD_ARTIFACTSTAGINGDIRECTORY}/bin/Radarr/. ./bin/
displayName: Move Package Contents
- bash: |
chmod a+x ${TESTSFOLDER}/test.sh
${TESTSFOLDER}/test.sh Linux Integration Test
displayName: Run Integration Tests
- task: PublishTestResults@2
inputs:
testResultsFormat: 'NUnit'
testResultsFiles: '**/TestResult.xml'
testRunTitle: 'FreeBSD Integration Tests'
failTaskOnFailedTests: true
displayName: Publish Test Results
- job: Integration_Docker - job: Integration_Docker
displayName: Integration Docker displayName: Integration Docker
dependsOn: Prepare dependsOn: Prepare
@@ -580,23 +668,23 @@ stages:
mono520: mono520:
testName: 'Mono 5.20' testName: 'Mono 5.20'
artifactName: LinuxTests artifactName: LinuxTests
containerImage: servarr/testimages:mono-5.20 containerImage: ghcr.io/servarr/testimages:mono-5.20
pattern: 'Radarr.**.linux.tar.gz' pattern: 'Radarr.*.linux.tar.gz'
mono610: mono610:
testName: 'Mono 6.10' testName: 'Mono 6.10'
artifactName: LinuxTests artifactName: LinuxTests
containerImage: servarr/testimages:mono-6.10 containerImage: ghcr.io/servarr/testimages:mono-6.10
pattern: 'Radarr.**.linux.tar.gz' pattern: 'Radarr.*.linux.tar.gz'
mono612: mono612:
testName: 'Mono 6.12' testName: 'Mono 6.12'
artifactName: LinuxTests artifactName: LinuxTests
containerImage: servarr/testimages:mono-6.12 containerImage: ghcr.io/servarr/testimages:mono-6.12
pattern: 'Radarr.**.linux.tar.gz' pattern: 'Radarr.*.linux.tar.gz'
alpine: alpine:
testName: 'Musl Net Core' testName: 'Musl Net Core'
artifactName: LinuxMuslCoreTests artifactName: LinuxMuslCoreTests
containerImage: servarr/testimages:alpine containerImage: ghcr.io/servarr/testimages:alpine
pattern: 'Radarr.**.linux-musl-core-x64.tar.gz' pattern: 'Radarr.*.linux-musl-core-x64.tar.gz'
pool: pool:
vmImage: 'ubuntu-18.04' vmImage: 'ubuntu-18.04'
@@ -655,17 +743,17 @@ stages:
Linux: Linux:
osName: 'Linux' osName: 'Linux'
imageName: 'ubuntu-18.04' imageName: 'ubuntu-18.04'
pattern: 'Radarr.**.linux-core-x64.tar.gz' pattern: 'Radarr.*.linux-core-x64.tar.gz'
failBuild: true failBuild: true
Mac: Mac:
osName: 'Mac' osName: 'Mac'
imageName: 'macos-10.14' imageName: 'macos-10.14'
pattern: 'Radarr.**.osx-core-x64.tar.gz' pattern: 'Radarr.*.osx-core-x64.tar.gz'
failBuild: true failBuild: true
Windows: Windows:
osName: 'Windows' osName: 'Windows'
imageName: 'windows-2019' imageName: 'windows-2019'
pattern: 'Radarr.**.windows-core-x64.zip' pattern: 'Radarr.*.windows-core-x64.zip'
failBuild: true failBuild: true
pool: pool:
@@ -757,7 +845,7 @@ stages:
- task: NodeTool@0 - task: NodeTool@0
displayName: Set Node.js version displayName: Set Node.js version
inputs: inputs:
versionSpec: '10.x' versionSpec: '12.x'
- checkout: self - checkout: self
submodules: true submodules: true
fetchDepth: 1 fetchDepth: 1
@@ -803,6 +891,7 @@ stages:
variables: variables:
disable.coverage.autogenerate: 'true' disable.coverage.autogenerate: 'true'
EnableAnalyzers: 'false'
pool: pool:
vmImage: windows-2019 vmImage: windows-2019
@@ -831,8 +920,8 @@ stages:
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: |
./build.sh --backend -f netcoreapp3.1 -r win-x64 ./build.sh --backend -f net5.0 -r win-x64
TEST_DIR=_tests/netcoreapp3.1/win-x64/publish/ ./test.sh Windows Unit Coverage TEST_DIR=_tests/net5.0/win-x64/publish/ ./test.sh Windows Unit Coverage
displayName: Coverage Unit Tests displayName: Coverage Unit Tests
- task: SonarCloudAnalyze@1 - task: SonarCloudAnalyze@1
condition: eq(variables['System.PullRequest.IsFork'], 'False') condition: eq(variables['System.PullRequest.IsFork'], 'False')
+55 -25
View File
@@ -1,4 +1,4 @@
#! /bin/bash #! /usr/bin/env bash
set -e set -e
outputFolder='_output' outputFolder='_output'
@@ -25,6 +25,18 @@ UpdateVersionNumber()
fi fi
} }
EnableBsdSupport()
{
#todo enable sdk with
#SDK_PATH=$(dotnet --list-sdks | grep -P '5\.\d\.\d+' | head -1 | sed 's/\(5\.[0-9]*\.[0-9]*\).*\[\(.*\)\]/\2\/\1/g')
# BUNDLED_VERSIONS="${SDK_PATH}/Microsoft.NETCoreSdk.BundledVersions.props"
if grep -qv freebsd-x64 src/Directory.Build.props; then
sed -i'' -e "s^<RuntimeIdentifiers>\(.*\)</RuntimeIdentifiers>^<RuntimeIdentifiers>\1;freebsd-x64</RuntimeIdentifiers>^g" src/Directory.Build.props
sed -i'' -e "s^<ExcludedRuntimeFrameworkPairs>\(.*\)</ExcludedRuntimeFrameworkPairs>^<ExcludedRuntimeFrameworkPairs>\1;freebsd-x64:net472</ExcludedRuntimeFrameworkPairs>^g" src/Directory.Build.props
fi
}
LintUI() LintUI()
{ {
ProgressStart 'ESLint' ProgressStart 'ESLint'
@@ -75,11 +87,11 @@ YarnInstall()
ProgressEnd 'yarn install' ProgressEnd 'yarn install'
} }
RunGulp() RunWebpack()
{ {
ProgressStart 'Running gulp' ProgressStart 'Running webpack'
yarn run build --production yarn run build --env production
ProgressEnd 'Running gulp' ProgressEnd 'Running webpack'
} }
PackageFiles() PackageFiles()
@@ -118,7 +130,7 @@ PackageLinux()
echo "Adding Radarr.Mono to UpdatePackage" echo "Adding Radarr.Mono to UpdatePackage"
cp $folder/Radarr.Mono.* $folder/Radarr.Update cp $folder/Radarr.Mono.* $folder/Radarr.Update
if [ "$framework" = "netcoreapp3.1" ]; then if [ "$framework" = "net5.0" ]; then
cp $folder/Mono.Posix.NETStandard.* $folder/Radarr.Update cp $folder/Mono.Posix.NETStandard.* $folder/Radarr.Update
cp $folder/libMonoPosixHelper.* $folder/Radarr.Update cp $folder/libMonoPosixHelper.* $folder/Radarr.Update
fi fi
@@ -136,7 +148,7 @@ PackageMacOS()
PackageFiles "$folder" "$framework" "osx-x64" PackageFiles "$folder" "$framework" "osx-x64"
if [ "$framework" = "net462" ]; then if [ "$framework" = "net472" ]; then
echo "Adding Startup script" echo "Adding Startup script"
cp macOS/Radarr $folder cp macOS/Radarr $folder
fi fi
@@ -150,7 +162,7 @@ PackageMacOS()
echo "Adding Radarr.Mono to UpdatePackage" echo "Adding Radarr.Mono to UpdatePackage"
cp $folder/Radarr.Mono.* $folder/Radarr.Update cp $folder/Radarr.Mono.* $folder/Radarr.Update
if [ "$framework" = "netcoreapp3.1" ]; then if [ "$framework" = "net5.0" ]; then
cp $folder/Mono.Posix.NETStandard.* $folder/Radarr.Update cp $folder/Mono.Posix.NETStandard.* $folder/Radarr.Update
cp $folder/libMonoPosixHelper.* $folder/Radarr.Update cp $folder/libMonoPosixHelper.* $folder/Radarr.Update
fi fi
@@ -190,6 +202,7 @@ PackageWindows()
local folder=$artifactsFolder/$runtime/$framework/Radarr local folder=$artifactsFolder/$runtime/$framework/Radarr
PackageFiles "$folder" "$framework" "$runtime" PackageFiles "$folder" "$framework" "$runtime"
cp -r $outputFolder/$framework-windows/$runtime/publish/* $folder
echo "Removing Radarr.Mono" echo "Removing Radarr.Mono"
rm -f $folder/Radarr.Mono.* rm -f $folder/Radarr.Mono.*
@@ -211,7 +224,7 @@ Package()
IFS='-' read -ra SPLIT <<< "$runtime" IFS='-' read -ra SPLIT <<< "$runtime"
case "${SPLIT[0]}" in case "${SPLIT[0]}" in
linux) linux|freebsd*)
PackageLinux "$framework" "$runtime" PackageLinux "$framework" "$runtime"
;; ;;
win) win)
@@ -256,6 +269,7 @@ if [ $# -eq 0 ]; then
FRONTEND=YES FRONTEND=YES
PACKAGES=YES PACKAGES=YES
LINT=YES LINT=YES
ENABLE_BSD=NO
fi fi
while [[ $# -gt 0 ]] while [[ $# -gt 0 ]]
@@ -267,6 +281,10 @@ case $key in
BACKEND=YES BACKEND=YES
shift # past argument shift # past argument
;; ;;
--enable-bsd)
ENABLE_BSD=YES
shift # past argument
;;
-r|--runtime) -r|--runtime)
RID="$2" RID="$2"
shift # past argument shift # past argument
@@ -307,15 +325,23 @@ set -- "${POSITIONAL[@]}" # restore positional parameters
if [ "$BACKEND" = "YES" ]; if [ "$BACKEND" = "YES" ];
then then
UpdateVersionNumber UpdateVersionNumber
if [ "$ENABLE_BSD" = "YES" ];
then
EnableBsdSupport
fi
Build Build
if [[ -z "$RID" || -z "$FRAMEWORK" ]]; if [[ -z "$RID" || -z "$FRAMEWORK" ]];
then then
PackageTests "netcoreapp3.1" "win-x64" PackageTests "net5.0" "win-x64"
PackageTests "netcoreapp3.1" "win-x86" PackageTests "net5.0" "win-x86"
PackageTests "netcoreapp3.1" "linux-x64" PackageTests "net5.0" "linux-x64"
PackageTests "netcoreapp3.1" "linux-musl-x64" PackageTests "net5.0" "linux-musl-x64"
PackageTests "netcoreapp3.1" "osx-x64" PackageTests "net5.0" "osx-x64"
PackageTests "net462" "linux-x64" PackageTests "net472" "linux-x64"
if [ "$ENABLE_BSD" = "YES" ];
then
PackageTests "net5.0" "freebsd-x64"
fi
else else
PackageTests "$FRAMEWORK" "$RID" PackageTests "$FRAMEWORK" "$RID"
fi fi
@@ -324,7 +350,7 @@ fi
if [ "$FRONTEND" = "YES" ]; if [ "$FRONTEND" = "YES" ];
then then
YarnInstall YarnInstall
RunGulp RunWebpack
fi fi
if [ "$LINT" = "YES" ]; if [ "$LINT" = "YES" ];
@@ -343,15 +369,19 @@ then
if [[ -z "$RID" || -z "$FRAMEWORK" ]]; if [[ -z "$RID" || -z "$FRAMEWORK" ]];
then then
Package "netcoreapp3.1" "win-x64" Package "net5.0" "win-x64"
Package "netcoreapp3.1" "win-x86" Package "net5.0" "win-x86"
Package "netcoreapp3.1" "linux-x64" Package "net5.0" "linux-x64"
Package "netcoreapp3.1" "linux-musl-x64" Package "net5.0" "linux-musl-x64"
Package "netcoreapp3.1" "linux-arm64" Package "net5.0" "linux-arm64"
Package "netcoreapp3.1" "linux-musl-arm64" Package "net5.0" "linux-musl-arm64"
Package "netcoreapp3.1" "linux-arm" Package "net5.0" "linux-arm"
Package "netcoreapp3.1" "osx-x64" Package "net5.0" "osx-x64"
Package "net462" "linux-x64" Package "net472" "linux-x64"
if [ "$ENABLE_BSD" = "YES" ];
then
Package "net5.0" "freebsd-x64"
fi
else else
Package "$FRAMEWORK" "$RID" Package "$FRAMEWORK" "$RID"
fi fi
+8 -3
View File
@@ -6,8 +6,10 @@ const dirs = fs
.map((dirent) => dirent.name) .map((dirent) => dirent.name)
.join('|'); .join('|');
const frontendFolder = __dirname;
module.exports = { module.exports = {
parser: 'babel-eslint', parser: '@babel/eslint-parser',
env: { env: {
browser: true, browser: true,
@@ -25,6 +27,9 @@ module.exports = {
parserOptions: { parserOptions: {
ecmaVersion: 6, ecmaVersion: 6,
sourceType: 'module', sourceType: 'module',
babelOptions: {
configFile: `${frontendFolder}/babel.config.js`
},
ecmaFeatures: { ecmaFeatures: {
modules: true, modules: true,
impliedStrict: true impliedStrict: true
@@ -271,7 +276,7 @@ module.exports = {
// ImportSort // ImportSort
'simple-import-sort/sort': 'error', 'simple-import-sort/imports': 'error',
'import/newline-after-import': 'error', 'import/newline-after-import': 'error',
// React // React
@@ -309,7 +314,7 @@ module.exports = {
{ {
files: ['*.js'], files: ['*.js'],
rules: { rules: {
'simple-import-sort/sort': [ 'simple-import-sort/imports': [
'error', 'error',
{ {
groups: [ groups: [
+269
View File
@@ -0,0 +1,269 @@
const path = require('path');
const webpack = require('webpack');
const CopyPlugin = require('copy-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const LiveReloadPlugin = require('webpack-livereload-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const TerserPlugin = require('terser-webpack-plugin');
module.exports = (env) => {
const uiFolder = 'UI';
const frontendFolder = path.join(__dirname, '..');
const srcFolder = path.join(frontendFolder, 'src');
const isProduction = !!env.production;
const isProfiling = isProduction && !!env.profile;
const inlineWebWorkers = 'no-fallback';
const distFolder = path.resolve(frontendFolder, '..', '_output', uiFolder);
console.log('Source Folder:', srcFolder);
console.log('Output Folder:', distFolder);
console.log('isProduction:', isProduction);
console.log('isProfiling:', isProfiling);
const config = {
mode: isProduction ? 'production' : 'development',
devtool: 'source-map',
stats: {
children: false
},
watchOptions: {
ignored: /node_modules/
},
entry: {
index: 'index.js'
},
resolve: {
modules: [
srcFolder,
path.join(srcFolder, 'Shims'),
'node_modules'
],
alias: {
jquery: 'jquery/src/jquery'
},
fallback: {
buffer: false,
http: false,
https: false,
url: false,
util: false,
net: false
}
},
output: {
path: distFolder,
publicPath: '/',
filename: '[name].js',
sourceMapFilename: '[file].map'
},
optimization: {
moduleIds: 'deterministic',
chunkIds: 'named',
splitChunks: {
chunks: 'initial',
name: 'vendors'
}
},
performance: {
hints: false
},
plugins: [
new webpack.DefinePlugin({
__DEV__: !isProduction,
'process.env.NODE_ENV': isProduction ? JSON.stringify('production') : JSON.stringify('development')
}),
new MiniCssExtractPlugin({
filename: 'Content/styles.css'
}),
new HtmlWebpackPlugin({
template: 'frontend/src/index.html',
filename: 'index.html',
publicPath: '/'
}),
new CopyPlugin({
patterns: [
// HTML
{
from: 'frontend/src/*.html',
to: path.join(distFolder, '[name][ext]'),
globOptions: {
ignore: ['**/index.html']
}
},
// Fonts
{
from: 'frontend/src/Content/Fonts/*.*',
to: path.join(distFolder, 'Content/Fonts', '[name][ext]')
},
// Icon Images
{
from: 'frontend/src/Content/Images/Icons/*.*',
to: path.join(distFolder, 'Content/Images/Icons', '[name][ext]')
},
// Images
{
from: 'frontend/src/Content/Images/*.*',
to: path.join(distFolder, 'Content/Images', '[name][ext]')
},
// Robots
{
from: 'frontend/src/Content/robots.txt',
to: path.join(distFolder, 'Content', '[name][ext]')
}
]
}),
new LiveReloadPlugin()
],
resolveLoader: {
modules: [
'node_modules',
'frontend/build/webpack/'
]
},
module: {
rules: [
{
test: /\.worker\.js$/,
use: {
loader: 'worker-loader',
options: {
filename: '[name].js',
inline: inlineWebWorkers
}
}
},
{
test: /\.js?$/,
exclude: /(node_modules|JsLibraries)/,
use: [
{
loader: 'babel-loader',
options: {
configFile: `${frontendFolder}/babel.config.js`,
envName: isProduction ? 'production' : 'development',
presets: [
[
'@babel/preset-env',
{
modules: false,
loose: true,
debug: false,
useBuiltIns: 'entry',
corejs: 3
}
]
]
}
}
]
},
// CSS Modules
{
test: /\.css$/,
exclude: /(node_modules|globals.css)/,
use: [
{ loader: MiniCssExtractPlugin.loader },
{
loader: 'css-loader',
options: {
importLoaders: 1,
modules: {
localIdentName: '[name]/[local]/[hash:base64:5]'
}
}
},
{
loader: 'postcss-loader',
options: {
postcssOptions: {
config: 'frontend/postcss.config.js'
}
}
}
]
},
// Global styles
{
test: /\.css$/,
include: /(node_modules|globals.css)/,
use: [
'style-loader',
{
loader: 'css-loader'
}
]
},
// Fonts
{
test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
use: [
{
loader: 'url-loader',
options: {
limit: 10240,
mimetype: 'application/font-woff',
emitFile: false,
name: 'Content/Fonts/[name].[ext]'
}
}
]
},
{
test: /\.(ttf|eot|eot?#iefix|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
use: [
{
loader: 'file-loader',
options: {
emitFile: false,
name: 'Content/Fonts/[name].[ext]'
}
}
]
}
]
}
};
if (isProfiling) {
config.resolve.alias['react-dom$'] = 'react-dom/profiling';
config.resolve.alias['scheduler/tracing'] = 'scheduler/tracing-profiling';
config.optimization.minimizer = [
new TerserPlugin({
cache: true,
parallel: true,
sourceMap: true, // Must be set to true if using source-maps in production
terserOptions: {
mangle: false,
keep_classnames: true,
keep_fnames: true
}
})
];
}
return config;
};
-17
View File
@@ -1,17 +0,0 @@
const gulp = require('gulp');
require('./clean');
require('./copy');
require('./webpack');
gulp.task('build',
gulp.series('clean',
gulp.parallel(
'webpack',
'copyHtml',
'copyFonts',
'copyImages'
)
)
);
-8
View File
@@ -1,8 +0,0 @@
const gulp = require('gulp');
const del = require('del');
const paths = require('./helpers/paths');
gulp.task('clean', () => {
return del([paths.dest.root]);
});
-34
View File
@@ -1,34 +0,0 @@
const path = require('path');
const gulp = require('gulp');
const print = require('gulp-print').default;
const cache = require('gulp-cached');
const livereload = require('gulp-livereload');
const paths = require('./helpers/paths.js');
gulp.task('copyHtml', () => {
return gulp.src(paths.src.html, { base: paths.src.root })
.pipe(cache('copyHtml'))
.pipe(print())
.pipe(gulp.dest(paths.dest.root))
.pipe(livereload());
});
gulp.task('copyFonts', () => {
return gulp.src(
path.join(paths.src.fonts, '**', '*.*'), { base: paths.src.root }
)
.pipe(cache('copyFonts'))
.pipe(print())
.pipe(gulp.dest(paths.dest.root))
.pipe(livereload());
});
gulp.task('copyImages', () => {
return gulp.src(
path.join(paths.src.images, '**', '*.*'), { base: paths.src.root }
)
.pipe(cache('copyImages'))
.pipe(print())
.pipe(gulp.dest(paths.dest.root))
.pipe(livereload());
});
-5
View File
@@ -1,5 +0,0 @@
require('./build.js');
require('./clean.js');
require('./copy.js');
require('./watch.js');
require('./webpack.js');
-6
View File
@@ -1,6 +0,0 @@
const colors = require('ansi-colors');
module.exports = function errorHandler(error) {
console.log(colors.red(`Error (${error.plugin}): ${error.message}`));
this.emit('end');
};
-23
View File
@@ -1,23 +0,0 @@
const root = './frontend/src';
const paths = {
src: {
root,
html: `${root}/*.html`,
scripts: `${root}/**/*.js`,
content: `${root}/Content/`,
fonts: `${root}/Content/Fonts/`,
images: `${root}/Content/Images/`,
exclude: {
libs: `!${root}/JsLibraries/**`
}
},
dest: {
root: './_output/UI/',
content: './_output/UI/Content/',
fonts: './_output/UI/Content/Fonts/',
images: './_output/UI/Content/Images/'
}
};
module.exports = paths;
-18
View File
@@ -1,18 +0,0 @@
const gulp = require('gulp');
const livereload = require('gulp-livereload');
const gulpWatch = require('gulp-watch');
const paths = require('./helpers/paths.js');
require('./copy.js');
require('./webpack.js');
function watch() {
livereload.listen({ start: true });
gulp.task('webpackWatch')();
gulpWatch(paths.src.html, gulp.series('copyHtml'));
gulpWatch(`${paths.src.fonts}**/*.*`, gulp.series('copyFonts'));
gulpWatch(`${paths.src.images}**/*.*`, gulp.series('copyImages'));
}
gulp.task('watch', gulp.series('build', watch));
-271
View File
@@ -1,271 +0,0 @@
const gulp = require('gulp');
const webpackStream = require('webpack-stream');
const livereload = require('gulp-livereload');
const path = require('path');
const webpack = require('webpack');
const errorHandler = require('./helpers/errorHandler');
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const HtmlWebpackPluginHtmlTags = require('html-webpack-plugin/lib/html-tags');
const TerserPlugin = require('terser-webpack-plugin');
const uiFolder = 'UI';
const frontendFolder = path.join(__dirname, '..');
const srcFolder = path.join(frontendFolder, 'src');
const isProduction = process.argv.indexOf('--production') > -1;
const isProfiling = isProduction && process.argv.indexOf('--profile') > -1;
const inlineWebWorkers = 'no-fallback';
const distFolder = path.resolve(frontendFolder, '..', '_output', uiFolder);
console.log('Source Folder:', srcFolder);
console.log('Output Folder:', distFolder);
console.log('isProduction:', isProduction);
console.log('isProfiling:', isProfiling);
const cssVarsFiles = [
'../src/Styles/Variables/colors',
'../src/Styles/Variables/dimensions',
'../src/Styles/Variables/fonts',
'../src/Styles/Variables/animations',
'../src/Styles/Variables/zIndexes'
].map(require.resolve);
// Override the way HtmlWebpackPlugin injects the scripts
// TODO: Find a better way to get these paths without
HtmlWebpackPlugin.prototype.injectAssetsIntoHtml = function(html, assets, assetTags) {
const head = assetTags.headTags.map((v) => {
const href = v.attributes.href
.replace('\\', '/')
.replace('%5C', '/');
v.attributes = { rel: 'stylesheet', type: 'text/css', href: `/${href}` };
return HtmlWebpackPluginHtmlTags.htmlTagObjectToString(v, this.options.xhtml);
});
const body = assetTags.bodyTags.map((v) => {
v.attributes = { src: `/${v.attributes.src}` };
return HtmlWebpackPluginHtmlTags.htmlTagObjectToString(v, this.options.xhtml);
});
return html
.replace('<!-- webpack bundles head -->', head.join('\r\n '))
.replace('<!-- webpack bundles body -->', body.join('\r\n '));
};
const plugins = [
new OptimizeCssAssetsPlugin({}),
new webpack.DefinePlugin({
__DEV__: !isProduction,
'process.env.NODE_ENV': isProduction ? JSON.stringify('production') : JSON.stringify('development')
}),
new MiniCssExtractPlugin({
filename: path.join('Content', 'styles.css')
}),
new HtmlWebpackPlugin({
template: 'frontend/src/index.html',
filename: 'index.html'
})
];
const config = {
mode: isProduction ? 'production' : 'development',
devtool: '#source-map',
stats: {
children: false
},
watchOptions: {
ignored: /node_modules/
},
entry: {
index: 'index.js'
},
resolve: {
modules: [
srcFolder,
path.join(srcFolder, 'Shims'),
'node_modules'
],
alias: {
jquery: 'jquery/src/jquery'
}
},
output: {
path: distFolder,
filename: '[name].js',
sourceMapFilename: '[file].map'
},
optimization: {
chunkIds: 'named',
splitChunks: {
chunks: 'initial'
}
},
performance: {
hints: false
},
plugins,
resolveLoader: {
modules: [
'node_modules',
'frontend/gulp/webpack/'
]
},
module: {
rules: [
{
test: /\.worker\.js$/,
use: {
loader: 'worker-loader',
options: {
filename: '[name].js',
inline: inlineWebWorkers
}
}
},
{
test: /\.js?$/,
exclude: /(node_modules|JsLibraries)/,
use: [
{
loader: 'babel-loader',
options: {
configFile: `${frontendFolder}/babel.config.js`,
envName: isProduction ? 'production' : 'development',
presets: [
[
'@babel/preset-env',
{
modules: false,
loose: true,
debug: false,
useBuiltIns: 'entry',
corejs: 3
}
]
]
}
}
]
},
// CSS Modules
{
test: /\.css$/,
exclude: /(node_modules|globals.css)/,
use: [
{ loader: MiniCssExtractPlugin.loader },
{
loader: 'css-loader',
options: {
importLoaders: 1,
modules: {
localIdentName: '[name]/[local]/[hash:base64:5]'
}
}
},
{
loader: 'postcss-loader',
options: {
ident: 'postcss',
config: {
ctx: {
cssVarsFiles
},
path: 'frontend/postcss.config.js'
}
}
}
]
},
// Global styles
{
test: /\.css$/,
include: /(node_modules|globals.css)/,
use: [
'style-loader',
{
loader: 'css-loader'
}
]
},
// Fonts
{
test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
use: [
{
loader: 'url-loader',
options: {
limit: 10240,
mimetype: 'application/font-woff',
emitFile: false,
name: 'Content/Fonts/[name].[ext]'
}
}
]
},
{
test: /\.(ttf|eot|eot?#iefix|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
use: [
{
loader: 'file-loader',
options: {
emitFile: false,
name: 'Content/Fonts/[name].[ext]'
}
}
]
}
]
}
};
if (isProfiling) {
config.resolve.alias['react-dom$'] = 'react-dom/profiling';
config.resolve.alias['scheduler/tracing'] = 'scheduler/tracing-profiling';
config.optimization.minimizer = [
new TerserPlugin({
cache: true,
parallel: true,
sourceMap: true, // Must be set to true if using source-maps in production
terserOptions: {
mangle: false,
keep_classnames: true,
keep_fnames: true
}
})
];
}
gulp.task('webpack', () => {
return webpackStream(config)
.pipe(gulp.dest('_output/UI'));
});
gulp.task('webpackWatch', () => {
config.watch = true;
return webpackStream(config, webpack)
.on('error', errorHandler)
.pipe(gulp.dest('_output/UI'))
.on('error', errorHandler)
.pipe(livereload())
.on('error', errorHandler);
});
+29 -20
View File
@@ -1,23 +1,32 @@
const reload = require('require-nocache')(module); const reload = require('require-nocache')(module);
module.exports = (ctx, configPath, options) => { const cssVarsFiles = [
const config = { './src/Styles/Variables/colors',
plugins: { './src/Styles/Variables/dimensions',
'postcss-mixins': { './src/Styles/Variables/fonts',
mixinsDir: [ './src/Styles/Variables/animations',
'frontend/src/Styles/Mixins' './src/Styles/Variables/zIndexes'
] ].map(require.resolve);
},
'postcss-simple-vars': {
variables: () =>
ctx.options.cssVarsFiles.reduce((acc, vars) => {
return Object.assign(acc, reload(vars));
}, {})
},
'postcss-color-function': {},
'postcss-nested': {}
}
};
return config; const mixinsFiles = [
}; 'frontend/src/Styles/Mixins/cover.css',
'frontend/src/Styles/Mixins/linkOverlay.css',
'frontend/src/Styles/Mixins/scroller.css',
'frontend/src/Styles/Mixins/truncate.css'
];
module.exports = {
plugins: [
['postcss-mixins', {
mixinsFiles
}],
['postcss-simple-vars', {
variables: () =>
cssVarsFiles.reduce((acc, vars) => {
return Object.assign(acc, reload(vars));
}, {})
}],
'postcss-color-function',
'postcss-nested'
]
};
+21 -2
View File
@@ -32,6 +32,8 @@ class Queue extends Component {
constructor(props, context) { constructor(props, context) {
super(props, context); super(props, context);
this._shouldBlockRefresh = false;
this.state = { this.state = {
allSelected: false, allSelected: false,
allUnselected: false, allUnselected: false,
@@ -43,6 +45,14 @@ class Queue extends Component {
}; };
} }
shouldComponentUpdate() {
if (this._shouldBlockRefresh) {
return false;
}
return true;
}
componentDidUpdate(prevProps) { componentDidUpdate(prevProps) {
const { const {
items, items,
@@ -85,6 +95,10 @@ class Queue extends Component {
// //
// Listeners // Listeners
onQueueRowModalOpenOrClose = (isOpen) => {
this._shouldBlockRefresh = isOpen;
}
onSelectAllChange = ({ value }) => { onSelectAllChange = ({ value }) => {
this.setState(selectAll(this.state.selectedState, value)); this.setState(selectAll(this.state.selectedState, value));
} }
@@ -100,15 +114,19 @@ class Queue extends Component {
} }
onRemoveSelectedPress = () => { onRemoveSelectedPress = () => {
this.setState({ isConfirmRemoveModalOpen: true }); this.setState({ isConfirmRemoveModalOpen: true }, () => {
this._shouldBlockRefresh = true;
});
} }
onRemoveSelectedConfirmed = (payload) => { onRemoveSelectedConfirmed = (payload) => {
this._shouldBlockRefresh = false;
this.props.onRemoveSelectedPress({ ids: this.getSelectedIds(), ...payload }); this.props.onRemoveSelectedPress({ ids: this.getSelectedIds(), ...payload });
this.setState({ isConfirmRemoveModalOpen: false }); this.setState({ isConfirmRemoveModalOpen: false });
} }
onConfirmRemoveModalClose = () => { onConfirmRemoveModalClose = () => {
this._shouldBlockRefresh = false;
this.setState({ isConfirmRemoveModalOpen: false }); this.setState({ isConfirmRemoveModalOpen: false });
} }
@@ -208,7 +226,7 @@ class Queue extends Component {
} }
{ {
isPopulated && !hasError && !items.length && isAllPopulated && !hasError && !items.length &&
<div> <div>
{translate('QueueIsEmpty')} {translate('QueueIsEmpty')}
</div> </div>
@@ -237,6 +255,7 @@ class Queue extends Component {
columns={columns} columns={columns}
{...item} {...item}
onSelectedChange={this.onSelectedChange} onSelectedChange={this.onSelectedChange}
onQueueRowModalOpenOrClose={this.onQueueRowModalOpenOrClose}
/> />
); );
}) })
@@ -43,6 +43,7 @@ class QueueConnector extends Component {
const { const {
useCurrentPage, useCurrentPage,
fetchQueue, fetchQueue,
fetchQueueStatus,
gotoQueueFirstPage gotoQueueFirstPage
} = this.props; } = this.props;
@@ -53,6 +54,8 @@ class QueueConnector extends Component {
} else { } else {
gotoQueueFirstPage(); gotoQueueFirstPage();
} }
fetchQueueStatus();
} }
componentDidUpdate(prevProps) { componentDidUpdate(prevProps) {
@@ -152,6 +155,7 @@ QueueConnector.propTypes = {
useCurrentPage: PropTypes.bool.isRequired, useCurrentPage: PropTypes.bool.isRequired,
items: PropTypes.arrayOf(PropTypes.object).isRequired, items: PropTypes.arrayOf(PropTypes.object).isRequired,
fetchQueue: PropTypes.func.isRequired, fetchQueue: PropTypes.func.isRequired,
fetchQueueStatus: PropTypes.func.isRequired,
gotoQueueFirstPage: PropTypes.func.isRequired, gotoQueueFirstPage: PropTypes.func.isRequired,
gotoQueuePreviousPage: PropTypes.func.isRequired, gotoQueuePreviousPage: PropTypes.func.isRequired,
gotoQueueNextPage: PropTypes.func.isRequired, gotoQueueNextPage: PropTypes.func.isRequired,
+16 -2
View File
@@ -43,19 +43,32 @@ class QueueRow extends Component {
} }
onRemoveQueueItemModalConfirmed = (blacklist) => { onRemoveQueueItemModalConfirmed = (blacklist) => {
this.props.onRemoveQueueItemPress(blacklist); const {
onRemoveQueueItemPress,
onQueueRowModalOpenOrClose
} = this.props;
onQueueRowModalOpenOrClose(false);
onRemoveQueueItemPress(blacklist);
this.setState({ isRemoveQueueItemModalOpen: false }); this.setState({ isRemoveQueueItemModalOpen: false });
} }
onRemoveQueueItemModalClose = () => { onRemoveQueueItemModalClose = () => {
this.props.onQueueRowModalOpenOrClose(false);
this.setState({ isRemoveQueueItemModalOpen: false }); this.setState({ isRemoveQueueItemModalOpen: false });
} }
onInteractiveImportPress = () => { onInteractiveImportPress = () => {
this.props.onQueueRowModalOpenOrClose(true);
this.setState({ isInteractiveImportModalOpen: true }); this.setState({ isInteractiveImportModalOpen: true });
} }
onInteractiveImportModalClose = () => { onInteractiveImportModalClose = () => {
this.props.onQueueRowModalOpenOrClose(false);
this.setState({ isInteractiveImportModalOpen: false }); this.setState({ isInteractiveImportModalOpen: false });
} }
@@ -359,7 +372,8 @@ QueueRow.propTypes = {
columns: PropTypes.arrayOf(PropTypes.object).isRequired, columns: PropTypes.arrayOf(PropTypes.object).isRequired,
onSelectedChange: PropTypes.func.isRequired, onSelectedChange: PropTypes.func.isRequired,
onGrabPress: PropTypes.func.isRequired, onGrabPress: PropTypes.func.isRequired,
onRemoveQueueItemPress: PropTypes.func.isRequired onRemoveQueueItemPress: PropTypes.func.isRequired,
onQueueRowModalOpenOrClose: PropTypes.func.isRequired
}; };
QueueRow.defaultProps = { QueueRow.defaultProps = {
@@ -81,7 +81,8 @@ class AddNewMovie extends Component {
const { const {
error, error,
items, items,
hasExistingMovies hasExistingMovies,
colorImpairedMode
} = this.props; } = this.props;
const term = this.state.term; const term = this.state.term;
@@ -141,6 +142,7 @@ class AddNewMovie extends Component {
return ( return (
<AddNewMovieSearchResultConnector <AddNewMovieSearchResultConnector
key={item.tmdbId} key={item.tmdbId}
colorImpairedMode={colorImpairedMode}
{...item} {...item}
/> />
); );
@@ -213,7 +215,8 @@ AddNewMovie.propTypes = {
items: PropTypes.arrayOf(PropTypes.object).isRequired, items: PropTypes.arrayOf(PropTypes.object).isRequired,
hasExistingMovies: PropTypes.bool.isRequired, hasExistingMovies: PropTypes.bool.isRequired,
onMovieLookupChange: PropTypes.func.isRequired, onMovieLookupChange: PropTypes.func.isRequired,
onClearMovieLookup: PropTypes.func.isRequired onClearMovieLookup: PropTypes.func.isRequired,
colorImpairedMode: PropTypes.bool.isRequired
}; };
export default AddNewMovie; export default AddNewMovie;
@@ -3,8 +3,10 @@ import React, { Component } from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { createSelector } from 'reselect'; import { createSelector } from 'reselect';
import { clearAddMovie, lookupMovie } from 'Store/Actions/addMovieActions'; import { clearAddMovie, lookupMovie } from 'Store/Actions/addMovieActions';
import { clearQueueDetails, fetchQueueDetails } from 'Store/Actions/queueActions';
import { fetchRootFolders } from 'Store/Actions/rootFolderActions'; import { fetchRootFolders } from 'Store/Actions/rootFolderActions';
import { fetchImportExclusions } from 'Store/Actions/Settings/importExclusions'; import { fetchImportExclusions } from 'Store/Actions/Settings/importExclusions';
import createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';
import parseUrl from 'Utilities/String/parseUrl'; import parseUrl from 'Utilities/String/parseUrl';
import AddNewMovie from './AddNewMovie'; import AddNewMovie from './AddNewMovie';
@@ -13,13 +15,15 @@ function createMapStateToProps() {
(state) => state.addMovie, (state) => state.addMovie,
(state) => state.movies.items.length, (state) => state.movies.items.length,
(state) => state.router.location, (state) => state.router.location,
(addMovie, existingMoviesCount, location) => { createUISettingsSelector(),
(addMovie, existingMoviesCount, location, uiSettings) => {
const { params } = parseUrl(location.search); const { params } = parseUrl(location.search);
return { return {
...addMovie, ...addMovie,
term: params.term, term: params.term,
hasExistingMovies: existingMoviesCount > 0 hasExistingMovies: existingMoviesCount > 0,
colorImpairedMode: uiSettings.enableColorImpairedMode
}; };
} }
); );
@@ -29,7 +33,9 @@ const mapDispatchToProps = {
lookupMovie, lookupMovie,
clearAddMovie, clearAddMovie,
fetchRootFolders, fetchRootFolders,
fetchImportExclusions fetchImportExclusions,
fetchQueueDetails,
clearQueueDetails
}; };
class AddNewMovieConnector extends Component { class AddNewMovieConnector extends Component {
@@ -46,6 +52,7 @@ class AddNewMovieConnector extends Component {
componentDidMount() { componentDidMount() {
this.props.fetchRootFolders(); this.props.fetchRootFolders();
this.props.fetchImportExclusions(); this.props.fetchImportExclusions();
this.props.fetchQueueDetails();
} }
componentWillUnmount() { componentWillUnmount() {
@@ -54,6 +61,7 @@ class AddNewMovieConnector extends Component {
} }
this.props.clearAddMovie(); this.props.clearAddMovie();
this.props.clearQueueDetails();
} }
// //
@@ -102,7 +110,9 @@ AddNewMovieConnector.propTypes = {
lookupMovie: PropTypes.func.isRequired, lookupMovie: PropTypes.func.isRequired,
clearAddMovie: PropTypes.func.isRequired, clearAddMovie: PropTypes.func.isRequired,
fetchRootFolders: PropTypes.func.isRequired, fetchRootFolders: PropTypes.func.isRequired,
fetchImportExclusions: PropTypes.func.isRequired fetchImportExclusions: PropTypes.func.isRequired,
fetchQueueDetails: PropTypes.func.isRequired,
clearQueueDetails: PropTypes.func.isRequired
}; };
export default connect(createMapStateToProps, mapDispatchToProps)(AddNewMovieConnector); export default connect(createMapStateToProps, mapDispatchToProps)(AddNewMovieConnector);
@@ -17,30 +17,15 @@ import styles from './AddNewMovieModalContent.css';
class AddNewMovieModalContent extends Component { class AddNewMovieModalContent extends Component {
//
// Lifecycle
constructor(props, context) {
super(props, context);
this.state = {
searchForMovie: false
};
}
// //
// Listeners // Listeners
onSearchForMissingMovieChange = ({ value }) => {
this.setState({ searchForMovie: value });
}
onQualityProfileIdChange = ({ value }) => { onQualityProfileIdChange = ({ value }) => {
this.props.onInputChange({ name: 'qualityProfileId', value: parseInt(value) }); this.props.onInputChange({ name: 'qualityProfileId', value: parseInt(value) });
} }
onAddMoviePress = () => { onAddMoviePress = () => {
this.props.onAddMoviePress(this.state.searchForMovie); this.props.onAddMoviePress();
} }
// //
@@ -57,6 +42,7 @@ class AddNewMovieModalContent extends Component {
monitor, monitor,
qualityProfileId, qualityProfileId,
minimumAvailability, minimumAvailability,
searchForMovie,
folder, folder,
tags, tags,
isSmallScreen, isSmallScreen,
@@ -175,8 +161,8 @@ class AddNewMovieModalContent extends Component {
containerClassName={styles.searchForMissingMovieContainer} containerClassName={styles.searchForMissingMovieContainer}
className={styles.searchForMissingMovieInput} className={styles.searchForMissingMovieInput}
name="searchForMovie" name="searchForMovie"
value={this.state.searchForMovie} onChange={onInputChange}
onChange={this.onSearchForMissingMovieChange} {...searchForMovie}
/> />
</label> </label>
@@ -205,6 +191,7 @@ AddNewMovieModalContent.propTypes = {
monitor: PropTypes.object.isRequired, monitor: PropTypes.object.isRequired,
qualityProfileId: PropTypes.object, qualityProfileId: PropTypes.object,
minimumAvailability: PropTypes.object.isRequired, minimumAvailability: PropTypes.object.isRequired,
searchForMovie: PropTypes.object.isRequired,
folder: PropTypes.string.isRequired, folder: PropTypes.string.isRequired,
tags: PropTypes.object.isRequired, tags: PropTypes.object.isRequired,
isSmallScreen: PropTypes.bool.isRequired, isSmallScreen: PropTypes.bool.isRequired,
@@ -53,13 +53,14 @@ class AddNewMovieModalContentConnector extends Component {
this.props.setAddMovieDefault({ [name]: value }); this.props.setAddMovieDefault({ [name]: value });
} }
onAddMoviePress = (searchForMovie) => { onAddMoviePress = () => {
const { const {
tmdbId, tmdbId,
rootFolderPath, rootFolderPath,
monitor, monitor,
qualityProfileId, qualityProfileId,
minimumAvailability, minimumAvailability,
searchForMovie,
tags tags
} = this.props; } = this.props;
@@ -69,8 +70,8 @@ class AddNewMovieModalContentConnector extends Component {
monitor: monitor.value, monitor: monitor.value,
qualityProfileId: qualityProfileId.value, qualityProfileId: qualityProfileId.value,
minimumAvailability: minimumAvailability.value, minimumAvailability: minimumAvailability.value,
tags: tags.value, searchForMovie: searchForMovie.value,
searchForMovie tags: tags.value
}); });
} }
@@ -94,6 +95,7 @@ AddNewMovieModalContentConnector.propTypes = {
monitor: PropTypes.object.isRequired, monitor: PropTypes.object.isRequired,
qualityProfileId: PropTypes.object, qualityProfileId: PropTypes.object,
minimumAvailability: PropTypes.object.isRequired, minimumAvailability: PropTypes.object.isRequired,
searchForMovie: PropTypes.object.isRequired,
tags: PropTypes.object.isRequired, tags: PropTypes.object.isRequired,
onModalClose: PropTypes.func.isRequired, onModalClose: PropTypes.func.isRequired,
setAddMovieDefault: PropTypes.func.isRequired, setAddMovieDefault: PropTypes.func.isRequired,
@@ -27,9 +27,11 @@
} }
.poster { .poster {
flex: 0 0 170px; position: relative;
display: block;
margin-right: 20px; margin-right: 20px;
height: 250px; height: 250px;
background-color: $defaultColor;
} }
.content { .content {
@@ -86,6 +88,28 @@
pointer-events: all; pointer-events: all;
} }
.posterContainer {
position: relative;
}
.certification {
margin-left: 2px;
padding: 0 5px;
border: 1px solid;
border-radius: 5px;
font-size: 16px;
}
.runtime {
margin-left: 8px;
font-size: 16px;
}
.statusContainer {
margin-right: 22px;
font-weight: bold;
}
@media only screen and (max-width: $breakpointMedium) { @media only screen and (max-width: $breakpointMedium) {
.titleRow { .titleRow {
justify-content: space-between; justify-content: space-between;
@@ -7,7 +7,10 @@ import Link from 'Components/Link/Link';
import Tooltip from 'Components/Tooltip/Tooltip'; import Tooltip from 'Components/Tooltip/Tooltip';
import { icons, kinds, sizes, tooltipPositions } from 'Helpers/Props'; import { icons, kinds, sizes, tooltipPositions } from 'Helpers/Props';
import MovieDetailsLinks from 'Movie/Details/MovieDetailsLinks'; import MovieDetailsLinks from 'Movie/Details/MovieDetailsLinks';
import MovieStatusLabel from 'Movie/Details/MovieStatusLabel';
import MovieIndexProgressBar from 'Movie/Index/ProgressBar/MovieIndexProgressBar';
import MoviePoster from 'Movie/MoviePoster'; import MoviePoster from 'Movie/MoviePoster';
import formatRuntime from 'Utilities/Date/formatRuntime';
import translate from 'Utilities/String/translate'; import translate from 'Utilities/String/translate';
import AddNewMovieModal from './AddNewMovieModal'; import AddNewMovieModal from './AddNewMovieModal';
import styles from './AddNewMovieSearchResult.css'; import styles from './AddNewMovieSearchResult.css';
@@ -65,7 +68,17 @@ class AddNewMovieSearchResult extends Component {
images, images,
isExistingMovie, isExistingMovie,
isExclusionMovie, isExclusionMovie,
isSmallScreen isSmallScreen,
colorImpairedMode,
id,
monitored,
hasFile,
isAvailable,
queueStatus,
queueState,
runtime,
movieRuntimeFormat,
certification
} = this.props; } = this.props;
const { const {
@@ -85,12 +98,30 @@ class AddNewMovieSearchResult extends Component {
{ {
isSmallScreen ? isSmallScreen ?
null : null :
<MoviePoster <div>
className={styles.poster} <div className={styles.posterContainer}>
images={images} <MoviePoster
size={250} className={styles.poster}
overflow={true} images={images}
/> size={250}
overflow={true}
/>
</div>
{
isExistingMovie &&
<MovieIndexProgressBar
monitored={monitored}
hasFile={hasFile}
status={status}
posterWidth={167}
detailedProgressBar={true}
queueStatus={queueStatus}
queueState={queueState}
isAvailable={isAvailable}
/>
}
</div>
} }
<div className={styles.content}> <div className={styles.content}>
@@ -133,6 +164,22 @@ class AddNewMovieSearchResult extends Component {
</div> </div>
</div> </div>
<div>
{
!!certification &&
<span className={styles.certification}>
{certification}
</span>
}
{
!!runtime &&
<span className={styles.runtime}>
{formatRuntime(runtime, movieRuntimeFormat)}
</span>
}
</div>
<div> <div>
<Label size={sizes.LARGE}> <Label size={sizes.LARGE}>
<HeartRating <HeartRating
@@ -176,13 +223,15 @@ class AddNewMovieSearchResult extends Component {
/> />
{ {
status === 'ended' && isExistingMovie && isSmallScreen &&
<Label <MovieStatusLabel
kind={kinds.DANGER} hasMovieFiles={hasFile}
size={sizes.LARGE} monitored={monitored}
> isAvailable={isAvailable}
Ended id={id}
</Label> useLabel={true}
colorImpairedMode={colorImpairedMode}
/>
} }
</div> </div>
@@ -222,7 +271,18 @@ AddNewMovieSearchResult.propTypes = {
images: PropTypes.arrayOf(PropTypes.object).isRequired, images: PropTypes.arrayOf(PropTypes.object).isRequired,
isExistingMovie: PropTypes.bool.isRequired, isExistingMovie: PropTypes.bool.isRequired,
isExclusionMovie: PropTypes.bool.isRequired, isExclusionMovie: PropTypes.bool.isRequired,
isSmallScreen: PropTypes.bool.isRequired isSmallScreen: PropTypes.bool.isRequired,
id: PropTypes.number,
queueItems: PropTypes.arrayOf(PropTypes.object),
monitored: PropTypes.bool.isRequired,
hasFile: PropTypes.bool.isRequired,
isAvailable: PropTypes.bool.isRequired,
colorImpairedMode: PropTypes.bool,
queueStatus: PropTypes.string,
queueState: PropTypes.string,
runtime: PropTypes.number.isRequired,
movieRuntimeFormat: PropTypes.string.isRequired,
certification: PropTypes.string
}; };
export default AddNewMovieSearchResult; export default AddNewMovieSearchResult;
@@ -10,11 +10,17 @@ function createMapStateToProps() {
createExistingMovieSelector(), createExistingMovieSelector(),
createExclusionMovieSelector(), createExclusionMovieSelector(),
createDimensionsSelector(), createDimensionsSelector(),
(isExistingMovie, isExclusionMovie, dimensions) => { (state) => state.queue.details.items,
(state, { internalId }) => internalId,
(isExistingMovie, isExclusionMovie, dimensions, queueItems, internalId) => {
const firstQueueItem = queueItems.find((q) => q.movieId === internalId && internalId > 0);
return { return {
isExistingMovie, isExistingMovie,
isExclusionMovie, isExclusionMovie,
isSmallScreen: dimensions.isSmallScreen isSmallScreen: dimensions.isSmallScreen,
queueStatus: firstQueueItem ? firstQueueItem.status : null,
queueState: firstQueueItem ? firstQueueItem.trackedDownloadState : null
}; };
} }
); );
@@ -28,6 +28,13 @@ function ImportMovieHeader(props) {
{translate('Folder')} {translate('Folder')}
</VirtualTableHeaderCell> </VirtualTableHeaderCell>
<VirtualTableHeaderCell
className={styles.movie}
name="movie"
>
{translate('Movie')}
</VirtualTableHeaderCell>
<VirtualTableHeaderCell <VirtualTableHeaderCell
className={styles.monitor} className={styles.monitor}
name="monitor" name="monitor"
@@ -48,13 +55,6 @@ function ImportMovieHeader(props) {
> >
{translate('QualityProfile')} {translate('QualityProfile')}
</VirtualTableHeaderCell> </VirtualTableHeaderCell>
<VirtualTableHeaderCell
className={styles.movie}
name="movie"
>
{translate('Movie')}
</VirtualTableHeaderCell>
</VirtualTableHeader> </VirtualTableHeader>
); );
} }
@@ -34,6 +34,13 @@ function ImportMovieRow(props) {
{id} {id}
</VirtualTableRowCell> </VirtualTableRowCell>
<VirtualTableRowCell className={styles.movie}>
<ImportMovieSelectMovieConnector
id={id}
isExistingMovie={isExistingMovie}
/>
</VirtualTableRowCell>
<VirtualTableRowCell className={styles.monitor}> <VirtualTableRowCell className={styles.monitor}>
<FormInputGroup <FormInputGroup
type={inputTypes.MOVIE_MONITORED_SELECT} type={inputTypes.MOVIE_MONITORED_SELECT}
@@ -60,13 +67,6 @@ function ImportMovieRow(props) {
onChange={onInputChange} onChange={onInputChange}
/> />
</VirtualTableRowCell> </VirtualTableRowCell>
<VirtualTableRowCell className={styles.movie}>
<ImportMovieSelectMovieConnector
id={id}
isExistingMovie={isExistingMovie}
/>
</VirtualTableRowCell>
</> </>
); );
} }
@@ -103,6 +103,7 @@ class ImportMovieSelectFolder extends Component {
<ul> <ul>
<li className={styles.tip} dangerouslySetInnerHTML={{ __html: translate('ImportIncludeQuality', ['<code>movie.2008.bluray.mkv</code>']) }} /> <li className={styles.tip} dangerouslySetInnerHTML={{ __html: translate('ImportIncludeQuality', ['<code>movie.2008.bluray.mkv</code>']) }} />
<li className={styles.tip} dangerouslySetInnerHTML={{ __html: translate('ImportRootPath', [`<code>${isWindows ? 'C:\\movies' : '/movies'}</code>`, `<code>${isWindows ? 'C:\\movies\\the matrix' : '/movies/the matrix'}</code>`]) }} /> <li className={styles.tip} dangerouslySetInnerHTML={{ __html: translate('ImportRootPath', [`<code>${isWindows ? 'C:\\movies' : '/movies'}</code>`, `<code>${isWindows ? 'C:\\movies\\the matrix' : '/movies/the matrix'}</code>`]) }} />
<li className={styles.tip}>{translate('ImportNotForDownloads')}</li>
</ul> </ul>
</div> </div>
+40 -1
View File
@@ -11,9 +11,47 @@ import UpdateChanges from 'System/Updates/UpdateChanges';
import translate from 'Utilities/String/translate'; import translate from 'Utilities/String/translate';
import styles from './AppUpdatedModalContent.css'; import styles from './AppUpdatedModalContent.css';
function mergeUpdates(items, version, prevVersion) {
let installedIndex = items.findIndex((u) => u.version === version);
let installedPreviouslyIndex = items.findIndex((u) => u.version === prevVersion);
if (installedIndex === -1) {
installedIndex = 0;
}
if (installedPreviouslyIndex === -1) {
installedPreviouslyIndex = items.length;
} else if (installedPreviouslyIndex === installedIndex && items.length) {
installedPreviouslyIndex += 1;
}
const appliedUpdates = items.slice(installedIndex, installedPreviouslyIndex);
if (!appliedUpdates.length) {
return null;
}
const appliedChanges = { new: [], fixed: [] };
appliedUpdates.forEach((u) => {
if (u.changes) {
appliedChanges.new.push(... u.changes.new);
appliedChanges.fixed.push(... u.changes.fixed);
}
});
const mergedUpdate = Object.assign({}, appliedUpdates[0], { changes: appliedChanges });
if (!appliedChanges.new.length && !appliedChanges.fixed.length) {
mergedUpdate.changes = null;
}
return mergedUpdate;
}
function AppUpdatedModalContent(props) { function AppUpdatedModalContent(props) {
const { const {
version, version,
prevVersion,
isPopulated, isPopulated,
error, error,
items, items,
@@ -21,7 +59,7 @@ function AppUpdatedModalContent(props) {
onModalClose onModalClose
} = props; } = props;
const update = items[0]; const update = mergeUpdates(items, version, prevVersion);
return ( return (
<ModalContent onModalClose={onModalClose}> <ModalContent onModalClose={onModalClose}>
@@ -89,6 +127,7 @@ function AppUpdatedModalContent(props) {
AppUpdatedModalContent.propTypes = { AppUpdatedModalContent.propTypes = {
version: PropTypes.string.isRequired, version: PropTypes.string.isRequired,
prevVersion: PropTypes.string,
isPopulated: PropTypes.bool.isRequired, isPopulated: PropTypes.bool.isRequired,
error: PropTypes.object, error: PropTypes.object,
items: PropTypes.arrayOf(PropTypes.object).isRequired, items: PropTypes.arrayOf(PropTypes.object).isRequired,
@@ -8,8 +8,9 @@ import AppUpdatedModalContent from './AppUpdatedModalContent';
function createMapStateToProps() { function createMapStateToProps() {
return createSelector( return createSelector(
(state) => state.app.version, (state) => state.app.version,
(state) => state.app.prevVersion,
(state) => state.system.updates, (state) => state.system.updates,
(version, updates) => { (version, prevVersion, updates) => {
const { const {
isPopulated, isPopulated,
error, error,
@@ -18,6 +19,7 @@ function createMapStateToProps() {
return { return {
version, version,
prevVersion,
isPopulated, isPopulated,
error, error,
items items
+1 -1
View File
@@ -29,7 +29,7 @@
} }
.time { .time {
flex: 0 0 120px; flex: 0 0 125px;
margin-right: 10px; margin-right: 10px;
border: none !important; border: none !important;
} }
@@ -24,7 +24,7 @@ function createMissingMovieIdsSelector() {
const inCinemas = movie.inCinemas; const inCinemas = movie.inCinemas;
if ( if (
!movie.movieFileId && !movie.hasFile &&
moment(inCinemas).isAfter(start) && moment(inCinemas).isAfter(start) &&
moment(inCinemas).isBefore(end) && moment(inCinemas).isBefore(end) &&
isBefore(movie.inCinemas) && isBefore(movie.inCinemas) &&
@@ -22,7 +22,7 @@ function getUrls(state) {
tags tags
} = state; } = state;
let icalUrl = `${window.location.host}${window.Radarr.urlBase}/feed/calendar/Radarr.ics?`; let icalUrl = `${window.location.host}${window.Radarr.urlBase}/feed/v3/calendar/Radarr.ics?`;
if (unmonitored) { if (unmonitored) {
icalUrl += 'unmonitored=true&'; icalUrl += 'unmonitored=true&';
@@ -16,7 +16,7 @@ function createTagListSelector() {
(selectedFilterBuilderProp.type === filterBuilderTypes.NUMBER || (selectedFilterBuilderProp.type === filterBuilderTypes.NUMBER ||
selectedFilterBuilderProp.type === filterBuilderTypes.STRING) && selectedFilterBuilderProp.type === filterBuilderTypes.STRING) &&
filterType !== filterTypes.EQUAL && filterType !== filterTypes.EQUAL &&
filterType !== filterBuilderTypes.NOT_EQUAL || filterType !== filterTypes.NOT_EQUAL ||
!selectedFilterBuilderProp.optionsSelector !selectedFilterBuilderProp.optionsSelector
) { ) {
return []; return [];
@@ -85,3 +85,21 @@
display: inline-block; display: inline-block;
margin: 5px -5px 5px 0; margin: 5px -5px 5px 0;
} }
.mobileCloseButtonContainer {
display: flex;
justify-content: flex-end;
height: 40px;
border-bottom: 1px solid $borderColor;
}
.mobileCloseButton {
width: 40px;
height: 40px;
text-align: center;
line-height: 40px;
&:hover {
color: $modalCloseButtonHoverColor;
}
}
@@ -479,6 +479,7 @@ class EnhancedSelectInput extends Component {
<OptionComponent <OptionComponent
key={v.key} key={v.key}
id={v.key} id={v.key}
dividerAfter={v.dividerAfter}
depth={depth} depth={depth}
isSelected={isSelectedItem(index, this.props)} isSelected={isSelectedItem(index, this.props)}
isDisabled={parentSelected} isDisabled={parentSelected}
@@ -518,6 +519,18 @@ class EnhancedSelectInput extends Component {
scrollDirection={scrollDirections.NONE} scrollDirection={scrollDirections.NONE}
> >
<Scroller className={styles.optionsModalScroller}> <Scroller className={styles.optionsModalScroller}>
<div className={styles.mobileCloseButtonContainer}>
<Link
className={styles.mobileCloseButton}
onPress={this.onOptionsModalClose}
>
<Icon
name={icons.CLOSE}
size={18}
/>
</Link>
</div>
{ {
values.map((v, index) => { values.map((v, index) => {
const hasParent = v.parentKey !== undefined; const hasParent = v.parentKey !== undefined;
@@ -527,6 +540,7 @@ class EnhancedSelectInput extends Component {
<OptionComponent <OptionComponent
key={v.key} key={v.key}
id={v.key} id={v.key}
dividerAfter={v.dividerAfter}
depth={depth} depth={depth}
isSelected={isSelectedItem(index, this.props)} isSelected={isSelectedItem(index, this.props)}
isMultiSelect={isMultiSelect} isMultiSelect={isMultiSelect}
@@ -54,4 +54,8 @@
&:last-child { &:last-child {
border: none; border: none;
} }
&:hover {
background-color: unset;
}
} }
@@ -12,7 +12,9 @@ class EnhancedSelectInputOption extends Component {
// //
// Listeners // Listeners
onPress = () => { onPress = (e) => {
e.preventDefault();
const { const {
id, id,
onSelect onSelect
@@ -13,6 +13,7 @@ import EnhancedSelectInputConnector from './EnhancedSelectInputConnector';
import FormInputHelpText from './FormInputHelpText'; import FormInputHelpText from './FormInputHelpText';
import IndexerFlagsSelectInputConnector from './IndexerFlagsSelectInputConnector'; import IndexerFlagsSelectInputConnector from './IndexerFlagsSelectInputConnector';
import KeyValueListInput from './KeyValueListInput'; import KeyValueListInput from './KeyValueListInput';
import LanguageSelectInputConnector from './LanguageSelectInputConnector';
import MovieMonitoredSelectInput from './MovieMonitoredSelectInput'; import MovieMonitoredSelectInput from './MovieMonitoredSelectInput';
import NumberInput from './NumberInput'; import NumberInput from './NumberInput';
import OAuthInputConnector from './OAuthInputConnector'; import OAuthInputConnector from './OAuthInputConnector';
@@ -72,6 +73,9 @@ function getComponent(type) {
case inputTypes.INDEXER_FLAGS_SELECT: case inputTypes.INDEXER_FLAGS_SELECT:
return IndexerFlagsSelectInputConnector; return IndexerFlagsSelectInputConnector;
case inputTypes.LANGUAGE_SELECT:
return LanguageSelectInputConnector;
case inputTypes.SELECT: case inputTypes.SELECT:
return EnhancedSelectInput; return EnhancedSelectInput;
@@ -21,3 +21,8 @@
color: $darkGray; color: $darkGray;
font-size: $smallFontSize; font-size: $smallFontSize;
} }
.divider {
border: none;
border-bottom: 1px solid $lightGray;
}
@@ -12,37 +12,46 @@ function HintedSelectInputOption(props) {
depth, depth,
isSelected, isSelected,
isDisabled, isDisabled,
dividerAfter,
isMultiSelect, isMultiSelect,
isMobile, isMobile,
...otherProps ...otherProps
} = props; } = props;
return ( return (
<EnhancedSelectInputOption <div>
id={id} <EnhancedSelectInputOption
depth={depth} id={id}
isSelected={isSelected} depth={depth}
isDisabled={isDisabled} isSelected={isSelected}
isHidden={isDisabled} isDisabled={isDisabled}
isMultiSelect={isMultiSelect} isHidden={isDisabled}
isMobile={isMobile} isMultiSelect={isMultiSelect}
{...otherProps} isMobile={isMobile}
> {...otherProps}
<div className={classNames(
styles.optionText,
isMobile && styles.isMobile
)}
> >
<div>{value}</div> <div className={classNames(
styles.optionText,
isMobile && styles.isMobile
)}
>
<div>{value}</div>
{ {
hint != null && hint != null &&
<div className={styles.hintText}> <div className={styles.hintText}>
{hint} {hint}
</div> </div>
} }
</div> </div>
</EnhancedSelectInputOption> </EnhancedSelectInputOption>
{
dividerAfter ?
<div className={styles.divider} /> :
null
}
</div>
); );
} }
@@ -50,15 +59,18 @@ HintedSelectInputOption.propTypes = {
id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
value: PropTypes.string.isRequired, value: PropTypes.string.isRequired,
hint: PropTypes.node, hint: PropTypes.node,
name: PropTypes.string,
depth: PropTypes.number, depth: PropTypes.number,
isSelected: PropTypes.bool.isRequired, isSelected: PropTypes.bool.isRequired,
isDisabled: PropTypes.bool.isRequired, isDisabled: PropTypes.bool.isRequired,
dividerAfter: PropTypes.bool.isRequired,
isMultiSelect: PropTypes.bool.isRequired, isMultiSelect: PropTypes.bool.isRequired,
isMobile: PropTypes.bool.isRequired isMobile: PropTypes.bool.isRequired
}; };
HintedSelectInputOption.defaultProps = { HintedSelectInputOption.defaultProps = {
isDisabled: false, isDisabled: false,
dividerAfter: false,
isHidden: false, isHidden: false,
isMultiSelect: false isMultiSelect: false
}; };
@@ -0,0 +1,52 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import EnhancedSelectInput from './EnhancedSelectInput';
function createMapStateToProps() {
return createSelector(
(state, { values }) => values,
( languages ) => {
const minId = languages.reduce((min, v) => (v.key < 1 ? v.key : min), languages[0].key);
const values = languages.map(({ key, value }) => {
return {
key,
value,
dividerAfter: minId < 1 ? key === minId : false
};
});
return {
values
};
}
);
}
class LanguageSelectInputConnector extends Component {
//
// Render
render() {
return (
<EnhancedSelectInput
{...this.props}
onChange={this.props.onChange}
/>
);
}
}
LanguageSelectInputConnector.propTypes = {
name: PropTypes.string.isRequired,
value: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number]).isRequired,
values: PropTypes.arrayOf(PropTypes.object).isRequired,
onChange: PropTypes.func.isRequired
};
export default connect(createMapStateToProps)(LanguageSelectInputConnector);
@@ -49,6 +49,7 @@ function getSelectValues(selectOptions) {
result.push({ result.push({
key: option.value, key: option.value,
value: option.name, value: option.name,
dividerAfter: option.dividerAfter,
hint: option.hint hint: option.hint
}); });
@@ -10,13 +10,16 @@ const ADD_NEW_KEY = 'addNew';
function createMapStateToProps() { function createMapStateToProps() {
return createSelector( return createSelector(
(state) => state.rootFolders, (state) => state.rootFolders,
(state, { value }) => value,
(state, { includeMissingValue }) => includeMissingValue,
(state, { includeNoChange }) => includeNoChange, (state, { includeNoChange }) => includeNoChange,
(rootFolders, includeNoChange) => { (rootFolders, value, includeMissingValue, includeNoChange) => {
const values = rootFolders.items.map((rootFolder) => { const values = rootFolders.items.map((rootFolder) => {
return { return {
key: rootFolder.path, key: rootFolder.path,
value: rootFolder.path, value: rootFolder.path,
freeSpace: rootFolder.freeSpace freeSpace: rootFolder.freeSpace,
isMissing: false
}; };
}); });
@@ -24,7 +27,8 @@ function createMapStateToProps() {
values.unshift({ values.unshift({
key: 'noChange', key: 'noChange',
value: 'No Change', value: 'No Change',
isDisabled: true isDisabled: true,
isMissing: false
}); });
} }
@@ -37,6 +41,15 @@ function createMapStateToProps() {
}); });
} }
if (includeMissingValue && !values.find((v) => v.key === value)) {
values.push({
key: value,
value,
isMissing: true,
isDisabled: true
});
}
values.push({ values.push({
key: ADD_NEW_KEY, key: ADD_NEW_KEY,
value: 'Add a new path' value: 'Add a new path'
@@ -151,7 +164,8 @@ RootFolderSelectInputConnector.propTypes = {
}; };
RootFolderSelectInputConnector.defaultProps = { RootFolderSelectInputConnector.defaultProps = {
includeNoChange: false includeNoChange: false,
value: ''
}; };
export default connect(createMapStateToProps, createMapDispatchToProps)(RootFolderSelectInputConnector); export default connect(createMapStateToProps, createMapDispatchToProps)(RootFolderSelectInputConnector);
@@ -29,3 +29,9 @@
color: $darkGray; color: $darkGray;
font-size: $smallFontSize; font-size: $smallFontSize;
} }
.isMissing {
margin-left: 15px;
color: $dangerColor;
font-size: $smallFontSize;
}
@@ -10,6 +10,7 @@ function RootFolderSelectInputOption(props) {
id, id,
value, value,
freeSpace, freeSpace,
isMissing,
movieFolder, movieFolder,
isMobile, isMobile,
isWindows, isWindows,
@@ -43,11 +44,20 @@ function RootFolderSelectInputOption(props) {
</div> </div>
{ {
freeSpace != null && freeSpace == null ?
null :
<div className={styles.freeSpace}> <div className={styles.freeSpace}>
{formatBytes(freeSpace)} Free {formatBytes(freeSpace)} Free
</div> </div>
} }
{
isMissing ?
<div className={styles.isMissing}>
Missing
</div> :
null
}
</div> </div>
</EnhancedSelectInputOption> </EnhancedSelectInputOption>
); );
@@ -58,6 +68,7 @@ RootFolderSelectInputOption.propTypes = {
value: PropTypes.string.isRequired, value: PropTypes.string.isRequired,
freeSpace: PropTypes.number, freeSpace: PropTypes.number,
movieFolder: PropTypes.string, movieFolder: PropTypes.string,
isMissing: PropTypes.boolean,
isMobile: PropTypes.bool.isRequired, isMobile: PropTypes.bool.isRequired,
isWindows: PropTypes.bool isWindows: PropTypes.bool
}; };
+8
View File
@@ -19,6 +19,10 @@
&.outline { &.outline {
color: $dangerColor; color: $dangerColor;
} }
&:global(.colorImpaired) {
background: repeating-linear-gradient(90deg, color($dangerColor shade(5%)), color($dangerColor shade(5%)) 5px, color($dangerColor shade(15%)) 5px, color($dangerColor shade(15%)) 10px);
}
} }
.default { .default {
@@ -85,6 +89,10 @@
&.outline { &.outline {
color: $warningColor; color: $warningColor;
} }
&:global(.colorImpaired) {
background: repeating-linear-gradient(45deg, $warningColor, $warningColor 5px, color($warningColor tint(15%)) 5px, color($warningColor tint(15%)) 10px);
}
} }
.queue { .queue {
+7 -3
View File
@@ -11,6 +11,7 @@ function Label(props) {
size, size,
outline, outline,
children, children,
colorImpairedMode,
...otherProps ...otherProps
} = props; } = props;
@@ -20,7 +21,8 @@ function Label(props) {
className, className,
styles[kind], styles[kind],
styles[size], styles[size],
outline && styles.outline outline && styles.outline,
colorImpairedMode && 'colorImpaired'
)} )}
{...otherProps} {...otherProps}
> >
@@ -34,14 +36,16 @@ Label.propTypes = {
kind: PropTypes.oneOf(kinds.all).isRequired, kind: PropTypes.oneOf(kinds.all).isRequired,
size: PropTypes.oneOf(sizes.all).isRequired, size: PropTypes.oneOf(sizes.all).isRequired,
outline: PropTypes.bool.isRequired, outline: PropTypes.bool.isRequired,
children: PropTypes.node.isRequired children: PropTypes.node.isRequired,
colorImpairedMode: PropTypes.bool
}; };
Label.defaultProps = { Label.defaultProps = {
className: styles.label, className: styles.label,
kind: kinds.DEFAULT, kind: kinds.DEFAULT,
size: sizes.SMALL, size: sizes.SMALL,
outline: false outline: false,
colorImpairedMode: false
}; };
export default Label; export default Label;
+15 -6
View File
@@ -38,24 +38,33 @@ class Link extends Component {
const linkProps = { target }; const linkProps = { target };
let el = component; let el = component;
if (to) { if (to && typeof to === 'string') {
if ((/\w+?:\/\//).test(to)) { if ((/\w+?:\/\//).test(to)) {
el = 'a'; el = 'a';
linkProps.href = to; linkProps.href = to;
linkProps.target = target || '_blank'; linkProps.target = target || '_blank';
linkProps.rel = 'noreferrer';
} else if (noRouter) { } else if (noRouter) {
el = 'a'; el = 'a';
linkProps.href = to; linkProps.href = to;
linkProps.target = target || '_self'; linkProps.target = target || '_self';
} else if (to.startsWith(`${window.Radarr.urlBase}/`)) {
el = RouterLink;
linkProps.to = to;
linkProps.target = target;
} else { } else {
el = RouterLink; el = RouterLink;
linkProps.to = `${window.Radarr.urlBase}/${to.replace(/^\//, '')}`; linkProps.to = `${window.Radarr.urlBase}/${to.replace(/^\//, '')}`;
linkProps.target = target; linkProps.target = target;
} }
} else if (to && typeof to === 'object') {
el = RouterLink;
linkProps.target = target;
if (to.pathname.startsWith(`${window.Radarr.urlBase}/`)) {
linkProps.to = to;
} else {
const pathname = `${window.Radarr.urlBase}/${to.pathname.replace(/^\//, '')}`;
linkProps.to = {
...to,
pathname
};
}
} }
if (el === 'button' || el === 'input') { if (el === 'button' || el === 'input') {
@@ -86,7 +95,7 @@ class Link extends Component {
Link.propTypes = { Link.propTypes = {
className: PropTypes.string, className: PropTypes.string,
component: PropTypes.oneOfType([PropTypes.string, PropTypes.func]), component: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),
to: PropTypes.string, to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),
target: PropTypes.string, target: PropTypes.string,
isDisabled: PropTypes.bool, isDisabled: PropTypes.bool,
noRouter: PropTypes.bool, noRouter: PropTypes.bool,
@@ -1,5 +1,5 @@
.loadingMessage { .loadingMessage {
margin: 50px 10px 0; margin: 10px 10px 0;
text-align: center; text-align: center;
font-weight: 300; font-weight: 300;
font-size: 36px; font-size: 36px;
@@ -12,7 +12,7 @@ const messages = [
'Hum something loud while others stare', 'Hum something loud while others stare',
'Loading humorous message... Please Wait', 'Loading humorous message... Please Wait',
'I could\'ve been faster in Python', 'I could\'ve been faster in Python',
'Don\'t forget to rewind your tracks', 'Don\'t forget to rewind your movies',
'Congratulations! you are the 1000th visitor.', 'Congratulations! you are the 1000th visitor.',
'HELP! I\'m being held hostage and forced to write these stupid lines!', 'HELP! I\'m being held hostage and forced to write these stupid lines!',
'RE-calibrating the internet...', 'RE-calibrating the internet...',
@@ -30,10 +30,10 @@ function ConfirmModal(props) {
useEffect(() => { useEffect(() => {
if (isOpen) { if (isOpen) {
bindShortcut('enter', onConfirm); bindShortcut('enter', onConfirm);
} else {
unbindShortcut('enter', onConfirm); return () => unbindShortcut('enter', onConfirm);
} }
}, [onConfirm]); }, [isOpen, onConfirm]);
return ( return (
<Modal <Modal
@@ -53,7 +53,13 @@ class PageHeader extends Component {
return ( return (
<div className={styles.header}> <div className={styles.header}>
<div className={styles.logoContainer}> <div className={styles.logoContainer}>
<Link to={`${window.Radarr.urlBase}/`}> <Link
className={styles.logoLink}
to={{
pathname: '/',
state: { restoreScrollPosition: true }
}}
>
<img <img
className={isSmallScreen ? styles.logo : styles.logoFull} className={isSmallScreen ? styles.logo : styles.logoFull}
src={isSmallScreen ? `${window.Radarr.urlBase}/Content/Images/logo.png` : `${window.Radarr.urlBase}/Content/Images/logo-full.png`} src={isSmallScreen ? `${window.Radarr.urlBase}/Content/Images/logo.png` : `${window.Radarr.urlBase}/Content/Images/logo-full.png`}
@@ -1,3 +1,11 @@
.page { .page {
composes: page from '~./Page.css'; composes: page from '~./Page.css';
} }
.logoFull {
margin-top: 50px;
margin-right: auto;
margin-left: auto;
width: 120px;
height: 40px;
}
File diff suppressed because one or more lines are too long
@@ -30,7 +30,7 @@ const links = [
to: '/add/new' to: '/add/new'
}, },
{ {
title: translate('Import'), title: translate('ImportLibrary'),
to: '/add/import' to: '/add/import'
}, },
{ {
@@ -10,6 +10,7 @@ import SpinnerIcon from 'Components/SpinnerIcon';
import { forEach } from 'Helpers/elementChildren'; import { forEach } from 'Helpers/elementChildren';
import { align, icons } from 'Helpers/Props'; import { align, icons } from 'Helpers/Props';
import dimensions from 'Styles/Variables/dimensions'; import dimensions from 'Styles/Variables/dimensions';
import translate from 'Utilities/String/translate';
import styles from './PageToolbarSection.css'; import styles from './PageToolbarSection.css';
const BUTTON_WIDTH = parseInt(dimensions.toolbarButtonWidth); const BUTTON_WIDTH = parseInt(dimensions.toolbarButtonWidth);
@@ -161,7 +162,7 @@ class PageToolbarSection extends Component {
<ToolbarMenuButton <ToolbarMenuButton
className={styles.overflowMenuButton} className={styles.overflowMenuButton}
iconName={icons.OVERFLOW} iconName={icons.OVERFLOW}
text="More" text={translate('More')}
/> />
<MenuContent> <MenuContent>
@@ -1,8 +1,8 @@
import _ from 'lodash'; import _ from 'lodash';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import React, { Component } from 'react'; import React, { Component } from 'react';
import { DndProvider } from 'react-dnd'; import { DndProvider } from 'react-dnd-multi-backend';
import { HTML5Backend } from 'react-dnd-html5-backend'; import HTML5toTouch from 'react-dnd-multi-backend/dist/esm/HTML5toTouch';
import Form from 'Components/Form/Form'; import Form from 'Components/Form/Form';
import FormGroup from 'Components/Form/FormGroup'; import FormGroup from 'Components/Form/FormGroup';
import FormInputGroup from 'Components/Form/FormInputGroup'; import FormInputGroup from 'Components/Form/FormInputGroup';
@@ -128,7 +128,7 @@ class TableOptionsModal extends Component {
const isDraggingDown = isDragging && dropIndex > dragIndex; const isDraggingDown = isDragging && dropIndex > dragIndex;
return ( return (
<DndProvider backend={HTML5Backend}> <DndProvider options={HTML5toTouch}>
<Modal <Modal
isOpen={isOpen} isOpen={isOpen}
onModalClose={onModalClose} onModalClose={onModalClose}
+13 -3
View File
@@ -39,7 +39,8 @@ class VirtualTable extends Component {
super(props, context); super(props, context);
this.state = { this.state = {
width: 0 width: 0,
scrollRestored: false
}; };
this._grid = null; this._grid = null;
@@ -48,11 +49,13 @@ class VirtualTable extends Component {
componentDidUpdate(prevProps, prevState) { componentDidUpdate(prevProps, prevState) {
const { const {
items, items,
scrollIndex scrollIndex,
scrollTop
} = this.props; } = this.props;
const { const {
width width,
scrollRestored
} = this.state; } = this.state;
if (this._grid && if (this._grid &&
@@ -68,6 +71,11 @@ class VirtualTable extends Component {
columnIndex: 0 columnIndex: 0
}); });
} }
if (this._grid && scrollTop !== undefined && scrollTop !== 0 && !scrollRestored) {
this.setState({ scrollRestored: true });
this._grid.scrollToPosition({ scrollTop });
}
} }
// //
@@ -96,6 +104,7 @@ class VirtualTable extends Component {
items, items,
scroller, scroller,
focusScroller, focusScroller,
scrollTop: ignored,
header, header,
headerHeight, headerHeight,
rowRenderer, rowRenderer,
@@ -180,6 +189,7 @@ VirtualTable.propTypes = {
className: PropTypes.string.isRequired, className: PropTypes.string.isRequired,
items: PropTypes.arrayOf(PropTypes.object).isRequired, items: PropTypes.arrayOf(PropTypes.object).isRequired,
scrollIndex: PropTypes.number, scrollIndex: PropTypes.number,
scrollTop: PropTypes.number,
scroller: PropTypes.instanceOf(Element).isRequired, scroller: PropTypes.instanceOf(Element).isRequired,
focusScroller: PropTypes.bool.isRequired, focusScroller: PropTypes.bool.isRequired,
header: PropTypes.node.isRequired, header: PropTypes.node.isRequired,
+4 -2
View File
@@ -77,8 +77,10 @@ function keyboardShortcuts(WrappedComponent) {
} }
unbindShortcut = (key) => { unbindShortcut = (key) => {
delete this._mousetrapBindings[key]; if (this._mousetrap != null) {
this._mousetrap.unbind(key); delete this._mousetrapBindings[key];
this._mousetrap.unbind(key);
}
} }
unbindAllShortcuts = () => { unbindAllShortcuts = () => {
@@ -8,7 +8,7 @@ function withScrollPosition(WrappedComponent, scrollPositionKey) {
history history
} = props; } = props;
const scrollTop = history.action === 'POP' ? const scrollTop = history.action === 'POP' || (history.location.state && history.location.state.restoreScrollPosition) ?
scrollPositions[scrollPositionKey] : scrollPositions[scrollPositionKey] :
0; 0;
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

+2
View File
@@ -0,0 +1,2 @@
User-agent: *
Disallow: /
@@ -53,13 +53,14 @@ class AddNewDiscoverMovieModalContentConnector extends Component {
this.props.setAddMovieDefault({ [name]: value }); this.props.setAddMovieDefault({ [name]: value });
} }
onAddMoviePress = (searchForMovie) => { onAddMoviePress = () => {
const { const {
tmdbId, tmdbId,
rootFolderPath, rootFolderPath,
monitor, monitor,
qualityProfileId, qualityProfileId,
minimumAvailability, minimumAvailability,
searchForMovie,
tags tags
} = this.props; } = this.props;
@@ -69,8 +70,8 @@ class AddNewDiscoverMovieModalContentConnector extends Component {
monitor: monitor.value, monitor: monitor.value,
qualityProfileId: qualityProfileId.value, qualityProfileId: qualityProfileId.value,
minimumAvailability: minimumAvailability.value, minimumAvailability: minimumAvailability.value,
tags: tags.value, searchForMovie: searchForMovie.value,
searchForMovie tags: tags.value
}); });
this.props.onModalClose(true); this.props.onModalClose(true);
@@ -96,6 +97,7 @@ AddNewDiscoverMovieModalContentConnector.propTypes = {
monitor: PropTypes.object.isRequired, monitor: PropTypes.object.isRequired,
qualityProfileId: PropTypes.object, qualityProfileId: PropTypes.object,
minimumAvailability: PropTypes.object.isRequired, minimumAvailability: PropTypes.object.isRequired,
searchForMovie: PropTypes.object.isRequired,
tags: PropTypes.object.isRequired, tags: PropTypes.object.isRequired,
onModalClose: PropTypes.func.isRequired, onModalClose: PropTypes.func.isRequired,
setAddMovieDefault: PropTypes.func.isRequired, setAddMovieDefault: PropTypes.func.isRequired,
+1
View File
@@ -184,6 +184,7 @@ export const PAGE_LAST = fasFastForward;
export const PARENT = fasLevelUpAlt; export const PARENT = fasLevelUpAlt;
export const PAUSED = fasPause; export const PAUSED = fasPause;
export const PENDING = farClock; export const PENDING = farClock;
export const PLAY = fasPlay;
export const PROFILE = fasUser; export const PROFILE = fasUser;
export const POSTER = fasTh; export const POSTER = fasTh;
export const QUEUED = fasCloud; export const QUEUED = fasCloud;
+4
View File
@@ -3,6 +3,7 @@ export const AVAILABILITY_SELECT = 'availabilitySelect';
export const CAPTCHA = 'captcha'; export const CAPTCHA = 'captcha';
export const CHECK = 'check'; export const CHECK = 'check';
export const DEVICE = 'device'; export const DEVICE = 'device';
export const KEY_VALUE_LIST = 'keyValueList';
export const MOVIE_MONITORED_SELECT = 'movieMonitoredSelect'; export const MOVIE_MONITORED_SELECT = 'movieMonitoredSelect';
export const NUMBER = 'number'; export const NUMBER = 'number';
export const OAUTH = 'oauth'; export const OAUTH = 'oauth';
@@ -11,6 +12,7 @@ export const PATH = 'path';
export const QUALITY_PROFILE_SELECT = 'qualityProfileSelect'; export const QUALITY_PROFILE_SELECT = 'qualityProfileSelect';
export const ROOT_FOLDER_SELECT = 'rootFolderSelect'; export const ROOT_FOLDER_SELECT = 'rootFolderSelect';
export const INDEXER_FLAGS_SELECT = 'indexerFlagsSelect'; export const INDEXER_FLAGS_SELECT = 'indexerFlagsSelect';
export const LANGUAGE_SELECT = 'languageSelect';
export const SELECT = 'select'; export const SELECT = 'select';
export const DYNAMIC_SELECT = 'dynamicSelect'; export const DYNAMIC_SELECT = 'dynamicSelect';
export const TAG = 'tag'; export const TAG = 'tag';
@@ -26,6 +28,7 @@ export const all = [
CAPTCHA, CAPTCHA,
CHECK, CHECK,
DEVICE, DEVICE,
KEY_VALUE_LIST,
MOVIE_MONITORED_SELECT, MOVIE_MONITORED_SELECT,
NUMBER, NUMBER,
OAUTH, OAUTH,
@@ -34,6 +37,7 @@ export const all = [
QUALITY_PROFILE_SELECT, QUALITY_PROFILE_SELECT,
ROOT_FOLDER_SELECT, ROOT_FOLDER_SELECT,
INDEXER_FLAGS_SELECT, INDEXER_FLAGS_SELECT,
LANGUAGE_SELECT,
SELECT, SELECT,
DYNAMIC_SELECT, DYNAMIC_SELECT,
TAG, TAG,
+2
View File
@@ -1,5 +1,6 @@
export const DANGER = 'danger'; export const DANGER = 'danger';
export const DEFAULT = 'default'; export const DEFAULT = 'default';
export const DELETE = 'delete';
export const DISABLED = 'disabled'; export const DISABLED = 'disabled';
export const INFO = 'info'; export const INFO = 'info';
export const INVERSE = 'inverse'; export const INVERSE = 'inverse';
@@ -13,6 +14,7 @@ export const QUEUE = 'queue';
export const all = [ export const all = [
DANGER, DANGER,
DEFAULT, DEFAULT,
DELETE,
DISABLED, DISABLED,
INFO, INFO,
INVERSE, INVERSE,
@@ -272,7 +272,7 @@ class InteractiveImportModalContent extends Component {
isPopulated && !!items.length && !isFetching && !isFetching && isPopulated && !!items.length && !isFetching && !isFetching &&
<Table <Table
columns={columns} columns={columns}
horizontalScroll={false} horizontalScroll={true}
selectAll={true} selectAll={true}
allSelected={allSelected} allSelected={allSelected}
allUnselected={allUnselected} allUnselected={allUnselected}
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
import React, { Component } from 'react'; import React, { Component } from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { createSelector } from 'reselect'; import { createSelector } from 'reselect';
import { updateInteractiveImportItems } from 'Store/Actions/interactiveImportActions'; import { reprocessInteractiveImportItems, updateInteractiveImportItems } from 'Store/Actions/interactiveImportActions';
import { fetchLanguages } from 'Store/Actions/settingsActions'; import { fetchLanguages } from 'Store/Actions/settingsActions';
import SelectLanguageModalContent from './SelectLanguageModalContent'; import SelectLanguageModalContent from './SelectLanguageModalContent';
@@ -33,6 +33,7 @@ function createMapStateToProps() {
const mapDispatchToProps = { const mapDispatchToProps = {
dispatchFetchLanguages: fetchLanguages, dispatchFetchLanguages: fetchLanguages,
dispatchReprocessInteractiveImportItems: reprocessInteractiveImportItems,
dispatchUpdateInteractiveImportItems: updateInteractiveImportItems dispatchUpdateInteractiveImportItems: updateInteractiveImportItems
}; };
@@ -51,6 +52,12 @@ class SelectLanguageModalContentConnector extends Component {
// Listeners // Listeners
onLanguageSelect = ({ languageIds }) => { onLanguageSelect = ({ languageIds }) => {
const {
ids,
dispatchUpdateInteractiveImportItems,
dispatchReprocessInteractiveImportItems
} = this.props;
const languages = []; const languages = [];
languageIds.forEach((languageId) => { languageIds.forEach((languageId) => {
@@ -62,11 +69,13 @@ class SelectLanguageModalContentConnector extends Component {
} }
}); });
this.props.dispatchUpdateInteractiveImportItems({ dispatchUpdateInteractiveImportItems({
ids: this.props.ids, ids,
languages languages
}); });
dispatchReprocessInteractiveImportItems({ ids });
this.props.onModalClose(true); this.props.onModalClose(true);
} }
@@ -91,6 +100,7 @@ SelectLanguageModalContentConnector.propTypes = {
items: PropTypes.arrayOf(PropTypes.object).isRequired, items: PropTypes.arrayOf(PropTypes.object).isRequired,
dispatchFetchLanguages: PropTypes.func.isRequired, dispatchFetchLanguages: PropTypes.func.isRequired,
dispatchUpdateInteractiveImportItems: PropTypes.func.isRequired, dispatchUpdateInteractiveImportItems: PropTypes.func.isRequired,
dispatchReprocessInteractiveImportItems: PropTypes.func.isRequired,
onModalClose: PropTypes.func.isRequired onModalClose: PropTypes.func.isRequired
}; };
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
import React, { Component } from 'react'; import React, { Component } from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { createSelector } from 'reselect'; import { createSelector } from 'reselect';
import { updateInteractiveImportItems } from 'Store/Actions/interactiveImportActions'; import { reprocessInteractiveImportItems, updateInteractiveImportItems } from 'Store/Actions/interactiveImportActions';
import { fetchQualityProfileSchema } from 'Store/Actions/settingsActions'; import { fetchQualityProfileSchema } from 'Store/Actions/settingsActions';
import getQualities from 'Utilities/Quality/getQualities'; import getQualities from 'Utilities/Quality/getQualities';
import SelectQualityModalContent from './SelectQualityModalContent'; import SelectQualityModalContent from './SelectQualityModalContent';
@@ -31,6 +31,7 @@ function createMapStateToProps() {
const mapDispatchToProps = { const mapDispatchToProps = {
dispatchFetchQualityProfileSchema: fetchQualityProfileSchema, dispatchFetchQualityProfileSchema: fetchQualityProfileSchema,
dispatchReprocessInteractiveImportItems: reprocessInteractiveImportItems,
dispatchUpdateInteractiveImportItems: updateInteractiveImportItems dispatchUpdateInteractiveImportItems: updateInteractiveImportItems
}; };
@@ -49,6 +50,12 @@ class SelectQualityModalContentConnector extends Component {
// Listeners // Listeners
onQualitySelect = ({ qualityId, proper, real }) => { onQualitySelect = ({ qualityId, proper, real }) => {
const {
ids,
dispatchUpdateInteractiveImportItems,
dispatchReprocessInteractiveImportItems
} = this.props;
const quality = _.find(this.props.items, const quality = _.find(this.props.items,
(item) => item.id === qualityId); (item) => item.id === qualityId);
@@ -57,14 +64,16 @@ class SelectQualityModalContentConnector extends Component {
real: real ? 1 : 0 real: real ? 1 : 0
}; };
this.props.dispatchUpdateInteractiveImportItems({ dispatchUpdateInteractiveImportItems({
ids: this.props.ids, ids,
quality: { quality: {
quality, quality,
revision revision
} }
}); });
dispatchReprocessInteractiveImportItems({ ids });
this.props.onModalClose(true); this.props.onModalClose(true);
} }
@@ -88,6 +97,7 @@ SelectQualityModalContentConnector.propTypes = {
error: PropTypes.object, error: PropTypes.object,
items: PropTypes.arrayOf(PropTypes.object).isRequired, items: PropTypes.arrayOf(PropTypes.object).isRequired,
dispatchFetchQualityProfileSchema: PropTypes.func.isRequired, dispatchFetchQualityProfileSchema: PropTypes.func.isRequired,
dispatchReprocessInteractiveImportItems: PropTypes.func.isRequired,
dispatchUpdateInteractiveImportItems: PropTypes.func.isRequired, dispatchUpdateInteractiveImportItems: PropTypes.func.isRequired,
onModalClose: PropTypes.func.isRequired onModalClose: PropTypes.func.isRequired
}; };
@@ -22,6 +22,20 @@ const columns = [
isSortable: true, isSortable: true,
isVisible: true isVisible: true
}, },
{
name: 'releaseWeight',
label: React.createElement(Icon, { name: icons.DOWNLOAD }),
isSortable: true,
fixedSortDirection: sortDirections.ASCENDING,
isVisible: true
},
{
name: 'rejections',
label: React.createElement(Icon, { name: icons.DANGER }),
isSortable: true,
fixedSortDirection: sortDirections.ASCENDING,
isVisible: true
},
{ {
name: 'title', name: 'title',
label: translate('Title'), label: translate('Title'),
@@ -85,20 +99,6 @@ const columns = [
label: React.createElement(Icon, { name: icons.FLAG }), label: React.createElement(Icon, { name: icons.FLAG }),
isSortable: true, isSortable: true,
isVisible: true isVisible: true
},
{
name: 'rejections',
label: React.createElement(Icon, { name: icons.DANGER }),
isSortable: true,
fixedSortDirection: sortDirections.ASCENDING,
isVisible: true
},
{
name: 'releaseWeight',
label: React.createElement(Icon, { name: icons.DOWNLOAD }),
isSortable: true,
fixedSortDirection: sortDirections.ASCENDING,
isVisible: true
} }
]; ];
@@ -55,12 +55,10 @@
.title { .title {
composes: cell; composes: cell;
max-width: 30vw;
} }
.title div { .title div {
@add-mixin truncate; overflow-wrap: break-word;
} }
.history { .history {
@@ -145,6 +145,46 @@ class InteractiveSearchRow extends Component {
{formatAge(age, ageHours, ageMinutes)} {formatAge(age, ageHours, ageMinutes)}
</TableRowCell> </TableRowCell>
<TableRowCell className={styles.download}>
<SpinnerIconButton
name={getDownloadIcon(isGrabbing, isGrabbed, grabError)}
kind={grabError ? kinds.DANGER : kinds.DEFAULT}
title={getDownloadTooltip(isGrabbing, isGrabbed, grabError)}
isDisabled={isGrabbed}
isSpinning={isGrabbing}
onPress={downloadAllowed ? this.onGrabPress : this.onConfirmGrabPress}
/>
</TableRowCell>
<TableRowCell className={styles.rejected}>
{
!!rejections.length &&
<Popover
anchor={
<Icon
name={icons.DANGER}
kind={kinds.DANGER}
/>
}
title={translate('ReleaseRejected')}
body={
<ul>
{
rejections.map((rejection, index) => {
return (
<li key={index}>
{rejection}
</li>
);
})
}
</ul>
}
position={tooltipPositions.BOTTOM}
/>
}
</TableRowCell>
<TableRowCell className={styles.title}> <TableRowCell className={styles.title}>
<Link <Link
to={infoUrl} to={infoUrl}
@@ -252,51 +292,11 @@ class InteractiveSearchRow extends Component {
} }
</ul> </ul>
} }
position={tooltipPositions.LEFT} position={tooltipPositions.BOTTOM}
/> />
} }
</TableRowCell> </TableRowCell>
<TableRowCell className={styles.rejected}>
{
!!rejections.length &&
<Popover
anchor={
<Icon
name={icons.DANGER}
kind={kinds.DANGER}
/>
}
title={translate('ReleaseRejected')}
body={
<ul>
{
rejections.map((rejection, index) => {
return (
<li key={index}>
{rejection}
</li>
);
})
}
</ul>
}
position={tooltipPositions.LEFT}
/>
}
</TableRowCell>
<TableRowCell className={styles.download}>
<SpinnerIconButton
name={getDownloadIcon(isGrabbing, isGrabbed, grabError)}
kind={grabError ? kinds.DANGER : kinds.DEFAULT}
title={getDownloadTooltip(isGrabbing, isGrabbed, grabError)}
isDisabled={isGrabbed}
isSpinning={isGrabbing}
onPress={downloadAllowed ? this.onGrabPress : this.onConfirmGrabPress}
/>
</TableRowCell>
<ConfirmModal <ConfirmModal
isOpen={this.state.isConfirmGrabModalOpen} isOpen={this.state.isConfirmGrabModalOpen}
kind={kinds.WARNING} kind={kinds.WARNING}
@@ -54,22 +54,18 @@ class DeleteMovieModalContent extends Component {
const { const {
title, title,
path, path,
statistics, hasFile,
sizeOnDisk,
onModalClose onModalClose
} = this.props; } = this.props;
const {
movieFileCount,
sizeOnDisk
} = statistics;
const deleteFiles = this.state.deleteFiles; const deleteFiles = this.state.deleteFiles;
const addImportExclusion = this.state.addImportExclusion; const addImportExclusion = this.state.addImportExclusion;
let deleteFilesLabel = translate('DeleteFilesLabel', [movieFileCount]); let deleteFilesLabel = hasFile ? translate('DeleteFileLabel', [1]) : translate('DeleteFilesLabel', [0]);
let deleteFilesHelpText = translate('DeleteFilesHelpText'); let deleteFilesHelpText = translate('DeleteFilesHelpText');
if (movieFileCount === 0) { if (!hasFile) {
deleteFilesLabel = translate('DeleteMovieFolderLabel'); deleteFilesLabel = translate('DeleteMovieFolderLabel');
deleteFilesHelpText = translate('DeleteMovieFolderHelpText'); deleteFilesHelpText = translate('DeleteMovieFolderHelpText');
} }
@@ -92,6 +88,21 @@ class DeleteMovieModalContent extends Component {
{path} {path}
</div> </div>
<FormGroup>
<FormLabel>
{translate('AddListExclusion')}
</FormLabel>
<FormInputGroup
type={inputTypes.CHECK}
name="addImportExclusion"
value={addImportExclusion}
helpText={translate('AddImportExclusionHelpText')}
kind={kinds.DANGER}
onChange={this.onAddImportExclusionChange}
/>
</FormGroup>
<FormGroup> <FormGroup>
<FormLabel>{deleteFilesLabel}</FormLabel> <FormLabel>{deleteFilesLabel}</FormLabel>
@@ -113,29 +124,14 @@ class DeleteMovieModalContent extends Component {
</div> </div>
{ {
!!movieFileCount && !!hasFile &&
<div> <div>
{movieFileCount} {translate('MovieFilesTotaling')} {formatBytes(sizeOnDisk)} {hasFile} {translate('MovieFilesTotaling')} {formatBytes(sizeOnDisk)}
</div> </div>
} }
</div> </div>
} }
<FormGroup>
<FormLabel>
{translate('AddListExclusion')}
</FormLabel>
<FormInputGroup
type={inputTypes.CHECK}
name="addImportExclusion"
value={addImportExclusion}
helpText={translate('AddImportExclusionHelpText')}
kind={kinds.DANGER}
onChange={this.onAddImportExclusionChange}
/>
</FormGroup>
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
@@ -158,15 +154,10 @@ class DeleteMovieModalContent extends Component {
DeleteMovieModalContent.propTypes = { DeleteMovieModalContent.propTypes = {
title: PropTypes.string.isRequired, title: PropTypes.string.isRequired,
path: PropTypes.string.isRequired, path: PropTypes.string.isRequired,
statistics: PropTypes.object.isRequired, hasFile: PropTypes.bool.isRequired,
sizeOnDisk: PropTypes.string.isRequired,
onDeletePress: PropTypes.func.isRequired, onDeletePress: PropTypes.func.isRequired,
onModalClose: PropTypes.func.isRequired onModalClose: PropTypes.func.isRequired
}; };
DeleteMovieModalContent.defaultProps = {
statistics: {
movieFileCount: 0
}
};
export default DeleteMovieModalContent; export default DeleteMovieModalContent;
@@ -1,9 +1,7 @@
import _ from 'lodash'; import _ from 'lodash';
import PropTypes from 'prop-types';
import React, { Component } from 'react'; import React, { Component } from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { createSelector } from 'reselect'; import { createSelector } from 'reselect';
import { fetchRootFolders } from 'Store/Actions/rootFolderActions';
import MovieCreditPosters from '../MovieCreditPosters'; import MovieCreditPosters from '../MovieCreditPosters';
import MovieCastPoster from './MovieCastPoster'; import MovieCastPoster from './MovieCastPoster';
@@ -26,19 +24,8 @@ function createMapStateToProps() {
); );
} }
const mapDispatchToProps = {
fetchRootFolders
};
class MovieCastPostersConnector extends Component { class MovieCastPostersConnector extends Component {
//
// Lifecycle
componentDidMount() {
this.props.fetchRootFolders();
}
// //
// Render // Render
@@ -53,8 +40,4 @@ class MovieCastPostersConnector extends Component {
} }
} }
MovieCastPostersConnector.propTypes = { export default connect(createMapStateToProps)(MovieCastPostersConnector);
fetchRootFolders: PropTypes.func.isRequired
};
export default connect(createMapStateToProps, mapDispatchToProps)(MovieCastPostersConnector);
@@ -1,9 +1,7 @@
import _ from 'lodash'; import _ from 'lodash';
import PropTypes from 'prop-types';
import React, { Component } from 'react'; import React, { Component } from 'react';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import { createSelector } from 'reselect'; import { createSelector } from 'reselect';
import { fetchRootFolders } from 'Store/Actions/rootFolderActions';
import MovieCreditPosters from '../MovieCreditPosters'; import MovieCreditPosters from '../MovieCreditPosters';
import MovieCrewPoster from './MovieCrewPoster'; import MovieCrewPoster from './MovieCrewPoster';
@@ -26,19 +24,8 @@ function createMapStateToProps() {
); );
} }
const mapDispatchToProps = {
fetchRootFolders
};
class MovieCrewPostersConnector extends Component { class MovieCrewPostersConnector extends Component {
//
// Lifecycle
componentDidMount() {
this.props.fetchRootFolders();
}
// //
// Render // Render
@@ -53,8 +40,4 @@ class MovieCrewPostersConnector extends Component {
} }
} }
MovieCrewPostersConnector.propTypes = { export default connect(createMapStateToProps)(MovieCrewPostersConnector);
fetchRootFolders: PropTypes.func.isRequired
};
export default connect(createMapStateToProps, mapDispatchToProps)(MovieCrewPostersConnector);
+3 -4
View File
@@ -286,7 +286,7 @@ class MovieDetails extends Component {
onMonitorTogglePress, onMonitorTogglePress,
onRefreshPress, onRefreshPress,
onSearchPress, onSearchPress,
queueDetails, queueItems,
movieRuntimeFormat movieRuntimeFormat
} = this.props; } = this.props;
@@ -318,7 +318,6 @@ class MovieDetails extends Component {
<PageToolbarButton <PageToolbarButton
label={translate('SearchMovie')} label={translate('SearchMovie')}
iconName={icons.SEARCH} iconName={icons.SEARCH}
isDisabled={!monitored}
isSpinning={isSearching} isSpinning={isSearching}
title={undefined} title={undefined}
onPress={onSearchPress} onPress={onSearchPress}
@@ -523,7 +522,7 @@ class MovieDetails extends Component {
hasMovieFiles={hasMovieFiles} hasMovieFiles={hasMovieFiles}
monitored={monitored} monitored={monitored}
isAvailable={isAvailable} isAvailable={isAvailable}
queueDetails={queueDetails} queueItem={(queueItems.length > 0) ? queueItems[0] : null}
/> />
</span> </span>
</InfoLabel> </InfoLabel>
@@ -794,7 +793,7 @@ MovieDetails.propTypes = {
onRefreshPress: PropTypes.func.isRequired, onRefreshPress: PropTypes.func.isRequired,
onSearchPress: PropTypes.func.isRequired, onSearchPress: PropTypes.func.isRequired,
onGoToMovie: PropTypes.func.isRequired, onGoToMovie: PropTypes.func.isRequired,
queueDetails: PropTypes.object, queueItems: PropTypes.arrayOf(PropTypes.object),
movieRuntimeFormat: PropTypes.string.isRequired movieRuntimeFormat: PropTypes.string.isRequired
}; };
@@ -89,10 +89,10 @@ function createMapStateToProps() {
createAllMoviesSelector(), createAllMoviesSelector(),
createCommandsSelector(), createCommandsSelector(),
createDimensionsSelector(), createDimensionsSelector(),
(state) => state.queue.details, (state) => state.queue.details.items,
(state) => state.app.isSidebarVisible, (state) => state.app.isSidebarVisible,
(state) => state.settings.ui.item.movieRuntimeFormat, (state) => state.settings.ui.item.movieRuntimeFormat,
(titleSlug, movieFiles, movieCredits, extraFiles, allMovies, commands, dimensions, queueDetails, isSidebarVisible, movieRuntimeFormat) => { (titleSlug, movieFiles, movieCredits, extraFiles, allMovies, commands, dimensions, queueItems, isSidebarVisible, movieRuntimeFormat) => {
const sortedMovies = _.orderBy(allMovies, 'sortTitle'); const sortedMovies = _.orderBy(allMovies, 'sortTitle');
const movieIndex = _.findIndex(sortedMovies, { titleSlug }); const movieIndex = _.findIndex(sortedMovies, { titleSlug });
const movie = sortedMovies[movieIndex]; const movie = sortedMovies[movieIndex];
@@ -165,7 +165,7 @@ function createMapStateToProps() {
nextMovie, nextMovie,
isSmallScreen: dimensions.isSmallScreen, isSmallScreen: dimensions.isSmallScreen,
isSidebarVisible, isSidebarVisible,
queueDetails, queueItems,
movieRuntimeFormat movieRuntimeFormat
}; };
} }
@@ -41,6 +41,19 @@ function MovieDetailsLinks(props) {
</Label> </Label>
</Link> </Link>
<Link
className={styles.link}
to={`https://letterboxd.com/tmdb/${tmdbId}`}
>
<Label
className={styles.linkLabel}
kind={kinds.INFO}
size={sizes.LARGE}
>
{translate('Letterboxd')}
</Label>
</Link>
{ {
!!imdbId && !!imdbId &&
<Link <Link
@@ -61,7 +74,7 @@ function MovieDetailsLinks(props) {
!!imdbId && !!imdbId &&
<Link <Link
className={styles.link} className={styles.link}
to={` https://moviechat.org/${imdbId}/`} to={`https://moviechat.org/${imdbId}/`}
> >
<Label <Label
className={styles.linkLabel} className={styles.linkLabel}
@@ -77,7 +90,7 @@ function MovieDetailsLinks(props) {
!!youTubeTrailerId && !!youTubeTrailerId &&
<Link <Link
className={styles.link} className={styles.link}
to={` https://www.youtube.com/watch?v=${youTubeTrailerId}/`} to={`https://www.youtube.com/watch?v=${youTubeTrailerId}/`}
> >
<Label <Label
className={styles.linkLabel} className={styles.linkLabel}
@@ -8,6 +8,7 @@ import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import NotFound from 'Components/NotFound'; import NotFound from 'Components/NotFound';
import PageContent from 'Components/Page/PageContent'; import PageContent from 'Components/Page/PageContent';
import PageContentBody from 'Components/Page/PageContentBody'; import PageContentBody from 'Components/Page/PageContentBody';
import { fetchRootFolders } from 'Store/Actions/rootFolderActions';
import getErrorMessage from 'Utilities/Object/getErrorMessage'; import getErrorMessage from 'Utilities/Object/getErrorMessage';
import translate from 'Utilities/String/translate'; import translate from 'Utilities/String/translate';
import MovieDetailsConnector from './MovieDetailsConnector'; import MovieDetailsConnector from './MovieDetailsConnector';
@@ -46,7 +47,8 @@ function createMapStateToProps() {
} }
const mapDispatchToProps = { const mapDispatchToProps = {
push push,
fetchRootFolders
}; };
class MovieDetailsPageConnector extends Component { class MovieDetailsPageConnector extends Component {
@@ -54,6 +56,10 @@ class MovieDetailsPageConnector extends Component {
// //
// Lifecycle // Lifecycle
componentDidMount() {
this.props.fetchRootFolders();
}
componentDidUpdate(prevProps) { componentDidUpdate(prevProps) {
if (!this.props.titleSlug) { if (!this.props.titleSlug) {
this.props.push(`${window.Radarr.urlBase}/`); this.props.push(`${window.Radarr.urlBase}/`);
@@ -112,7 +118,8 @@ MovieDetailsPageConnector.propTypes = {
isPopulated: PropTypes.bool.isRequired, isPopulated: PropTypes.bool.isRequired,
error: PropTypes.object, error: PropTypes.object,
match: PropTypes.shape({ params: PropTypes.shape({ titleSlug: PropTypes.string.isRequired }).isRequired }).isRequired, match: PropTypes.shape({ params: PropTypes.shape({ titleSlug: PropTypes.string.isRequired }).isRequired }).isRequired,
push: PropTypes.func.isRequired push: PropTypes.func.isRequired,
fetchRootFolders: PropTypes.func.isRequired
}; };
export default connect(createMapStateToProps, mapDispatchToProps)(MovieDetailsPageConnector); export default connect(createMapStateToProps, mapDispatchToProps)(MovieDetailsPageConnector);
+25 -20
View File
@@ -1,24 +1,29 @@
.missing {
padding-left: 2px;
border-left: 4px solid $dangerColor;
}
.downloaded {
padding-left: 2px;
border-left: 4px solid $successColor;
}
.notAvailable {
padding-left: 2px;
border-left: 4px solid $primaryColor;
}
.unmonitored {
padding-left: 2px;
border-left: 4px solid $warningColor;
}
.queue { .queue {
padding-left: 2px; padding-left: 2px;
border-left: 4px solid $queueColor; border-left: 4px solid $queueColor;
} }
.continuing {
padding-left: 2px;
border-left: 4px solid $primaryColor;
}
.availNotMonitored {
padding-left: 2px;
border-left: 4px solid $darkGray;
}
.ended {
padding-left: 2px;
border-left: 4px solid $successColor;
}
.missingMonitored {
padding-left: 2px;
border-left: 4px solid $dangerColor;
}
.missingUnmonitored {
padding-left: 2px;
border-left: 4px solid $warningColor;
}
+67 -14
View File
@@ -1,15 +1,17 @@
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import React from 'react'; import React from 'react';
import Label from 'Components/Label';
import { kinds, sizes } from 'Helpers/Props';
import getQueueStatusText from 'Utilities/Movie/getQueueStatusText'; import getQueueStatusText from 'Utilities/Movie/getQueueStatusText';
import firstCharToUpper from 'Utilities/String/firstCharToUpper'; import firstCharToUpper from 'Utilities/String/firstCharToUpper';
import translate from 'Utilities/String/translate'; import translate from 'Utilities/String/translate';
import styles from './MovieStatusLabel.css'; import styles from './MovieStatusLabel.css';
function getMovieStatus(hasFile, isMonitored, isAvailable, queueDetails = false) { function getMovieStatus(hasFile, isMonitored, isAvailable, queueItem = false) {
if (queueDetails.items[0]) { if (queueItem) {
const queueStatus = queueDetails.items[0].status; const queueStatus = queueItem.status;
const queueState = queueDetails.items[0].trackedDownloadStatus; const queueState = queueItem.trackedDownloadStatus;
const queueStatusText = getQueueStatusText(queueStatus, queueState); const queueStatusText = getQueueStatusText(queueStatus, queueState);
if (queueStatusText) { if (queueStatusText) {
@@ -17,19 +19,23 @@ function getMovieStatus(hasFile, isMonitored, isAvailable, queueDetails = false)
} }
} }
if (hasFile) { if (hasFile && !isMonitored) {
return 'downloaded'; return 'availNotMonitored';
} }
if (!isMonitored) { if (hasFile) {
return 'unmonitored'; return 'ended';
}
if (isAvailable && !isMonitored && !hasFile) {
return 'missingUnmonitored';
} }
if (isAvailable && !hasFile) { if (isAvailable && !hasFile) {
return 'missing'; return 'missingMonitored';
} }
return 'notAvailable'; return 'continuing';
} }
function MovieStatusLabel(props) { function MovieStatusLabel(props) {
@@ -37,16 +43,61 @@ function MovieStatusLabel(props) {
hasMovieFiles, hasMovieFiles,
monitored, monitored,
isAvailable, isAvailable,
queueDetails queueItem,
useLabel,
colorImpairedMode
} = props; } = props;
const status = getMovieStatus(hasMovieFiles, monitored, isAvailable, queueDetails); let status = getMovieStatus(hasMovieFiles, monitored, isAvailable, queueItem);
let statusClass = status; let statusClass = status;
if (queueDetails.items.length) { if (status === 'availNotMonitored' || status === 'ended') {
status = 'downloaded';
}
if (status === 'missingMonitored' || status === 'missingUnmonitored') {
status = 'missing';
}
if (status === 'continuing') {
status = 'notAvailable';
}
if (queueItem) {
statusClass = 'queue'; statusClass = 'queue';
} }
if (useLabel) {
let kind = kinds.SUCCESS;
switch (statusClass) {
case 'queue':
kind = kinds.QUEUE;
break;
case 'missingMonitored':
kind = kinds.DANGER;
break;
case 'continuing':
kind = kinds.INFO;
break;
case 'availNotMonitored':
kind = kinds.DEFAULT;
break;
case 'missingUnmonitored':
kind = kinds.WARNING;
break;
default:
}
return (
<Label
kind={kind}
size={sizes.LARGE}
colorImpairedMode={colorImpairedMode}
>
{translate(firstCharToUpper(status))}
</Label>
);
}
return ( return (
<span <span
className={styles[statusClass]} className={styles[statusClass]}
@@ -60,7 +111,9 @@ MovieStatusLabel.propTypes = {
hasMovieFiles: PropTypes.bool.isRequired, hasMovieFiles: PropTypes.bool.isRequired,
monitored: PropTypes.bool.isRequired, monitored: PropTypes.bool.isRequired,
isAvailable: PropTypes.bool.isRequired, isAvailable: PropTypes.bool.isRequired,
queueDetails: PropTypes.object queueItem: PropTypes.object,
useLabel: PropTypes.bool,
colorImpairedMode: PropTypes.bool
}; };
MovieStatusLabel.defaultProps = { MovieStatusLabel.defaultProps = {
@@ -60,7 +60,8 @@ class MovieIndexOverviews extends Component {
columnCount: 1, columnCount: 1,
posterWidth: 162, posterWidth: 162,
posterHeight: 238, posterHeight: 238,
rowHeight: calculateRowHeight(238, null, props.isSmallScreen, {}) rowHeight: calculateRowHeight(238, null, props.isSmallScreen, {}),
scrollRestored: false
}; };
this._grid = null; this._grid = null;
@@ -72,13 +73,15 @@ class MovieIndexOverviews extends Component {
sortKey, sortKey,
overviewOptions, overviewOptions,
jumpToCharacter, jumpToCharacter,
scrollTop,
isMovieEditorActive, isMovieEditorActive,
isSmallScreen isSmallScreen
} = this.props; } = this.props;
const { const {
width, width,
rowHeight rowHeight,
scrollRestored
} = this.state; } = this.state;
if (prevProps.sortKey !== sortKey || if (prevProps.sortKey !== sortKey ||
@@ -97,6 +100,11 @@ class MovieIndexOverviews extends Component {
this._grid.recomputeGridSize(); this._grid.recomputeGridSize();
} }
if (this._grid && scrollTop !== 0 && !scrollRestored) {
this.setState({ scrollRestored: true });
this._grid.scrollToPosition({ scrollTop });
}
if (jumpToCharacter != null && jumpToCharacter !== prevProps.jumpToCharacter) { if (jumpToCharacter != null && jumpToCharacter !== prevProps.jumpToCharacter) {
const index = getIndexOfFirstCharacter(items, jumpToCharacter); const index = getIndexOfFirstCharacter(items, jumpToCharacter);
@@ -262,6 +270,7 @@ MovieIndexOverviews.propTypes = {
sortKey: PropTypes.string, sortKey: PropTypes.string,
overviewOptions: PropTypes.object.isRequired, overviewOptions: PropTypes.object.isRequired,
jumpToCharacter: PropTypes.string, jumpToCharacter: PropTypes.string,
scrollTop: PropTypes.number.isRequired,
scroller: PropTypes.instanceOf(Element).isRequired, scroller: PropTypes.instanceOf(Element).isRequired,
showRelativeDates: PropTypes.bool.isRequired, showRelativeDates: PropTypes.bool.isRequired,
shortDateFormat: PropTypes.string.isRequired, shortDateFormat: PropTypes.string.isRequired,
@@ -13,6 +13,7 @@ import MovieDetailsLinks from 'Movie/Details/MovieDetailsLinks';
import EditMovieModalConnector from 'Movie/Edit/EditMovieModalConnector'; import EditMovieModalConnector from 'Movie/Edit/EditMovieModalConnector';
import MovieIndexProgressBar from 'Movie/Index/ProgressBar/MovieIndexProgressBar'; import MovieIndexProgressBar from 'Movie/Index/ProgressBar/MovieIndexProgressBar';
import MoviePoster from 'Movie/MoviePoster'; import MoviePoster from 'Movie/MoviePoster';
import getRelativeDate from 'Utilities/Date/getRelativeDate';
import translate from 'Utilities/String/translate'; import translate from 'Utilities/String/translate';
import MovieIndexPosterInfo from './MovieIndexPosterInfo'; import MovieIndexPosterInfo from './MovieIndexPosterInfo';
import styles from './MovieIndexPoster.css'; import styles from './MovieIndexPoster.css';
@@ -101,6 +102,11 @@ class MovieIndexPoster extends Component {
showSearchAction, showSearchAction,
showRelativeDates, showRelativeDates,
shortDateFormat, shortDateFormat,
showReleaseDate,
showCinemaRelease,
inCinemas,
physicalRelease,
digitalRelease,
timeFormat, timeFormat,
isRefreshingMovie, isRefreshingMovie,
isSearchingMovie, isSearchingMovie,
@@ -127,6 +133,19 @@ class MovieIndexPoster extends Component {
height: `${posterHeight}px` height: `${posterHeight}px`
}; };
let releaseDate = '';
let releaseDateType = '';
if (physicalRelease && digitalRelease) {
releaseDate = (physicalRelease < digitalRelease) ? physicalRelease : digitalRelease;
releaseDateType = (physicalRelease < digitalRelease) ? 'Released' : 'Digital';
} else if (physicalRelease && !digitalRelease) {
releaseDate = physicalRelease;
releaseDateType = 'Released';
} else if (digitalRelease && !physicalRelease) {
releaseDate = digitalRelease;
releaseDateType = 'Digital';
}
return ( return (
<div className={styles.content}> <div className={styles.content}>
<div className={styles.posterContainer}> <div className={styles.posterContainer}>
@@ -253,12 +272,67 @@ class MovieIndexPoster extends Component {
</div> </div>
} }
{
showCinemaRelease && inCinemas &&
<div className={styles.title}>
<Icon
name={icons.IN_CINEMAS}
/> {getRelativeDate(
inCinemas,
shortDateFormat,
showRelativeDates,
{
timeFormat,
timeForToday: false
}
)}
</div>
}
{
showReleaseDate && releaseDateType === 'Released' &&
<div className={styles.title}>
<Icon
name={icons.DISC}
/> {getRelativeDate(
releaseDate,
shortDateFormat,
showRelativeDates,
{
timeFormat,
timeForToday: false
}
)}
</div>
}
{
showReleaseDate && releaseDateType === 'Digital' &&
<div className={styles.title}>
<Icon
name={icons.MOVIE_FILE}
/> {getRelativeDate(
releaseDate,
shortDateFormat,
showRelativeDates,
{
timeFormat,
timeForToday: false
}
)}
</div>
}
<MovieIndexPosterInfo <MovieIndexPosterInfo
qualityProfile={qualityProfile} qualityProfile={qualityProfile}
showQualityProfile={showQualityProfile} showQualityProfile={showQualityProfile}
showReleaseDate={showReleaseDate}
showRelativeDates={showRelativeDates} showRelativeDates={showRelativeDates}
shortDateFormat={shortDateFormat} shortDateFormat={shortDateFormat}
timeFormat={timeFormat} timeFormat={timeFormat}
inCinemas={inCinemas}
physicalRelease={physicalRelease}
digitalRelease={digitalRelease}
{...otherProps} {...otherProps}
/> />
@@ -298,6 +372,11 @@ MovieIndexPoster.propTypes = {
showSearchAction: PropTypes.bool.isRequired, showSearchAction: PropTypes.bool.isRequired,
showRelativeDates: PropTypes.bool.isRequired, showRelativeDates: PropTypes.bool.isRequired,
shortDateFormat: PropTypes.string.isRequired, shortDateFormat: PropTypes.string.isRequired,
showCinemaRelease: PropTypes.bool.isRequired,
showReleaseDate: PropTypes.bool.isRequired,
inCinemas: PropTypes.string,
physicalRelease: PropTypes.string,
digitalRelease: PropTypes.string,
timeFormat: PropTypes.string.isRequired, timeFormat: PropTypes.string.isRequired,
isRefreshingMovie: PropTypes.bool.isRequired, isRefreshingMovie: PropTypes.bool.isRequired,
isSearchingMovie: PropTypes.bool.isRequired, isSearchingMovie: PropTypes.bool.isRequired,
@@ -1,5 +1,7 @@
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import React from 'react'; import React from 'react';
import Icon from 'Components/Icon';
import { icons } from 'Helpers/Props';
import getRelativeDate from 'Utilities/Date/getRelativeDate'; import getRelativeDate from 'Utilities/Date/getRelativeDate';
import formatBytes from 'Utilities/Number/formatBytes'; import formatBytes from 'Utilities/Number/formatBytes';
import translate from 'Utilities/String/translate'; import translate from 'Utilities/String/translate';
@@ -10,6 +12,7 @@ function MovieIndexPosterInfo(props) {
studio, studio,
qualityProfile, qualityProfile,
showQualityProfile, showQualityProfile,
showReleaseDate,
added, added,
inCinemas, inCinemas,
digitalRelease, digitalRelease,
@@ -57,7 +60,7 @@ function MovieIndexPosterInfo(props) {
); );
} }
if (sortKey === 'inCinemas' && inCinemas) { if (sortKey === 'inCinemas' && inCinemas && !showReleaseDate) {
const inCinemasDate = getRelativeDate( const inCinemasDate = getRelativeDate(
inCinemas, inCinemas,
shortDateFormat, shortDateFormat,
@@ -70,12 +73,14 @@ function MovieIndexPosterInfo(props) {
return ( return (
<div className={styles.info}> <div className={styles.info}>
{translate('InCinemas')}: {inCinemasDate} <Icon
name={icons.IN_CINEMAS}
/> {inCinemasDate}
</div> </div>
); );
} }
if (sortKey === 'digitalRelease' && digitalRelease) { if (sortKey === 'digitalRelease' && digitalRelease && !showReleaseDate) {
const digitalReleaseDate = getRelativeDate( const digitalReleaseDate = getRelativeDate(
digitalRelease, digitalRelease,
shortDateFormat, shortDateFormat,
@@ -88,12 +93,14 @@ function MovieIndexPosterInfo(props) {
return ( return (
<div className={styles.info}> <div className={styles.info}>
{translate('Digital')}: {digitalReleaseDate} <Icon
name={icons.MOVIE_FILE}
/> {digitalReleaseDate}
</div> </div>
); );
} }
if (sortKey === 'physicalRelease' && physicalRelease) { if (sortKey === 'physicalRelease' && physicalRelease && !showReleaseDate) {
const physicalReleaseDate = getRelativeDate( const physicalReleaseDate = getRelativeDate(
physicalRelease, physicalRelease,
shortDateFormat, shortDateFormat,
@@ -106,7 +113,9 @@ function MovieIndexPosterInfo(props) {
return ( return (
<div className={styles.info}> <div className={styles.info}>
{translate('Released')}: {physicalReleaseDate} <Icon
name={icons.DISC}
/> {physicalReleaseDate}
</div> </div>
); );
} }
@@ -150,6 +159,7 @@ MovieIndexPosterInfo.propTypes = {
path: PropTypes.string.isRequired, path: PropTypes.string.isRequired,
sizeOnDisk: PropTypes.number, sizeOnDisk: PropTypes.number,
sortKey: PropTypes.string.isRequired, sortKey: PropTypes.string.isRequired,
showReleaseDate: PropTypes.bool.isRequired,
showRelativeDates: PropTypes.bool.isRequired, showRelativeDates: PropTypes.bool.isRequired,
shortDateFormat: PropTypes.string.isRequired, shortDateFormat: PropTypes.string.isRequired,
timeFormat: PropTypes.string.isRequired timeFormat: PropTypes.string.isRequired

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