1
0
mirror of https://github.com/Radarr/Radarr.git synced 2026-03-07 13:40:38 -05:00

Compare commits

..

956 Commits

Author SHA1 Message Date
Qstick
982e3c14d3 Fix Tests from Site Image Changes 2021-02-02 22:36:32 -05: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
Qstick
30c9446165 Fixed: SQL Error on DownloadHistory Insert 2020-11-28 22:30:00 -05:00
Qstick
e104a9e261 Fixed: TypeError on Keyup in Firefox for MovieIndex and Details 2020-11-28 21:55:19 -05:00
Qstick
4c19fa0d05 Fixed: Schedule task should reflect Backup Interval change 2020-11-28 16:57:50 -05:00
Qstick
7cd29c48bb Fixed: Importlist sync setting and validator 2020-11-28 16:34:07 -05:00
pannbiff
1aa117331f Translated using Weblate (Swedish) [skip ci]
Currently translated at 53.8% (570 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2020-11-28 18:22:03 +00:00
pannbiff
89baa3ff6d Translated using Weblate (Swedish) [skip ci]
Currently translated at 53.5% (567 of 1058 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2020-11-28 17:25:39 +00:00
Qstick
c4b729697d Fix Translation Error in Interactive Import Error Message [skip ci] 2020-11-28 12:25:33 -05:00
pannbiff
9052ef11a4 Translated using Weblate (Swedish) [skip ci]
Currently translated at 49.7% (527 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2020-11-28 16:05:53 +00:00
Qstick
3d5d884505 Default Branch to Master 2020-11-28 11:05:41 -05:00
Qstick
23a8b68869 Add refresh all to migration 177 for v0.2 migrations 2020-11-28 11:05:41 -05:00
Csaba
46ff3b7538 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (1059 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-27 20:49:09 +00:00
reloxx
444b8e3436 Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (1059 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-11-27 20:49:08 +00:00
ta264
413669dbaa Add SortKey validation
[common]
2020-11-27 11:08:03 -05:00
Qstick
564a7554fc Fixed: Don't workaround DTS if audioChannels invalid 2020-11-27 01:10:09 -05:00
Qstick
c16ca46f11 Fixed: Tags View in UI Slow due to All() Movie Call 2020-11-27 00:38:47 -05:00
Qstick
a960716cec Fixed: Set CutoffUnmet correctly on MovieEditor response 2020-11-27 00:38:47 -05:00
Qstick
f55e44c591 Fixed: Incorrect translation key on MoveMovieModal 2020-11-27 00:38:47 -05:00
Qstick
17f8eb3aae Make list options advanced settings, Set min list sync 2020-11-27 00:38:47 -05:00
Qstick
082a0679d2 Fixed: Bad Translation on Restrictions Modal 2020-11-27 00:38:47 -05:00
Qstick
5182ac2a13 Fixed: Migrate Mediainfo properties that changed names 2020-11-27 00:37:53 -05:00
Gergo Schwahofer
0e1cb335a9 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (1059 of 1059 strings)

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

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-11-27 02:49:09 +00:00
bakerboy448
0366029269 Fixed: Legend and Colors on calendar
Fixed: Streamline Legend in Index and Calendar
Fixed: Broken Translations
2020-11-26 08:16:44 -05:00
Qstick
6d011cdc48 Fixed: Availability shows incorrect for movies (doesn't consider delay setting) 2020-11-26 03:06:16 -05:00
Gergo Schwahofer
9f1833dd9e Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (1059 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-26 00:49:18 +00:00
Csaba
882b1d6427 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (1059 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-26 00:49:17 +00:00
reloxx
d73f1fe954 Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (1059 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-11-26 00:49:17 +00:00
Csaba
b707dcc20f Translated using Weblate (Hungarian) [skip ci]
Currently translated at 99.9% (1058 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-25 10:54:24 +00:00
Csaba
c1e1df3c22 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 99.8% (1057 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-25 10:54:00 +00:00
Csaba
2297b9cc14 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 99.7% (1056 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-25 10:53:48 +00:00
Csaba
9225e04f80 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 99.3% (1052 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-25 10:52:24 +00:00
Gergo Schwahofer
7496ae0b69 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 99.2% (1051 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-25 10:52:02 +00:00
Csaba
3443738e21 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 99.2% (1051 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-25 10:52:02 +00:00
Gergo Schwahofer
f632386b5c Translated using Weblate (Hungarian) [skip ci]
Currently translated at 98.9% (1048 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-25 10:51:20 +00:00
Gergo Schwahofer
4f26081f9d Translated using Weblate (Hungarian) [skip ci]
Currently translated at 89.0% (943 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-25 10:02:52 +00:00
Csaba
8c5709aec8 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 89.0% (943 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-25 10:02:51 +00:00
Gergo Schwahofer
6f046293b8 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 88.8% (941 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-25 10:02:21 +00:00
Csaba
c9519dc4b6 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 88.8% (941 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-25 10:02:20 +00:00
Gergo Schwahofer
1c1b8902c2 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 88.2% (935 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-25 09:59:38 +00:00
Csaba
053bce7a0f Translated using Weblate (Hungarian) [skip ci]
Currently translated at 87.0% (922 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-25 09:54:48 +00:00
Csaba
b3476c4b28 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 86.6% (918 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-25 09:54:09 +00:00
Csaba
1b372c41ca Translated using Weblate (Hungarian) [skip ci]
Currently translated at 86.2% (913 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-25 09:52:40 +00:00
Csaba
624a7ad00a Translated using Weblate (Hungarian) [skip ci]
Currently translated at 85.6% (907 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-25 09:50:32 +00:00
Gergo Schwahofer
5079db5dd8 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 85.6% (907 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-25 09:50:31 +00:00
Qstick
a8f517b64f Update README.md 2020-11-25 00:45:26 -05:00
pannbiff
2ca31afa8a Translated using Weblate (Swedish) [skip ci]
Currently translated at 44.1% (468 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2020-11-25 04:49:13 +00:00
jpalenz77
5eb5e5d5ab Translated using Weblate (Spanish) [skip ci]
Currently translated at 78.2% (829 of 1059 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-11-25 04:49:12 +00:00
Qstick
a152ab2b56 Fixed: Log only for quality mismatch between release and file 2020-11-24 23:10:02 -05:00
Qstick
6bfd9f0e18 [API Docs] Fix minor issues with tags and types [skip ci] 2020-11-24 22:43:49 -05:00
Qstick
bb418f7191 Fix bug template 'about' length [skip ci] 2020-11-24 22:19:08 -05:00
bakerboy448
e88b4b10e9 update readme [skip ci] 2020-11-24 22:13:09 -05:00
bakerboy448
f72a56f88a use lidarr's contributing as a new template for radarr [skip ci]
-needs review
2020-11-24 21:05:58 -05:00
bakerboy448
c55a832934 update GH Issue Templates [skip ci] 2020-11-24 20:56:31 -05:00
reloxx
ff62ac22e8 Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (859 of 859 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-11-24 16:22:41 +00:00
bakerboy448
699d2be938 New: Add Missing Translations 2020-11-24 11:22:35 -05:00
Qstick
86118b4537 More API docs [skip ci] 2020-11-23 22:09:36 -05:00
kingii98
1a7ead0e51 Translated using Weblate (Russian) [skip ci]
Currently translated at 8.8% (76 of 859 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ru/
2020-11-24 00:49:14 +00:00
Csaba
dbd241bbc5 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (859 of 859 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-24 00:49:13 +00:00
memnos
1ee270114b Translated using Weblate (Italian) [skip ci]
Currently translated at 100.0% (859 of 859 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2020-11-24 00:49:08 +00:00
ta264
f90133d588 Fixed: Set correct permissions on Radarr.Update before starting 2020-11-23 19:41:25 +00:00
bakerboy448
bb721272ca New: All Wiki links now use the consolidated Servarr wiki 2020-11-22 23:14:00 -05:00
Qstick
e3ac7d6fc5 Fixed binary execute permissions for osx and Radarr
Fixes #5388

Co-Authored-By: Taloth <Taloth@users.noreply.github.com>
2020-11-22 11:25:40 -05:00
Qstick
28e2834c5d V3 API Docs Updates [skip ci] 2020-11-22 02:50:38 -05:00
Qstick
9c77399379 New: Dynamic Select and UMask Fields
Fixes #5380
Fixes #5348
Fixes #5167
Fixes #5166

Co-Authored-By: Taloth <Taloth@users.noreply.github.com>
2020-11-22 01:01:50 -05:00
Qstick
73ce77f1ca Branch to nightly so tests pass 2020-11-21 23:53:48 -05:00
Qstick
984d0101bf Basic json linting for translations (structure, dupekeys, etc) 2020-11-21 23:13:39 -05:00
Qstick
f9242af246 Use Arch and Runtime when getting list of update changes 2020-11-21 23:12:38 -05:00
reloxx
0b5a40a2b7 Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (853 of 853 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-11-18 20:49:05 +00:00
Qstick
0221df15e2 Added translation using Weblate (Portuguese (Brazil)) [skip ci] 2020-11-18 17:35:29 +00:00
Daniel Martin Gonzalez
c6294b71ae New: Add Spain to list of Certifications 2020-11-18 11:47:58 -05:00
Will Segatto
2fbd829b93 Translated using Weblate (Portuguese) [skip ci]
Currently translated at 100.0% (853 of 853 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2020-11-18 05:49:06 +00:00
Csaba
5ed4a386dd Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (853 of 853 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-18 05:49:05 +00:00
Qstick
f9733eea7a Fixed: Use audioChannels_Original if it exists in MI 2020-11-17 23:46:57 -05:00
Qstick
59f9ff7a22 Fixed: Tweak Edition Regex to prevent 'Special' false positives
Fixes #4932
2020-11-17 23:45:42 -05:00
Qstick
460c86911c Fixed: Scene Name not being stored properly during import if not linked to a download client item and filename is obfuscated
Fixes #5370
Fixes $5358
Fixes #5361
2020-11-17 22:22:31 -05:00
Qstick
a04f375eb1 Fixed: Files table not showing correct quality meets cutoff post edit
Fixes #4668
2020-11-17 22:04:56 -05:00
Qstick
7792c159b4 Movie Windows/Posix Disk Tests to correct fixtures
Fixes: #4678
2020-11-17 21:52:22 -05:00
Qstick
6beb8c8b05 New: Add Australia to list of Certifications
Fixes #5351
2020-11-17 21:19:04 -05:00
Qstick
6d0019ad00 New: Look for and use {tmdb} tag in folder name on import
Fixes #5213
2020-11-17 15:55:55 -05:00
Qstick
ef8ba37d0e Lock bot config [skip ci] 2020-11-17 13:57:55 -05:00
Taloth Saldono
5e1b197702 Give systemd a bit more time to restart sonarr after update
(cherry picked from commit 5fced70948c1e8d3d5e3c4747516507f87506697)
2020-11-16 17:36:14 -05:00
ta264
4d43c3eb2b Fixed: Import single file torrents with a folder from QBittorrent 2020-11-16 17:34:31 -05:00
memnos
4c1de51b52 Translated using Weblate (Italian) [skip ci]
Currently translated at 100.0% (851 of 851 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2020-11-16 16:32:29 +00:00
bakerboy448
bdb61e263e Fix: Update monitor options to be displayed in a more user friendly way 2020-11-16 11:32:24 -05:00
pannbiff
616ae471d1 Translated using Weblate (Swedish) [skip ci]
Currently translated at 54.8% (467 of 851 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2020-11-16 09:49:05 +00:00
Qstick
ce11d4c7bf Bump Mediainfo to 20.09 for Mac 2020-11-15 01:05:41 -05:00
Qstick
a7ba19ddd8 Build Win x86 zip and installer 2020-11-15 01:05:41 -05:00
Qstick
784913a85b Fixed: Prevent null when no candidate in ParsingService 2020-11-15 00:12:53 -05:00
Qstick
67ebf49b21 Revert "New: Change Add Movie Monitor Selection from Dropdown to Checkbox (#5319)"
This reverts commit 897bfa04a6.
2020-11-14 23:11:37 -05:00
Qstick
0e5f43e139 Fixed: Same movie different year gets imported incorrectly 2020-11-14 23:11:33 -05:00
Qstick
d5addfa12f Fixed: Disabled List items show up in Discovery
Fixes #5328
2020-11-14 22:34:05 -05:00
Taloth Saldono
96852c9f96 Protect against Qbittorrent edgecase if users add torrents manually with Keep top-level folder disabled
(cherry picked from commit 05820ac272ee976fcc0a7b17f3e9cc987cb0d230)
2020-11-14 18:35:02 -05:00
Qstick
7311a1e837 fixup! Fix Unit Tests 2020-11-14 01:52:28 -05:00
Qstick
a591227052 Fixed: Nested Folder in MovieFolder Naming not created automatically 2020-11-14 01:52:28 -05:00
bakerboy448
897bfa04a6 New: Change Add Movie Monitor Selection from Dropdown to Checkbox (#5319)
* New: Change Add Movie Monitor Selection from Dropdown to Checkbox

* Fix Monitored Value not storing (bool changes)

* address discord comments
2020-11-14 01:18:41 -05:00
ta264
3e795d290b Fixed: Get actual file names from QBittorrent API (#5226)
* Fixed: Get actual file names from QBittorrent API

Previously we were assuming that the output filename was the category
output dir + the torrent name.  This isn't true if the torrent has
been renamed or sanitized.
2020-11-14 00:27:07 -05:00
Mark McDowall
b7719662a7 Return max tooltip width
(cherry picked from commit fe0d8bb7da27e0f34b5db166ee54033f292b1006)
2020-11-13 21:12:49 -05:00
Taloth Saldono
f1b7f5b355 Bumped Sabnzbd default history request size from 30 to 60
(cherry picked from commit 8b2550cef0381a07c466044063c9d8c2be4d89c3)
2020-11-13 21:10:27 -05:00
Csaba
164a7f0f8c Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (851 of 851 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-13 22:49:04 +00:00
reloxx
cfa0e9aa19 Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (851 of 851 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-11-13 22:49:04 +00:00
geogolem
d9ff8e0d4a Fixed: Clarify Status Filter, Add ConsideredAvailable, MinAvailability Filters (#4924) 2020-11-12 23:13:39 -05:00
Qstick
b888b044d6 Fixed: False Positives for RemotePath check with Deluge 2020-11-12 22:29:11 -05:00
Qstick
9be8d438e7 Tweak recommended wording [skip ci] 2020-11-12 21:47:04 -05:00
Qstick
642783d3de Add "Screenshot if UI change" to PR template [skip ci] 2020-11-12 21:31:38 -05:00
Edward Scroop
cf08f483b2 Update README.md (#5307) [skip ci]
As development of features for Radarr v2 has stopped, ensure that new contributors can begin developing Radarr v3 by changing reference to NZbdrone.
2020-11-12 21:28:54 -05:00
bakerboy448
f6c630ee9e Add Discover Recommended tooltip (#5318) 2020-11-12 21:22:38 -05:00
geogolem
f5a46b14ac Add NeutralLanguage to Radarr.csproj to appease VS 16.8 2020-11-12 21:18:10 -05:00
Qstick
3a8ca21a17 Add NeutralLanguage to NzbDrone.Common to appease VS 16.8 2020-11-12 20:50:52 -05:00
Qstick
70a9a68ed3 Bump to dotnet core 3.1.10 2020-11-11 23:26:07 -05:00
Qstick
dc96857e66 Fixed: Console App Icon 2020-11-11 22:13:54 -05:00
Qstick
bb5f5eeee6 Fixed: Correctly storing v0 version during import, allowing them to be upgraded to v1 later
Fixes #5305

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-11-11 21:37:45 -05:00
memnos
d7938b6282 Translated using Weblate (Italian) [skip ci]
Currently translated at 100.0% (848 of 848 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2020-11-12 01:49:04 +00:00
Qstick
c21e733d57 Fixed: Clarify List Clean options, Add warning on removeAndDelete selection 2020-11-10 23:35:20 -05:00
pannbiff
75866b135c Translated using Weblate (Swedish) [skip ci]
Currently translated at 52.3% (443 of 847 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2020-11-09 03:49:03 +00:00
kingii98
5aaf8dcf0e Translated using Weblate (Russian) [skip ci]
Currently translated at 8.3% (71 of 847 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ru/
2020-11-09 03:49:02 +00:00
Csaba
1dcff1b742 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (847 of 847 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-11-06 23:49:01 +00:00
Qstick
adedbc1bed Rename DiscordNotifier for less user confusion 2020-11-05 22:01:40 -05:00
Qstick
4fa1955008 Fixed: Handle Null in Discord Notification if no images 2020-11-05 22:01:40 -05:00
Mark McDowall
bab9b2c040 Fixed: Show TLS errors in UI when testing download clients 2020-11-05 22:01:40 -05:00
Qstick
216f9b37b2 Remove ParsingLibrary 2020-11-05 22:01:40 -05:00
Qstick
025f064ecf Fixed: RawHD quality detection
Fixes #5267
Fixes #5207
2020-11-05 22:01:40 -05:00
Qstick
b8df38e929 Change 'Ignore Deleted Movies' to 'Unmonitor Deleted Movies' for consistency 2020-11-05 22:01:40 -05:00
Qstick
72f0dadbea New: Show .net version in UI 2020-11-05 22:01:40 -05:00
Robin Dadswell
3e22658e27 New: Discord notification upgrade colour
(cherry picked from commit cfdaddd81ae66412766ff19805c78e8503205bbe)
2020-11-05 21:44:50 -05:00
Taloth Saldono
d00f3abbf0 Fixed: Dataloss when moving series folder to root folder with only different casing
Fixes #5190
Fixes #5184
2020-11-03 22:07:11 -05:00
Mark McDowall
c270a53eab Fixed: Telegram silent notifications
(cherry picked from commit 0b7aa19ac06600936f6c4cb18ea3474e8a96f1e2)
2020-11-03 21:44:24 -05:00
Robin Dadswell
b474961b65 updated OnDownload to use 'Success' Colour 2020-10-31 11:09:20 -04:00
Qstick
cfb44c7db7 Fixed: 576p Detection in MediaInfoAugment 2020-10-29 21:13:20 -04:00
Qstick
45011198e2 Improved Trakt list validation
Fixes #5262

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-10-29 20:50:35 -04:00
Qstick
a03d136aa4 Fixed: Cleanse account and passwd from Download Station URLs
Fixes #5266

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-10-29 20:45:09 -04:00
pannbiff
e2a45caada Translated using Weblate (Swedish) [skip ci]
Currently translated at 49.3% (418 of 847 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2020-10-27 07:48:58 +00:00
Mark McDowall
e3db49896b Fixed: Show feed URL if incorrect mime type is found
(cherry picked from commit fa2e70d571cc7658611a0c51b8603247a22e6a2e)
2020-10-25 15:40:29 -04:00
Will Segatto
920b7d8e29 Translated using Weblate (Portuguese) [skip ci]
Currently translated at 100.0% (847 of 847 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2020-10-22 02:48:56 +00:00
memnos
0df442caf2 Translated using Weblate (Italian) [skip ci]
Currently translated at 100.0% (847 of 847 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2020-10-22 02:48:55 +00:00
Qstick
d835358f75 Fixed: Clean DB dupes and add unique constrain 2020-10-20 09:07:54 -04:00
pannbiff
45d329423c Translated using Weblate (Swedish) [skip ci]
Currently translated at 46.1% (391 of 847 strings)

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

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-10-20 04:48:59 +00:00
Qstick
6e135b1e36 Cleanup old changlog files, we use azure now 2020-10-18 22:16:06 -04:00
Qstick
31ca413fc7 Fixed: Language sort on Interactive Search page 2020-10-18 22:11:19 -04:00
Qstick
959d63b4eb Fixed: Filter by Peers in Interactive Search 2020-10-18 21:34:27 -04:00
foXaCe
09ed2ab889 Translated using Weblate (French) [skip ci]
Currently translated at 99.8% (846 of 847 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-10-18 03:48:54 +00:00
reloxx
1374a12d4c Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (847 of 847 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-10-18 03:48:53 +00:00
Qstick
76cabb4927 Use new multi-select component for indexer languages 2020-10-17 01:38:41 -04:00
nitsua
5b83d09d5e Remove some instances of moment that are not needed on the index to reduce the load 2020-10-17 01:04:50 -04:00
Daniel Martin Gonzalez
82eadcffaa New: Add Option to localize metadata written in .nfo if available (#5060)
* Add Option to localize metadata written in .nfo if available

* Fix Pull Request comments
2020-10-17 01:03:46 -04:00
Qstick
1ebb71db59 Fixed: Import Extra files from Subfolders
Fixes: #4646
2020-10-17 00:17:38 -04:00
Qstick
662b3894c2 Fixed: Make Notification trigger texts consistent
Fixes #5012
2020-10-17 00:06:23 -04:00
Qstick
a1c21af9b5 Fixed: (Windows) clean up extraneous files in build folder during installation
Fixes #5200
Fixes #5203

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-10-16 23:33:03 -04:00
Qstick
67fca87c44 Added PrivacyLevel option to FieldDefinition for later usage
Fixes #5107

Co-Authored-By: Taloth <Taloth@users.noreply.github.com>
2020-10-16 23:27:01 -04:00
Qstick
6ee2780370 Fixed some mediainfo subtitle codes
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-10-16 23:06:17 -04:00
Qstick
0086e2699e Protect against undefined SizeOnDisk
Fixes #5205

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-10-16 22:59:21 -04:00
Qstick
37c9701237 Fixed: Rerender Overviews on Overview option changes
Fixes #5150

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-10-16 22:55:28 -04:00
Qstick
6d452d8479 New: Bulk remove from Blacklist
Fixes #5194

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-10-16 22:45:23 -04:00
Qstick
e82f0c01d8 Re-saving edited providers will forcibly save them
Fixes #5192

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-10-16 22:28:19 -04:00
Qstick
ee456c3291 Fixed: MapCoversToLocal for tmdbid queries to all movies endpoint 2020-10-16 22:19:17 -04:00
kingii98
9986f0119b Translated using Weblate (Russian) [skip ci]
Currently translated at 6.7% (57 of 844 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ru/
2020-10-16 21:48:58 +00:00
Csaba
5d4da26195 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (844 of 844 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-10-16 21:48:58 +00:00
memnos
5ed448c930 Translated using Weblate (Italian) [skip ci]
Currently translated at 100.0% (844 of 844 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2020-10-16 21:48:58 +00:00
jpalenz77
9263e31b7b Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (844 of 844 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-10-16 21:48:57 +00:00
angrycuban13
516122c6f3 Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (843 of 843 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-10-16 03:00:36 +00:00
foXaCe
256a50abab Translated using Weblate (French) [skip ci]
Currently translated at 100.0% (843 of 843 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-10-16 03:00:36 +00:00
EnorMOZ
315929bc5e Update "TagsHelpText" with similar language as sonarr (#5218)
* Update "TagsHelpText" with similar language as sonarr

* Use new translation key
2020-10-15 23:00:31 -04:00
Qstick
4a681601b2 Skip Screenshot on 2nd build attempt 2020-10-15 21:14:27 -04:00
Csaba
ab3b5bdf8b Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (842 of 842 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-10-15 14:38:36 +00:00
Qstick
e52288bd67 New: Edit RlsGroup, Flags, and Edition for Movie Files (#5183)
* New: Edit RlsGroup and Edition for Movie Files

* fixup! remove console log

* fixup! translation
2020-10-15 10:38:30 -04:00
servarr[bot]
f2f26d88b9 New: Differentiate between short term and long term (more than 6 hours) indexer failures (#5202)
* New: Differentiate between short term and long term (more than 6 hours) indexer failures

(cherry picked from commit 2adedb97da5ad31b65f0dc2eec5c263efe95731f)

* fixup! Mock Localization

Co-authored-by: Mark McDowall <mark@mcdowall.ca>
Co-authored-by: Qstick <qstick@gmail.com>
2020-10-15 07:20:02 -04:00
nitsua
27354507cb Fix issue with IMDb lists (some not all) not parsing properly causing an issue when trying to add them 2020-10-14 15:08:08 -04:00
Qstick
b7aa1df219 Fix Automation/cleanup build yml (#5211)
* Cleanup build yml

* fixup! bump chrome driver
2020-10-13 21:53:17 -04:00
ta264
2d7942d69c Fixed: Speed up RSS sync 2020-10-13 20:54:33 -04:00
ta264
0a8dd85856 Fixed: Speed up initial movie load when opening the UI 2020-10-13 20:54:33 -04:00
ta264
f917d0e9bc Add FileInfo utility functions to DiskProvider 2020-10-13 20:54:33 -04:00
kingii98
024e4df99c Translated using Weblate (Russian) [skip ci]
Currently translated at 6.1% (52 of 840 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ru/
2020-10-13 16:48:58 +00:00
Csaba
49fa402c55 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 100.0% (840 of 840 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-10-13 16:48:57 +00:00
Qstick
02c95658c4 Windows installer improvements
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-10-11 22:43:08 -04:00
Mark McDowall
3bc4231640 New: Health events for Webhooks
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-10-11 22:40:18 -04:00
Mark McDowall
a9a0d47f9f Fixed: Copying passwords
(cherry picked from commit c871b3f9487b9bfeb3726d763a632a772b420a0a)
2020-10-11 20:36:46 -04:00
Florian
0dd05b2dac Translated using Weblate (French) [skip ci]
Currently translated at 100.0% (840 of 840 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-10-11 21:48:51 +00:00
Qstick
3986433884 Fixed: Default a Movie object with Empty Ratings 2020-10-11 01:26:53 -04:00
Mark McDowall
f637976530 Fixed: Parsing of URLs with double slashes in the path
(cherry picked from commit 0c7743e786749b333333d282412ff76fc10aba65)
2020-10-10 17:16:21 -04:00
Qstick
603d26bb5f Take Screenshot on Automation tests for build status notifications 2020-10-09 21:51:59 -04:00
Will Segatto
6b41ad7442 Translated using Weblate (Portuguese) [skip ci]
Currently translated at 100.0% (840 of 840 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2020-10-10 00:49:05 +00:00
hotio
4c049ac3d9 Translated using Weblate (Dutch) [skip ci]
Currently translated at 97.9% (823 of 840 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-10-10 00:49:04 +00:00
Csaba
84df3e8b5b Translated using Weblate (Hungarian) [skip ci]
Currently translated at 91.4% (768 of 840 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-10-10 00:49:03 +00:00
jpalenz77
0ff76e14bb Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (840 of 840 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-10-10 00:48:55 +00:00
Florian
5433c6364c Translated using Weblate (French) [skip ci]
Currently translated at 100.0% (840 of 840 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-10-10 00:48:50 +00:00
geogolem
038e3d5c44 update trayIcon with new Radarr Icon 2020-10-08 14:27:07 -04:00
Qstick
71b126024b Remove unused mac startup script 2020-10-07 23:07:47 -04:00
Qstick
76565d4ab5 Fixed: Old Icon being used on Console App 2020-10-07 23:06:43 -04:00
ta264
28c15bc425 Log out SQL trace on error
Fixes #4910

Co-Authored-By: ta264 <ta264@users.noreply.github.com>
2020-10-07 22:55:54 -04:00
Qstick
aeda4cba32 Fixed: Render CustomFormats under profile option for Large Screens 2020-10-07 22:01:58 -04:00
Qstick
a826c1dc25 New: MultiSelect input control for provider settings
Co-Authored-By: Taloth <Taloth@users.noreply.github.com>
2020-10-07 21:27:17 -04:00
Csaba
00022fd206 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 32.3% (272 of 840 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-10-08 00:48:53 +00:00
Will Segatto
0647663f46 Translated using Weblate (Portuguese) [skip ci]
Currently translated at 100.0% (840 of 840 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2020-10-07 05:48:57 +00:00
Csaba
b83bfb045b Translated using Weblate (Hungarian) [skip ci]
Currently translated at 25.1% (211 of 840 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-10-07 05:48:57 +00:00
memnos
cfbac482e5 Translated using Weblate (Italian) [skip ci]
Currently translated at 100.0% (840 of 840 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2020-10-07 05:48:53 +00:00
foXaCe
b43b35a295 Translated using Weblate (French) [skip ci]
Currently translated at 100.0% (840 of 840 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-10-07 05:48:50 +00:00
reloxx
e75d52de0e Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (840 of 840 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-10-07 05:48:49 +00:00
nitsua
f850e75d4e Fix issue with push missing the URL base 2020-10-06 11:05:43 -04:00
nitsua
6c9e4994d8 Fix broken translations on index 2020-10-06 09:35:08 -04:00
Qstick
708a2e31d5 Improve load speeds by being more efficient with config language 2020-10-06 07:48:58 -04:00
Qstick
37c1b5b28c New: Add Bulgarian Language
Fixes #4111
2020-10-06 00:33:33 -04:00
Qstick
e28bea14b3 New: Add Thai Language 2020-10-06 00:33:33 -04:00
Qstick
2823099237 New: Add Hindi and Romanian Languages
Fixes #3597
2020-10-06 00:33:33 -04:00
Qstick
53eeee8b91 New: Allow Selection Original Movie Languge in Profile 2020-10-06 00:33:33 -04:00
nitsua
e880eb0e00 More translations 2020-10-06 00:29:45 -04:00
Qstick
561f84adff Added translation using Weblate (Thai) [skip ci] 2020-10-06 04:09:34 +00:00
Qstick
4fc6a14d1b Added translation using Weblate (Bulgarian) [skip ci] 2020-10-06 04:09:24 +00:00
foXaCe
b8d5a0b6a2 Translated using Weblate (French) [skip ci]
Currently translated at 99.5% (822 of 826 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-10-05 08:48:49 +00:00
Mark McDowall
73b0a461d3 Fix tooltip max width on larger screens
(cherry picked from commit f4f2a6f5fc14244f9acf8186cbacda7f9c1e0481)
2020-10-05 00:14:28 -04:00
Qstick
d86402efb1 Fixed: formatTimeSpan shows incorrect when over 1 month 2020-10-04 23:38:10 -04:00
Qstick
1c892d7357 Fixed: Sorting of Queue time left 2020-10-04 23:37:39 -04:00
Qstick
f7e21ec2a4 Fixed: Tooltip jumping around
Fixes: #5136
Fixes: #4966
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-10-04 23:34:27 -04:00
Qstick
1d0771c9a4 New: Add size to movie files in Webhook payload
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-10-04 22:31:49 -04:00
Qstick
cc384d9297 Remove unused popper 2 package 2020-10-04 22:29:21 -04:00
Qstick
7898100d95 Revert "Pull Sonarr commit 'Import lists in settings overview' (#5138)"
This reverts commit 4b279e87cf.
2020-10-04 22:28:46 -04:00
servarr[bot]
4b279e87cf Pull Sonarr commit 'Import lists in settings overview' (#5138)
* Import lists in settings overview

(cherry picked from commit f45b27f507953724e9469ce16c4e555985312150)

* fixup! Sonarr wording

Co-authored-by: Mark McDowall <mark@mcdowall.ca>
Co-authored-by: Qstick <qstick@gmail.com>
2020-10-04 22:26:14 -04:00
Qstick
3d5570dfd9 Update frontend packages
Fixes: #5115
Fixes: #5116
Fixes: #5117
Fixes: #5118
Fixes: #5119
Fixes: #5120
Fixes: #5121
Fixes: #5122
Fixes: #5123
Fixes: #5124
Fixes: #5125
Fixes: #5126
Fixes: #5127
Fixes: #5128
Fixes: #5129
Fixes: #5130
Fixes: #5131
Fixes: #5132
Fixes: #5133
Fixes: #5134
Fixes: #5139
Fixes: #5140
2020-10-04 21:49:16 -04:00
Qstick
269462e0a2 Update stalebot exempt labels [skip ci] 2020-10-04 02:45:56 -04:00
bakerboy448
5799b3dc47 Fixed: Parser Detecting DTS-Audio formats and Blu-Ray as groups (#5090)
* Fix DTS-XXX Audio & Blu-ray false Group Positives

* Add test cases

* fixup! spaces

Co-authored-by: Qstick <qstick@gmail.com>
2020-10-04 01:59:31 -04:00
Qstick
dfbbb7d9bd Fixup Filelist test to use new url 2020-10-04 01:57:37 -04:00
Qstick
6faa484d4e Change Discord invite to point to Welcome page 2020-10-04 01:20:18 -04:00
Qstick
86363d5bf1 Fixed: Change Filelist default URL 2020-10-04 01:20:18 -04:00
Qstick
30c51ec4f3 Fixed: Handle obfuscated files using abc.xyz pattern
Fixes #5105

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-10-04 01:20:17 -04:00
Qstick
a66b2cf416 New: Add more information to Webhook payload
Fixes #5104

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-10-04 01:20:17 -04:00
Qstick
37197150be Some cleanup of things marked for removal in v3
Fixes #5102

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-10-04 01:20:17 -04:00
Qstick
c8bbd21615 Cleanup TaskManager.cs 2020-10-04 01:20:17 -04:00
Florian
fdf2d1c9b3 Translated using Weblate (French) [skip ci]
Currently translated at 99.5% (822 of 826 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-10-04 04:48:54 +00:00
foXaCe
eb4cd9633a Translated using Weblate (French) [skip ci]
Currently translated at 99.5% (822 of 826 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-10-04 04:48:54 +00:00
reloxx
3fa17bf7f6 Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (826 of 826 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-10-04 04:48:48 +00:00
Qstick
22e9dff76b Don't check for updates every 30 minutes on nightly 2020-10-03 23:49:06 -04:00
Qstick
7d31eb1f55 Fixed: Test for empty strings using isNullOrEmpty 2020-10-03 21:58:31 -04:00
Qstick
4ec71538b9 Fixed: Avoid zero-length array memory allocations 2020-10-03 21:58:31 -04:00
Qstick
295b975046 Fixed: Do not use Count/LongCount when Any can be used 2020-10-03 21:58:31 -04:00
Qstick
0198c7a3b1 Fixed: Use Length/Count property instead of Enumerable.Count method 2020-10-03 21:58:31 -04:00
Qstick
088ffc34df Fixed: Use Append(Char) for single character Stringbuilder additions 2020-10-03 21:58:31 -04:00
bakerboy448
1740ad337c Clarify Branches/ Release Channels [skip ci] (#5100) 2020-10-03 09:26:37 -04:00
nitsua
a6758e4bf4 Ongoing updates to api docs (#5082) [skip ci] 2020-10-03 09:25:35 -04:00
memnos
2161f08140 Translated using Weblate (Italian) [skip ci]
Currently translated at 100.0% (826 of 826 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2020-10-03 06:48:53 +00:00
foXaCe
1a92372506 Translated using Weblate (French) [skip ci]
Currently translated at 70.8% (585 of 826 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-10-03 06:48:52 +00:00
bakerboy448
5bd23be133 Update v3 binaries links [skip ci] (#5099)
* Update README.md

* Update Nightly Binary Links

* Fix table formatting
2020-10-01 23:39:15 -04:00
nitsua
eca816db86 Fix movie title stretching the add window
Fixes: #5096
2020-10-01 18:12:19 -04:00
bakerboy448
c4f19a813d Minor Branch Updates/Clarifcation [Skip Ci] 2020-10-01 11:20:13 -04:00
bakerboy448
24cee7e4fe Correct Contributing (don't have forums or IRC) [skip ci] 2020-10-01 11:15:11 -04:00
Qstick
22531294be Remove duplicate translation key 2020-09-30 21:44:08 -04:00
Qstick
464d92bb70 Calendar status fixes
Fixes #4747

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-09-30 21:43:52 -04:00
Qstick
8ee16b81ec Fixed: Indexer being disabled due to download client rejecting it
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-09-30 21:25:12 -04:00
Qstick
a7a1d48e0d Fixed: Log path when import fails for movie import
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-09-30 21:24:18 -04:00
Qstick
a070279993 New: Allow naming with original Movie title (in original language) 2020-09-30 16:10:56 -04:00
Qstick
95918c4053 Fixed: Speed up Unmapped Folder fetch for large number of root folders 2020-09-30 07:41:56 -04:00
Will Segatto
646b86f8c9 Translated using Weblate (Portuguese) [skip ci]
Currently translated at 100.0% (826 of 826 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2020-09-29 05:59:11 +00:00
jpalenz77
28835a1857 Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (826 of 826 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-09-29 05:59:10 +00:00
nitsua
6b22481a00 Fix the sorting on the agenda to respect using all dates instead of only cinema date to sort 2020-09-28 23:55:50 -04:00
Qstick
aef8a8fd04 Fixed: Fetch blacklist by Movie instead of all
Fixes #5066
2020-09-28 23:39:15 -04:00
Qstick
a1e69c3c2b Lodash replacements: take 2 2020-09-28 22:02:02 -04:00
hotio
995d257d3d Fix docker tag (#5081) [skip ci] 2020-09-28 21:51:26 -04:00
nitsua
cf804f7dac Fix issue with arrow keys switching movie when using them inside a textbox (or any element really) 2020-09-28 17:28:09 +01:00
ta264
081fe64bff Revert "Convert some instances (filter, find, pick) to native from lodash"
This reverts commit d8a0aac9c3.
2020-09-28 06:26:23 +01:00
ta264
9075fdc1c1 Revert "Fix find error on movie details"
This reverts commit 6bdd24e62d.
2020-09-28 06:26:13 +01:00
foXaCe
5db1faad0b Translated using Weblate (French) [skip ci]
Currently translated at 62.5% (517 of 826 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-09-28 06:00:42 +00:00
reloxx
57f3805763 Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (826 of 826 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-09-28 06:00:38 +00:00
nitsua
6bdd24e62d Fix find error on movie details 2020-09-28 06:51:03 +01:00
Qstick
d5ec2914e2 New: Support existing 'keyart' in Kodi Metadata
Fixes #5059
2020-09-27 22:44:12 -04:00
Qstick
d8a0aac9c3 Convert some instances (filter, find, pick) to native from lodash 2020-09-27 22:33:21 -04:00
nitsua
987ed357d5 Add a link to the github issue if it is added to the change notes 2020-09-27 22:14:08 -04:00
Qstick
9044976393 Update StaleBot config exempt labels [skip ci] 2020-09-27 09:30:48 -04:00
nitsua
b53def3da5 Fixed: Issue with arrow navigation from details working outside of the details page (#5071) 2020-09-26 23:36:36 -04:00
Qstick
2ecb988c6a Remove aphrodite links from Readme [skip ci] 2020-09-26 22:19:17 -04:00
Qstick
41cf722ab5 Change over aphrodite references 2020-09-26 22:03:14 -04:00
LSL1337
dbaccc5f91 Translated using Weblate (Hungarian) [skip ci]
Currently translated at 2.6% (22 of 826 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/hu/
2020-09-27 01:30:56 +00:00
nitsua
9864d555f2 Fixed: Grouping of movies on the same date in the calendar agenda view (#5068) 2020-09-26 12:18:35 -04:00
foXaCe
b4abfaa695 Translated using Weblate (French) [skip ci]
Currently translated at 59.6% (487 of 817 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-09-26 14:49:51 +00:00
nitsua
7f814a3cb9 New: Add support for left/right arrows on the movie details to navigate through movies
New: Add support for ctrl+home and ctrl+end to jump to the top and bottom of the movie index
New: Add redirect to previous movie instead of index when deleting one
2020-09-26 10:49:47 -04:00
nitsua
870a39278c Handle ratelimit api response for newznab caps endpoint on certain newznab indexers that have caps behind the apikey 2020-09-26 10:45:35 -04:00
Qstick
7e5d5fe29e New: Avoid cache on IMDb user lists 2020-09-25 22:05:39 -04:00
Will Segatto
6d4543f1df Translated using Weblate (Portuguese) [skip ci]
Currently translated at 99.8% (816 of 817 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2020-09-25 22:05:42 +00:00
jpalenz77
98ebc8ff97 Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (817 of 817 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-09-25 22:05:42 +00:00
reloxx
b8743bd73e Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (817 of 817 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-09-25 22:05:41 +00:00
Qstick
4ea9ded0de New: Add icons for search results to indicate if it has been previously grabbed, failed or is in the blacklist. 2020-09-25 10:56:46 -04:00
Taloth Saldono
2ee77aa0a4 Fixed: Ignore files in subfolders during a manual import 2020-09-24 20:54:56 -04:00
Will Segatto
c7c97e508d Translated using Weblate (Portuguese) [skip ci]
Currently translated at 100.0% (816 of 816 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2020-09-24 23:59:10 +00:00
jpalenz77
283c26222b Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (816 of 816 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-09-24 23:59:09 +00:00
Qstick
fb0fa53304 Fixed: Code block for Release name on import Discord notification 2020-09-23 22:04:27 -04:00
Qstick
ca27a80b15 New: Show year with manual import Movie selection 2020-09-23 21:32:56 -04:00
Will Segatto
ed289ddbdd Translated using Weblate (Portuguese) [skip ci]
Currently translated at 100.0% (816 of 816 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2020-09-24 00:59:06 +00:00
memnos
5a36980996 Translated using Weblate (Italian) [skip ci]
Currently translated at 99.7% (814 of 816 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2020-09-24 00:59:06 +00:00
Will Segatto
de28266071 Translated using Weblate (Portuguese) [skip ci]
Currently translated at 100.0% (816 of 816 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2020-09-23 02:59:06 +00:00
angrycuban13
599263f998 Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (816 of 816 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-09-23 02:59:05 +00:00
jpalenz77
fd711a9bf3 Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (816 of 816 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-09-23 02:59:05 +00:00
Qstick
ad5a90f034 New: Customizable Discord Notifications (Thanks @hotio) 2020-09-22 16:23:27 -04:00
Qstick
2ad1cfec42 Bump ImageSharp to stable package 1.0.1 [Common] 2020-09-22 16:23:01 -04:00
nitsua
6fdf06a882 Fix issue with the disk space label percents overlapping on small screens. 2020-09-21 22:40:19 -04:00
jpalenz77
4e0f027a91 Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (816 of 816 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-09-21 20:59:05 +00:00
Qstick
e56a784e4c Null Check firstQueueItem 2020-09-20 23:02:18 -04:00
Qstick
1898114d8c Remove empty space 2020-09-20 20:01:23 -04:00
Qstick
d6d740a0d2 Replace for loop with find for QueueStatus 2020-09-20 19:47:23 -04:00
Will Segatto
9472af8f83 Translated using Weblate (Portuguese) [skip ci]
Currently translated at 100.0% (816 of 816 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2020-09-20 18:59:04 +00:00
Qstick
01f0f9d3bb Fixed: Translate Movie Info in Discover View 2020-09-19 23:01:02 -04:00
Qstick
9e79e91d39 Fixed: Populate OriginalTitle in DB for ListMovies 2020-09-19 22:54:43 -04:00
Qstick
db05f0464a Fixed: Return existing item props on lookup with IMDBId or TMDBId
Fixes #5037
2020-09-19 22:41:07 -04:00
nitsua
ff3fd0bb1e Fix: Address issue with incorrect dates showing on the calendar agenda and add icons for which date type it is 2020-09-19 14:09:20 -04:00
Mark McDowall
0100819ae4 Fixed: Removing torrents from Vuze
(cherry picked from commit d0c0720578abcc02d9abca24f60d73d32491cd2f)
2020-09-19 11:02:42 -04:00
Mark McDowall
dd3218588f Fixed: Spelling in Edit List modal
(cherry picked from commit 068d9eef8d8ac9eb8c43ef6283e8a6426b767cb1)
2020-09-19 11:00:54 -04:00
hotio
e086b760c1 Fix docker org/user names 2020-09-19 11:00:03 -04:00
Will Segatto
f883f96325 Translated using Weblate (Portuguese) [skip ci]
Currently translated at 100.0% (816 of 816 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2020-09-19 14:59:09 +00:00
angrycuban13
5abffcab54 Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (816 of 816 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-09-19 14:59:04 +00:00
Will Segatto
116a3b2de1 Translated using Weblate (Portuguese) [skip ci]
Currently translated at 82.1% (670 of 816 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2020-09-17 15:59:09 +00:00
memnos
9521b6883d Translated using Weblate (Italian) [skip ci]
Currently translated at 99.7% (814 of 816 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2020-09-17 15:59:07 +00:00
angrycuban13
affebb3552 Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (816 of 816 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-09-17 15:59:04 +00:00
foXaCe
65b0fcffbe Translated using Weblate (French) [skip ci]
Currently translated at 59.5% (486 of 816 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-09-17 15:59:04 +00:00
Qstick
4c0a906bfa Update Settings.js 2020-09-16 12:14:17 -04:00
Will Segatto
7e0815b3b4 Translated using Weblate (Portuguese) [skip ci]
Currently translated at 68.6% (560 of 816 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2020-09-15 01:59:07 +00:00
hotio
73cc67f71e Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (816 of 816 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-09-15 01:59:07 +00:00
memnos
f089d11001 Translated using Weblate (Italian) [skip ci]
Currently translated at 100.0% (816 of 816 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2020-09-15 01:59:06 +00:00
jpalenz77
7791b4038e Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (816 of 816 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-09-15 01:59:03 +00:00
reloxx
77b2945e84 Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (816 of 816 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-09-15 01:59:02 +00:00
nitsua
02845c72d3 Add tooltip to path & movie title on the movie index table view 2020-09-12 23:38:09 -04:00
hotio
587e6b570c Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (808 of 808 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-09-12 06:25:42 +00:00
memnos
7d9f625080 Translated using Weblate (Italian) [skip ci]
Currently translated at 100.0% (808 of 808 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2020-09-12 06:25:42 +00:00
jpalenz77
480722df71 Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (808 of 808 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-09-12 06:25:42 +00:00
foXaCe
07596a6f8d Translated using Weblate (French) [skip ci]
Currently translated at 58.0% (469 of 808 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-09-12 06:25:42 +00:00
reloxx
3fbf591eb9 Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (808 of 808 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-09-12 06:25:42 +00:00
nitsua
9a46d5165c New: Add support for prioritizing indexers (#5000) 2020-09-12 02:25:32 -04:00
nitsua
4fafdcabb7 Fix: Addressed issue with status color not showing on Movie > Details (only purple was working) 2020-09-11 22:59:57 -04:00
Qstick
69071768de Fixed: Import movie spinning forever when error is returned
Fixes #4993

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-09-11 22:44:45 -04:00
Qstick
4be83a3367 Mark completed imports based on history as imported to remove from queue
Fixes #4994
2020-09-11 22:27:29 -04:00
Qstick
7ddaca06a6 Fixed: HDBits Categories, Codecs, Mediums Select Requiring Numbers 2020-09-11 22:23:46 -04:00
angrycuban13
54dc22a763 Translated using Weblate (Spanish) [skip ci]
Currently translated at 99.8% (807 of 808 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-09-11 08:35:25 +00:00
Qstick
29bc38423b Fixed: Correct Tooltips for Clone Format and Export
Fixes #4991
2020-09-10 22:25:34 -04:00
Qstick
da720fdf4c Fixed: Tooltips not working for Icon Buttons, Revert title pullout in Link.js 2020-09-10 22:15:19 -04:00
Qstick
2f311452da Fixed: Deleting CF Specification deletes all 2020-09-10 21:25:16 -04:00
Will Segatto
d615007ff1 Translated using Weblate (Portuguese) [skip ci]
Currently translated at 66.5% (535 of 804 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2020-09-11 01:07:24 +00:00
memnos
d9ed97f63a Translated using Weblate (Italian) [skip ci]
Currently translated at 100.0% (804 of 804 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2020-09-11 01:07:24 +00:00
Qstick
ecf6dccb35 New: Option to not prefer repacks/propers (for use with Custom Formats)
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-09-10 21:07:14 -04:00
Mark McDowall
d31b1e1e9b New: Don't forcibly retest indexers/download clients/connections on save if previously enabled
(cherry picked from commit b2b1600ebe7f022a3248ea12b69553e2d51a3a7c)
2020-09-10 19:47:41 -04:00
nitsua
7019c8587b Fix an issue with the language on status labels for inCinemas and added translation to the movieStatus variable (#4986)
Fix issue where status text was not consistent across all 3 index views and the details
2020-09-10 11:04:52 -04:00
nitsua
df96203914 Update API Docs (#4985) [skip ci] 2020-09-10 00:28:35 -04:00
memnos
bee8da5c8a Translated using Weblate (Italian) [skip ci]
Currently translated at 83.3% (670 of 804 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2020-09-10 04:03:55 +00:00
Jorman
c42b1d6265 Translated using Weblate (Italian) [skip ci]
Currently translated at 83.3% (670 of 804 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2020-09-10 04:03:55 +00:00
foXaCe
5aa45dbc85 Translated using Weblate (French) [skip ci]
Currently translated at 57.0% (459 of 804 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-09-10 04:03:55 +00:00
reloxx
5d64417b7b Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (804 of 804 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-09-10 04:03:55 +00:00
Austin Best
c51b08e26c Fixed: Address issues with the status being wrong color on the index and movie details (not tracking anything queued/downloading)
Fixed: Updated fetchQueueDetails() to not pass movie ids since the store doesn't use them anyways
New: Added text to index poster progress bar showing status

#4525
#4526
#4982
2020-09-10 00:03:44 -04:00
Qstick
a2e8d1d5d6 Additional Logging for rTorrent 2020-09-10 00:02:45 -04:00
nitsua
ea37bc2cb7 New: Add support for Discord Notifier connect type (#4611) 2020-09-09 23:46:24 -04:00
Qstick
bba2b01980 Don't parse subtitle language as language
Fixes #4972
2020-09-09 21:58:37 -04:00
Qstick
b43732b343 Fixed: Validate TMDb ListId is a valid integer 2020-09-09 21:54:16 -04:00
Qstick
764d456d49 Fixed: Handle UHDRemux as Remux instead of Webdl 2020-09-09 21:54:16 -04:00
Qstick
9a2cee3104 New: Handle missingFiles status from qBit [common] 2020-09-09 21:54:16 -04:00
Qstick
4311048c08 Update LocalizationServiceFixture.cs 2020-09-08 23:25:55 -04:00
Qstick
5b3a09716b Fixed: Invalid Translate Key call for CouldNotFindResults 2020-09-08 22:55:50 -04:00
Qstick
ecbdd58f42 New: Separate UI Language into two settings for Movie Info and Main UI 2020-09-08 21:38:05 -04:00
Jorman
2014ff6610 Translated using Weblate (Italian) [skip ci]
Currently translated at 47.6% (379 of 796 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2020-09-08 18:17:28 +00:00
ta264
c3a89c46f5 New: Import and export custom formats 2020-09-08 19:17:21 +01:00
ta264
e014826b17 New TEXT_AREA input type 2020-09-08 19:17:21 +01:00
ta264
f8c3947bad ClipboardButton improvements
Allow overriding CSS, make it work in modals
2020-09-08 19:17:21 +01:00
Mark McDowall
8598cfcac9 Fixed: Replace : with _ when getting output path from Transmission
(cherry picked from commit 0f792f9eb9517a4165a54d7c4551f4f68822d18e)
2020-09-08 08:51:00 -04:00
hotio
18982cd054 Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (796 of 796 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-09-08 08:59:06 +00:00
angrycuban13
03715d9b6a Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (796 of 796 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-09-08 08:59:05 +00:00
elChapoSing
fea479e7e7 Translated using Weblate (French) [skip ci]
Currently translated at 57.6% (459 of 796 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-09-08 08:59:04 +00:00
reloxx
acd4e9b8aa Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (796 of 796 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-09-08 08:59:04 +00:00
Qstick
2a84c4737b Fixed: NullRef on RootFolder add from ModelEvent Broadcast 2020-09-07 21:39:29 -04:00
Qstick
bc4bb772ec Add Translations reminder to PR template 2020-09-07 11:08:31 -04:00
rg9400
6179540d27 add more audio codecs for Trakt connection
Just updated on production at Trakt's end. They are still discussing adding a new format for TV
2020-09-07 10:12:56 -04:00
nitsua
f7e208afe1 Fix issue where options button gets into a state of disabled with no way to re-enable it unless you add a list with movies in it 2020-09-07 10:10:41 -04:00
nitsua
bc83e902cc Adjust the width of runtime & added since they are to wide 2020-09-07 10:09:17 -04:00
nitsua
2b7af5d99d Fix a type in the translation of UI 2020-09-06 21:58:28 -04:00
jpalenz77
1971a9dd05 Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (796 of 796 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-09-06 22:32:25 +00:00
angrycuban13
328c3de7c1 Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (796 of 796 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-09-06 22:32:23 +00:00
nitsua
7c8ac30077 New: Add label to disk usage progress bar (#4958) [common] 2020-09-06 17:22:58 -04:00
nitsua
f286f99bb6 Translation update, updating inline div tags and placeHolder attributes 2020-09-06 13:50:55 -04:00
Qstick
914d8f9937 Translated using Weblate (Italian) [skip ci]
Currently translated at 50.6% (365 of 720 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2020-09-06 13:26:15 +00:00
Qstick
b787f3b2d1 Translated using Weblate (Portuguese) [skip ci]
Currently translated at 71.9% (518 of 720 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2020-09-06 07:05:44 +00:00
Qstick
7ec043afde Fixed: Don't Show two loading indicators on Movie Detail Tabs 2020-09-06 02:51:04 -04:00
Qstick
c3223ea8e7 Fixed: Links and already added icons overflowing on add movie search results
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-09-06 02:51:04 -04:00
Qstick
87bf6b5977 Fixed: Manual Import adding empty rows after selecting movie
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-09-06 02:51:04 -04:00
Qstick
7ddb8ecc37 Add Test for Non-Parsable Search 2020-09-06 02:51:04 -04:00
Qstick
9b1dc2d21d New: Handle BDMux Releases in Quality Parser
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-09-06 02:51:04 -04:00
Taloth Saldono
ff3e53a71b Fixed: Failing file copy when running in docker on synology with btrfs 2020-09-06 02:51:04 -04:00
Taloth Saldono
35532b6789 Fixed: Refreshing Plex Server series in high volume systems 2020-09-06 02:51:04 -04:00
Taloth Saldono
026c34c3ba Remove stacktrace if hardlink resulted in EXDEV. 2020-09-06 02:51:04 -04:00
Taloth Saldono
7b60612ef3 Fixed: Performance of symbolic link detection and infinite recursion 2020-09-06 02:51:04 -04:00
Taloth Saldono
38855967d6 New: Fast copy using reflink on btrfs volumes 2020-09-06 02:51:04 -04:00
Taloth Saldono
67d2765d0c Fixed: Removed hardlink-based transactional file transfer logic (instead relying on explicit copy+delete for cifs) 2020-09-06 02:51:04 -04:00
Qstick
c1b6917afe Moved Windows-only Permission function to Radarr.Windows
Co-Authored-By: Taloth <Taloth@users.noreply.github.com>
2020-09-06 02:51:04 -04:00
Qstick
95a30b50fa Fixed: Generating Kodi movie file metadata files when scanning folder
Co-Authored-By: Taloth <Taloth@users.noreply.github.com>
2020-09-06 02:51:04 -04:00
Qstick
17b93bcc57 Fixed: Representation of episode start time when not starting at the full hour in am/pm notation
Co-Authored-By: Taloth <Taloth@users.noreply.github.com>
2020-09-06 02:51:04 -04:00
Qstick
16321377fc Fixed: Filter direct excluded subfolders of the selected directory during manual import
Fixes #4734

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-09-06 02:51:04 -04:00
hotio
e6368c3095 Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (720 of 720 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-09-06 06:33:26 +00:00
reloxx
a4869db050 Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (720 of 720 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-09-06 06:33:25 +00:00
Qstick
bdecc48e34 Translated using Weblate (Portuguese) [skip ci]
Currently translated at 47.3% (341 of 720 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2020-09-05 14:33:42 +00:00
jpalenz77
916c10197e Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (720 of 720 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-09-05 14:33:41 +00:00
reloxx
3fe06ab3ac Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (720 of 720 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-09-05 14:33:38 +00:00
hotio
4f52a3e10f Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (720 of 720 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-09-05 14:31:37 +00:00
Qstick
b466530e08 Remove Dotnet Framework Version Checks [common] 2020-09-05 01:13:17 -04:00
Qstick
f1727b0960 Bump lodash 4.17.20 2020-09-05 00:52:13 -04:00
Qstick
579a86a708 Don't Camel Case Localization Endpoint 2020-09-05 00:38:22 -04:00
geogolem
b6f2afb212 Fixed: IsAvailable not Right for minAvailability = InCinemas (#4921)
* if minimumAvailability is set to InCinemas
InCinemas has no value but physical/digital release dates
are known and passed, movie would be marked as Not Available
When it should be Missing.

This resolves https://github.com/Radarr/Radarr/issues/4920

remove comment

* add the tests
2020-09-05 00:16:31 -04:00
nitsua
3a7b48825d Another translation update 2020-09-04 23:04:00 -04:00
Qstick
0d7bf98efb Translated using Weblate (Italian) [skip ci]
Currently translated at 41.2% (270 of 654 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2020-09-05 02:20:17 +00:00
Florian
ded8c9ea3e Translated using Weblate (French) [skip ci]
Currently translated at 68.6% (449 of 654 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-09-05 02:20:16 +00:00
elChapoSing
aeb7d79101 Translated using Weblate (French) [skip ci]
Currently translated at 68.6% (449 of 654 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-09-05 02:20:16 +00:00
Qstick
e45f0ad5fc Fixed: Don't Fail if User Tries Adding Existing Movie from Discovery 2020-09-04 22:09:26 -04:00
Qstick
87bf010c67 Fixed: Discovery overview description not hidden on mobile 2020-09-04 21:37:23 -04:00
bakerboy448
50142eea64 Readme Updates Part 1 (#4949) [skip ci]
* Update README.md

Add: Note that v0.2 is critical break/fix only
Fix: Clearify Docker Table
Remove: Feathub
Comment: Feature "* Scanning PreDB to know when a new release is available" Probably needs to be replaced
Add: Feature -  Importing movies from various online sources... "Trakt"
Remove: Planned Features
Change: Feature Request Link

* Update README.md
2020-09-04 18:04:28 -04:00
hotio
c26d25fdfb Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (654 of 654 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-09-04 10:45:47 +00:00
Qstick
bd85f78994 Translated using Weblate (Greek) [skip ci]
Currently translated at 12.2% (80 of 654 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/el/
2020-09-04 10:45:46 +00:00
Qstick
1ddb593ddd Translated using Weblate (Italian) [skip ci]
Currently translated at 33.6% (220 of 654 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2020-09-04 10:45:46 +00:00
jpalenz77
21899e7a43 Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (654 of 654 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-09-04 10:45:45 +00:00
elChapoSing
04ea182abb Translated using Weblate (French) [skip ci]
Currently translated at 67.8% (444 of 654 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-09-04 10:45:45 +00:00
geogolem
e033ce1eff New: Add OnDelete Notification to TraktConnection
to remove movies from Trakt Collection when they are removed from Radarr

Add OnDelete Notification to TraktConnection to remove movies from Trakt Collection when they are removed from Radarr

skip the deleteHandler if the delete Event was triggered for reason: Upgrade

change migration from 180 to 182 since 180 and 181 are already in plan
to be used

address comments regarding helpText for OnDelete
and move check for OnUpgrade deletion reason into trakt connection OnDelete handler

reuse TraktCollectMoviesResource for OnDelete
trakt api should just ignore the other properties anyway

add WithDefaultValue to migration

add unit test case for onDelete to

fix unit testcase for onDelete
2020-09-04 00:19:06 -04:00
Qstick
261e598c99 Translated using Weblate (Spanish) [skip ci]
Currently translated at 99.5% (651 of 654 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-09-04 03:55:29 +00:00
Qstick
38c7c60ad7 Translated using Weblate (French) [skip ci]
Currently translated at 55.9% (366 of 654 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-09-04 03:55:23 +00:00
nitsua
3548433a10 New: Add runtime format option in Settings > UI so users can choose between a mins view and h/m view 2020-09-03 22:51:33 -04:00
Qstick
361ffe353d New: Browse Lists from Discover Movies Page 2020-09-03 22:50:56 -04:00
faxity
54bcf9eed3 Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (653 of 653 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-09-03 07:57:16 +00:00
hotio
f6364fec1c Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (653 of 653 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-09-03 07:57:07 +00:00
ta264
7f8ebf41d6 Fixed: Error fetching paged records from API without a sort key
(cherry picked from commit 53f1857e6349fc4c674dbaec50b0dda681f073ae)
2020-09-02 16:40:17 +01:00
Mark McDowall
a9ee3d5bc5 Fixed: Importing completed downloads from NZBGet with post processing script failing
Fixes #2919
2020-09-02 06:35:53 +01:00
Mark McDowall
1dfe6eb6ed Fixed: Importing of completed download when not a child of the download client output path 2020-09-02 06:35:53 +01:00
Mark McDowall
92a0305740 Another path test fix 2020-09-02 06:35:53 +01:00
Mark McDowall
e610b74745 Fixed: Getting parent of UNC paths 2020-09-02 06:35:53 +01:00
reloxx
3f0903d8ab Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (653 of 653 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-09-01 21:02:39 +00:00
faxity
d474b487ec Translated using Weblate (Dutch) [skip ci]
Currently translated at 77.3% (505 of 653 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-09-01 14:25:31 +00:00
hotio
cdf1501cbd Translated using Weblate (Dutch) [skip ci]
Currently translated at 77.3% (505 of 653 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-09-01 14:25:31 +00:00
faxity
613f9a9cd8 Translated using Weblate (Dutch) [skip ci]
Currently translated at 69.0% (451 of 653 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-09-01 12:04:39 +00:00
hotio
eee75f630e Translated using Weblate (Dutch) [skip ci]
Currently translated at 69.0% (451 of 653 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-09-01 12:04:35 +00:00
TRaSH
cae169f4b8 Translated using Weblate (Dutch) [skip ci]
Currently translated at 69.0% (451 of 653 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-09-01 12:04:33 +00:00
angrycuban13
4f3948d36a Translated using Weblate (Spanish) [skip ci]
Currently translated at 64.0% (418 of 653 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-08-31 07:11:49 +00:00
Qstick
df18be2a4d Fixed: Don't fail if ldd doesn't exist 2020-08-30 14:37:55 -04:00
nitsua
be38ca4728 More Language string migration 2020-08-30 03:12:39 -04:00
nitsua
84e769b14e Fix: Remove title requirement in the API for adding movies when the TMDb is provided since that will over-ride the given title. 2020-08-29 17:06:16 -04:00
Qstick
0800029713 Fixed: Quality Profile group order no longer used when ordering results 2020-08-29 01:12:43 -04:00
Qstick
ab7bb610a6 Fixed: Fix Instances where DB MovieFileId Relationship is Screwy 2020-08-28 19:16:57 -04:00
Erick Ferreira
9a0f6cf931 Translated using Weblate (Portuguese) [skip ci]
Currently translated at 100.0% (323 of 323 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2020-08-28 15:33:23 +00:00
Qstick
658f6922c2 Fixed: Use Proxy for MediaCovers and Metadata (#4916)
[common]

Co-authored-by: Soroush <soroush@falahati.net>
2020-08-26 23:01:34 -04:00
Taleoo
30fe718dcf Translated using Weblate (French) [skip ci]
Currently translated at 97.5% (315 of 323 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-08-26 18:35:31 +00:00
Qstick
5f8b953f6a Bump to FxCop 3.3.0 stable 2020-08-25 23:12:09 -04:00
nitsua
a28c5675ef Fix: Address issue when runtime is under 1 hour and it falls back to 12h.
New: Update time column on Movie > Index > Table to show hour minutes instead of only minutes
2020-08-25 00:22:12 -04:00
Qstick
df197d2e16 New: Movie Collection naming token 2020-08-24 20:57:45 -04:00
Qstick
4d193b2279 Fixed: Fix Movies, Lists with Invalid Profile on Migration 2020-08-23 21:51:15 -04:00
Qstick
eff03a7d2c Fixed: Don't blow up if a tmdbid not in DB is asked for on AllMovie Endpoint 2020-08-23 21:10:25 -04:00
Qstick
2cbeefba6e Update Donate Link in MoreInfo.js 2020-08-23 17:04:49 -04:00
jpalenz77
0d7b48d48a Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (323 of 323 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-08-23 17:33:21 +00:00
Erick Ferreira
70c057f20f Translated using Weblate (Portuguese) [skip ci]
Currently translated at 100.0% (323 of 323 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pt/
2020-08-22 16:33:28 +00:00
jpalenz77
b342dc7ca0 Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (323 of 323 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-08-22 16:33:24 +00:00
reloxx
d8ff3a62ea Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (323 of 323 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-08-22 16:33:24 +00:00
Qstick
363ff7df3c Remove Mono 5.8 from Build Tests [skip ci] 2020-08-22 00:50:57 -04:00
Qstick
fa3914c36a Switch Automation to Chrome for Test Speed 2020-08-22 00:47:07 -04:00
angrycuban13
aba9cedb78 Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (323 of 323 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-08-21 08:42:40 +00:00
Qstick
197f064fd5 Cache Yarn on Azure 2020-08-20 23:11:13 -04:00
Qstick
acd167e3ff Disable stylecop for backend build on azure
Co-Authored-By: ta264 <ta264@users.noreply.github.com>
2020-08-20 23:11:13 -04:00
Qstick
60ff140e7f Change GeckDriver Package 2020-08-20 23:11:13 -04:00
ta264
fcea6d23b0 Add omnisharp.json to enable analyzers and editorconfig support 2020-08-20 23:11:13 -04:00
ta264
1250c3db92 Remove duplicate settings from root .editorconfig 2020-08-20 23:11:13 -04:00
Qstick
ee225d9d85 Remove Unused Usings 2020-08-20 23:11:13 -04:00
Qstick
ec752f8ab3 New: Ruleset to Editorconfig 2020-08-20 23:11:13 -04:00
hotio
a8e31896e3 Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (323 of 323 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-08-21 00:39:36 +00:00
angrycuban13
1daa1f9daf Translated using Weblate (Spanish) [skip ci]
Currently translated at 99.6% (322 of 323 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-08-21 00:38:27 +00:00
jpalenz77
9d79a28655 Translated using Weblate (Spanish) [skip ci]
Currently translated at 99.6% (322 of 323 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-08-21 00:38:26 +00:00
Qstick
665a5c89c2 Try to fix windows automation tests 2020-08-20 20:11:56 -04:00
angrycuban13
f7bebbaaeb Translated using Weblate (Spanish) [skip ci]
Currently translated at 86.0% (278 of 323 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-08-20 07:48:15 +00:00
Qstick
04b84e4931 More Translations 2020-08-19 23:32:49 -04:00
Qstick
e4d033d0a7 New: Reprocess Language in Manual Import after Movie Selection 2020-08-19 22:35:30 -04:00
Qstick
9c85482b9c Bump to dotnet 3.1.7 2020-08-19 22:26:09 -04:00
Qstick
ac7f6f8868 fixup! New: Allow Radarr List Sync by Source Tag 2020-08-19 21:37:15 -04:00
Qstick
56184905a9 New: Allow Radarr List Sync by Source Tag
Fixes #4826
2020-08-19 21:37:15 -04:00
ta264
5a1b82e195 Disable single instance check for integration tests
Causes a SIGABRT on mono 6.10 and 6.12 - double free or corruption
2020-08-19 19:01:24 +01:00
ta264
d92895381c Print log file on fail 2020-08-19 19:01:24 +01:00
ta264
f9f243a814 Actually fix musl integration tests 2020-08-19 19:01:24 +01:00
ta264
3c5e56919f Run integration tests in parallel 2020-08-19 19:01:24 +01:00
ta264
05e8de2b0a Revert "Cache integration test DB to avoid repeated migrations"
This reverts commit 456169b8d2.
2020-08-19 19:01:24 +01:00
Dtaggart
e2c0d83f20 New: Added silent notification option to telegram 2020-08-18 21:31:18 -04:00
ta264
c96f29f1e8 Swap from dotnet vstest to dotnet test
(cherry picked from commit c40f87ce2f3fc03acb9a3d73498e7861f5750b4b)
2020-08-18 11:38:47 +01:00
Qstick
c8de61df19 Fixed: Don't parse .ts files as Telesync
Fixes #4891
2020-08-17 22:51:10 -04:00
Qstick
7c5b2a299d Fixed: Allow fallback lanugages in tokens
Fixes #4889
2020-08-17 22:40:42 -04:00
Qstick
76804dfefb Fixed: Format Errors from AudioChannel formatter
Fixes RADARR-8
2020-08-16 23:43:21 -04:00
ta264
ed2568187e Fixed: Shared serializer in ProviderRepository
Some caching happens in the serializer settings so best not to
recreate each time

(cherry picked from commit d2dcc45492)
2020-08-16 21:11:29 -04:00
Mark McDowall
f1bb8eeb8e Fixed: Long relative path when selecting episodes in Manual Import hiding buttons
(cherry picked from commit a206a5714e393b32e9a921f8d2413518f17d2b00)
2020-08-16 14:46:07 -04:00
Qstick
547c044dc6 Fix namespace for StringConverter 2020-08-16 01:19:23 -04:00
Qstick
0ef9d28a73 Fixed: Possible nullRef when setting IndexerFlags in TorznabParser 2020-08-16 01:14:47 -04:00
Qstick
ed76709b7f Simplify FindDownloadId to remove inaccessable code paths 2020-08-16 01:09:33 -04:00
nitsua
154092b921 Fix issue with the table stretching on the Movie > Details > Search when the Title is extremely long 2020-08-16 00:49:33 -04:00
Qstick
28177eb042 New: Use release quality source if not in downloaded file and resolution matches
Co-Authored-By: taloth <taloth@users.noreply.github.com>
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-08-16 00:49:16 -04:00
Qstick
a6d509c871 Fixed: Possible Null Ref in Old API 2020-08-16 00:33:49 -04:00
Qstick
69f4f1c168 Fxed: Manual Import Movie filter error due to Fuse Worker updates 2020-08-15 22:38:19 -04:00
Qstick
79a96bb43f Lazy Loading fuse-worker and fixed some potential timing issues
Fixes #4765
Fixes #4766

Co-Authored-By: taloth <taloth@users.noreply.github.com>
2020-08-15 12:25:28 -04:00
Qstick
39a1dbf1d1 Used ReflectionOnly and/or public types where possible to avoid loading related assemblies unnecessarily
Fixes #4763

Co-Authored-By: taloth <taloth@users.noreply.github.com>
2020-08-15 12:25:28 -04:00
Qstick
71ad2ec794 jsconfig for a bit of autocompletion and intellisense
Fixes #4762

Co-Authored-By: taloth <taloth@users.noreply.github.com>
2020-08-15 12:25:28 -04:00
Qstick
77036ac3ef Fixed: Posters not always showing when searching for movie
Fixes #4729
Fixes #4704
2020-08-15 12:25:28 -04:00
Taloth Saldono
863252d7e9 Allow inline markdown in the changelog for linking to wiki
(cherry picked from commit c73649b19b76b9032f9b5340590dbae783ae259f)
2020-08-12 23:10:40 -04:00
Qstick
00f631c623 New: Trakt connection for adding movies to collection 2020-08-12 23:06:03 -04:00
angrycuban13
431a3f6f8f Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (272 of 272 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-08-13 02:34:32 +00:00
Qstick
3aafc02687 Added update check early in startup if package requested
Fixes #4723
2020-08-12 22:28:57 -04:00
Qstick
c96ffafe50 Bump minimum Mono version to 5.18
Fixes #4722
2020-08-12 22:07:23 -04:00
nitsua
487546d6f3 Cherry pick from PR 4784 to disable autofocus on table scroller 2020-08-11 23:29:00 -04:00
Qstick
9f925a5dbd Additional logging when we have to callback on language parse 2020-08-11 20:38:21 -04:00
necrobear
d6a51f875c Translated using Weblate (Danish) [skip ci]
Currently translated at 41.9% (114 of 272 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/da/
2020-08-11 03:10:07 +00:00
jpalenz77
2575e7d96a Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (272 of 272 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-08-11 03:10:07 +00:00
angrycuban13
50b3a83cda Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (272 of 272 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-08-11 03:10:07 +00:00
reloxx
0f33c9b3bd Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (272 of 272 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-08-11 03:10:07 +00:00
Addison Babcock
814283cfc3 Fix typo in English localization. 2020-08-10 23:09:57 -04:00
angrycuban13
23e1341ef3 Translated using Weblate (Spanish) [skip ci]
Currently translated at 99.6% (271 of 272 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-08-10 02:11:11 +00:00
jpalenz77
5413c9357c Translated using Weblate (Spanish) [skip ci]
Currently translated at 99.6% (271 of 272 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-08-10 02:11:10 +00:00
Qstick
eb299bfb1f Fixed: Don't show other movies files in details UI on import/refresh 2020-08-09 21:55:06 -04:00
angrycuban13
d3697c0339 Translated using Weblate (Spanish) [skip ci]
Currently translated at 98.5% (268 of 272 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-08-09 19:42:20 +00:00
angrycuban13
9201b8e329 Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (272 of 272 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-08-09 18:08:00 +00:00
jpalenz77
f34ff4515a Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (272 of 272 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-08-09 18:08:00 +00:00
Qstick
5eeb42c3f6 New: Tooltip for Links on AddNew 2020-08-08 22:09:56 -04:00
Qstick
2d121e9857 Fixed: Entire row Link on Calendar Agenda Page 2020-08-08 22:09:56 -04:00
Qstick
3d25b99f63 Fixed: Unreleased color not showing in Calendar Agenda view 2020-08-08 22:09:56 -04:00
Qstick
30956edf52 Fixed: Don't Show Year in Discovery Overview if 0 2020-08-08 22:09:56 -04:00
Qstick
c940a03847 Fixed: Minor CSS Tweaks to Logo and Actions Buttons 2020-08-08 22:09:56 -04:00
Mark McDowall
21bc18dd2a Fixed: Long paths overflowing in movie history 2020-08-08 22:08:32 -04:00
nameproof
52da43aac4 Translated using Weblate (Swedish) [skip ci]
Currently translated at 100.0% (272 of 272 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2020-08-09 01:59:00 +00:00
foXaCe
29ea7aab9d Translated using Weblate (French) [skip ci]
Currently translated at 100.0% (272 of 272 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-08-09 01:59:00 +00:00
nitsua
236cdc9c2a Fix issue where updating a movie during a refresh would reset the saved changes
#4807
2020-08-08 16:02:45 -04:00
reloxx
4726d9daad Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (272 of 272 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-08-07 06:33:14 +00:00
Qstick
74c144b9c6 Added translation using Weblate (Hindi) 2020-08-06 21:48:00 +00:00
Mark McDowall
ff52b15154 Don't process queue item without details
(cherry picked from commit dffdd3377e198ca1ce511ec2752eb53c18c92cb3)

# Conflicts:
#	frontend/src/Store/Selectors/createQueueItemSelector.js
2020-08-06 17:40:42 -04:00
GigiPompieru
18607c8b7b Translated using Weblate (Romanian) [skip ci]
Currently translated at 100.0% (272 of 272 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ro/
2020-08-06 12:34:06 +00:00
Qstick
d41eed2e79 Fixed: Migration 170 setting incorrect trakt auth values 2020-08-05 16:54:14 -04:00
GigiPompieru
7f1761bec5 Translated using Weblate (Romanian) [skip ci]
Currently translated at 68.7% (187 of 272 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ro/
2020-08-05 17:33:17 +00:00
Micky
cff8dd5856 Translated using Weblate (Turkish) [skip ci]
Currently translated at 63.9% (174 of 272 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/tr/
2020-08-05 17:33:17 +00:00
nameproof
17cbeb7cab Translated using Weblate (Swedish) [skip ci]
Currently translated at 100.0% (272 of 272 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2020-08-05 17:33:16 +00:00
hotio
f952b7188d Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (272 of 272 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-08-05 17:33:16 +00:00
jpalenz77
16cd7dd836 Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (272 of 272 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-08-05 17:33:15 +00:00
foXaCe
1412125dfd Translated using Weblate (French) [skip ci]
Currently translated at 100.0% (272 of 272 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-08-05 17:33:14 +00:00
reloxx
6455117dbb Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (272 of 272 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-08-05 17:33:14 +00:00
Qstick
a29de48e64 Fixed: Block Video Extras from Overriding Movie File 2020-08-05 02:21:16 -04:00
Qstick
43d6b404f5 Fixed: Don't automatic import if year mismatch
Fixes #3006
2020-08-05 02:21:16 -04:00
Qstick
e3fb000226 Fixed: Use Translations in Search Criteria Map
Fixes #4794
2020-08-05 02:21:16 -04:00
nitsua
9cb3ff238b New: Added new custom filters for Not in Last/Next for date filters (#4816)
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-08-04 08:11:32 -04:00
Qstick
97980fe139 Fixed: LogLevel not persisting on v0.2 > 3 migration 2020-08-03 16:55:26 -04:00
Qstick
ec15885680 Fixed: Deleting empty folders on upgrade
Fixes #4787
Fixes SENTRY RADARR-1F
2020-08-03 02:51:10 -04:00
Qstick
695297435e Fix SystemTime Fixture Failure 2020-08-03 02:38:49 -04:00
Qstick
1a9d7c3c28 Fixed: IOE when multiple movies have same ExtraFile relative paths
Fixes RADARR-15
2020-08-03 02:09:57 -04:00
GigiPompieru
94ec28ac1e Translated using Weblate (Romanian) [skip ci]
Currently translated at 64.9% (176 of 271 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ro/
2020-08-03 05:29:44 +00:00
nameproof
a4155e0416 Translated using Weblate (Swedish) [skip ci]
Currently translated at 100.0% (271 of 271 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2020-08-03 05:29:44 +00:00
jpalenz77
0884361df2 Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (271 of 271 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-08-03 05:29:44 +00:00
Florian
09bea395ac Translated using Weblate (French) [skip ci]
Currently translated at 100.0% (271 of 271 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-08-03 05:29:44 +00:00
foXaCe
25d4704e6d Translated using Weblate (French) [skip ci]
Currently translated at 100.0% (271 of 271 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-08-03 05:29:44 +00:00
reloxx
f0d8c7c187 Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (271 of 271 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-08-03 05:29:44 +00:00
Mark McDowall
3766e0eba9 New: Show health warning if system time is off expected time
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-08-03 01:26:30 -04:00
nitsua
f39824cb9c Add changes related to lint & importing movies
Fixes #4768
2020-08-02 20:10:12 -04:00
reloxx
ef80314219 Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (271 of 271 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-08-02 21:56:56 +00:00
nitsua
e232fa2c9c Fix issue with headers on movie index table view not being aligned
Fixes: #4800
2020-08-02 12:08:07 -04:00
Qstick
41fc244bda Don't even call update if list cleaning disabled 2020-08-02 02:03:47 -04:00
Jorgen1040
0bb5dfc3d2 Update default Jackett torznab link to api v2.0 2020-08-02 01:50:16 -04:00
nitsua
67b4182f4d Fixed: OriginalTitle in the API using the Title
New: Change tooltip (title) on movie details to original title
2020-08-02 01:48:32 -04:00
Qstick
27844d9f5c Fixed: Don't create empty movie folder if delete empty folders is enabled
Fixes #4782
2020-08-02 01:47:18 -04:00
Qstick
9b052101ab Fix broken build due to NetImportSearchService tests 2020-08-02 01:06:35 -04:00
Qstick
b2b0efe4ed Fixed: Single Item Exclude Broken on Discovery View 2020-08-02 01:02:36 -04:00
Qstick
b25e42c456 New: Redo Notification Triggers UI (From Lidarr) 2020-08-02 00:43:42 -04:00
Qstick
5c7e28a280 Fixed: Typo in Mapping Message 2020-08-02 00:31:42 -04:00
Qstick
bd9a93eceb Fixed: Don't blow up on batch list add if validation failure 2020-08-01 23:32:23 -04:00
Qstick
df75027e3c Bypass older mpeg-4 encoders 2020-08-01 23:12:06 -04:00
nitsua
c950006db5 Fixed: Spacing for the external links icon and width when search showing (#4797) 2020-08-01 18:23:54 -04:00
Juan
fabf9ba0e8 Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (271 of 271 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-08-01 10:42:30 +00:00
nitsua
c07b370569 Fixed: Issue with link/tags icon to drop a line on movie details mobile (#4667)
#4523
2020-08-01 02:47:34 -04:00
Qstick
ff7e929387 Fixed: Return correct language for French and Portuguese
Fixes #4612
2020-08-01 01:07:39 -04:00
Mark McDowall
da1210c6a6 Fixed: Show more information in UI when testing SAB fails in some cases 2020-08-01 00:36:06 -04:00
Qstick
2a1ebe54b3 Fixed: Quality Sorting in Manual Import
Fixes #4713

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-08-01 00:09:53 -04:00
Qstick
65b8be16dd Fixed: Details for episode history flashing on mobile devices
Fixes #4699

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-07-31 23:50:57 -04:00
Qstick
84c79924b7 New: Improve Chinese language detection
Fixes #4697

Co-Authored-By: taloth <taloth@users.noreply.github.com>
2020-07-31 23:48:46 -04:00
Qstick
62d2c8e1f3 Fixed: Update deleted movie health after refreshing movies
Fixes #4694

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-07-31 23:39:53 -04:00
Qstick
e6c92c05ec Improved some log messages
Fixes #4693

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-07-31 23:39:53 -04:00
GigiPompieru
bb02b9d83a Translated using Weblate (Romanian) [skip ci]
Currently translated at 44.1% (94 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ro/
2020-08-01 03:07:01 +00:00
Micky
7cf7baf637 Translated using Weblate (Turkish) [skip ci]
Currently translated at 81.6% (174 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/tr/
2020-08-01 03:07:01 +00:00
Marketos Damigos
f8908936d3 Translated using Weblate (Greek) [skip ci]
Currently translated at 31.9% (68 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/el/
2020-08-01 03:07:01 +00:00
Juan
c3307570cc Translated using Weblate (Spanish) [skip ci]
Currently translated at 100.0% (213 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-08-01 03:07:01 +00:00
reloxx
011a80b237 Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (213 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-08-01 03:07:01 +00:00
Qstick
82b546999a More Frontend Translation 2020-07-31 23:05:21 -04:00
Taloth Saldono
71492d4c6f Fixed: Added glusterfs to known network drive filesystems so it shows up in System 2020-07-31 22:06:27 +01:00
Qstick
0f6fca8340 Fixed: Recognize jpeg and jpg extra images as Kodi metadata 2020-07-30 23:24:35 -04:00
Qstick
8ddaf348f1 Fixed: Pass AdvancedSettings to Metadata Fields 2020-07-30 23:05:58 -04:00
GigiPompieru
55e6605ed8 Translated using Weblate (Romanian) [skip ci]
Currently translated at 23.0% (49 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/ro/
2020-07-30 21:13:36 +00:00
Micky
d736635ae4 Translated using Weblate (Turkish) [skip ci]
Currently translated at 7.5% (16 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/tr/
2020-07-30 21:13:36 +00:00
Alessandro Berrone
a977c5148e Translated using Weblate (Italian) [skip ci]
Currently translated at 100.0% (213 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/it/
2020-07-30 21:13:36 +00:00
Qstick
06d200f078 Update PushoverProxy.cs 2020-07-30 14:42:49 -04:00
ta264
079b7a7cb7 Added translation using Weblate (Romanian) 2020-07-30 06:26:27 +00:00
nitsua
c11928ffb8 New: Add + Search on Discovery Bulk Add (#4657)
#4614
2020-07-29 23:51:24 -04:00
Qstick
b7a617bc4e Cleanup yarn.lock file, bump loadash 4.17.19 2020-07-29 23:32:19 -04:00
nitsua
d2949b31ab Fixed: Issue with containers not matching posters on cast/crew tabs (#4656)
#4652
2020-07-29 22:01:58 -04:00
nitsua
c9324bc357 New: Added more external links to add movie (#4603) 2020-07-29 21:33:49 -04:00
nitsua
ca8f4acdaa Fixed: icon stacking on the movie details page (#4658)
#4653
2020-07-29 16:00:44 -04:00
Qstick
7eedb7fbec New: Reject Multi-Part Files from Import - Take 2 (#4644)
* New: Reject Multi-Part Files from Import - Take 2

* fixup! Windows is not the only OS :)
2020-07-28 14:47:56 -04:00
Qstick
71e715f954 Import Sorting Lint for Frontend (#4655) 2020-07-28 14:47:25 -04:00
ta264
b92414d657 Add libMonoPosixHelper for musl-arm64 2020-07-27 21:37:24 +01:00
ta264
85fda91604 Fix migration 178 to cope with leading/trailing slashes 2020-07-28 06:00:47 +01:00
ta264
7722c50603 New: Musl (alpine linux) compatibility 2020-07-27 18:17:47 +01:00
ta264
75eb4e8519 Move runtime copy into a separate target 2020-07-27 18:17:47 +01:00
ta264
84134eb6ce Restore support for mono 5.8 2020-07-27 18:17:47 +01:00
nitsua
765ca89810 New: Added external links to Discovery (#4598)
#2691
2020-07-27 10:30:49 -04:00
nitsua
9ce58be385 New: Added external links to movie index (#4600)
#403
2020-07-27 10:29:19 -04:00
Qstick
33cd699eac Lint issue in Tooltip.css 2020-07-26 23:23:55 -04:00
Qstick
c34a5c0c3d Fixed: Tooltip goes off screen for Mobile 2020-07-26 23:02:25 -04:00
angrycuban13
80ae55920b Translated using Weblate (Spanish) [skip ci]
Currently translated at 74.6% (159 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-07-26 09:20:08 +00:00
Austin Best
eb0be34924 Remove presets from nyaa since it changes so often 2020-07-26 01:43:03 -04:00
Qstick
483c2ae724 Add MovieId and Language Index to Movie Translations Table 2020-07-26 01:38:57 -04:00
Qstick
e2165eb51b New: Use Translations for Movie Mapping 2020-07-26 01:38:57 -04:00
Qstick
6d4be67e36 Rename CleanSeriesTitle to CleanMovieTitle 2020-07-26 01:38:57 -04:00
Qstick
b6c75e7e1b Fixed: Skip Flat Extra Files (Plex Naming) on Import
Fixes #4630
2020-07-26 01:38:57 -04:00
Qstick
c84a9d6612 Fixed: Include 'Sample' Directory in Ignored 2020-07-26 01:38:57 -04:00
Qstick
c04f26b7f1 Fixed: Radarr List not Logging List Status Failures 2020-07-26 01:36:50 -04:00
Qstick
16c912ffea Fixed: Don't Clean if any List Failures
Fixes #4648
2020-07-26 01:32:18 -04:00
Qstick
8871864bc0 Really fix Certification Token 2020-07-25 03:13:22 -04:00
Qstick
ea7c08d219 Fixed: Don't die in FileNameBuilder when Certification is Null 2020-07-25 02:32:29 -04:00
Qstick
86a75e2641 Update Swagger defs to OAPI3.0 2020-07-25 00:59:00 -04:00
Qstick
b077d1c6cf Push Swagger definitions to main repo [skip ci] 2020-07-25 00:39:10 -04:00
nameproof
3a07720587 Translated using Weblate (Swedish) [skip ci]
Currently translated at 100.0% (213 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2020-07-24 04:24:51 +00:00
Qstick
fabf758230 Update en.json [skip ci] 2020-07-24 00:24:47 -04:00
Qstick
67ea64fa5e Fixed: Remux2160p Showing in HD720/1080 Default Profile 2020-07-24 00:16:42 -04:00
Qstick
7a19d0a88c Revert "New: Reject Files at Import if they are Multi-Part for now"
This reverts commit bed4604e62.
2020-07-23 22:36:36 -04:00
nameproof
e88b794ce0 Translated using Weblate (Swedish) [skip ci]
Currently translated at 100.0% (213 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2020-07-24 01:10:41 +00:00
Qstick
0a414f37dc Use Radarr API change feed for changed movies (#4629)
* Use Radarr API change feed for changed movies

* Adjust StartTime for cache overlap
2020-07-23 20:06:42 -04:00
nameproof
5b38edfff9 Translated using Weblate (Swedish) [skip ci]
Currently translated at 100.0% (213 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2020-07-24 00:04:46 +00:00
Marketos Damigos
09976c6afe Translated using Weblate (Greek) [skip ci]
Currently translated at 17.3% (37 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/el/
2020-07-24 00:04:46 +00:00
reloxx
bca7a38003 Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (213 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-07-24 00:04:44 +00:00
ta264
1934a248f8 Drop mono 6.8 tests, add 6.12 2020-07-22 16:25:03 +01:00
Qstick
bed4604e62 New: Reject Files at Import if they are Multi-Part for now 2020-07-22 08:07:08 -04:00
nameproof
deabc3aa9a Translated using Weblate (Swedish) [skip ci]
Currently translated at 100.0% (213 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2020-07-22 02:01:07 +00:00
sevospl
b5f173b018 Translated using Weblate (Polish) [skip ci]
Currently translated at 10.7% (23 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/pl/
2020-07-22 02:01:03 +00:00
jpalenz77
69bd3f7d6d Translated using Weblate (Spanish) [skip ci]
Currently translated at 74.6% (159 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-07-22 02:01:01 +00:00
reloxx
947ec567ba Translated using Weblate (Spanish) [skip ci]
Currently translated at 74.6% (159 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-07-22 02:01:00 +00:00
foXaCe
12414e0bde Translated using Weblate (French) [skip ci]
Currently translated at 100.0% (213 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-07-22 02:00:59 +00:00
reloxx
012cb66b45 Translated using Weblate (French) [skip ci]
Currently translated at 100.0% (213 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-07-22 02:00:54 +00:00
reloxx
8ce223d01a Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (213 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-07-22 02:00:52 +00:00
Qstick
158a06adbf Add Test Fixture for Migration 154 2020-07-21 19:25:10 -04:00
Qstick
5765961c3a Fixed: Language Migration Assigning 'Any' to MovieFiles and History 2020-07-21 19:25:10 -04:00
ta264
539f495dbe Fixed: SqliteSchemaDumper with separate Primary Key clause 2020-07-20 20:35:17 -04:00
Qstick
23349c1063 Delete appveyor.yml 2020-07-20 19:24:20 -04:00
Austin Best
c2317e3567 Fix: Movie index legend not respecting color blind setting
#4616
2020-07-20 10:49:30 -04:00
ta264
26409c9d36 Try to fix service test 2020-07-19 16:17:33 -04:00
ta264
8799da55d3 New: Use new metadata server for imdb/stevenlu lists
Fixes #4306
2020-07-19 16:17:33 -04:00
hotio
fa60c28e9c Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (213 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-07-19 17:55:06 +00:00
hotio
175b3de373 Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (213 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-07-19 17:53:03 +00:00
hotio
957c7a9266 Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (213 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-07-19 17:46:13 +00:00
hotio
a4cd52d931 Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (213 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-07-19 17:43:33 +00:00
hotio
687a055a61 Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (213 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-07-19 17:31:06 +00:00
hotio
54299694ef Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (213 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-07-19 17:27:59 +00:00
TRaSH
bd06c756b7 Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (213 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-07-19 16:56:14 +00:00
hotio
b69ed9fd11 Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (213 of 213 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-07-19 16:56:14 +00:00
nameproof
8e1cb149fa Translated using Weblate (Swedish) [skip ci]
Currently translated at 56.1% (91 of 162 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2020-07-19 16:01:08 +00:00
Qstick
ef879c3a91 Test Weblate Hook 2020-07-19 12:00:57 -04:00
Qstick
9603f9fdb5 More Translations, Column Headings, Settings page 2020-07-19 11:42:03 -04:00
hotio
fc7091ef0c Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (162 of 162 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-07-19 13:31:19 +00:00
hotio
d37fde5f06 Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (162 of 162 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-07-19 13:20:25 +00:00
hotio
575dbd18d9 Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (162 of 162 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-07-19 12:53:32 +00:00
hotio
2a4f959a87 Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (162 of 162 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-07-19 12:44:15 +00:00
hotio
b7222c2c55 Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (162 of 162 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-07-19 12:35:09 +00:00
hotio
47404783c2 Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (162 of 162 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-07-19 12:24:43 +00:00
nameproof
29f2543d57 Translated using Weblate (Swedish) [skip ci]
Currently translated at 46.2% (75 of 162 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2020-07-19 12:23:59 +00:00
jpalenz77
f8070f0a8e Translated using Weblate (Spanish) [skip ci]
Currently translated at 96.9% (157 of 162 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-07-19 12:23:59 +00:00
foXaCe
818b330ece Translated using Weblate (French) [skip ci]
Currently translated at 38.8% (63 of 162 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/fr/
2020-07-19 12:23:59 +00:00
reloxx
4fa1fbe23c Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (162 of 162 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-07-19 12:23:59 +00:00
hotio
2919b282f6 Translated using Weblate (Dutch) [skip ci]
Currently translated at 100.0% (162 of 162 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-07-19 12:23:59 +00:00
Qstick
2390ab98fa New: Reject File if Sample Check Indeterminate 2020-07-19 01:45:23 -04:00
Qstick
1c85bd96f8 Bump .net Core 3.1.6 2020-07-19 01:16:25 -04:00
Qstick
df8023bf02 Add Translation % Badge to README [skip ci] 2020-07-19 01:03:35 -04:00
nameproof
9109280ae2 Translated using Weblate (Swedish) [skip ci]
Currently translated at 3.0% (5 of 162 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/sv/
2020-07-18 15:29:26 +00:00
jpalenz77
a59ea1f8d2 Translated using Weblate (Spanish) [skip ci]
Currently translated at 41.9% (68 of 162 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/es/
2020-07-18 15:29:26 +00:00
Gabriel Patzleiner
60ebafc940 Translated using Weblate (German) [skip ci]
Currently translated at 100.0% (162 of 162 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/de/
2020-07-18 15:29:26 +00:00
hotio
ac1956f5ad Translated using Weblate (Dutch) [skip ci]
Currently translated at 80.2% (130 of 162 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-07-18 15:29:26 +00:00
TRaSH
2242f2aba3 Translated using Weblate (Dutch) [skip ci]
Currently translated at 80.2% (130 of 162 strings)

Translation: Servarr/Radarr
Translate-URL: https://translate.servarr.com/projects/radarr/radarr/nl/
2020-07-18 15:29:26 +00:00
Qstick
8010030ca1 Simplify Readme [skip ci] 2020-07-18 01:50:02 -04:00
Qstick
4ac18dd023 Fixed: In some cases MinVotes is int from v0.2, causes migration failure 2020-07-18 00:09:08 -04:00
Qstick
c75362ecc8 Fixed: Donate Link references old URL 2020-07-17 23:37:46 -04:00
Weblate Admin
bf061f2a96 New: Add All Supported Languages 2020-07-17 23:37:46 -04:00
Qstick
c6367112c2 New: German Translation asset
Co-Authored-By: Gabriel Patzleiner <gabriel.patzleiner@gmail.com>
2020-07-17 23:37:46 -04:00
Qstick
074b49fa8c New: Translation support for UI Sidebar, Search Input, Base Menus 2020-07-17 23:37:46 -04:00
Qstick
bfc0361784 New: Translations support for Health Checks 2020-07-17 23:37:46 -04:00
Qstick
200c7487b9 New: English Base Translation asset 2020-07-17 23:37:46 -04:00
Qstick
ffff528ccb New: Localization framework 2020-07-17 23:37:46 -04:00
austinwbest
5389c86cde New: Added support for AHD User Release indexer flag (#4599)
- Added missing AHD_Internal to the decision maker to increase the score for it

Fixes #3770
2020-07-17 00:01:22 -04:00
Qstick
3a0aa51cbf Fixed: Nordic shuldn't translate to Norwegian Audio Language
Fixes #1352
2020-07-16 22:31:24 -04:00
Qstick
5eb7a83996 Don't fail test if there are no builds with changes shown 2020-07-16 21:48:55 -04:00
Qstick
bd5bb2a63c Fixed: QualitySelect defaults to Profile instead of NoChange on Editor 2020-07-15 23:27:35 -04:00
austinwbest
d7e0625be7 Fixed: Allow for unchecking empty folder options if both were checked
Fixes #4556
2020-07-14 23:26:29 -04:00
Qstick
a22c13bfa3 Remove Development.md [skip ci] 2020-07-13 15:31:50 -04:00
Qstick
3f39c8d1bd Fix Language Aggregation debug Log statement 2020-07-11 00:43:32 -04:00
Qstick
1dbb664ef6 New: Digital Releases on Calendar, Misc Other Calendar Fixes
Fixes #4582
2020-07-11 00:35:02 -04:00
Qstick
0b7067cf9c Fixed: Typo/unclear text in backup retention
Co-Authored-By: Ryan <simplyryan@users.noreply.github.com>
2020-07-10 23:10:25 -04:00
Qstick
d8dc35913d Fixed: Console Warning on MovieTitlesRow due to incorrect variable type 2020-07-10 23:08:11 -04:00
Qstick
027a388157 Fixed: Block deleteEmpty and createEmpty both on in UI 2020-07-10 23:01:08 -04:00
Qstick
a552389ee8 Fixed: Don't duplicate languages from MediaInfo 2020-07-10 22:02:55 -04:00
Qstick
f8f58c2eda Fixed: Refresh from IndexItem and MovieDetails doesn’t refresh single (#4584)
* Fixed: Refresh from MovieDetails doesn’t refresh single

* Fixed: Refresh from index Item should be sing

* Fixed: Detection on running refresh on MovieDetails
2020-07-10 07:39:52 -04:00
Qstick
113f5a9bfe Fixed: MovieFile Language Select Modal can show Unknown 2020-07-10 07:29:25 -04:00
Qstick
9d913899ca Fixed: Bad RootPath Added on List Add from Collection 2020-07-10 00:14:16 -04:00
Qstick
c9a9babdf3 Fixed: Styling of Collection name on MovieDetail view 2020-07-09 22:13:11 -04:00
Qstick
6be1ae0120 Fixed: Alignment of dates in Release Date Tooltip 2020-07-09 22:06:07 -04:00
Qstick
ac79c51196 New: Monitor Collections from Movie Details Page 2020-07-09 21:43:21 -04:00
Qstick
9bf50d4493 Fixed: Better NetImport Validation (Don't Allow Bad ProfileIds) 2020-07-09 21:26:57 -04:00
Qstick
aa6c8f493e New: Refresh Selected in Editor Mode 2020-07-09 13:59:59 -04:00
Qstick
135251ec31 More descriptive validation error for Movie Path 2020-07-09 10:41:17 -04:00
Qstick
c51fe81f41 Fixed: Don't show percentage text on Fat progress bar 2020-07-09 10:40:58 -04:00
Qstick
7d22696b1f New: Show Digital Release on Poster view when Sorted By 2020-07-08 09:30:24 -04:00
Qstick
d791f3f67f Fixed: Digital before Physical for normal release order 2020-07-08 09:28:42 -04:00
Qstick
74539d2025 Fixed: Search Failing due to Null Titles
Fixes #4578
2020-07-08 09:24:40 -04:00
Qstick
075f024cec Cleanup Solution Unused Usings 2020-07-08 01:24:06 -04:00
Qstick
3a50152b21 New: Digital Release Dates in UI 2020-07-08 01:24:06 -04:00
Qstick
88bda6bcb6 New: Use MediaInfo to Augment Languages 2020-07-08 01:24:06 -04:00
Qstick
10322a1867 New: Aphrodite Language Improvements 2020-07-08 01:24:06 -04:00
Qstick
965ed041ae Fixed: All Imports show as Multi due to duplicated langs 2020-07-06 09:15:46 -04:00
Qstick
2b5dc59a36 Fixed: All AHD x265 Encodes should be HDR
Fixes: #4386
2020-07-06 00:37:26 -04:00
Qstick
b82d636a8c Fixed: Don't make Editor call on initial page load 2020-07-04 22:31:13 -04:00
Qstick
5982731ef7 New: Search Selected from Movie Editor
Fixes #4130
2020-07-04 22:30:23 -04:00
Qstick
b97e6977fb New: Year column on Movie Index view 2020-07-04 21:59:54 -04:00
Qstick
98c4e63309 Fixed: Don’t Prioritize Flags over Protocol when Prefer Flags Enabled
Fixes #1814
2020-07-04 11:21:44 -04:00
Qstick
f37c7a9748 New: Swipe on Movie Details Page 2020-07-04 03:13:24 -04:00
Qstick
a08648272c Bump Yarn timeout to 2min 2020-07-03 23:54:02 -04:00
Qstick
0142c45210 Fixed: Multi Language lost on Import
Fixes #4313
2020-07-03 23:41:07 -04:00
Qstick
f073f0c35c Fixed Movie Details Tweaks
Fixes #4124
2020-07-03 23:09:48 -04:00
Qstick
b7cf6f49d0 Fixed: Move Links, Add Tags to Movie Detail
Fixes #4545
2020-07-03 22:04:58 -04:00
Qstick
347cd5982a New: Title and Year MovieIndex Filters 2020-07-03 21:24:38 -04:00
ta264
0a589c529f Fixed: Map dsm shared folder to full path in status (#797)
* Fixed: Map dsm shared folder to full path in status

* Add tests

* fix tests
2020-07-03 20:20:29 -04:00
Qstick
f29e7557dd Fixed: dispatchClearPendingChanges on some Settings Sections 2020-07-02 21:42:04 -04:00
Qstick
7f201c6677 Fixed: Mark "BAD" Nzbget Downloads as Failed
Fixes #3076
2020-07-02 21:10:47 -04:00
ta264
a77d43bd43 Fixed: size CF conditions are now exclusive on min, inclusive on max 2020-07-01 21:05:49 +01:00
Qstick
e18e074ee9 fixup FilterFiles mocks in various unit tests 2020-07-01 23:19:58 -04:00
Qstick
4f22d135d6 Fixed: Skip various Extras directories during scan
Fixes: #4487
2020-07-01 21:48:13 -04:00
Qstick
8f791853ad Fixed: Ignore location on UI header fuzzy search
Fixes #4558
2020-07-01 21:29:47 -04:00
ta264
e870fd5215 Fixed: Use originalFilePath in CF if scene name missing 2020-06-30 22:34:41 -04:00
Qstick
6706138fa0 New: Add Language Tests 2020-06-30 22:32:11 -04:00
Agneev Mukherjee
5ee2b10c2c Fixed: Updated icon for Apple Touch devices (#4518)
* Delete apple-touch-icon.png

* Updated icon
2020-06-29 23:05:58 -04:00
Qstick
ccb206aed1 New: Show Year in Header Search Results
Fixes: #4547
2020-06-29 22:57:22 -04:00
Qstick
cdd653bea9 Fixed: Show AltTitle or Tag if found by in search 2020-06-29 22:56:35 -04:00
Qstick
afada848c8 Change Missed http instances to https in HttpClientFixture 2020-06-29 22:01:32 -04:00
ta264
e09ca145d1 Fixed: False positive in remote path check with transmission
Correctly use the download directory when it's set
2020-06-29 10:24:52 +01:00
Qstick
a8deaf85c0 Fixed: Bootloop due to bad format args in AppFolderFactory
Fixes #4553
2020-06-28 23:08:59 -04:00
Qstick
f069801eba New: Ensure all unmapped folders are fetched when importing from a root folder
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>

#4548
2020-06-28 22:57:46 -04:00
Qstick
5edbe4200b fix lint issue in MetadataSettings.js 2020-06-28 11:55:49 -04:00
Qstick
5b6bef36f2 Refresh Yarn.lock, net core 3.1.5 2020-06-28 11:49:52 -04:00
Qstick
79c35fabfa New: RemotePathMapping HealthCheck
Co-Authored-By: ta264 <ta264@users.noreply.github.com>
2020-06-27 18:47:18 -04:00
Qstick
ee9d35e55f UI fixups from Lidarr 2020-06-27 18:13:31 -04:00
Qstick
c0bb1392e2 Fixed: Don't Show NoMovie on Cal if Movies are Loading
Fixes #4499
2020-06-25 21:53:34 -04:00
Qstick
8c84047a56 Update NuGet.config 2020-06-24 21:03:02 -04:00
Qstick
0e563db10b Fixed: Typo in exclude modal 2020-06-24 10:55:50 -04:00
Doug Krahmer
3a7b1741d9 Fixed: Skip sample check for DVD image files (iso, img, m2ts) (#4531)
* Add support for video files with non-lowercase extensions.

* Fix file scan ignoring DVD image files (iso, img, vob, m2ts)
Always allow DVD and Bluray file types without analysis, instead of detecting as 0 runtime.

* Use extensions to detect DVD image files instead of Quality enum
Add unit tests

Co-authored-by: Doug Krahmer <doug.git@remhark.com>
2020-06-23 21:41:16 -04:00
Qstick
8687dbda1d Fixed: Don't fail lookup if no Recommendations for a result 2020-06-21 22:14:31 -04:00
Qstick
c896833607 Fixed: Don't fail lookup on some IMDB Searches
Fixes #4533
2020-06-21 22:11:45 -04:00
Qstick
3a7c4b2cfe Cleanup Episode References 2020-06-21 21:44:05 -04:00
Qstick
a946d5886c Use HTTPS for httpbin tests 2020-06-21 15:13:38 -04:00
Qstick
dfba9e9b4d Fixed: Update Credits during refresh instead inserting old record 2020-06-21 14:54:38 -04:00
Qstick
28e6e4ed7b Update HttpClientFixture.cs 2020-06-20 16:59:05 -04:00
Qstick
22d0f9ffef New: Remove Anime Category for Newznab/Torznab 2020-06-20 15:55:31 -04:00
Qstick
7120a20984 Fixed: Don't hang on parsable, non-matched releases 2020-06-20 15:39:11 -04:00
Qstick
40b5702ca6 Fixed: Downloads with un-parsable releases stuck on import 2020-06-16 23:18:46 -04:00
Qstick
3c7f80612d Fixed: Sorting of queue by movie title when unknown items are included
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-06-16 22:14:40 -04:00
Qstick
2328b384e2 Fixed: Exception thrown when marking download as complete
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-06-16 22:13:03 -04:00
Qstick
566fa8b132 Fixed: Displayed root folder path truncated when adding a movie with a long title
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-06-16 22:00:49 -04:00
Qstick
8d57c5497a Update wiki links that reference Sonarr/Lidarr
Fixes #4516
2020-06-16 21:58:39 -04:00
Qstick
62b3ed5d48 Fixed: Speed Up List Fetch 2020-06-14 17:42:08 -04:00
Qstick
6802bfc736 Fixed: List UI Revamp 2020-06-14 17:42:08 -04:00
Qstick
2d59192a9e New: Movie Discovery/Recommendations Reworked 2020-06-14 17:42:08 -04:00
Taloth Saldono
3e3b2a7784 Revised webpack bundling and updated worker loading, turned inline worker on by default. 2020-06-10 21:50:14 -04:00
Qstick
9c3b4e3025 Fixed: Update Fuse to allow search over 32 without crash 2020-06-10 21:49:52 -04:00
Qstick
b9c59e5482 Fixed: Collection not stored for Movies 2020-06-10 14:06:24 -04:00
Qstick
1849ce4190 Additional logging when trying to complete tracked downloads
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-06-09 00:06:31 -04:00
Taloth Saldono
021e7b8163 Log contents on api errors during tests. 2020-06-08 23:53:17 -04:00
Arthur Bols
4b25ef6deb New: Removed chown and simplified chmod options for linux/osx
Closes #3760
Closes #3752
2020-06-08 23:44:57 -04:00
Qstick
30def1f53a New: Multiple Recipients on Email Notifications (Also CC, BCC) 2020-06-07 18:21:11 -04:00
Gabriel Patzleiner
57961df1df Fixed: #4394 parsing multi language from ReleaseGroup name 2020-06-07 16:48:25 -04:00
Gabriel Patzleiner
40b630ef10 Fixed: Updated GetSceneName. It will clean the ReleaseTitle now.
Added some SceneChecker tests
2020-06-07 16:48:25 -04:00
Gabriel Patzleiner
e59257f457 Fixed: correctly replacing SimpleReleaseTitle by A Movie. This resolves a lot of cases where a wrong language or edition has been parsed because it has parsed a part of the movie title (also applies to custom formats parsing) 2020-06-07 16:48:25 -04:00
Gabriel Patzleiner
a6c2b2e039 Fixed: some parsing issues (Add dot after "Dr" and fixed movies starting with an edition tag to match the edition (e.g. Uncut Gems (2019)) and added some tests for them 2020-06-07 16:48:25 -04:00
Gabriel Patzleiner
51de8f16fb New: Removed the whole lenient parsing and lenient mapping functionality 2020-06-07 16:48:25 -04:00
Gabriel Patzleiner
5f5391db47 Fixed: some releases not getting parsed correctly if lenient parsing is enabled.
It fixes releases that had some strings (especially editions) between the year and the language (The.Movie.2016.EXTENDED.German.720p...)
2020-06-07 16:48:25 -04:00
Gabriel Patzleiner
73eba0f95d Fixed: some Parser problems (Improved editions and German releases)
- Moved the ReportEditionRegex up because we use it in another 2 regexes (so it's not 3 times the same regex). Also added an optional bracket at the beginning.
- Added Recut to the edition regex
- The Regex for german and french tracker formats (ReportMovieTitleLenientRegexBefore) has been updated to support the same editions as the english versions, but the regex is only used if ParsingLeniency is set to Lenient. Should resolve a lot of cases for german releases where the movietitle wasn't parsed correctly before.
- Updated acronym method. Fixed wrong dots for "World War Z.", "World War Z. 2", but still supports "R.I.P.D.", "V.H.S. 2", "G.I. Joe" and "2 Tage in L.A."
- Added a lot of tests for this changes (there is a new test for german releases that works without lenient parsing, and another one that only works if lenient parsing is activated)
2020-06-07 16:48:25 -04:00
Qstick
1ef31e8094 Fixed: Visibility of NetImport Base Abstract Classes 2020-06-07 01:10:22 -04:00
Qstick
b1fd924188 New: List Status Checks/Backoffs 2020-06-07 01:10:22 -04:00
Qstick
d10e60587b fixup Sonarr stylecop issues 2020-06-07 01:01:01 -04:00
Taloth Saldono
88879e0db6 Fixed flaky test. 2020-06-07 00:46:18 -04:00
Taloth Saldono
2a9160f870 Added Plex url to cleanser 2020-06-07 00:45:26 -04:00
Qstick
64382e13a4 New: Allow Nested Movie Folders 2020-06-07 00:06:56 -04:00
dependabot[bot]
232682f109 Bump websocket-extensions from 0.1.3 to 0.1.4
Bumps [websocket-extensions](https://github.com/faye/websocket-extensions-node) from 0.1.3 to 0.1.4.
- [Release notes](https://github.com/faye/websocket-extensions-node/releases)
- [Changelog](https://github.com/faye/websocket-extensions-node/blob/master/CHANGELOG.md)
- [Commits](https://github.com/faye/websocket-extensions-node/compare/0.1.3...0.1.4)

Signed-off-by: dependabot[bot] <support@github.com>
2020-06-06 16:56:17 -04:00
Qstick
d07dd33a9e New: Upgrade sqlite to 3.32.1 and system.data.sqlite to 1.0.113
Co-Authored-By: ta264 <ta264@users.noreply.github.com>
2020-06-06 16:43:58 -04:00
Qstick
7adb358d1c Fixed: Speed up mass deletes from Movie Editor (#4463) 2020-06-04 23:35:02 -04:00
Qstick
913037c45e Fixed: Unknown Movie Releases stuck in ImportPending 2020-06-04 20:03:28 -04:00
Qstick
b00326424f Fixed: Add TMDB Collection Id to Kodi NFO
#4442
2020-06-03 22:35:19 -04:00
Qstick
67ff8d39da Fixed: DVDR Parsing as DVDRip
Fixes #4486
2020-06-03 22:18:07 -04:00
Qstick
13f3d0292c Fixed: Trim whitespace on Remote Mapping Add
Fixes #4481
2020-06-03 21:38:46 -04:00
Taloth Saldono
9ca291ecaf Cleanse remote IP Address from trace log file 2020-06-03 20:43:47 -04:00
Qstick
1fcb927b3b Revert conditional map to prevent validation failures in add service 2020-06-01 22:10:34 -04:00
Qstick
be9b2d9ebb New: Speed up list sync processing 2020-05-31 22:54:04 -04:00
Qstick
97ff509025 Fixed: Recognize 8 Digit IMDB in parsing/rss lists
Fixes #3637
2020-05-31 22:19:18 -04:00
Qstick
c6c4eb0129 Add Test Fixture for Release Group Aggregation 2020-05-31 15:37:29 -04:00
Qstick
aefa4aa20b Fixed: Not removing seeded download if it was manual imported in some cases
Fixes #4474

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-05-30 15:04:26 -04:00
Mark McDowall
1209e3cefb Fix some styling issues in Quality Profile and Release Profiles 2020-05-30 15:01:55 -04:00
Mark McDowall
70a2da0f74 Fixed: Deleting row from middle of filter builder leading to error 2020-05-30 14:57:56 -04:00
Qstick
5de1f4563a Fixed: Manual Import Movie filter Input losing focus
Fixes #4297

Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-05-30 14:46:51 -04:00
Qstick
8112ca5a43 Fixed: Use User Slug for User List Trakt Requests (Requires Re-Auth for affected users)
Fixes #4168
Fixes #4440
2020-05-29 23:35:08 -04:00
ta264
f2a34e5eda Swap to servarr trakt auth 2020-05-29 07:24:37 +01:00
Qstick
6ecffc9bed Fixed: Don't fail on duplicate Alt Titles (Temp) 2020-05-26 21:57:16 -04:00
Qstick
f0be9994b1 Fix parameter in logging statement from AddMovieService 2020-05-25 16:54:58 -04:00
geogolem
9ede227178 this is a follow-up to commit:
64e9e48217
2020-05-25 01:14:03 -04:00
Qstick
f59b391b28 Fixed: Don't name with "0" year if no year in db 2020-05-25 01:05:42 -04:00
Qstick
de2ebba363 Fixed: TitleThe Naming Token Handling (and tests) 2020-05-25 01:01:23 -04:00
Qstick
2a3d22038f Rename MovieFolderCreatedEvent Props 2020-05-25 00:53:41 -04:00
Mark McDowall
baa6972a62 Fixed: Rejections custom filter for Interactive Search (now Rejections Count) 2020-05-25 00:46:45 -04:00
Mark McDowall
7f1497974f Queue status/timeleft improvements
New: Queue status icon is purple when download is waiting to import or importing
Fixed: Timeleft on Queue won't show when completed
Closes #3743
2020-05-25 00:45:37 -04:00
Qstick
d01c0afa56 Fixed: Parse WEB at end of Release Title, Improve truncated names
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-05-25 00:42:03 -04:00
Qstick
874b1bd17c Fixed: Rotating mobile device when modal is open won't reset modal
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-05-25 00:22:33 -04:00
Qstick
f00f4d0c2c Fixed: Consider Released if we have a digital release
Fixes #4460
2020-05-25 00:14:41 -04:00
Qstick
b997bf21a5 New: Don't close manual import when clicking outside the modal
Co-Authored-By: Mark McDowall <markus101@users.noreply.github.com>
2020-05-24 23:29:01 -04:00
Qstick
62de7b63bd Add Test Fixture for Alt Title Housekeeper 2020-05-24 22:37:05 -04:00
Qstick
3e5626f894 Fixed: Housekeeper for Credits (Left behind from deleted caused later add issues) 2020-05-24 22:36:40 -04:00
Qstick
ba6ba06d9b Fixed: Manual Imports for Unknown Movies
Fixes RADARR-Z
Fixes RADARR-1E
Fixes #4379
2020-05-24 22:35:22 -04:00
1625 changed files with 71331 additions and 18012 deletions

View File

@@ -2,6 +2,12 @@
# editorconfig.org
root = true
# NOTE: Requires **VS2019 16.3** or later
# Stylecop.ruleset
# Description: Rules for Radarr
# Code files
[*.cs]
charset = utf-8
trim_trailing_whitespace = true
@@ -38,6 +44,213 @@ csharp_style_var_for_built_in_types = true:suggestion
csharp_style_var_when_type_is_apparent = true:suggestion
csharp_style_var_elsewhere = true:suggestion
# Stylecop Rules
dotnet_diagnostic.SA0001.severity = none
dotnet_diagnostic.SA1005.severity = none
dotnet_diagnostic.SA1025.severity = none
dotnet_diagnostic.SA1101.severity = none
dotnet_diagnostic.SA1116.severity = none
dotnet_diagnostic.SA1118.severity = none
dotnet_diagnostic.SA1122.severity = none
dotnet_diagnostic.SA1201.severity = suggestion
dotnet_diagnostic.SA1202.severity = suggestion
dotnet_diagnostic.SA1204.severity = suggestion
dotnet_diagnostic.SA1300.severity = none
dotnet_diagnostic.SA1303.severity = none
dotnet_diagnostic.SA1304.severity = none
dotnet_diagnostic.SA1306.severity = none
dotnet_diagnostic.SA1309.severity = none
dotnet_diagnostic.SA1310.severity = none
dotnet_diagnostic.SA1401.severity = none
dotnet_diagnostic.SA1402.severity = none
dotnet_diagnostic.SA1404.severity = suggestion
dotnet_diagnostic.SA1405.severity = suggestion
dotnet_diagnostic.SA1406.severity = suggestion
dotnet_diagnostic.SA1410.severity = suggestion
dotnet_diagnostic.SA1411.severity = suggestion
dotnet_diagnostic.SA1413.severity = none
dotnet_diagnostic.SA1516.severity = none
dotnet_diagnostic.SA1600.severity = none
dotnet_diagnostic.SA1601.severity = none
dotnet_diagnostic.SA1602.severity = none
dotnet_diagnostic.SA1604.severity = none
dotnet_diagnostic.SA1605.severity = none
dotnet_diagnostic.SA1606.severity = none
dotnet_diagnostic.SA1607.severity = none
dotnet_diagnostic.SA1608.severity = none
dotnet_diagnostic.SA1610.severity = none
dotnet_diagnostic.SA1611.severity = none
dotnet_diagnostic.SA1612.severity = none
dotnet_diagnostic.SA1613.severity = none
dotnet_diagnostic.SA1614.severity = none
dotnet_diagnostic.SA1615.severity = none
dotnet_diagnostic.SA1616.severity = none
dotnet_diagnostic.SA1617.severity = none
dotnet_diagnostic.SA1618.severity = none
dotnet_diagnostic.SA1619.severity = none
dotnet_diagnostic.SA1620.severity = none
dotnet_diagnostic.SA1621.severity = none
dotnet_diagnostic.SA1622.severity = none
dotnet_diagnostic.SA1623.severity = none
dotnet_diagnostic.SA1624.severity = none
dotnet_diagnostic.SA1625.severity = none
dotnet_diagnostic.SA1626.severity = none
dotnet_diagnostic.SA1627.severity = none
dotnet_diagnostic.SA1629.severity = none
dotnet_diagnostic.SA1633.severity = none
dotnet_diagnostic.SA1634.severity = none
dotnet_diagnostic.SA1635.severity = none
dotnet_diagnostic.SA1636.severity = none
dotnet_diagnostic.SA1637.severity = none
dotnet_diagnostic.SA1638.severity = none
dotnet_diagnostic.SA1640.severity = none
dotnet_diagnostic.SA1641.severity = none
dotnet_diagnostic.SA1642.severity = none
dotnet_diagnostic.SA1643.severity = none
dotnet_diagnostic.SA1648.severity = none
dotnet_diagnostic.SA1649.severity = none
dotnet_diagnostic.SA1651.severity = none
dotnet_diagnostic.SX1101.severity = warning
dotnet_diagnostic.SX1309.severity = warning
# Microsoft Analyzers that fail and need to be sorted thru
dotnet_diagnostic.ASP0000.severity = suggestion
dotnet_diagnostic.CA1000.severity = suggestion
dotnet_diagnostic.CA1001.severity = suggestion
dotnet_diagnostic.CA1003.severity = suggestion
dotnet_diagnostic.CA1008.severity = suggestion
dotnet_diagnostic.CA1010.severity = suggestion
dotnet_diagnostic.CA1012.severity = suggestion
dotnet_diagnostic.CA1014.severity = suggestion
dotnet_diagnostic.CA1016.severity = suggestion
dotnet_diagnostic.CA1017.severity = suggestion
dotnet_diagnostic.CA1018.severity = suggestion
dotnet_diagnostic.CA1019.severity = suggestion
dotnet_diagnostic.CA1021.severity = suggestion
dotnet_diagnostic.CA1024.severity = suggestion
dotnet_diagnostic.CA1027.severity = suggestion
dotnet_diagnostic.CA1028.severity = suggestion
dotnet_diagnostic.CA1030.severity = suggestion
dotnet_diagnostic.CA1031.severity = suggestion
dotnet_diagnostic.CA1032.severity = suggestion
dotnet_diagnostic.CA1033.severity = suggestion
dotnet_diagnostic.CA1034.severity = suggestion
dotnet_diagnostic.CA1036.severity = suggestion
dotnet_diagnostic.CA1040.severity = suggestion
dotnet_diagnostic.CA1041.severity = suggestion
dotnet_diagnostic.CA1043.severity = suggestion
dotnet_diagnostic.CA1044.severity = suggestion
dotnet_diagnostic.CA1050.severity = suggestion
dotnet_diagnostic.CA1051.severity = suggestion
dotnet_diagnostic.CA1052.severity = suggestion
dotnet_diagnostic.CA1054.severity = suggestion
dotnet_diagnostic.CA1055.severity = suggestion
dotnet_diagnostic.CA1056.severity = suggestion
dotnet_diagnostic.CA1058.severity = suggestion
dotnet_diagnostic.CA1060.severity = suggestion
dotnet_diagnostic.CA1061.severity = suggestion
dotnet_diagnostic.CA1062.severity = suggestion
dotnet_diagnostic.CA1063.severity = suggestion
dotnet_diagnostic.CA1064.severity = suggestion
dotnet_diagnostic.CA1065.severity = suggestion
dotnet_diagnostic.CA1066.severity = suggestion
dotnet_diagnostic.CA1067.severity = suggestion
dotnet_diagnostic.CA1068.severity = suggestion
dotnet_diagnostic.CA1069.severity = suggestion
dotnet_diagnostic.CA1200.severity = suggestion
dotnet_diagnostic.CA1303.severity = suggestion
dotnet_diagnostic.CA1304.severity = suggestion
dotnet_diagnostic.CA1305.severity = suggestion
dotnet_diagnostic.CA1307.severity = suggestion
dotnet_diagnostic.CA1308.severity = suggestion
dotnet_diagnostic.CA1401.severity = suggestion
dotnet_diagnostic.CA1507.severity = suggestion
dotnet_diagnostic.CA1707.severity = suggestion
dotnet_diagnostic.CA1710.severity = suggestion
dotnet_diagnostic.CA1712.severity = suggestion
dotnet_diagnostic.CA1714.severity = suggestion
dotnet_diagnostic.CA1715.severity = suggestion
dotnet_diagnostic.CA1716.severity = suggestion
dotnet_diagnostic.CA1717.severity = suggestion
dotnet_diagnostic.CA1720.severity = suggestion
dotnet_diagnostic.CA1721.severity = suggestion
dotnet_diagnostic.CA1724.severity = suggestion
dotnet_diagnostic.CA1801.severity = suggestion
dotnet_diagnostic.CA1802.severity = suggestion
dotnet_diagnostic.CA1805.severity = suggestion
dotnet_diagnostic.CA1806.severity = suggestion
dotnet_diagnostic.CA1810.severity = suggestion
dotnet_diagnostic.CA1812.severity = suggestion
dotnet_diagnostic.CA1814.severity = suggestion
dotnet_diagnostic.CA1815.severity = suggestion
dotnet_diagnostic.CA1816.severity = suggestion
dotnet_diagnostic.CA1819.severity = suggestion
dotnet_diagnostic.CA1822.severity = suggestion
dotnet_diagnostic.CA1823.severity = suggestion
dotnet_diagnostic.CA1824.severity = suggestion
dotnet_diagnostic.CA2000.severity = suggestion
dotnet_diagnostic.CA2002.severity = suggestion
dotnet_diagnostic.CA2007.severity = suggestion
dotnet_diagnostic.CA2008.severity = suggestion
dotnet_diagnostic.CA2009.severity = suggestion
dotnet_diagnostic.CA2010.severity = suggestion
dotnet_diagnostic.CA2011.severity = suggestion
dotnet_diagnostic.CA2012.severity = suggestion
dotnet_diagnostic.CA2013.severity = suggestion
dotnet_diagnostic.CA2100.severity = suggestion
dotnet_diagnostic.CA2101.severity = suggestion
dotnet_diagnostic.CA2119.severity = suggestion
dotnet_diagnostic.CA2153.severity = suggestion
dotnet_diagnostic.CA2200.severity = suggestion
dotnet_diagnostic.CA2207.severity = suggestion
dotnet_diagnostic.CA2208.severity = suggestion
dotnet_diagnostic.CA2211.severity = suggestion
dotnet_diagnostic.CA2213.severity = suggestion
dotnet_diagnostic.CA2214.severity = suggestion
dotnet_diagnostic.CA2215.severity = suggestion
dotnet_diagnostic.CA2216.severity = suggestion
dotnet_diagnostic.CA2219.severity = suggestion
dotnet_diagnostic.CA2225.severity = suggestion
dotnet_diagnostic.CA2226.severity = suggestion
dotnet_diagnostic.CA2227.severity = suggestion
dotnet_diagnostic.CA2229.severity = suggestion
dotnet_diagnostic.CA2231.severity = suggestion
dotnet_diagnostic.CA2234.severity = suggestion
dotnet_diagnostic.CA2235.severity = suggestion
dotnet_diagnostic.CA2237.severity = suggestion
dotnet_diagnostic.CA2241.severity = suggestion
dotnet_diagnostic.CA2242.severity = suggestion
dotnet_diagnostic.CA2243.severity = suggestion
dotnet_diagnostic.CA2244.severity = suggestion
dotnet_diagnostic.CA2245.severity = suggestion
dotnet_diagnostic.CA2246.severity = suggestion
dotnet_diagnostic.CA3061.severity = suggestion
dotnet_diagnostic.CA3075.severity = suggestion
dotnet_diagnostic.CA3076.severity = suggestion
dotnet_diagnostic.CA3077.severity = suggestion
dotnet_diagnostic.CA3147.severity = suggestion
dotnet_diagnostic.CA5350.severity = suggestion
dotnet_diagnostic.CA5351.severity = suggestion
dotnet_diagnostic.CA5359.severity = suggestion
dotnet_diagnostic.CA5360.severity = suggestion
dotnet_diagnostic.CA5363.severity = suggestion
dotnet_diagnostic.CA5364.severity = suggestion
dotnet_diagnostic.CA5365.severity = suggestion
dotnet_diagnostic.CA5366.severity = suggestion
dotnet_diagnostic.CA5368.severity = suggestion
dotnet_diagnostic.CA5369.severity = suggestion
dotnet_diagnostic.CA5370.severity = suggestion
dotnet_diagnostic.CA5371.severity = suggestion
dotnet_diagnostic.CA5372.severity = suggestion
dotnet_diagnostic.CA5373.severity = suggestion
dotnet_diagnostic.CA5374.severity = suggestion
dotnet_diagnostic.CA5379.severity = suggestion
dotnet_diagnostic.CA5384.severity = suggestion
dotnet_diagnostic.CA5385.severity = suggestion
dotnet_diagnostic.CA5397.severity = suggestion
[*.{js,html,js,hbs,less,css}]
charset = utf-8
trim_trailing_whitespace = true

View File

@@ -1,6 +1,7 @@
{
"paths": [
"frontend/src/**/*.js"
"frontend/src/**/*.js",
"src/NzbDrone.Core/Localization/Core/*.json"
],
"ignored": [
"**/node_modules/**/*"

View File

@@ -1,305 +0,0 @@
# -*- coding: utf-8; mode: python -*-
##
## Format
##
## ACTION: [AUDIENCE:] COMMIT_MSG [!TAG ...]
##
## Description
##
## ACTION is one of 'chg', 'fix', 'new'
##
## Is WHAT the change is about.
##
## 'chg' is for refactor, small improvement, cosmetic changes...
## 'fix' is for bug fixes
## 'new' is for new features, big improvement
##
## AUDIENCE is optional and one of 'dev', 'usr', 'pkg', 'test', 'doc'
##
## Is WHO is concerned by the change.
##
## 'dev' is for developpers (API changes, refactors...)
## 'usr' is for final users (UI changes)
## 'pkg' is for packagers (packaging changes)
## 'test' is for testers (test only related changes)
## 'doc' is for doc guys (doc only changes)
##
## COMMIT_MSG is ... well ... the commit message itself.
##
## TAGs are additionnal adjective as 'refactor' 'minor' 'cosmetic'
##
## They are preceded with a '!' or a '@' (prefer the former, as the
## latter is wrongly interpreted in github.) Commonly used tags are:
##
## 'refactor' is obviously for refactoring code only
## 'minor' is for a very meaningless change (a typo, adding a comment)
## 'cosmetic' is for cosmetic driven change (re-indentation, 80-col...)
## 'wip' is for partial functionality but complete subfunctionality.
##
## Example:
##
## new: usr: support of bazaar implemented
## chg: re-indentend some lines !cosmetic
## new: dev: updated code to be compatible with last version of killer lib.
## fix: pkg: updated year of licence coverage.
## new: test: added a bunch of test around user usability of feature X.
## fix: typo in spelling my name in comment. !minor
##
## Please note that multi-line commit message are supported, and only the
## first line will be considered as the "summary" of the commit message. So
## tags, and other rules only applies to the summary. The body of the commit
## message will be displayed in the changelog without reformatting.
##
## ``ignore_regexps`` is a line of regexps
##
## Any commit having its full commit message matching any regexp listed here
## will be ignored and won't be reported in the changelog.
##
ignore_regexps = [
r'@minor', r'!minor',
r'@cosmetic', r'!cosmetic',
r'@refactor', r'!refactor',
r'@wip', r'!wip',
r'^([cC]hg|[fF]ix|[nN]ew)\s*:\s*[p|P]kg:',
r'^([cC]hg|[fF]ix|[nN]ew)\s*:\s*[d|D]ev:',
r'^(.{3,3}\s*:)?\s*[fF]irst commit.?\s*$',
r'^$', ## ignore commits with empty messages
]
## ``section_regexps`` is a list of 2-tuples associating a string label and a
## list of regexp
##
## Commit messages will be classified in sections thanks to this. Section
## titles are the label, and a commit is classified under this section if any
## of the regexps associated is matching.
##
## Please note that ``section_regexps`` will only classify commits and won't
## make any changes to the contents. So you'll probably want to go check
## ``subject_process`` (or ``body_process``) to do some changes to the subject,
## whenever you are tweaking this variable.
##
section_regexps = [
('**New features**', [
r'^[aA]dded?\s*:?\s*((dev|use?r|pkg|test|doc)\s*:\s*)?(.*)$',
r'^[uU]pdated?\s*:?\s*((dev|use?r|pkg|test|doc)\s*:\s*)?([^\n]*)$',
r'^[cC]hanged?\s*:?\s*((dev|use?r|pkg|test|doc)\s*:\s*)?([^\n]*)$',
r'^[nN]ew?\s*:?\s*((dev|use?r|pkg|test|doc)\s*:\s*)?([^\n]*)$',
]),
('**Fixes**', [
r'^(?![mM]erge\s*)'
]
),
]
## ``body_process`` is a callable
##
## This callable will be given the original body and result will
## be used in the changelog.
##
## Available constructs are:
##
## - any python callable that take one txt argument and return txt argument.
##
## - ReSub(pattern, replacement): will apply regexp substitution.
##
## - Indent(chars=" "): will indent the text with the prefix
## Please remember that template engines gets also to modify the text and
## will usually indent themselves the text if needed.
##
## - Wrap(regexp=r"\n\n"): re-wrap text in separate paragraph to fill 80-Columns
##
## - noop: do nothing
##
## - ucfirst: ensure the first letter is uppercase.
## (usually used in the ``subject_process`` pipeline)
##
## - final_dot: ensure text finishes with a dot
## (usually used in the ``subject_process`` pipeline)
##
## - strip: remove any spaces before or after the content of the string
##
## - SetIfEmpty(msg="No commit message."): will set the text to
## whatever given ``msg`` if the current text is empty.
##
## Additionally, you can `pipe` the provided filters, for instance:
#body_process = Wrap(regexp=r'\n(?=\w+\s*:)') | Indent(chars=" ")
#body_process = Wrap(regexp=r'\n(?=\w+\s*:)')
#body_process = noop
body_process = ReSub(r'((^|\n)[A-Z]\w+(-\w+)*: .*(\n\s+.*)*)+$', r'') | strip
## ``subject_process`` is a callable
##
## This callable will be given the original subject and result will
## be used in the changelog.
## subject_process = (strip |
## ReSub(r'^([aA]dd(ed?)?|[nN]ew)(\s?:?\s)(.*)$', r'![New](https://img.shields.io/badge/-- -New-brightgreen.svg?style=flat-square) \4') |
## ReSub(r'^([cC]hang(ed?)?)(\s?:?\s)(.*)$', r'![Changed](https://img.shields.io/badge/-- -Changed-orange.svg?style=flat-square) \4') |
## ReSub(r'^([fF]ix(ed?)?)(\s?:?\s)(.*)$', r'![Fixed](https://img.shields.io/badge/-- -Fixed-red.svg?style=flat-square) \4') |
## ReSub(r'^([uU]pdat(ed?)?)(\s?:?\s)(.*)$', r'![Updated](https://img.shields.io/badge/-- -Updated-blue.svg?style=flat-square) \4') |
## ReSub(r'#(\d{3,4})', r'[#\1](https://github.com/Radarr/Radarr/issues/\1)') |
## SetIfEmpty("No commit message.") | ucfirst | final_dot)
## Available constructs are those listed in ``body_process`` doc.
subject_process = (strip |
ReSub(r'^([aA]dd(ed?)?|[nN]ew)(\s?:?\s)(.*)$', r'![New](https://img.shields.io/badge/--%20-New-brightgreen.svg?style=flat-square) \4') |
ReSub(r'^([cC]hang(ed?)?)(\s?:?\s)(.*)$', r'![Changed](https://img.shields.io/badge/--%20-Changed-orange.svg?style=flat-square) \4') |
ReSub(r'^([fF]ix(ed?)?)(\s?:?\s)(.*)$', r'![Fixed](https://img.shields.io/badge/--%20-Fixed-red.svg?style=flat-square) \4') |
ReSub(r'^([uU]pdat(ed?)?)(\s?:?\s)(.*)$', r'![Updated](https://img.shields.io/badge/--%20-Updated-blue.svg?style=flat-square) \4') |
ReSub(r'#(\d{3,4})', r'[#\1](https://github.com/Radarr/Radarr/issues/\1)') |
SetIfEmpty("No commit message.") | ucfirst | final_dot)
## ``tag_filter_regexp`` is a regexp
##
## Tags that will be used for the changelog must match this regexp.
##
tag_filter_regexp = r'^v[0]+\.[2-9]+\.[0-9]+\.[0-9]{3,4}$'
## ``unreleased_version_label`` is a string or a callable that outputs a string
##
## This label will be used as the changelog Title of the last set of changes
## between last valid tag and HEAD if any.
unreleased_version_label = "(unreleased)"
## ``output_engine`` is a callable
##
## This will change the output format of the generated changelog file
##
## Available choices are:
##
## - rest_py
##
## Legacy pure python engine, outputs ReSTructured text.
## This is the default.
##
## - mustache(<template_name>)
##
## Template name could be any of the available templates in
## ``templates/mustache/*.tpl``.
## Requires python package ``pystache``.
## Examples:
## - mustache("markdown")
## - mustache("restructuredtext")
##
## - makotemplate(<template_name>)
##
## Template name could be any of the available templates in
## ``templates/mako/*.tpl``.
## Requires python package ``mako``.
## Examples:
## - makotemplate("restructuredtext")
##
#output_engine = rest_py
#output_engine = mustache("restructuredtext")
output_engine = mustache("changelog.tpl")
#output_engine = makotemplate("restructuredtext")
## ``include_merge`` is a boolean
##
## This option tells git-log whether to include merge commits in the log.
## The default is to include them.
include_merge = False
## ``log_encoding`` is a string identifier
##
## This option tells gitchangelog what encoding is outputed by ``git log``.
## The default is to be clever about it: it checks ``git config`` for
## ``i18n.logOutputEncoding``, and if not found will default to git's own
## default: ``utf-8``.
#log_encoding = 'utf-8'
## ``publish`` is a callable
##
## Sets what ``gitchangelog`` should do with the output generated by
## the output engine. ``publish`` is a callable taking one argument
## that is an interator on lines from the output engine.
##
## Some helper callable are provided:
##
## Available choices are:
##
## - stdout
##
## Outputs directly to standard output
## (This is the default)
##
## - FileInsertAtFirstRegexMatch(file, pattern, idx=lamda m: m.start())
##
## Creates a callable that will parse given file for the given
## regex pattern and will insert the output in the file.
## ``idx`` is a callable that receive the matching object and
## must return a integer index point where to insert the
## the output in the file. Default is to return the position of
## the start of the matched string.
##
## - FileRegexSubst(file, pattern, replace, flags)
##
## Apply a replace inplace in the given file. Your regex pattern must
## take care of everything and might be more complex. Check the README
## for a complete copy-pastable example.
##
# publish = FileInsertIntoFirstRegexMatch(
# "CHANGELOG.rst",
# r'/(?P<rev>[0-9]+\.[0-9]+(\.[0-9]+)?)\s+\([0-9]+-[0-9]{2}-[0-9]{2}\)\n--+\n/',
# idx=lambda m: m.start(1)
# )
#publish = stdout
def write_to_file(content):
with open("CHANGELOG.md", "w+") as f:
for chunk in content:
f.write(chunk)
publish = write_to_file
## ``revs`` is a list of callable or a list of string
##
## callable will be called to resolve as strings and allow dynamical
## computation of these. The result will be used as revisions for
## gitchangelog (as if directly stated on the command line). This allows
## to filter exaclty which commits will be read by gitchangelog.
##
## To get a full documentation on the format of these strings, please
## refer to the ``git rev-list`` arguments. There are many examples.
##
## Using callables is especially useful, for instance, if you
## are using gitchangelog to generate incrementally your changelog.
##
## Some helpers are provided, you can use them::
##
## - FileFirstRegexMatch(file, pattern): will return a callable that will
## return the first string match for the given pattern in the given file.
## If you use named sub-patterns in your regex pattern, it'll output only
## the string matching the regex pattern named "rev".
##
## - Caret(rev): will return the rev prefixed by a "^", which is a
## way to remove the given revision and all its ancestor.
##
## Please note that if you provide a rev-list on the command line, it'll
## replace this value (which will then be ignored).
##
## If empty, then ``gitchangelog`` will act as it had to generate a full
## changelog.
##
## The default is to use all commits to make the changelog.
#revs = ["^1.0.3", ]
#revs = [
# Caret(
# FileFirstRegexMatch(
# "CHANGELOG.rst",
# r"(?P<rev>[0-9]+\.[0-9]+(\.[0-9]+)?)\s+\([0-9]+-[0-9]{2}-[0-9]{2}\)\n--+\n")),
# "HEAD"
#]
revs = ["v0.2.0.134..."]

View File

@@ -1,311 +0,0 @@
# -*- coding: utf-8; mode: python -*-
##
## Format
##
## ACTION: [AUDIENCE:] COMMIT_MSG [!TAG ...]
##
## Description
##
## ACTION is one of 'chg', 'fix', 'new'
##
## Is WHAT the change is about.
##
## 'chg' is for refactor, small improvement, cosmetic changes...
## 'fix' is for bug fixes
## 'new' is for new features, big improvement
##
## AUDIENCE is optional and one of 'dev', 'usr', 'pkg', 'test', 'doc'
##
## Is WHO is concerned by the change.
##
## 'dev' is for developpers (API changes, refactors...)
## 'usr' is for final users (UI changes)
## 'pkg' is for packagers (packaging changes)
## 'test' is for testers (test only related changes)
## 'doc' is for doc guys (doc only changes)
##
## COMMIT_MSG is ... well ... the commit message itself.
##
## TAGs are additionnal adjective as 'refactor' 'minor' 'cosmetic'
##
## They are preceded with a '!' or a '@' (prefer the former, as the
## latter is wrongly interpreted in github.) Commonly used tags are:
##
## 'refactor' is obviously for refactoring code only
## 'minor' is for a very meaningless change (a typo, adding a comment)
## 'cosmetic' is for cosmetic driven change (re-indentation, 80-col...)
## 'wip' is for partial functionality but complete subfunctionality.
##
## Example:
##
## new: usr: support of bazaar implemented
## chg: re-indentend some lines !cosmetic
## new: dev: updated code to be compatible with last version of killer lib.
## fix: pkg: updated year of licence coverage.
## new: test: added a bunch of test around user usability of feature X.
## fix: typo in spelling my name in comment. !minor
##
## Please note that multi-line commit message are supported, and only the
## first line will be considered as the "summary" of the commit message. So
## tags, and other rules only applies to the summary. The body of the commit
## message will be displayed in the changelog without reformatting.
##
## ``ignore_regexps`` is a line of regexps
##
## Any commit having its full commit message matching any regexp listed here
## will be ignored and won't be reported in the changelog.
##
ignore_regexps = [
r'@minor', r'!minor',
r'@cosmetic', r'!cosmetic',
r'@refactor', r'!refactor',
r'@wip', r'!wip',
r'^([cC]hg|[fF]ix|[nN]ew)\s*:\s*[p|P]kg:',
r'^([cC]hg|[fF]ix|[nN]ew)\s*:\s*[d|D]ev:',
r'^(.{3,3}\s*:)?\s*[fF]irst commit.?\s*$',
r'^$', ## ignore commits with empty messages
]
## ``section_regexps`` is a list of 2-tuples associating a string label and a
## list of regexp
##
## Commit messages will be classified in sections thanks to this. Section
## titles are the label, and a commit is classified under this section if any
## of the regexps associated is matching.
##
## Please note that ``section_regexps`` will only classify commits and won't
## make any changes to the contents. So you'll probably want to go check
## ``subject_process`` (or ``body_process``) to do some changes to the subject,
## whenever you are tweaking this variable.
##
section_regexps = [
('**New features:**', [
r'^[aA]dded?\s*:?\s*((dev|use?r|pkg|test|doc)\s*:\s*)?([^\n]*)$',
r'^[uU]pdated?\s*:?\s*((dev|use?r|pkg|test|doc)\s*:\s*)?([^\n]*)$',
r'^[cC]hanged?\s*:?\s*((dev|use?r|pkg|test|doc)\s*:\s*)?([^\n]*)$',
r'^[nN]ew?\s*:?\s*((dev|use?r|pkg|test|doc)\s*:\s*)?([^\n]*)$',
]),
('**Fixes:**', [
r'^(?![mM]erge\s*)'
]
),
]
## ``body_process`` is a callable
##
## This callable will be given the original body and result will
## be used in the changelog.
##
## Available constructs are:
##
## - any python callable that take one txt argument and return txt argument.
##
## - ReSub(pattern, replacement): will apply regexp substitution.
##
## - Indent(chars=" "): will indent the text with the prefix
## Please remember that template engines gets also to modify the text and
## will usually indent themselves the text if needed.
##
## - Wrap(regexp=r"\n\n"): re-wrap text in separate paragraph to fill 80-Columns
##
## - noop: do nothing
##
## - ucfirst: ensure the first letter is uppercase.
## (usually used in the ``subject_process`` pipeline)
##
## - final_dot: ensure text finishes with a dot
## (usually used in the ``subject_process`` pipeline)
##
## - strip: remove any spaces before or after the content of the string
##
## - SetIfEmpty(msg="No commit message."): will set the text to
## whatever given ``msg`` if the current text is empty.
##
## Additionally, you can `pipe` the provided filters, for instance:
#body_process = Wrap(regexp=r'\n(?=\w+\s*:)') | Indent(chars=" ")
#body_process = Wrap(regexp=r'\n(?=\w+\s*:)')
#body_process = noop
body_process = ReSub(r'((^|\n)[A-Z]\w+(-\w+)*: .*(\n\s+.*)*)+$', r'') | strip
## ``subject_process`` is a callable
##
## This callable will be given the original subject and result will
## be used in the changelog.
## subject_process = (strip |
## ReSub(r'^([aA]dd(ed?)?|[nN]ew)(\s?:?\s)(.*)$', r'![New](https://img.shields.io/badge/-- -New-brightgreen.svg?style=flat-square) \4') |
## ReSub(r'^([cC]hang(ed?)?)(\s?:?\s)(.*)$', r'![Changed](https://img.shields.io/badge/-- -Changed-orange.svg?style=flat-square) \4') |
## ReSub(r'^([fF]ix(ed?)?)(\s?:?\s)(.*)$', r'![Fixed](https://img.shields.io/badge/-- -Fixed-red.svg?style=flat-square) \4') |
## ReSub(r'^([uU]pdat(ed?)?)(\s?:?\s)(.*)$', r'![Updated](https://img.shields.io/badge/-- -Updated-blue.svg?style=flat-square) \4') |
## ReSub(r'#(\d{3,4})', r'[#\1](https://github.com/Radarr/Radarr/issues/\1)') |
## SetIfEmpty("No commit message.") | ucfirst | final_dot)
## Available constructs are those listed in ``body_process`` doc.
subject_process = (strip |
ReSub(r'^([aA]dd(ed?)?|[nN]ew)(\s?:?\s)(.*)$', r'\4') |
ReSub(r'^([cC]hang(ed?)?)(\s?:?\s)(.*)$', r'\4') |
ReSub(r'^([fF]ix(ed?)?)(\s?:?\s)(.*)$', r'\4') |
ReSub(r'^([uU]pdat(ed?)?)(\s?:?\s)(.*)$', r'\4') |
ReSub(r'#(\d{3,4})', r'Issue #\1') |
SetIfEmpty("No commit message.") | ucfirst | final_dot)
## ``tag_filter_regexp`` is a regexp
##
## Tags that will be used for the changelog must match this regexp.
##
tag_filter_regexp = r'^v[0]+\.[2-9]+\.[0-9]+\.[0-9]+$'
## ``unreleased_version_label`` is a string or a callable that outputs a string
##
## This label will be used as the changelog Title of the last set of changes
## between last valid tag and HEAD if any.
unreleased_version_label = "(unreleased)"
## ``output_engine`` is a callable
##
## This will change the output format of the generated changelog file
##
## Available choices are:
##
## - rest_py
##
## Legacy pure python engine, outputs ReSTructured text.
## This is the default.
##
## - mustache(<template_name>)
##
## Template name could be any of the available templates in
## ``templates/mustache/*.tpl``.
## Requires python package ``pystache``.
## Examples:
## - mustache("markdown")
## - mustache("restructuredtext")
##
## - makotemplate(<template_name>)
##
## Template name could be any of the available templates in
## ``templates/mako/*.tpl``.
## Requires python package ``mako``.
## Examples:
## - makotemplate("restructuredtext")
##
#output_engine = rest_py
#output_engine = mustache("restructuredtext")
output_engine = mustache("changelog_release.tpl")
#output_engine = makotemplate("restructuredtext")
## ``include_merge`` is a boolean
##
## This option tells git-log whether to include merge commits in the log.
## The default is to include them.
include_merge = False
## ``log_encoding`` is a string identifier
##
## This option tells gitchangelog what encoding is outputed by ``git log``.
## The default is to be clever about it: it checks ``git config`` for
## ``i18n.logOutputEncoding``, and if not found will default to git's own
## default: ``utf-8``.
#log_encoding = 'utf-8'
## ``publish`` is a callable
##
## Sets what ``gitchangelog`` should do with the output generated by
## the output engine. ``publish`` is a callable taking one argument
## that is an interator on lines from the output engine.
##
## Some helper callable are provided:
##
## Available choices are:
##
## - stdout
##
## Outputs directly to standard output
## (This is the default)
##
## - FileInsertAtFirstRegexMatch(file, pattern, idx=lamda m: m.start())
##
## Creates a callable that will parse given file for the given
## regex pattern and will insert the output in the file.
## ``idx`` is a callable that receive the matching object and
## must return a integer index point where to insert the
## the output in the file. Default is to return the position of
## the start of the matched string.
##
## - FileRegexSubst(file, pattern, replace, flags)
##
## Apply a replace inplace in the given file. Your regex pattern must
## take care of everything and might be more complex. Check the README
## for a complete copy-pastable example.
##
# publish = FileInsertIntoFirstRegexMatch(
# "CHANGELOG.rst",
# r'/(?P<rev>[0-9]+\.[0-9]+(\.[0-9]+)?)\s+\([0-9]+-[0-9]{2}-[0-9]{2}\)\n--+\n/',
# idx=lambda m: m.start(1)
# )
publish = stdout
#def write_to_file(content):
# with open("CHANGELOG.md", "w+") as f:
# for chunk in content:
# f.write(chunk)
#publish = write_to_file
## ``revs`` is a list of callable or a list of string
##
## callable will be called to resolve as strings and allow dynamical
## computation of these. The result will be used as revisions for
## gitchangelog (as if directly stated on the command line). This allows
## to filter exaclty which commits will be read by gitchangelog.
##
## To get a full documentation on the format of these strings, please
## refer to the ``git rev-list`` arguments. There are many examples.
##
## Using callables is especially useful, for instance, if you
## are using gitchangelog to generate incrementally your changelog.
##
## Some helpers are provided, you can use them::
##
## - FileFirstRegexMatch(file, pattern): will return a callable that will
## return the first string match for the given pattern in the given file.
## If you use named sub-patterns in your regex pattern, it'll output only
## the string matching the regex pattern named "rev".
##
## - Caret(rev): will return the rev prefixed by a "^", which is a
## way to remove the given revision and all its ancestor.
##
## Please note that if you provide a rev-list on the command line, it'll
## replace this value (which will then be ignored).
##
## If empty, then ``gitchangelog`` will act as it had to generate a full
## changelog.
##
## The default is to use all commits to make the changelog.
#revs = ["^1.0.3", ]
#revs = [
# Caret(
# FileFirstRegexMatch(
# "CHANGELOG.rst",
# r"(?P<rev>[0-9]+\.[0-9]+(\.[0-9]+)?)\s+\([0-9]+-[0-9]{2}-[0-9]{2}\)\n--+\n")),
# "HEAD"
#]
# Gets the latest annoted tag and uses that as a base for new changes.
import subprocess
proc = subprocess.Popen(["git", "describe", "--abbrev=0", "--tags"], stdout=subprocess.PIPE)
out = str(proc.communicate()[0].strip(), "utf-8")
revs = [out+"..."]

View File

@@ -1,22 +0,0 @@
**Description:**
<!-- Check first that your problem is not listed in our wiki section:
* https://github.com/Radarr/Radarr/wiki/Common-Problems
* https://github.com/Radarr/Radarr/wiki/FAQ
**Just because you receive an exception in your logs, doesn't mean it's a bug and should be reported here. Often it's something else, such as a permission error. If you are unsure ask on the Discord or Subreddit first.**
Visit our [Discord server](https://discord.gg/NWYch8M) or [Subreddit](https://reddit.com/r/radarr) for support or longer discussions. Support questions posed on here will be closed immediately.
Provide a description of the feature request or bug here, the more details the better.
Please also include the following if you are reporting a bug. If you do not include it, the issue will probably be closed as we cannot help you. -->
**Radarr Version:**
**Mono Version:**
**Debug Logs:**
# Do not remove anything from your logs and post the full logs! If not everything fits in here use a service like https://pastebin.com to upload them.
<!-- Please use the search bar (make sure to include closed issues as well) and make sure you are not submitting an already submitted issue. -->

View File

@@ -1,7 +1,6 @@
---
name: Bug report
about: Support requests will be closed immediately, if you are unsure go to our Discord
or Subreddit first. Exceptions do not mean you found a bug!
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!
title: ''
labels: bug
assignees: ''
@@ -25,10 +24,12 @@ A clear and concise description of what you expected to happen.
If applicable, add screenshots to help explain your problem.
**Platform Information (please complete the following information):**
- OS: [e.g. Windows]
- Mono Version: [e.g. Mono 5.8] (Only needed under Linux and Mac, found under System -> Status)
- Browser and Version [e.g. chrome, safari] (Only needed for UI issues)
- OS: [e.g. Windows 10 2004 / Ubuntu 20.10]
- Docker: [Yes/No]
- Mono or.NET Core Version: [e.g. Mono 5.8 or .Net Core 3.1.10] (found under System -> Status)
- Browser and Version [e.g. chrome 86.0.4240.198] (Only needed for UI issues)
- Radarr Version [e.g. 3.0.0.2956]
- Radarr Branch [e.g. master]
**Debug Logs**
Turn on debug logs under Settings -> General and wait for the bug to occur again. **Upload the full log file here (or another site and link it). Issues will be closed, if they do not include this!**
**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!**

View File

@@ -1,7 +1,7 @@
blank_issues_enabled: false
contact_links:
- name: Support via Discord
url: https://discord.gg/AD3UP37
url: https://discord.gg/r5wJPt9
about: Chat with users and devs on support and setup related topics.
- name: Support via Reddit
url: https://reddit.com/r/radarr

View File

@@ -3,10 +3,13 @@ YES | NO
#### Description
#### Screenshot (if UI related)
#### Todos
- [ ] Tests
- [ ] Translation Keys
- [ ] Wiki Updates
#### Issues Fixed or Closed by this PR
* #
* Fixes #XXXX

5
.github/stale.yml vendored
View File

@@ -7,7 +7,10 @@ exemptLabels:
- feature request
- parser
- confirmed
- aphrodite
- sonarr-pull
- lidarr-pull
- readarr-pull
- v3
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable

2
.github/support.yml vendored
View File

@@ -6,7 +6,7 @@ supportLabel: support
# 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/ZDmT7qb) or [Subreddit](https://reddit.com/r/radarr)
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

21
.github/workflows/lock.yml vendored Normal file
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: ''

File diff suppressed because it is too large Load Diff

View File

@@ -3,22 +3,38 @@
We're always looking for people to help make Radarr even better, there are a number of ways to contribute.
## Documentation ##
Setup guides, FAQ, the more information we have on the wiki the better.
Setup guides, FAQ, the more information we have on the [wiki](https://wiki.servarr.com/Radarr) the better.
## Development ##
See the readme for information on setting up your development environment.
### Tools required ###
- 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)
- [Git](https://git-scm.com/downloads)
- [NodeJS](https://nodejs.org/en/download/) (Node 10.X.X or higher)
- [Yarn](https://yarnpkg.com/)
- .NET Core 3.1.
### Getting started ###
1. Fork Radarr
2. Clone the repository into your development machine. [*info*](https://help.github.com/articles/working-with-repositories)
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.
5. Build the project in Visual Studio, Setting startup project to `Radarr.Console` and framework to `netcoreapp31`
6. Debug the project in Visual Studio
7. Open http://localhost:7878
### 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)
- Rebase from Radarr's develop branch, don't merge
- Make meaningful commits, or squash them
- Feel free to make a pull request before work is complete, this will let us see where its at and make comments/suggest improvements
- Reach out to us on the forums or on IRC if you have any questions
- Reach out to us on the discord if you have any questions
- Add tests (unit/integration)
- Commit with *nix line endings for consistency (We checkout Windows and commit *nix)
- One feature/bug fix per pull request to keep things clean and easy to understand
- Use 4 spaces instead of tabs, this is the default for VS 2012 and WebStorm (to my knowledge)
- Use 4 spaces instead of tabs, this is the default for VS 2019 and WebStorm (to my knowledge)
### Pull Requesting ###
- Only make pull requests to develop, never master, if you make a PR to master we'll comment on it and close it

View File

@@ -1,18 +0,0 @@
# New UI Development
This document should provide an overview of current UI development, progress and blockers.
## Current Focus
Our current focus is creating a foundation for the UI, so that everything can be built upon it.
We are trialing the Sonarr V3 UI as our foundation. So far it has been working great and we already have a working build running.
## Performance Issues
You can download a database with 40k movies here: https://radarr.video/dev/radarr.db (Version where the next refresh movie scan is in a year. The refresh movie scan will lag the UI and other stuff. https://radarr.video/dev/radarr_no_scan.db). Just place it in your AppData Directory while Radarr is not running and make sure it's named radarr.db (https://github.com/Radarr/Radarr/wiki/AppData-Directory).
You will have to message me (@galli-leo) via Discord or Reddit for the username and password (just as a precaution).
## Tasks
The actual tasks that are not related to the foundation of the new UI are all listed here https://github.com/Radarr/Radarr/projects/4. They are sorted according to different priorities. Some issues are also issues that shouldn't need anything extra, just a correct implementation in the new UI.

155
README.md
View File

@@ -1,72 +1,15 @@
# Radarr
**New UI Development:** For an overview of the new UI development see [DEVELOPMENT.md](https://github.com/Radarr/Radarr/blob/aphrodite/DEVELOPMENT.md).
[![Build Status](https://dev.azure.com/Radarr/Radarr/_apis/build/status/Radarr.Radarr?branchName=develop)](https://dev.azure.com/Radarr/Radarr/_build/latest?definitionId=1&branchName=develop)
[![Translated](https://translate.servarr.com/widgets/radarr/-/radarr/svg-badge.svg)](https://translate.servarr.com/engage/radarr/?utm_source=widget)
[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/radarr.svg)](https://wiki.servarr.com/Radarr_Installation#Docker)
![Github Downloads](https://img.shields.io/github/downloads/Radarr/Radarr/total.svg)
[![Backers on Open Collective](https://opencollective.com/Radarr/backers/badge.svg)](#backers)
[![Sponsors on Open Collective](https://opencollective.com/Radarr/sponsors/badge.svg)](#sponsors)
Radarr is an __independent__ fork of [Sonarr](https://github.com/Sonarr/Sonarr) reworked for automatically downloading movies via Usenet and BitTorrent.
Radarr is a movie collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new movies and will interface with clients and indexers to grab, sort, and rename them. It can also be configured to automatically upgrade the quality of existing files in the library when a better quality format becomes available.
The project was inspired by other Usenet/BitTorrent movie downloaders such as CouchPotato.
See the [Roadmap blogpost](https://blog.radarr.video/development/update/2018/11/11/roadmap-update.html) for an overview of planned features.
## Getting Started
[![Installation](https://img.shields.io/badge/wiki-installation-brightgreen.svg?maxAge=60&style=flat-square)](https://github.com/Radarr/Radarr/wiki/Installation)
[![Docker](https://img.shields.io/badge/wiki-docker-1488C6.svg?maxAge=60&style=flat-square)](https://github.com/Radarr/Radarr/wiki/Docker)
[![Setup Guide](https://img.shields.io/badge/wiki-setup_guide-orange.svg?maxAge=60&style=flat-square)](https://github.com/Radarr/Radarr/wiki/Setup-Guide)
[![FAQ](https://img.shields.io/badge/wiki-FAQ-BF55EC.svg?maxAge=60&style=flat-square)](https://github.com/Radarr/Radarr/wiki/FAQ)
* [Install Radarr for your desired OS](https://github.com/Radarr/Radarr/wiki/Installation) *or* use [Docker](https://github.com/Radarr/Radarr/wiki/Docker)
* *For Linux users*, run `radarr` and *optionally* have [Radarr start automatically](https://github.com/Radarr/Radarr/wiki/Autostart-on-Linux)
* Connect to the UI through <http://localhost:7878> or <http://your-ip:7878> in your web browser
* See the [Setup Guide](https://github.com/Radarr/Radarr/wiki/Setup-Guide) for further configuration
## Downloads
| Release Type | Branch: develop (stable) | Branch: nightly (semi-unstable) | Branch: aphrodite (very-unstable) |
|-----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Binary Releases | [![GitHub Releases](https://img.shields.io/badge/downloads-releases-brightgreen.svg?maxAge=60&style=flat-square)](https://github.com/Radarr/Radarr/releases) | [![AppVeyor Builds](https://img.shields.io/badge/downloads-nightly-green.svg?maxAge=60&style=flat-square)](https://ci.appveyor.com/project/galli-leo/radarr-usby1/branch/develop/artifacts) | |
| Docker | [![Docker release](https://img.shields.io/badge/linuxserver-radarr:latest-blue.svg?colorB=1488C6&maxAge=60&style=flat-square)](https://hub.docker.com/r/linuxserver/radarr) | [![Docker nightly](https://img.shields.io/badge/linuxserver-radarr:nightly-blue.svg?colorB=1488C6&maxAge=60&style=flat-square)](https://hub.docker.com/r/linuxserver/radarr) | [![Docker aphrodite](https://img.shields.io/badge/linuxserver-radarr:preview-blue.svg?colorB=1488C6&maxAge=60&style=flat-square)](https://hub.docker.com/r/linuxserver/radarr) |
| Docker | [![Docker release](https://img.shields.io/badge/hotio-radarr:latest-blue.svg?colorB=1488C6&maxAge=60&style=flat-square)](https://hub.docker.com/r/hotio/radarr) | [![Docker nightly](https://img.shields.io/badge/hotio-radarr:unstable-blue.svg?colorB=1488C6&maxAge=60&style=flat-square)](https://hub.docker.com/r/hotio/radarr) | [![Docker aphrodite](https://img.shields.io/badge/hotio-radarr:aphrodite-blue.svg?colorB=1488C6&maxAge=60&style=flat-square)](https://hub.docker.com/r/hotio/radarr) |
## Support
[![OpenCollective](https://opencollective.com/radarr/tiers/backer/badge.svg)](#backers)
[![OpenCollective](https://opencollective.com/radarr/tiers/flexible-sponsor/badge.svg)](#flexible-sponsors)
[![OpenCollective](https://opencollective.com/radarr/tiers/sponsor/badge.svg)](#sponsors)
[![Discord](https://img.shields.io/badge/discord-chat-7289DA.svg?maxAge=60&style=flat-square)](https://discord.gg/AD3UP37)
[![Reddit](https://img.shields.io/badge/reddit-discussion-FF4500.svg?maxAge=60&style=flat-square)](https://www.reddit.com/r/radarr)
[![Feathub](https://img.shields.io/badge/feathub-requests-lightgrey.svg?maxAge=60&style=flat-square)](http://feathub.com/Radarr/Radarr)
[![GitHub](https://img.shields.io/badge/github-issues-red.svg?maxAge=60&style=flat-square)](https://github.com/Radarr/Radarr/issues)
[![GitHub Wiki](https://img.shields.io/badge/github-wiki-181717.svg?maxAge=60&style=flat-square)](https://github.com/Radarr/Radarr/wiki)
## Status
[![GitHub issues](https://img.shields.io/github/issues/radarr/radarr.svg?maxAge=60&style=flat-square)](https://github.com/Radarr/Radarr/issues)
[![GitHub pull requests](https://img.shields.io/github/issues-pr/radarr/radarr.svg?maxAge=60&style=flat-square)](https://github.com/Radarr/Radarr/pulls)
[![GNU GPL v3](https://img.shields.io/badge/license-GNU%20GPL%20v3-blue.svg?maxAge=60&style=flat-square)](http://www.gnu.org/licenses/gpl.html)
[![Copyright 2010-2017](https://img.shields.io/badge/copyright-2017-blue.svg?maxAge=60&style=flat-square)](https://github.com/Radarr/Radarr)
[![Github Releases](https://img.shields.io/github/downloads/Radarr/Radarr/total.svg?maxAge=60&style=flat-square)](https://github.com/Radarr/Radarr/releases/)
[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/radarr.svg?maxAge=60&style=flat-square)](https://hub.docker.com/r/linuxserver/radarr/)
[![Changelog](https://img.shields.io/github/commit-activity/w/radarr/radarr.svg?style=flat-square)](/CHANGELOG.md#unreleased)
| Service | Master | Develop |
|----------|:---------------------------:|:----------------------------:|
| AppVeyor | [![AppVeyor](https://img.shields.io/appveyor/ci/galli-leo/Radarr/master.svg?maxAge=60&style=flat-square)](https://ci.appveyor.com/project/galli-leo/Radarr) | [![AppVeyor](https://img.shields.io/appveyor/ci/galli-leo/Radarr-usby1/develop.svg?maxAge=60&style=flat-square)](https://ci.appveyor.com/project/galli-leo/Radarr-usby1) |
| Travis | [![Travis](https://img.shields.io/travis/Radarr/Radarr/master.svg?maxAge=60&style=flat-square)](https://travis-ci.org/Radarr/Radarr) | [![Travis](https://img.shields.io/travis/Radarr/Radarr/develop.svg?maxAge=60&style=flat-square)](https://travis-ci.org/Radarr/Radarr) |
### [Site and API Status](https://status.radarr.video)
| API | Updates | Sites |
|-------|:----:|:----:|
| [![API V2 (develop)](http://status.radarr.video/component/1/shield?style=flat-square)](https://api.radarr.video/v2/) | [![Update Server](http://status.radarr.video/component/4/shield?style=flat-square)](https://radarr.aeonlucid.com) | [![Radarr Mappings](http://status.radarr.video/component/6/shield?style=flat-square)](https://mappings.radarr.video/)
| [![API Staging (nightly)](http://status.radarr.video/component/2/shield?style=flat-square)](https://staging.api.radarr.video/) | [![Github Updates](http://status.radarr.video/component/5/shield?style=flat-square)](https://api.github.com/v3/) | [![Main Site](http://status.radarr.video/component/7/shield?style=flat-square)](https://radarr.video/)
Radarr is currently undergoing rapid development and pull requests are actively added into the repository.
## Features
### Current Features
## Major Features Include:
* Adding new movies with lots of information, such as trailers, ratings, etc.
* Support for major platforms: Windows, Linux, macOS, Raspberry Pi, etc.
@@ -78,83 +21,57 @@ Radarr is currently undergoing rapid development and pull requests are actively
* Automatically importing downloaded movies
* Recognizing Special Editions, Director's Cut, etc.
* Identifying releases with hardcoded subs
* All indexers supported by Sonarr also supported
* New PassThePopcorn Indexer
* QBittorrent, Deluge, rTorrent, Transmission and uTorrent download client (Other clients are coming)
* New TorrentPotato Indexer
* Torznab Indexer now supports Movies (Works well with [Jackett](https://github.com/Jackett/Jackett))
* Scanning PreDB to know when a new release is available
* Importing movies from various online sources, such as IMDb Watchlists (A complete list can be found [here](https://github.com/Radarr/Radarr/issues/114))
* QBittorrent, Deluge, rTorrent, Transmission, uTorrent, and other download clients are supported
* Full integration with Kodi, Plex (notification, library update)
* And a beautiful UI
* A beautiful UI
* Importing Metadata such as trailers or subtitles
* 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
### Planned Features
## Support
Note: GitHub Issues are for Bugs and Feature Requests Only
See the [Roadmap blogpost](https://blog.radarr.video/development/update/2018/11/11/roadmap-update.html) for an overview of planned features.
[![Discord](https://img.shields.io/badge/discord-chat-7289DA.svg?maxAge=60)](https://discord.gg/r5wJPt9)
[![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)
[![Wiki](https://img.shields.io/badge/servarr-wiki-181717.svg?maxAge=60)](https://wiki.servarr.com/Radarr)
#### [Feature Requests](http://feathub.com/Radarr/Radarr)
## Feature Requests
## Configuring the Development Environment
[Feature Requests](https://github.com/Radarr/Radarr/issues/new?assignees=&labels=Type%3A+Enhancement&template=feature_request.md&title=)
### Requirements
## Contributors & Developers
[API Documentation](https://radarr.video/docs/api/)
* [Visual Studio Community 2019](https://www.visualstudio.com/vs/community/) or [Rider](http://www.jetbrains.com/rider/)
* [Git](https://git-scm.com/downloads)
* [Node.js](https://nodejs.org/en/download/)
* [Yarn](https://yarnpkg.com/)
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>
### Setup
* Make sure all the required software mentioned above are installed
* Clone the repository into your development machine ([*info*](https://help.github.com/desktop/guides/contributing/working-with-your-remote-repository-on-github-or-github-enterprise))
* Grab the submodules `git submodule init && git submodule update`
* Install the required Node Packages `yarn install`
* Start gulp to monitor your dev environment for any changes that need post processing using `yarn start` command.
## Backers
> **Notice**
> Gulp must be running at all times while you are working with Radarr client source files.
Thank you to all our backers! 🙏 [Become a backer](https://opencollective.com/Radarr#backer)
### Build
<img src="https://opencollective.com/Radarr/backers.svg?width=890"></a>
* To build run `sh build.sh`
## Sponsors
**Note:** Windows users must have bash available to do this. If you installed git, you should have a git bash utility that works.
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor](https://opencollective.com/Radarr#sponsor)
### Development
<img src="https://opencollective.com/Radarr/sponsors.svg?width=890"></a>
* Open `Radarr.sln` in Visual Studio 2017 or run the build.sh script, if Mono is installed. Alternatively you can use Jetbrains Rider, since it works on all Platforms.
* Make sure `NzbDrone.Console` is set as the startup project
* Run `build.sh` before running
## Mega Sponsors
## Supporters
<img src="https://opencollective.com/Radarr/tiers/mega-sponsor.svg?width=890"></a>
This project would not be possible without the support by these amazing folks. [**Become a sponsor or backer**](https://opencollective.com/radarr) to help us out!
### Sponsors
[![Sponsors](https://opencollective.com/radarr/tiers/sponsor.svg)](https://opencollective.com/radarr/order/3851)
### Flexible Sponsors
[![Flexible Sponsors](https://opencollective.com/radarr/tiers/flexible-sponsor.svg?avatarHeight=54)](https://opencollective.com/radarr/order/3856)
### Backers
[![Backers](https://opencollective.com/radarr/tiers/backer.svg?avatarHeight=48)](https://opencollective.com/radarr/order/3850)
### JetBrains
Thank you to [<img src="/Logo/jetbrains.svg" alt="JetBrains" width="32"> JetBrains](http://www.jetbrains.com/) for providing us with free licenses to their great tools
## JetBrains
Thank you to [<img src="/Logo/jetbrains.svg" alt="JetBrains" width="32"> JetBrains](http://www.jetbrains.com/) for providing us with free licenses to their great tools.
* [<img src="/Logo/resharper.svg" alt="ReSharper" width="32"> ReSharper](http://www.jetbrains.com/resharper/)
* [<img src="/Logo/webstorm.svg" alt="WebStorm" width="32"> WebStorm](http://www.jetbrains.com/webstorm/)
* [<img src="/Logo/rider.svg" alt="Rider" width="32"> Rider](http://www.jetbrains.com/rider/)
* [<img src="/Logo/webstorm.svg" alt="WebStorm" width="32"> WebStorm](http://www.jetbrains.com/webstorm/)
* [<img src="/Logo/rider.svg" alt="Rider" width="32"> Rider](http://www.jetbrains.com/rider/)
* [<img src="/Logo/dottrace.svg" alt="dotTrace" width="32"> dotTrace](http://www.jetbrains.com/dottrace/)
## License
### License
* [GNU GPL v3](http://www.gnu.org/licenses/gpl.html)
* Copyright 2010-2019
* Copyright 2010-2021

View File

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

View File

@@ -7,23 +7,23 @@ variables:
outputFolder: './_output'
artifactsFolder: './_artifacts'
testsFolder: './_tests'
majorVersion: '3.0.0'
majorVersion: '3.0.2'
minorVersion: $[counter('minorVersion', 2000)]
radarrVersion: '$(majorVersion).$(minorVersion)'
buildName: '$(Build.SourceBranchName).$(radarrVersion)'
sentryOrg: 'servarr'
sentryUrl: 'https://sentry.servarr.com'
dotnetVersion: '3.1.300'
dotnetVersion: '3.1.404'
yarnCacheFolder: $(Pipeline.Workspace)/.yarn
trigger:
branches:
include:
- develop
- aphrodite
- master
pr:
- develop
- aphrodite
stages:
- stage: Setup
@@ -39,7 +39,7 @@ stages:
displayName: Set Build Name
- bash: |
if [[ $BUILD_REASON == "PullRequest" ]]; then
git diff origin/aphrodite...HEAD --name-only | grep -E "^(src/|azure-pipelines.yml)"
git diff origin/develop...HEAD --name-only | grep -E "^(src/|azure-pipelines.yml)"
echo $? > not_backend_update
else
echo 0 > not_backend_update
@@ -68,6 +68,9 @@ stages:
pool:
vmImage: $(imageName)
variables:
# Disable stylecop here - linting errors get caught by the analyze task
EnableAnalyzers: 'false'
steps:
- checkout: self
submodules: true
@@ -101,6 +104,10 @@ stages:
artifact: LinuxCoreTests
displayName: Publish Linux Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- publish: '$(testsFolder)/netcoreapp3.1/linux-musl-x64/publish'
artifact: LinuxMuslCoreTests
displayName: Publish Linux Musl Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- publish: '$(testsFolder)/netcoreapp3.1/osx-x64/publish'
artifact: MacCoreTests
displayName: Publish MacOS Test Package
@@ -132,10 +139,19 @@ stages:
- checkout: self
submodules: true
fetchDepth: 1
- task: Cache@2
inputs:
key: 'yarn | "$(osName)" | yarn.lock'
restoreKeys: |
yarn | "$(osName)"
yarn
path: $(yarnCacheFolder)
displayName: Cache Yarn packages
- bash: ./build.sh --frontend
displayName: Build Radarr Frontend
env:
FORCE_COLOR: 0
YARN_CACHE_FOLDER: $(yarnCacheFolder)
- publish: $(outputFolder)
artifact: '$(osName)Frontend'
displayName: Publish Frontend
@@ -168,7 +184,11 @@ stages:
- bash: ./build.sh --packages
displayName: Create Packages
- bash: |
setup/inno/ISCC.exe setup/radarr.iss //DFramework=netcoreapp3.1
setup/inno/ISCC.exe setup/radarr.iss //DFramework=netcoreapp3.1 //DRuntime=win-x86
cp setup/output/Radarr.*windows.netcoreapp3.1.exe ${BUILD_ARTIFACTSTAGINGDIRECTORY}/Radarr.${BUILDNAME}.windows-core-x86-installer.exe
displayName: Create .NET Core Windows installer
- bash: |
setup/inno/ISCC.exe setup/radarr.iss //DFramework=netcoreapp3.1 //DRuntime=win-x64
cp setup/output/Radarr.*windows.netcoreapp3.1.exe ${BUILD_ARTIFACTSTAGINGDIRECTORY}/Radarr.${BUILDNAME}.windows-core-x64-installer.exe
displayName: Create .NET Core Windows installer
- publish: $(Build.ArtifactStagingDirectory)
@@ -211,7 +231,14 @@ stages:
archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).windows-core-x64.zip'
archiveType: 'zip'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/windows/netcoreapp3.1
rootFolderOrFile: $(artifactsFolder)/win-x64/netcoreapp3.1
- task: ArchiveFiles@2
displayName: Create Windows x86 Core zip
inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).windows-core-x86.zip'
archiveType: 'zip'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/win-x86/netcoreapp3.1
- task: ArchiveFiles@2
displayName: Create MacOS Core app
inputs:
@@ -243,6 +270,14 @@ stages:
tarCompression: 'gz'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-x64/netcoreapp3.1
- task: ArchiveFiles@2
displayName: Create Linux Musl Core tar
inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).linux-musl-core-x64.tar.gz'
archiveType: 'tar'
tarCompression: 'gz'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-musl-x64/netcoreapp3.1
- task: ArchiveFiles@2
displayName: Create ARM32 Linux Core tar
inputs:
@@ -259,6 +294,14 @@ stages:
tarCompression: 'gz'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-arm64/netcoreapp3.1
- task: ArchiveFiles@2
displayName: Create ARM64 Linux Musl Core tar
inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Radarr.$(buildName).linux-musl-core-arm64.tar.gz'
archiveType: 'tar'
tarCompression: 'gz'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-musl-arm64/netcoreapp3.1
- publish: $(Build.ArtifactStagingDirectory)
artifact: 'Packages'
displayName: Publish Packages
@@ -269,14 +312,22 @@ stages:
sentry-cli releases new --finalize -p radarr -p radarr-ui -p radarr-update "${RELEASENAME}"
sentry-cli releases -p radarr-ui files "${RELEASENAME}" upload-sourcemaps _output/UI/ --rewrite
sentry-cli releases set-commits --auto "${RELEASENAME}"
sentry-cli releases deploys "${RELEASENAME}" new -e aphrodite
if [[ ${BUILD_SOURCEBRANCH} == "refs/heads/develop" ]]; then
sentry-cli releases deploys "${RELEASENAME}" new -e nightly
else
sentry-cli releases deploys "${RELEASENAME}" new -e production
fi
if [ $? -gt 0 ]; then
echo "##vso[task.logissue type=warning]Error uploading source maps."
fi
exit 0
displayName: Publish Sentry Source Maps
continueOnError: true
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/aphrodite'))
condition: |
or
(
and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/develop')),
and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
)
env:
SENTRY_AUTH_TOKEN: $(sentryAuthTokenServarr)
SENTRY_ORG: $(sentryOrg)
@@ -346,11 +397,6 @@ stages:
- powershell: Set-Service SCardSvr -StartupType Manual
displayName: Enable Windows Test Service
condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- bash: |
wget https://github.com/acoustid/chromaprint/releases/download/v1.4.3/chromaprint-fpcalc-1.4.3-linux-x86_64.tar.gz
sudo tar xf chromaprint-fpcalc-1.4.3-linux-x86_64.tar.gz --strip-components=1 --directory /usr/bin
displayName: Install fpcalc
condition: and(succeeded(), eq(variables['osName'], 'Linux'))
- bash: |
SYMLINK=6_6_0
MONOPREFIX=/Library/Frameworks/Mono.framework/Versions/$SYMLINK
@@ -382,18 +428,22 @@ stages:
condition: and(succeeded(), eq(dependencies.Prepare.outputs['setVar.backendNotUpdated'], '0'))
strategy:
matrix:
mono510:
testName: 'Mono 5.10'
containerImage: servarr/testimages:mono-5.10
mono520:
testName: 'Mono 5.20'
artifactName: LinuxTests
containerImage: servarr/testimages:mono-5.20
mono608:
testName: 'Mono 6.8'
containerImage: servarr/testimages:mono-6.8
mono610:
testName: 'Mono 6.10'
artifactName: LinuxTests
containerImage: servarr/testimages:mono-6.10
mono612:
testName: 'Mono 6.12'
artifactName: LinuxTests
containerImage: servarr/testimages:mono-6.12
alpine:
testName: 'Musl Net Core'
artifactName: LinuxMuslCoreTests
containerImage: servarr/testimages:alpine
pool:
vmImage: 'ubuntu-18.04'
@@ -403,8 +453,6 @@ stages:
timeoutInMinutes: 10
steps:
- bash: mono --version
displayName: Check Mono version
- task: UseDotNet@2
displayName: 'Install .net core'
inputs:
@@ -414,10 +462,14 @@ stages:
displayName: Download Test Artifact
inputs:
buildType: 'current'
artifactName: LinuxTests
artifactName: $(artifactName)
targetPath: $(testsFolder)
- bash: find ${TESTSFOLDER} -name "Radarr.Test.Dummy" -exec chmod a+x {} \;
displayName: Make Test Dummy Executable
condition: and(succeeded(), ne(variables['osName'], 'Windows'))
- bash: |
chmod a+x ${TESTSFOLDER}/test.sh
ls -lR ${TESTSFOLDER}
${TESTSFOLDER}/test.sh Linux Unit Test
displayName: Run Tests
- task: PublishTestResults@2
@@ -525,22 +577,26 @@ stages:
condition: and(succeeded(), eq(dependencies.Prepare.outputs['setVar.backendNotUpdated'], '0'))
strategy:
matrix:
mono510:
testName: 'Mono 5.10'
containerImage: servarr/testimages:mono-5.10
mono520:
testName: 'Mono 5.20'
artifactName: LinuxTests
containerImage: servarr/testimages:mono-5.20
mono608:
testName: 'Mono 6.8'
containerImage: servarr/testimages:mono-6.8
pattern: 'Radarr.**.linux.tar.gz'
mono610:
testName: 'Mono 6.10'
artifactName: LinuxTests
containerImage: servarr/testimages:mono-6.10
variables:
pattern: 'Radarr.**.linux.tar.gz'
pattern: 'Radarr.**.linux.tar.gz'
mono612:
testName: 'Mono 6.12'
artifactName: LinuxTests
containerImage: servarr/testimages:mono-6.12
pattern: 'Radarr.**.linux.tar.gz'
alpine:
testName: 'Musl Net Core'
artifactName: LinuxMuslCoreTests
containerImage: servarr/testimages:alpine
pattern: 'Radarr.**.linux-musl-core-x64.tar.gz'
pool:
vmImage: 'ubuntu-18.04'
@@ -549,8 +605,6 @@ stages:
timeoutInMinutes: 15
steps:
- bash: mono --version
displayName: Check Mono version
- task: UseDotNet@2
displayName: 'Install .net core'
inputs:
@@ -560,7 +614,7 @@ stages:
displayName: Download Test Artifact
inputs:
buildType: 'current'
artifactName: LinuxTests
artifactName: $(artifactName)
targetPath: $(testsFolder)
- task: DownloadPipelineArtifact@2
displayName: Download Build Artifact
@@ -605,14 +659,14 @@ stages:
failBuild: true
Mac:
osName: 'Mac'
imageName: 'macos-10.14' # Fails due to firefox not being installed on image
imageName: 'macos-10.14'
pattern: 'Radarr.**.osx-core-x64.tar.gz'
failBuild: false
failBuild: true
Windows:
osName: 'Windows'
imageName: 'windows-2019'
pattern: 'Radarr.**.windows-core-x64.zip'
failBuild: $(failOnAutomationFailure)
failBuild: true
pool:
vmImage: $(imageName)
@@ -645,24 +699,21 @@ stages:
mkdir -p ./bin/
cp -r -v ${BUILD_ARTIFACTSTAGINGDIRECTORY}/bin/Radarr/. ./bin/
displayName: Move Package Contents
- bash: |
if [[ $OSNAME == "Mac" ]]; then
url=https://github.com/mozilla/geckodriver/releases/download/v0.26.0/geckodriver-v0.26.0-macos.tar.gz
elif [[ $OSNAME == "Linux" ]]; then
url=https://github.com/mozilla/geckodriver/releases/download/v0.26.0/geckodriver-v0.26.0-linux64.tar.gz
else
echo "Unhandled OS"
exit 1
fi
curl -s -L "$url" | tar -xz
chmod +x geckodriver
mv geckodriver _tests
displayName: Install Gecko Driver
condition: and(succeeded(), ne(variables['osName'], 'Windows'))
- bash: |
chmod a+x ${TESTSFOLDER}/test.sh
${TESTSFOLDER}/test.sh ${OSNAME} Automation Test
displayName: Run Integration Tests
displayName: Run Automation Tests
- task: CopyFiles@2
displayName: 'Copy Screenshot to: $(Build.ArtifactStagingDirectory)'
inputs:
SourceFolder: '$(Build.SourcesDirectory)'
Contents: |
**/*_test_screenshot.png
TargetFolder: '$(Build.ArtifactStagingDirectory)/screenshots'
- publish: $(Build.ArtifactStagingDirectory)/screenshots
artifact: '$(osName)AutomationScreenshots'
displayName: Publish Screenshot Bundle
condition: and(succeeded(), eq(variables['System.JobAttempt'], '1'))
- task: PublishTestResults@2
inputs:
testResultsFormat: 'NUnit'
@@ -710,10 +761,19 @@ stages:
- checkout: self
submodules: true
fetchDepth: 1
- task: Cache@2
inputs:
key: 'yarn | "$(osName)" | yarn.lock'
restoreKeys: |
yarn | "$(osName)"
yarn
path: $(yarnCacheFolder)
displayName: Cache Yarn packages
- bash: ./build.sh --lint
displayName: Lint Radarr Frontend
env:
FORCE_COLOR: 0
YARN_CACHE_FOLDER: $(yarnCacheFolder)
- job: Analyze_Frontend
displayName: Frontend
@@ -802,8 +862,15 @@ stages:
- job:
displayName: Discord Notification
pool:
vmImage: 'ubuntu-18.04'
vmImage: 'windows-2019'
steps:
- task: DownloadPipelineArtifact@2
continueOnError: true
displayName: Download Screenshot Artifact
inputs:
buildType: 'current'
artifactName: 'WindowsAutomationScreenshots'
targetPath: $(Build.SourcesDirectory)
- checkout: none
- powershell: |
iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/Servarr/AzureDiscordNotify/master/DiscordNotify.ps1'))

View File

@@ -71,7 +71,7 @@ Build()
YarnInstall()
{
ProgressStart 'yarn install'
yarn install --frozen-lockfile
yarn install --frozen-lockfile --network-timeout 120000
ProgressEnd 'yarn install'
}
@@ -183,12 +183,13 @@ PackageMacOSApp()
PackageWindows()
{
local framework="$1"
local runtime="$2"
ProgressStart "Creating Windows Package for $framework"
local folder=$artifactsFolder/windows/$framework/Radarr
local folder=$artifactsFolder/$runtime/$framework/Radarr
PackageFiles "$folder" "$framework" "win-x64"
PackageFiles "$folder" "$framework" "$runtime"
echo "Removing Radarr.Mono"
rm -f $folder/Radarr.Mono.*
@@ -214,7 +215,7 @@ Package()
PackageLinux "$framework" "$runtime"
;;
win)
PackageWindows "$framework"
PackageWindows "$framework" "$runtime"
;;
osx)
PackageMacOS "$framework"
@@ -232,14 +233,6 @@ PackageTests()
rm -f $testPackageFolder/$framework/$runtime/*.log.config
# geckodriver.exe isn't copied by dotnet publish
if [ "$runtime" = "win-x64" ];
then
curl -Lso gecko.zip "https://github.com/mozilla/geckodriver/releases/download/v0.26.0/geckodriver-v0.26.0-win64.zip"
unzip -o gecko.zip
cp geckodriver.exe "$testPackageFolder/$framework/win-x64/publish"
fi
ProgressEnd 'Creating Test Package'
}
@@ -318,7 +311,9 @@ then
if [[ -z "$RID" || -z "$FRAMEWORK" ]];
then
PackageTests "netcoreapp3.1" "win-x64"
PackageTests "netcoreapp3.1" "win-x86"
PackageTests "netcoreapp3.1" "linux-x64"
PackageTests "netcoreapp3.1" "linux-musl-x64"
PackageTests "netcoreapp3.1" "osx-x64"
PackageTests "net462" "linux-x64"
else
@@ -349,8 +344,11 @@ then
if [[ -z "$RID" || -z "$FRAMEWORK" ]];
then
Package "netcoreapp3.1" "win-x64"
Package "netcoreapp3.1" "win-x86"
Package "netcoreapp3.1" "linux-x64"
Package "netcoreapp3.1" "linux-musl-x64"
Package "netcoreapp3.1" "linux-arm64"
Package "netcoreapp3.1" "linux-musl-arm64"
Package "netcoreapp3.1" "linux-arm"
Package "netcoreapp3.1" "osx-x64"
Package "net462" "linux-x64"

View File

@@ -1,14 +0,0 @@
# Changelog
{{#versions}}
## {{{label}}}
{{#sections}}
### {{{label}}}
{{#commits}}
- {{{subject}}} [<a href="https://github.com/{{{author}}}">{{{author}}}</a>]
{{/commits}}
{{/sections}}
{{/versions}}

View File

@@ -1,15 +0,0 @@
**To receive further Pre-Release updates, please change the branch to develop. (Settings -> General (Show Advanced Settings) -> Updates -> Branch)**
{{#versions}}
{{#sections}}
{{{label}}}
{{#commits}}
- {{{subject}}} [{{{author}}}]
{{/commits}}
{{/sections}}
{{/versions}}
**Note**: The OSX version does not automatically launch the browser. You have to go to http://localhost:7878 by yourself in a browser of your choice.

View File

@@ -1,293 +0,0 @@
{
"parser": "babel-eslint",
"env": {
"browser": true,
"commonjs": true,
"node": true,
"es6": true
},
"globals": {
"expect": false,
"chai": false,
"sinon": false
},
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module",
"ecmaFeatures": {
"modules": true,
"impliedStrict": true
}
},
"plugins": [
"filenames",
"react"
],
"settings": {
"react": {
"version": "detect"
}
},
"rules": {
"filenames/match-exported": ["error"],
# ECMAScript 6
"arrow-body-style": [0],
"arrow-parens": ["error", "always"],
"arrow-spacing": ["error", { "before": true, "after": true }],
"constructor-super": "error",
"generator-star-spacing": "off",
"no-class-assign": "error",
"no-confusing-arrow": "error",
"no-const-assign": "error",
"no-dupe-class-members": "error",
"no-duplicate-imports": "error",
"no-new-symbol": "error",
"no-this-before-super": "error",
"no-useless-escape": "error",
"no-useless-computed-key": "error",
"no-useless-constructor": "error",
"no-var": "warn",
"object-shorthand": ["error", "properties"],
"prefer-arrow-callback": "error",
"prefer-const": "warn",
"prefer-reflect": "off",
"prefer-rest-params": "off",
"prefer-spread": "warn",
"prefer-template": "error",
"require-yield": "off",
"template-curly-spacing": ["error", "never"],
"yield-star-spacing": "off",
# Possible Errors
"comma-dangle": "error",
"no-cond-assign": "error",
"no-console": "off",
"no-constant-condition": "warn",
"no-control-regex": "error",
"no-debugger": "off",
"no-dupe-args": "error",
"no-dupe-keys": "error",
"no-duplicate-case": "error",
"no-empty": "warn",
"no-empty-character-class": "error",
"no-ex-assign": "error",
"no-extra-boolean-cast": "error",
"no-extra-parens": ["error", "functions"],
"no-extra-semi": "error",
"no-func-assign": "error",
"no-inner-declarations": "error",
"no-invalid-regexp": "error",
"no-irregular-whitespace": "error",
"no-negated-in-lhs": "error",
"no-obj-calls": "error",
"no-regex-spaces": "error",
"no-sparse-arrays": "error",
"no-unexpected-multiline": "error",
"no-unreachable": "warn",
"no-unsafe-finally": "error",
"use-isnan": "error",
"valid-jsdoc": "off",
"valid-typeof": "error",
# Best Practices
"accessor-pairs": "off",
"array-callback-return": "warn",
"block-scoped-var": "warn",
"consistent-return": "off",
"curly": "error",
"default-case": "error",
"dot-location": ["error", "property"],
"dot-notation": "error",
"eqeqeq": ["error", "smart"],
"guard-for-in": "error",
"no-alert": "warn",
"no-caller": "error",
"no-case-declarations": "error",
"no-div-regex": "error",
"no-else-return": "error",
"no-empty-function": ["error", {"allow": ["arrowFunctions"]}],
"no-empty-pattern": "error",
"no-eval": "error",
"no-extend-native": "error",
"no-extra-bind": "error",
"no-fallthrough": "error",
"no-floating-decimal": "error",
"no-implicit-coercion": ["error", {
"boolean": false,
"number": true,
"string": true,
"allow": [/* "!!", "~", "*", "+" */]
}],
"no-implicit-globals": "error",
"no-implied-eval": "error",
"no-invalid-this": "off",
"no-iterator": "error",
"no-labels": "error",
"no-lone-blocks": "error",
"no-loop-func": "error",
"no-magic-numbers": ["off", {"ignoreArrayIndexes": true, "ignore": [0, 1] }],
"no-multi-spaces": "error",
"no-multi-str": "error",
"no-native-reassign": ["error", {"exceptions": ["console"]}],
"no-new": "off",
"no-new-func": "error",
"no-new-wrappers": "error",
"no-octal": "error",
"no-octal-escape": "error",
"no-param-reassign": "off",
"no-process-env": "off",
"no-proto": "error",
"no-redeclare": "error",
"no-return-assign": "warn",
"no-script-url": "error",
"no-self-assign": "error",
"no-self-compare": "error",
"no-sequences": "error",
"no-throw-literal": "error",
"no-unmodified-loop-condition": "error",
"no-unused-expressions": "error",
"no-unused-labels": "error",
"no-useless-call": "error",
"no-useless-concat": "error",
"no-void": "error",
"no-warning-comments": "off",
"no-with": "error",
"radix": ["error", "as-needed"],
"vars-on-top": "off",
"wrap-iife": ["error", "inside"],
"yoda": "error",
# Strict Mode
"strict": ["error", "never"],
# Variables
"init-declarations": ["error", "always"],
"no-catch-shadow": "error",
"no-delete-var": "error",
"no-label-var": "error",
"no-restricted-globals": "off",
"no-shadow": "error",
"no-shadow-restricted-names": "error",
"no-undef": "error",
"no-undef-init": "off",
"no-undefined": "off",
"no-unused-vars": ["error", { "args": "none", "ignoreRestSiblings": true }],
"no-use-before-define": "error",
# Node.js and CommonJS
"callback-return": "warn",
"global-require": "error",
"handle-callback-err": "warn",
"no-mixed-requires": "error",
"no-new-require": "error",
"no-path-concat": "error",
"no-process-exit": "error",
# Stylistic Issues
"array-bracket-spacing": ["error", "never"],
"block-spacing": ["error", "always"],
"brace-style": ["error", "1tbs", { "allowSingleLine": false }],
"camelcase": "off",
"comma-spacing": ["error", {"before": false, "after": true}],
"comma-style": ["error", "last"],
"computed-property-spacing": ["error", "never"],
"consistent-this": ["error", "self"],
"eol-last": "error",
"func-names": "off",
"func-style": ["error", "declaration"],
"indent": ["error", 2, {"SwitchCase": 1}],
"key-spacing": ["error", {"beforeColon": false, "afterColon": true}],
"keyword-spacing": ["error", { "before": true, "after": true}],
"lines-around-comment": ["error", { "beforeBlockComment": true, "afterBlockComment": false }],
"max-depth": ["error", {"maximum": 5}],
"max-nested-callbacks": ["error", 4],
"max-statements": "off",
"max-statements-per-line": ["error", { "max": 1 }],
"new-cap": ["error", {"capIsNewExceptions": ["$.Deferred", "DragDropContext", "DragLayer", "DragSource", "DropTarget"]}],
"new-parens": "error",
"newline-after-var": "off",
"newline-before-return": "off",
"newline-per-chained-call": "off",
"no-array-constructor": "error",
"no-bitwise": "error",
"no-continue": "error",
"no-inline-comments": "off",
"no-lonely-if": "warn",
"no-mixed-spaces-and-tabs": "error",
"no-multiple-empty-lines": ["error", { "max": 1 }],
"no-negated-condition": "warn",
"no-nested-ternary": "error",
"no-new-object": "error",
"no-plusplus": "off",
"no-restricted-syntax": "off",
"no-spaced-func": "error",
"no-ternary": "off",
"no-trailing-spaces": "error",
"no-underscore-dangle": ["error", { "allowAfterThis": true }],
"no-unneeded-ternary": "error",
"no-whitespace-before-property": "error",
"object-curly-spacing": ["error", "always"],
"one-var": ["error", "never"],
"one-var-declaration-per-line": ["error", "always"],
"operator-assignment": ["off", "never"],
"operator-linebreak": ["error", "after"],
"quote-props": ["error", "as-needed"],
"quotes": ["error", "single"],
"require-jsdoc": "off",
"semi": "error",
"semi-spacing": ["error", { "before": false, "after": true }],
"sort-vars": "off",
"space-before-blocks": ["error", "always"],
"space-before-function-paren": ["error", "never"],
"space-in-parens": "off",
"space-infix-ops": "off",
"space-unary-ops": "off",
"spaced-comment": "error",
"wrap-regex": "error",
# React
"react/jsx-boolean-value": [2, "always"],
"react/jsx-uses-vars": 2,
"react/jsx-closing-bracket-location": 2,
"react/jsx-tag-spacing": ["error"],
"react/jsx-curly-spacing": [2, "never"],
"react/jsx-equals-spacing": [2, "never"],
"react/jsx-indent-props": [2, 2],
"react/jsx-indent": [2, 2, { "indentLogicalExpressions": true }],
"react/jsx-key": 2,
"react/jsx-no-bind": [2, { "allowArrowFunctions": true }],
"react/jsx-no-duplicate-props": [2, { "ignoreCase": true }],
"react/jsx-max-props-per-line": [2, { "maximum": 2 }],
"react/jsx-handler-names": [2, { "eventHandlerPrefix": "(on|dispatch)", "eventHandlerPropPrefix": "on" }],
"react/jsx-no-undef": 2,
"react/jsx-pascal-case": 2,
"react/jsx-uses-react": 2,
// Explicitly disabled in case we want to enable them again
"react/no-did-mount-set-state": 0,
"react/no-did-update-set-state": 0,
"react/no-direct-mutation-state": 2,
"react/no-multi-comp": [2, { "ignoreStateless": true }],
"react/no-unknown-property": 2,
"react/prefer-es6-class": 2,
"react/prop-types": 2,
"react/react-in-jsx-scope": 2,
"react/self-closing-comp": 2,
"react/sort-comp": 2,
"react/jsx-wrap-multilines": 2
}
}

327
frontend/.eslintrc.js Normal file
View File

@@ -0,0 +1,327 @@
const fs = require('fs');
const dirs = fs
.readdirSync('frontend/src', { withFileTypes: true })
.filter((dirent) => dirent.isDirectory())
.map((dirent) => dirent.name)
.join('|');
module.exports = {
parser: 'babel-eslint',
env: {
browser: true,
commonjs: true,
node: true,
es6: true
},
globals: {
expect: false,
chai: false,
sinon: false
},
parserOptions: {
ecmaVersion: 6,
sourceType: 'module',
ecmaFeatures: {
modules: true,
impliedStrict: true
}
},
plugins: [
'filenames',
'react',
'simple-import-sort',
'import'
],
settings: {
react: {
version: 'detect'
}
},
rules: {
'filenames/match-exported': ['error'],
// ECMAScript 6
'arrow-body-style': [0],
'arrow-parens': ['error', 'always'],
'arrow-spacing': ['error', { before: true, after: true }],
'constructor-super': 'error',
'generator-star-spacing': 'off',
'no-class-assign': 'error',
'no-confusing-arrow': 'error',
'no-const-assign': 'error',
'no-dupe-class-members': 'error',
'no-duplicate-imports': 'error',
'no-new-symbol': 'error',
'no-this-before-super': 'error',
'no-useless-escape': 'error',
'no-useless-computed-key': 'error',
'no-useless-constructor': 'error',
'no-var': 'warn',
'object-shorthand': ['error', 'properties'],
'prefer-arrow-callback': 'error',
'prefer-const': 'warn',
'prefer-reflect': 'off',
'prefer-rest-params': 'off',
'prefer-spread': 'warn',
'prefer-template': 'error',
'require-yield': 'off',
'template-curly-spacing': ['error', 'never'],
'yield-star-spacing': 'off',
// Possible Errors
'comma-dangle': 'error',
'no-cond-assign': 'error',
'no-console': 'off',
'no-constant-condition': 'warn',
'no-control-regex': 'error',
'no-debugger': 'off',
'no-dupe-args': 'error',
'no-dupe-keys': 'error',
'no-duplicate-case': 'error',
'no-empty': 'warn',
'no-empty-character-class': 'error',
'no-ex-assign': 'error',
'no-extra-boolean-cast': 'error',
'no-extra-parens': ['error', 'functions'],
'no-extra-semi': 'error',
'no-func-assign': 'error',
'no-inner-declarations': 'error',
'no-invalid-regexp': 'error',
'no-irregular-whitespace': 'error',
'no-negated-in-lhs': 'error',
'no-obj-calls': 'error',
'no-regex-spaces': 'error',
'no-sparse-arrays': 'error',
'no-unexpected-multiline': 'error',
'no-unreachable': 'warn',
'no-unsafe-finally': 'error',
'use-isnan': 'error',
'valid-jsdoc': 'off',
'valid-typeof': 'error',
// Best Practices
'accessor-pairs': 'off',
'array-callback-return': 'warn',
'block-scoped-var': 'warn',
'consistent-return': 'off',
curly: 'error',
'default-case': 'error',
'dot-location': ['error', 'property'],
'dot-notation': 'error',
eqeqeq: ['error', 'smart'],
'guard-for-in': 'error',
'no-alert': 'warn',
'no-caller': 'error',
'no-case-declarations': 'error',
'no-div-regex': 'error',
'no-else-return': 'error',
'no-empty-function': ['error', { allow: ['arrowFunctions'] }],
'no-empty-pattern': 'error',
'no-eval': 'error',
'no-extend-native': 'error',
'no-extra-bind': 'error',
'no-fallthrough': 'error',
'no-floating-decimal': 'error',
'no-implicit-coercion': ['error', {
boolean: false,
number: true,
string: true,
allow: [/* "!!", "~", "*", "+" */]
}],
'no-implicit-globals': 'error',
'no-implied-eval': 'error',
'no-invalid-this': 'off',
'no-iterator': 'error',
'no-labels': 'error',
'no-lone-blocks': 'error',
'no-loop-func': 'error',
'no-magic-numbers': ['off', { ignoreArrayIndexes: true, ignore: [0, 1] }],
'no-multi-spaces': 'error',
'no-multi-str': 'error',
'no-native-reassign': ['error', { exceptions: ['console'] }],
'no-new': 'off',
'no-new-func': 'error',
'no-new-wrappers': 'error',
'no-octal': 'error',
'no-octal-escape': 'error',
'no-param-reassign': 'off',
'no-process-env': 'off',
'no-proto': 'error',
'no-redeclare': 'error',
'no-return-assign': 'warn',
'no-script-url': 'error',
'no-self-assign': 'error',
'no-self-compare': 'error',
'no-sequences': 'error',
'no-throw-literal': 'error',
'no-unmodified-loop-condition': 'error',
'no-unused-expressions': 'error',
'no-unused-labels': 'error',
'no-useless-call': 'error',
'no-useless-concat': 'error',
'no-void': 'error',
'no-warning-comments': 'off',
'no-with': 'error',
radix: ['error', 'as-needed'],
'vars-on-top': 'off',
'wrap-iife': ['error', 'inside'],
yoda: 'error',
// Strict Mode
strict: ['error', 'never'],
// Variables
'init-declarations': ['error', 'always'],
'no-catch-shadow': 'error',
'no-delete-var': 'error',
'no-label-var': 'error',
'no-restricted-globals': 'off',
'no-shadow': 'error',
'no-shadow-restricted-names': 'error',
'no-undef': 'error',
'no-undef-init': 'off',
'no-undefined': 'off',
'no-unused-vars': ['error', { args: 'none', ignoreRestSiblings: true }],
'no-use-before-define': 'error',
// Node.js and CommonJS
'callback-return': 'warn',
'global-require': 'error',
'handle-callback-err': 'warn',
'no-mixed-requires': 'error',
'no-new-require': 'error',
'no-path-concat': 'error',
'no-process-exit': 'error',
// Stylistic Issues
'array-bracket-spacing': ['error', 'never'],
'block-spacing': ['error', 'always'],
'brace-style': ['error', '1tbs', { allowSingleLine: false }],
camelcase: 'off',
'comma-spacing': ['error', { before: false, after: true }],
'comma-style': ['error', 'last'],
'computed-property-spacing': ['error', 'never'],
'consistent-this': ['error', 'self'],
'eol-last': 'error',
'func-names': 'off',
'func-style': ['error', 'declaration'],
indent: ['error', 2, { SwitchCase: 1 }],
'key-spacing': ['error', { beforeColon: false, afterColon: true }],
'keyword-spacing': ['error', { before: true, after: true }],
'lines-around-comment': ['error', { beforeBlockComment: true, afterBlockComment: false }],
'max-depth': ['error', { maximum: 5 }],
'max-nested-callbacks': ['error', 4],
'max-statements': 'off',
'max-statements-per-line': ['error', { max: 1 }],
'new-cap': ['error', { capIsNewExceptions: ['$.Deferred', 'DragDropContext', 'DragLayer', 'DragSource', 'DropTarget'] }],
'new-parens': 'error',
'newline-after-var': 'off',
'newline-before-return': 'off',
'newline-per-chained-call': 'off',
'no-array-constructor': 'error',
'no-bitwise': 'error',
'no-continue': 'error',
'no-inline-comments': 'off',
'no-lonely-if': 'warn',
'no-mixed-spaces-and-tabs': 'error',
'no-multiple-empty-lines': ['error', { max: 1 }],
'no-negated-condition': 'warn',
'no-nested-ternary': 'error',
'no-new-object': 'error',
'no-plusplus': 'off',
'no-restricted-syntax': 'off',
'no-spaced-func': 'error',
'no-ternary': 'off',
'no-trailing-spaces': 'error',
'no-underscore-dangle': ['error', { allowAfterThis: true }],
'no-unneeded-ternary': 'error',
'no-whitespace-before-property': 'error',
'object-curly-spacing': ['error', 'always'],
'one-var': ['error', 'never'],
'one-var-declaration-per-line': ['error', 'always'],
'operator-assignment': ['off', 'never'],
'operator-linebreak': ['error', 'after'],
'quote-props': ['error', 'as-needed'],
quotes: ['error', 'single'],
'require-jsdoc': 'off',
semi: 'error',
'semi-spacing': ['error', { before: false, after: true }],
'sort-vars': 'off',
'space-before-blocks': ['error', 'always'],
'space-before-function-paren': ['error', 'never'],
'space-in-parens': 'off',
'space-infix-ops': 'off',
'space-unary-ops': 'off',
'spaced-comment': 'error',
'wrap-regex': 'error',
// ImportSort
'simple-import-sort/sort': 'error',
'import/newline-after-import': 'error',
// React
'react/jsx-boolean-value': [2, 'always'],
'react/jsx-uses-vars': 2,
'react/jsx-closing-bracket-location': 2,
'react/jsx-tag-spacing': ['error'],
'react/jsx-curly-spacing': [2, 'never'],
'react/jsx-equals-spacing': [2, 'never'],
'react/jsx-indent-props': [2, 2],
'react/jsx-indent': [2, 2, { indentLogicalExpressions: true }],
'react/jsx-key': 2,
'react/jsx-no-bind': [2, { allowArrowFunctions: true }],
'react/jsx-no-duplicate-props': [2, { ignoreCase: true }],
'react/jsx-max-props-per-line': [2, { maximum: 2 }],
'react/jsx-handler-names': [2, { eventHandlerPrefix: '(on|dispatch)', eventHandlerPropPrefix: 'on' }],
'react/jsx-no-undef': 2,
'react/jsx-pascal-case': 2,
'react/jsx-uses-react': 2,
// Explicitly disabled in case we want to enable them again
'react/no-did-mount-set-state': 0,
'react/no-did-update-set-state': 0,
'react/no-direct-mutation-state': 2,
'react/no-multi-comp': [2, { ignoreStateless: true }],
'react/no-unknown-property': 2,
'react/prefer-es6-class': 2,
'react/prop-types': 2,
'react/react-in-jsx-scope': 2,
'react/self-closing-comp': 2,
'react/sort-comp': 2,
'react/jsx-wrap-multilines': 2
},
overrides: [
{
files: ['*.js'],
rules: {
'simple-import-sort/sort': [
'error',
{
groups: [
// Packages
// Absolute Paths
// Relative Paths
// Css
['^@?\\w', `^(${dirs})(/.*|$)`, '^\\.', '^\\..*css$']
]
}
]
}
}
]
};

View File

@@ -24,7 +24,7 @@
"ignoreAtRules": [
"/^add\\-mixin$/",
"/^define\\-mixin$/"
]
]
}
],
"at-rule-no-vendor-prefix": true,
@@ -75,7 +75,7 @@
"function-parentheses-newline-inside": "never-multi-line",
"function-parentheses-space-inside": "never",
"function-url-quotes": "always",
"function-url-scheme-blacklist": [
"function-url-scheme-disallowed-list": [
"data"
],
"function-whitespace-after": "always",

View File

@@ -11,7 +11,7 @@ gulp.task('build',
'copyHtml',
'copyFonts',
'copyImages',
'copyJs'
'copyRobots'
)
)
);

View File

@@ -5,17 +5,6 @@ const cache = require('gulp-cached');
const livereload = require('gulp-livereload');
const paths = require('./helpers/paths.js');
gulp.task('copyJs', () => {
return gulp.src(
[
path.join(paths.src.root, 'polyfills.js')
], { base: paths.src.root })
.pipe(cache('copyJs'))
.pipe(print())
.pipe(gulp.dest(paths.dest.root))
.pipe(livereload());
});
gulp.task('copyHtml', () => {
return gulp.src(paths.src.html, { base: paths.src.root })
.pipe(cache('copyHtml'))
@@ -43,3 +32,11 @@ gulp.task('copyImages', () => {
.pipe(gulp.dest(paths.dest.root))
.pipe(livereload());
});
gulp.task('copyRobots', () => {
return gulp.src(paths.src.robots, { base: paths.src.root })
.pipe(cache('copyRobots'))
.pipe(print())
.pipe(gulp.dest(paths.dest.root))
.pipe(livereload());
});

View File

@@ -8,6 +8,7 @@ const paths = {
content: `${root}/Content/`,
fonts: `${root}/Content/Fonts/`,
images: `${root}/Content/Images/`,
robots: `${root}/Content/robots.txt`,
exclude: {
libs: `!${root}/JsLibraries/**`
}

View File

@@ -13,6 +13,7 @@ function watch() {
gulpWatch(paths.src.html, gulp.series('copyHtml'));
gulpWatch(`${paths.src.fonts}**/*.*`, gulp.series('copyFonts'));
gulpWatch(`${paths.src.images}**/*.*`, gulp.series('copyImages'));
gulpWatch(paths.src.robots, gulp.series('copyRobots'));
}
gulp.task('watch', gulp.series('build', watch));

View File

@@ -4,8 +4,10 @@ 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';
@@ -13,6 +15,7 @@ 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);
@@ -30,14 +33,19 @@ const cssVarsFiles = [
].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.head.map((v) => {
v.attributes = { rel: 'stylesheet', type: 'text/css', href: `/${v.attributes.href.replace('\\', '/')}` };
return this.createHtmlTag(v);
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.body.map((v) => {
const body = assetTags.bodyTags.map((v) => {
v.attributes = { src: `/${v.attributes.src}` };
return this.createHtmlTag(v);
return HtmlWebpackPluginHtmlTags.htmlTagObjectToString(v, this.options.xhtml);
});
return html
@@ -46,6 +54,8 @@ HtmlWebpackPlugin.prototype.injectAssetsIntoHtml = function(html, assets, assetT
};
const plugins = [
new OptimizeCssAssetsPlugin({}),
new webpack.DefinePlugin({
__DEV__: !isProduction,
'process.env.NODE_ENV': isProduction ? JSON.stringify('production') : JSON.stringify('development')
@@ -121,7 +131,8 @@ const config = {
use: {
loader: 'worker-loader',
options: {
name: '[name].js'
filename: '[name].js',
inline: inlineWebWorkers
}
}
},
@@ -251,7 +262,7 @@ gulp.task('webpack', () => {
gulp.task('webpackWatch', () => {
config.watch = true;
return webpackStream(config)
return webpackStream(config, webpack)
.on('error', errorHandler)
.pipe(gulp.dest('_output/UI'))
.on('error', errorHandler)

20
frontend/jsconfig.json Normal file
View File

@@ -0,0 +1,20 @@
{
"compilerOptions": {
"target": "es6",
"checkJs": false,
"baseUrl": "src",
"jsx": "react",
"module": "commonjs",
"moduleResolution": "node",
"paths": {
"*": [
"*"
]
}
},
"include": [
"./src/**/*"
],
"exclude": [
]
}

View File

@@ -1,20 +1,94 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { align, icons } from 'Helpers/Props';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import ConfirmModal from 'Components/Modal/ConfirmModal';
import PageContent from 'Components/Page/PageContent';
import PageContentBody from 'Components/Page/PageContentBody';
import PageToolbar from 'Components/Page/Toolbar/PageToolbar';
import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';
import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';
import TablePager from 'Components/Table/TablePager';
import PageContent from 'Components/Page/PageContent';
import PageContentBodyConnector from 'Components/Page/PageContentBodyConnector';
import PageToolbar from 'Components/Page/Toolbar/PageToolbar';
import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';
import { align, icons, kinds } from 'Helpers/Props';
import getRemovedItems from 'Utilities/Object/getRemovedItems';
import hasDifferentItems from 'Utilities/Object/hasDifferentItems';
import translate from 'Utilities/String/translate';
import getSelectedIds from 'Utilities/Table/getSelectedIds';
import removeOldSelectedState from 'Utilities/Table/removeOldSelectedState';
import selectAll from 'Utilities/Table/selectAll';
import toggleSelected from 'Utilities/Table/toggleSelected';
import BlacklistRowConnector from './BlacklistRowConnector';
class Blacklist extends Component {
//
// Lifecycle
constructor(props, context) {
super(props, context);
this.state = {
allSelected: false,
allUnselected: false,
lastToggled: null,
selectedState: {},
isConfirmRemoveModalOpen: false,
items: props.items
};
}
componentDidUpdate(prevProps) {
const {
items
} = this.props;
if (hasDifferentItems(prevProps.items, items)) {
this.setState((state) => {
return {
...removeOldSelectedState(state, getRemovedItems(prevProps.items, items)),
items
};
});
return;
}
}
//
// Control
getSelectedIds = () => {
return getSelectedIds(this.state.selectedState);
}
//
// Listeners
onSelectAllChange = ({ value }) => {
this.setState(selectAll(this.state.selectedState, value));
}
onSelectedChange = ({ id, value, shiftKey = false }) => {
this.setState((state) => {
return toggleSelected(state, this.props.items, id, value, shiftKey);
});
}
onRemoveSelectedPress = () => {
this.setState({ isConfirmRemoveModalOpen: true });
}
onRemoveSelectedConfirmed = () => {
this.props.onRemoveSelected(this.getSelectedIds());
this.setState({ isConfirmRemoveModalOpen: false });
}
onConfirmRemoveModalClose = () => {
this.setState({ isConfirmRemoveModalOpen: false });
}
//
// Render
@@ -26,17 +100,35 @@ class Blacklist extends Component {
items,
columns,
totalRecords,
isRemoving,
isClearingBlacklistExecuting,
onClearBlacklistPress,
...otherProps
} = this.props;
const {
allSelected,
allUnselected,
selectedState,
isConfirmRemoveModalOpen
} = this.state;
const selectedIds = this.getSelectedIds();
return (
<PageContent title="Blacklist">
<PageContent title={translate('Blacklist')}>
<PageToolbar>
<PageToolbarSection>
<PageToolbarButton
label="Clear"
label="Remove Selected"
iconName={icons.REMOVE}
isDisabled={!selectedIds.length}
isSpinning={isRemoving}
onPress={this.onRemoveSelectedPress}
/>
<PageToolbarButton
label={translate('Clear')}
iconName={icons.CLEAR}
isSpinning={isClearingBlacklistExecuting}
onPress={onClearBlacklistPress}
@@ -49,14 +141,14 @@ class Blacklist extends Component {
columns={columns}
>
<PageToolbarButton
label="Options"
label={translate('Options')}
iconName={icons.TABLE}
/>
</TableOptionsModalWrapper>
</PageToolbarSection>
</PageToolbar>
<PageContentBodyConnector>
<PageContentBody>
{
isFetching && !isPopulated &&
<LoadingIndicator />
@@ -64,13 +156,15 @@ class Blacklist extends Component {
{
!isFetching && !!error &&
<div>Unable to load blacklist</div>
<div>
{translate('UnableToLoadBlacklist')}
</div>
}
{
isPopulated && !error && !items.length &&
<div>
No history blacklist
{translate('NoHistory')}
</div>
}
@@ -78,8 +172,12 @@ class Blacklist extends Component {
isPopulated && !error && !!items.length &&
<div>
<Table
selectAll={true}
allSelected={allSelected}
allUnselected={allUnselected}
columns={columns}
{...otherProps}
onSelectAllChange={this.onSelectAllChange}
>
<TableBody>
{
@@ -87,8 +185,10 @@ class Blacklist extends Component {
return (
<BlacklistRowConnector
key={item.id}
isSelected={selectedState[item.id] || false}
columns={columns}
{...item}
onSelectedChange={this.onSelectedChange}
/>
);
})
@@ -103,7 +203,17 @@ class Blacklist extends Component {
/>
</div>
}
</PageContentBodyConnector>
</PageContentBody>
<ConfirmModal
isOpen={isConfirmRemoveModalOpen}
kind={kinds.DANGER}
title={translate('RemoveSelected')}
message={translate('AreYouSureYouWantToRemoveTheSelectedItemsFromBlacklist')}
confirmLabel={translate('RemoveSelected')}
onConfirm={this.onRemoveSelectedConfirmed}
onCancel={this.onConfirmRemoveModalClose}
/>
</PageContent>
);
}
@@ -116,7 +226,9 @@ Blacklist.propTypes = {
items: PropTypes.arrayOf(PropTypes.object).isRequired,
columns: PropTypes.arrayOf(PropTypes.object).isRequired,
totalRecords: PropTypes.number,
isRemoving: PropTypes.bool.isRequired,
isClearingBlacklistExecuting: PropTypes.bool.isRequired,
onRemoveSelected: PropTypes.func.isRequired,
onClearBlacklistPress: PropTypes.func.isRequired
};

View File

@@ -2,12 +2,12 @@ import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator';
import * as commandNames from 'Commands/commandNames';
import withCurrentPage from 'Components/withCurrentPage';
import createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';
import * as blacklistActions from 'Store/Actions/blacklistActions';
import { executeCommand } from 'Store/Actions/commandActions';
import * as commandNames from 'Commands/commandNames';
import createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';
import { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator';
import Blacklist from './Blacklist';
function createMapStateToProps() {
@@ -89,6 +89,10 @@ class BlacklistConnector extends Component {
this.props.gotoBlacklistPage({ page });
}
onRemoveSelected = (ids) => {
this.props.removeBlacklistItems({ ids });
}
onSortPress = (sortKey) => {
this.props.setBlacklistSort({ sortKey });
}
@@ -124,6 +128,7 @@ class BlacklistConnector extends Component {
onNextPagePress={this.onNextPagePress}
onLastPagePress={this.onLastPagePress}
onPageSelect={this.onPageSelect}
onRemoveSelected={this.onRemoveSelected}
onSortPress={this.onSortPress}
onTableOptionChange={this.onTableOptionChange}
onClearBlacklistPress={this.onClearBlacklistPress}
@@ -143,6 +148,7 @@ BlacklistConnector.propTypes = {
gotoBlacklistNextPage: PropTypes.func.isRequired,
gotoBlacklistLastPage: PropTypes.func.isRequired,
gotoBlacklistPage: PropTypes.func.isRequired,
removeBlacklistItems: PropTypes.func.isRequired,
setBlacklistSort: PropTypes.func.isRequired,
setBlacklistTableOption: PropTypes.func.isRequired,
clearBlacklist: PropTypes.func.isRequired,

View File

@@ -1,13 +1,14 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import Button from 'Components/Link/Button';
import DescriptionList from 'Components/DescriptionList/DescriptionList';
import DescriptionListItem from 'Components/DescriptionList/DescriptionListItem';
import Button from 'Components/Link/Button';
import Modal from 'Components/Modal/Modal';
import ModalContent from 'Components/Modal/ModalContent';
import ModalHeader from 'Components/Modal/ModalHeader';
import ModalBody from 'Components/Modal/ModalBody';
import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import translate from 'Utilities/String/translate';
class BlacklistDetailsModal extends Component {
@@ -39,19 +40,19 @@ class BlacklistDetailsModal extends Component {
<ModalBody>
<DescriptionList>
<DescriptionListItem
title="Name"
title={translate('Name')}
data={sourceTitle}
/>
<DescriptionListItem
title="Protocol"
title={translate('Protocol')}
data={protocol}
/>
{
!!message &&
<DescriptionListItem
title="Indexer"
title={translate('Indexer')}
data={indexer}
/>
}
@@ -59,7 +60,7 @@ class BlacklistDetailsModal extends Component {
{
!!message &&
<DescriptionListItem
title="Message"
title={translate('Message')}
data={message}
/>
}
@@ -68,7 +69,7 @@ class BlacklistDetailsModal extends Component {
<ModalFooter>
<Button onPress={onModalClose}>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>

View File

@@ -1,14 +1,16 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { icons, kinds } from 'Helpers/Props';
import IconButton from 'Components/Link/IconButton';
import RelativeDateCellConnector from 'Components/Table/Cells/RelativeDateCellConnector';
import TableRow from 'Components/Table/TableRow';
import TableRowCell from 'Components/Table/Cells/TableRowCell';
import MovieQuality from 'Movie/MovieQuality';
import TableSelectCell from 'Components/Table/Cells/TableSelectCell';
import TableRow from 'Components/Table/TableRow';
import { icons, kinds } from 'Helpers/Props';
import MovieFormats from 'Movie/MovieFormats';
import MovieLanguage from 'Movie/MovieLanguage';
import MovieQuality from 'Movie/MovieQuality';
import MovieTitleLink from 'Movie/MovieTitleLink';
import translate from 'Utilities/String/translate';
import BlacklistDetailsModal from './BlacklistDetailsModal';
import styles from './BlacklistRow.css';
@@ -41,6 +43,7 @@ class BlacklistRow extends Component {
render() {
const {
id,
movie,
sourceTitle,
quality,
@@ -50,7 +53,9 @@ class BlacklistRow extends Component {
protocol,
indexer,
message,
isSelected,
columns,
onSelectedChange,
onRemovePress
} = this.props;
@@ -60,6 +65,12 @@ class BlacklistRow extends Component {
return (
<TableRow>
<TableSelectCell
id={id}
isSelected={isSelected}
onSelectedChange={onSelectedChange}
/>
{
columns.map((column) => {
const {
@@ -155,7 +166,7 @@ class BlacklistRow extends Component {
/>
<IconButton
title="Remove from blacklist"
title={translate('RemoveFromBlacklist')}
name={icons.REMOVE}
kind={kinds.DANGER}
onPress={onRemovePress}
@@ -193,7 +204,9 @@ BlacklistRow.propTypes = {
protocol: PropTypes.string.isRequired,
indexer: PropTypes.string,
message: PropTypes.string,
isSelected: PropTypes.bool.isRequired,
columns: PropTypes.arrayOf(PropTypes.object).isRequired,
onSelectedChange: PropTypes.func.isRequired,
onRemovePress: PropTypes.func.isRequired
};

View File

@@ -1,6 +1,6 @@
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import { removeFromBlacklist } from 'Store/Actions/blacklistActions';
import { removeBlacklistItem } from 'Store/Actions/blacklistActions';
import createMovieSelector from 'Store/Selectors/createMovieSelector';
import BlacklistRow from './BlacklistRow';
@@ -18,7 +18,7 @@ function createMapStateToProps() {
function createMapDispatchToProps(dispatch, props) {
return {
onRemovePress() {
dispatch(removeFromBlacklist({ id: props.id }));
dispatch(removeBlacklistItem({ id: props.id }));
}
};
}

View File

@@ -1,12 +1,13 @@
import PropTypes from 'prop-types';
import React from 'react';
import formatDateTime from 'Utilities/Date/formatDateTime';
import formatAge from 'Utilities/Number/formatAge';
import Link from 'Components/Link/Link';
import DescriptionList from 'Components/DescriptionList/DescriptionList';
import DescriptionListItem from 'Components/DescriptionList/DescriptionListItem';
import DescriptionListItemTitle from 'Components/DescriptionList/DescriptionListItemTitle';
import DescriptionListItemDescription from 'Components/DescriptionList/DescriptionListItemDescription';
import DescriptionListItemTitle from 'Components/DescriptionList/DescriptionListItemTitle';
import Link from 'Components/Link/Link';
import formatDateTime from 'Utilities/Date/formatDateTime';
import formatAge from 'Utilities/Number/formatAge';
import translate from 'Utilities/String/translate';
import styles from './HistoryDetails.css';
function HistoryDetails(props) {
@@ -35,14 +36,14 @@ function HistoryDetails(props) {
<DescriptionList>
<DescriptionListItem
descriptionClassName={styles.description}
title="Name"
title={translate('Name')}
data={sourceTitle}
/>
{
!!indexer &&
<DescriptionListItem
title="Indexer"
title={translate('Indexer')}
data={indexer}
/>
}
@@ -51,7 +52,7 @@ function HistoryDetails(props) {
!!releaseGroup &&
<DescriptionListItem
descriptionClassName={styles.description}
title="Release Group"
title={translate('ReleaseGroup')}
data={releaseGroup}
/>
}
@@ -72,7 +73,7 @@ function HistoryDetails(props) {
{
!!downloadClient &&
<DescriptionListItem
title="Download Client"
title={translate('DownloadClient')}
data={downloadClient}
/>
}
@@ -80,7 +81,7 @@ function HistoryDetails(props) {
{
!!downloadId &&
<DescriptionListItem
title="Grab ID"
title={translate('GrabID')}
data={downloadId}
/>
}
@@ -88,7 +89,7 @@ function HistoryDetails(props) {
{
!!indexer &&
<DescriptionListItem
title="Age (when grabbed)"
title={translate('AgeWhenGrabbed')}
data={formatAge(age, ageHours, ageMinutes)}
/>
}
@@ -96,7 +97,7 @@ function HistoryDetails(props) {
{
!!publishedDate &&
<DescriptionListItem
title="Published Date"
title={translate('PublishedDate')}
data={formatDateTime(publishedDate, shortDateFormat, timeFormat, { includeSeconds: true })}
/>
}
@@ -113,14 +114,14 @@ function HistoryDetails(props) {
<DescriptionList>
<DescriptionListItem
descriptionClassName={styles.description}
title="Name"
title={translate('Name')}
data={sourceTitle}
/>
{
!!message &&
<DescriptionListItem
title="Message"
title={translate('Message')}
data={message}
/>
}
@@ -138,7 +139,7 @@ function HistoryDetails(props) {
<DescriptionList>
<DescriptionListItem
descriptionClassName={styles.description}
title="Name"
title={translate('Name')}
data={sourceTitle}
/>
@@ -146,7 +147,7 @@ function HistoryDetails(props) {
!!droppedPath &&
<DescriptionListItem
descriptionClassName={styles.description}
title="Source"
title={translate('Source')}
data={droppedPath}
/>
}
@@ -155,7 +156,7 @@ function HistoryDetails(props) {
!!importedPath &&
<DescriptionListItem
descriptionClassName={styles.description}
title="Imported To"
title={translate('ImportedTo')}
data={importedPath}
/>
}
@@ -172,13 +173,13 @@ function HistoryDetails(props) {
switch (reason) {
case 'Manual':
reasonMessage = 'File was deleted by via UI';
reasonMessage = translate('FileWasDeletedByViaUI');
break;
case 'MissingFromDisk':
reasonMessage = 'Radarr was unable to find the file on disk so it was removed';
reasonMessage = translate('MissingFromDisk');
break;
case 'Upgrade':
reasonMessage = 'File was deleted to import an upgrade';
reasonMessage = translate('FileWasDeletedByUpgrade');
break;
default:
reasonMessage = '';
@@ -187,12 +188,12 @@ function HistoryDetails(props) {
return (
<DescriptionList>
<DescriptionListItem
title="Name"
title={translate('Name')}
data={sourceTitle}
/>
<DescriptionListItem
title="Reason"
title={translate('Reason')}
data={reasonMessage}
/>
</DescriptionList>
@@ -210,22 +211,22 @@ function HistoryDetails(props) {
return (
<DescriptionList>
<DescriptionListItem
title="Source Path"
title={translate('SourcePath')}
data={sourcePath}
/>
<DescriptionListItem
title="Source Relative Path"
title={translate('SourceRelativePath')}
data={sourceRelativePath}
/>
<DescriptionListItem
title="Destination Path"
title={translate('DestinationPath')}
data={path}
/>
<DescriptionListItem
title="Destination Relative Path"
title={translate('DestinationRelativePath')}
data={relativePath}
/>
</DescriptionList>
@@ -241,14 +242,14 @@ function HistoryDetails(props) {
<DescriptionList>
<DescriptionListItem
descriptionClassName={styles.description}
title="Name"
title={translate('Name')}
data={sourceTitle}
/>
{
!!message &&
<DescriptionListItem
title="Message"
title={translate('Message')}
data={message}
/>
}
@@ -260,7 +261,7 @@ function HistoryDetails(props) {
<DescriptionList>
<DescriptionListItem
descriptionClassName={styles.description}
title="Name"
title={translate('Name')}
data={sourceTitle}
/>
</DescriptionList>

View File

@@ -1,4 +1,3 @@
import _ from 'lodash';
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';
@@ -8,10 +7,10 @@ function createMapStateToProps() {
return createSelector(
createUISettingsSelector(),
(uiSettings) => {
return _.pick(uiSettings, [
'shortDateFormat',
'timeFormat'
]);
return {
shortDateFormat: uiSettings.shortDateFormat,
timeFormat: uiSettings.timeFormat
};
}
);
}

View File

@@ -1,13 +1,14 @@
import PropTypes from 'prop-types';
import React from 'react';
import { kinds } from 'Helpers/Props';
import Button from 'Components/Link/Button';
import SpinnerButton from 'Components/Link/SpinnerButton';
import Modal from 'Components/Modal/Modal';
import ModalContent from 'Components/Modal/ModalContent';
import ModalHeader from 'Components/Modal/ModalHeader';
import ModalBody from 'Components/Modal/ModalBody';
import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import HistoryDetails from './HistoryDetails';
import styles from './HistoryDetailsModal.css';
@@ -79,7 +80,7 @@ function HistoryDetailsModal(props) {
<Button
onPress={onModalClose}
>
Close
{translate('Close')}
</Button>
</ModalFooter>
</ModalContent>

View File

@@ -1,17 +1,18 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { align, icons } from 'Helpers/Props';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import FilterMenu from 'Components/Menu/FilterMenu';
import PageContent from 'Components/Page/PageContent';
import PageContentBody from 'Components/Page/PageContentBody';
import PageToolbar from 'Components/Page/Toolbar/PageToolbar';
import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';
import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';
import TablePager from 'Components/Table/TablePager';
import PageContent from 'Components/Page/PageContent';
import PageContentBodyConnector from 'Components/Page/PageContentBodyConnector';
import PageToolbar from 'Components/Page/Toolbar/PageToolbar';
import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';
import FilterMenu from 'Components/Menu/FilterMenu';
import { align, icons } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import HistoryRowConnector from './HistoryRowConnector';
class History extends Component {
@@ -42,11 +43,11 @@ class History extends Component {
const hasError = error || moviesError;
return (
<PageContent title="History">
<PageContent title={translate('History')}>
<PageToolbar>
<PageToolbarSection>
<PageToolbarButton
label="Refresh"
label={translate('Refresh')}
iconName={icons.REFRESH}
isSpinning={isFetching}
onPress={onFirstPagePress}
@@ -59,7 +60,7 @@ class History extends Component {
columns={columns}
>
<PageToolbarButton
label="Options"
label={translate('Options')}
iconName={icons.TABLE}
/>
</TableOptionsModalWrapper>
@@ -74,7 +75,7 @@ class History extends Component {
</PageToolbarSection>
</PageToolbar>
<PageContentBodyConnector>
<PageContentBody>
{
isFetchingAny && !isAllPopulated &&
<LoadingIndicator />
@@ -82,7 +83,9 @@ class History extends Component {
{
!isFetchingAny && hasError &&
<div>Unable to load history</div>
<div>
{translate('UnableToLoadHistory')}
</div>
}
{
@@ -91,7 +94,7 @@ class History extends Component {
isPopulated && !hasError && !items.length &&
<div>
No history found
{translate('NoHistory')}
</div>
}
@@ -125,7 +128,7 @@ class History extends Component {
/>
</div>
}
</PageContentBodyConnector>
</PageContentBody>
</PageContent>
);
}

View File

@@ -2,9 +2,9 @@ import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator';
import withCurrentPage from 'Components/withCurrentPage';
import * as historyActions from 'Store/Actions/historyActions';
import { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator';
import History from './History';
function createMapStateToProps() {

View File

@@ -1,8 +1,8 @@
import PropTypes from 'prop-types';
import React from 'react';
import { icons, kinds } from 'Helpers/Props';
import Icon from 'Components/Icon';
import TableRowCell from 'Components/Table/Cells/TableRowCell';
import { icons, kinds } from 'Helpers/Props';
import styles from './HistoryEventTypeCell.css';
function getIconName(eventType) {

View File

@@ -1,16 +1,16 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { icons } from 'Helpers/Props';
import IconButton from 'Components/Link/IconButton';
import RelativeDateCellConnector from 'Components/Table/Cells/RelativeDateCellConnector';
import TableRow from 'Components/Table/TableRow';
import TableRowCell from 'Components/Table/Cells/TableRowCell';
import MovieQuality from 'Movie/MovieQuality';
import TableRow from 'Components/Table/TableRow';
import { icons } from 'Helpers/Props';
import MovieFormats from 'Movie/MovieFormats';
import MovieLanguage from 'Movie/MovieLanguage';
import MovieQuality from 'Movie/MovieQuality';
import MovieTitleLink from 'Movie/MovieTitleLink';
import HistoryEventTypeCell from './HistoryEventTypeCell';
import HistoryDetailsModal from './Details/HistoryDetailsModal';
import HistoryEventTypeCell from './HistoryEventTypeCell';
import styles from './HistoryRow.css';
class HistoryRow extends Component {

View File

@@ -1,27 +1,28 @@
import _ from 'lodash';
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import PageContent from 'Components/Page/PageContent';
import PageContentBody from 'Components/Page/PageContentBody';
import PageToolbar from 'Components/Page/Toolbar/PageToolbar';
import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';
import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
import PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';
import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';
import TablePager from 'Components/Table/TablePager';
import { align, icons } from 'Helpers/Props';
import getRemovedItems from 'Utilities/Object/getRemovedItems';
import hasDifferentItems from 'Utilities/Object/hasDifferentItems';
import translate from 'Utilities/String/translate';
import getSelectedIds from 'Utilities/Table/getSelectedIds';
import removeOldSelectedState from 'Utilities/Table/removeOldSelectedState';
import selectAll from 'Utilities/Table/selectAll';
import toggleSelected from 'Utilities/Table/toggleSelected';
import { align, icons } from 'Helpers/Props';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import TablePager from 'Components/Table/TablePager';
import PageContent from 'Components/Page/PageContent';
import PageContentBodyConnector from 'Components/Page/PageContentBodyConnector';
import PageToolbar from 'Components/Page/Toolbar/PageToolbar';
import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';
import PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';
import TableOptionsModalWrapper from 'Components/Table/TableOptions/TableOptionsModalWrapper';
import RemoveQueueItemsModal from './RemoveQueueItemsModal';
import QueueOptionsConnector from './QueueOptionsConnector';
import QueueRowConnector from './QueueRowConnector';
import RemoveQueueItemsModal from './RemoveQueueItemsModal';
class Queue extends Component {
@@ -148,11 +149,11 @@ class Queue extends Component {
const disableSelectedActions = selectedCount === 0;
return (
<PageContent title="Queue">
<PageContent title={translate('Queue')}>
<PageToolbar>
<PageToolbarSection>
<PageToolbarButton
label="Refresh"
label={translate('Refresh')}
iconName={icons.REFRESH}
isSpinning={isRefreshing}
onPress={onRefreshPress}
@@ -161,7 +162,7 @@ class Queue extends Component {
<PageToolbarSeparator />
<PageToolbarButton
label="Grab Selected"
label={translate('GrabSelected')}
iconName={icons.DOWNLOAD}
isDisabled={disableSelectedActions || !isPendingSelected}
isSpinning={isGrabbing}
@@ -169,7 +170,7 @@ class Queue extends Component {
/>
<PageToolbarButton
label="Remove Selected"
label={translate('RemoveSelected')}
iconName={icons.REMOVE}
isDisabled={disableSelectedActions}
isSpinning={isRemoving}
@@ -186,14 +187,14 @@ class Queue extends Component {
optionsComponent={QueueOptionsConnector}
>
<PageToolbarButton
label="Options"
label={translate('Options')}
iconName={icons.TABLE}
/>
</TableOptionsModalWrapper>
</PageToolbarSection>
</PageToolbar>
<PageContentBodyConnector>
<PageContentBody>
{
isRefreshing && !isAllPopulated &&
<LoadingIndicator />
@@ -202,14 +203,14 @@ class Queue extends Component {
{
!isRefreshing && hasError &&
<div>
Failed to load Queue
{translate('FailedToLoadQueue')}
</div>
}
{
isPopulated && !hasError && !items.length &&
<div>
Queue is empty
{translate('QueueIsEmpty')}
</div>
}
@@ -250,7 +251,7 @@ class Queue extends Component {
/>
</div>
}
</PageContentBodyConnector>
</PageContentBody>
<RemoveQueueItemsModal
isOpen={isConfirmRemoveModalOpen}

View File

@@ -2,12 +2,12 @@ import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator';
import * as commandNames from 'Commands/commandNames';
import withCurrentPage from 'Components/withCurrentPage';
import createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';
import { executeCommand } from 'Store/Actions/commandActions';
import * as queueActions from 'Store/Actions/queueActions';
import * as commandNames from 'Commands/commandNames';
import createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';
import { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator';
import Queue from './Queue';
function createMapStateToProps() {

View File

@@ -1,8 +1,9 @@
import moment from 'moment';
import PropTypes from 'prop-types';
import React from 'react';
import { icons, kinds } from 'Helpers/Props';
import Icon from 'Components/Icon';
import { icons, kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
function QueueDetails(props) {
const {
@@ -10,20 +11,20 @@ function QueueDetails(props) {
size,
sizeleft,
estimatedCompletionTime,
status: queueStatus,
status,
trackedDownloadState,
trackedDownloadStatus,
errorMessage,
progressBar
} = props;
const status = queueStatus.toLowerCase();
const progress = (100 - sizeleft / size * 100);
const progress = size ? (100 - sizeleft / size * 100) : 0;
if (status === 'pending') {
return (
<Icon
name={icons.PENDING}
title={`Release will be processed ${moment(estimatedCompletionTime).fromNow()}`}
title={translate('ReleaseWillBeProcessedInterp', [moment(estimatedCompletionTime).fromNow()])}
/>
);
}
@@ -34,12 +35,40 @@ function QueueDetails(props) {
<Icon
name={icons.DOWNLOAD}
kind={kinds.DANGER}
title={`Import failed: ${errorMessage}`}
title={translate('ImportFailedInterp', [errorMessage])}
/>
);
}
// TODO: show an icon when download is complete, but not imported yet?
if (trackedDownloadStatus === 'warning') {
return (
<Icon
name={icons.DOWNLOAD}
kind={kinds.WARNING}
title={translate('UnableToImportCheckLogs')}
/>
);
}
if (trackedDownloadState === 'importPending') {
return (
<Icon
name={icons.DOWNLOAD}
kind={kinds.PURPLE}
title={`${translate('Downloaded')} - ${translate('WaitingToImport')}`}
/>
);
}
if (trackedDownloadState === 'importing') {
return (
<Icon
name={icons.DOWNLOAD}
kind={kinds.PURPLE}
title={`${translate('Downloaded')} - ${translate('Importing')}`}
/>
);
}
}
if (errorMessage) {
@@ -47,7 +76,7 @@ function QueueDetails(props) {
<Icon
name={icons.DOWNLOADING}
kind={kinds.DANGER}
title={`Download failed: ${errorMessage}`}
title={translate('DownloadFailedInterp', [errorMessage])}
/>
);
}
@@ -57,7 +86,7 @@ function QueueDetails(props) {
<Icon
name={icons.DOWNLOADING}
kind={kinds.DANGER}
title="Download failed: check download client for more details"
title={translate('DownloadFailedCheckDownloadClientForMoreDetails')}
/>
);
}
@@ -67,7 +96,7 @@ function QueueDetails(props) {
<Icon
name={icons.DOWNLOADING}
kind={kinds.WARNING}
title="Download warning: check download client for more details"
title={translate('DownloadWarningCheckDownloadClientForMoreDetails')}
/>
);
}
@@ -76,7 +105,7 @@ function QueueDetails(props) {
return (
<Icon
name={icons.DOWNLOADING}
title={`Movie is downloading - ${progress.toFixed(1)}% ${title}`}
title={translate('MovieIsDownloadingInterp', [progress.toFixed(1), title])}
/>
);
}
@@ -90,6 +119,8 @@ QueueDetails.propTypes = {
sizeleft: PropTypes.number.isRequired,
estimatedCompletionTime: PropTypes.string,
status: PropTypes.string.isRequired,
trackedDownloadState: PropTypes.string.isRequired,
trackedDownloadStatus: PropTypes.string.isRequired,
errorMessage: PropTypes.string,
progressBar: PropTypes.node.isRequired
};

View File

@@ -1,9 +1,10 @@
import PropTypes from 'prop-types';
import React, { Component, Fragment } from 'react';
import { inputTypes } from 'Helpers/Props';
import FormGroup from 'Components/Form/FormGroup';
import FormLabel from 'Components/Form/FormLabel';
import FormInputGroup from 'Components/Form/FormInputGroup';
import FormLabel from 'Components/Form/FormLabel';
import { inputTypes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
class QueueOptions extends Component {
@@ -54,13 +55,13 @@ class QueueOptions extends Component {
return (
<Fragment>
<FormGroup>
<FormLabel>Show Unknown Movie Items</FormLabel>
<FormLabel>{translate('ShowUnknownMovieItems')}</FormLabel>
<FormInputGroup
type={inputTypes.CHECK}
name="includeUnknownMovieItems"
value={includeUnknownMovieItems}
helpText="Show items without a movie in the queue, this could include removed movie, movies or anything else in Radarr's category"
helpText={translate('IncludeUnknownMovieItemsHelpText')}
onChange={this.onOptionChange}
/>
</FormGroup>

View File

@@ -1,23 +1,24 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import formatBytes from 'Utilities/Number/formatBytes';
import { icons, kinds } from 'Helpers/Props';
import ProtocolLabel from 'Activity/Queue/ProtocolLabel';
import IconButton from 'Components/Link/IconButton';
import SpinnerIconButton from 'Components/Link/SpinnerIconButton';
import ProgressBar from 'Components/ProgressBar';
import TableRow from 'Components/Table/TableRow';
// import RelativeDateCellConnector from 'Components/Table/Cells/RelativeDateCellConnector';
import TableRowCell from 'Components/Table/Cells/TableRowCell';
import TableSelectCell from 'Components/Table/Cells/TableSelectCell';
import ProtocolLabel from 'Activity/Queue/ProtocolLabel';
import MovieQuality from 'Movie/MovieQuality';
import TableRow from 'Components/Table/TableRow';
import { icons, kinds } from 'Helpers/Props';
import InteractiveImportModal from 'InteractiveImport/InteractiveImportModal';
import MovieFormats from 'Movie/MovieFormats';
import MovieLanguage from 'Movie/MovieLanguage';
import InteractiveImportModal from 'InteractiveImport/InteractiveImportModal';
import MovieQuality from 'Movie/MovieQuality';
import MovieTitleLink from 'Movie/MovieTitleLink';
import formatBytes from 'Utilities/Number/formatBytes';
import translate from 'Utilities/String/translate';
import QueueStatusCell from './QueueStatusCell';
import TimeleftCell from './TimeleftCell';
import RemoveQueueItemModal from './RemoveQueueItemModal';
import TimeleftCell from './TimeleftCell';
import styles from './QueueRow.css';
class QueueRow extends Component {
@@ -294,7 +295,7 @@ class QueueRow extends Component {
}
<SpinnerIconButton
title="Remove from queue"
title={translate('RemoveFromQueue')}
name={icons.REMOVE}
isSpinning={isRemoving}
onPress={this.onRemoveQueueItemPress}

View File

@@ -1,9 +1,10 @@
import PropTypes from 'prop-types';
import React from 'react';
import { icons, kinds, tooltipPositions } from 'Helpers/Props';
import Icon from 'Components/Icon';
import TableRowCell from 'Components/Table/Cells/TableRowCell';
import Popover from 'Components/Tooltip/Popover';
import { icons, kinds, tooltipPositions } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import styles from './QueueStatusCell.css';
function getDetailedPopoverBody(statusMessages) {
@@ -49,71 +50,75 @@ function QueueStatusCell(props) {
// status === 'downloading'
let iconName = icons.DOWNLOADING;
let iconKind = kinds.DEFAULT;
let title = 'Downloading';
let title = translate('Downloading');
if (status === 'paused') {
iconName = icons.PAUSED;
title = translate('Paused');
}
if (status === 'queued') {
iconName = icons.QUEUED;
title = translate('Queued');
}
if (status === 'completed') {
iconName = icons.DOWNLOADED;
title = translate('Downloaded');
if (trackedDownloadState === 'importPending') {
title += ` - ${translate('WaitingToImport')}`;
iconKind = kinds.PURPLE;
}
if (trackedDownloadState === 'importing') {
title += ` - ${translate('Importing')}`;
iconKind = kinds.PURPLE;
}
if (trackedDownloadState === 'failedPending') {
title += ` - ${translate('WaitingToProcess')}`;
iconKind = kinds.DANGER;
}
}
if (hasWarning) {
iconKind = kinds.WARNING;
}
if (status === 'paused') {
iconName = icons.PAUSED;
title = 'Paused';
}
if (status === 'queued') {
iconName = icons.QUEUED;
title = 'Queued';
}
if (status === 'completed') {
iconName = icons.DOWNLOADED;
title = 'Downloaded';
if (trackedDownloadState === 'importPending') {
title += ' - Waiting to Import';
}
if (trackedDownloadState === 'importing') {
title += ' - Importing';
}
if (trackedDownloadState === 'failedPending') {
title += ' - Waiting to Process';
}
}
if (status === 'delay') {
iconName = icons.PENDING;
title = 'Pending';
title = translate('Pending');
}
if (status === 'DownloadClientUnavailable') {
iconName = icons.PENDING;
iconKind = kinds.WARNING;
title = 'Pending - Download client is unavailable';
title = `${translate('Pending')} - ${translate('DownloadClientUnavailable')}`;
}
if (status === 'failed') {
iconName = icons.DOWNLOADING;
iconKind = kinds.DANGER;
title = 'Download failed';
title = translate('DownloadFailed');
}
if (status === 'warning') {
iconName = icons.DOWNLOADING;
iconKind = kinds.WARNING;
title = `Download warning: ${errorMessage || 'check download client for more details'}`;
const warningMessage = errorMessage || translate('CheckDownloadClientForDetails');
title = translate('DownloadWarning', [warningMessage]);
}
if (hasError) {
if (status === 'completed') {
iconName = icons.DOWNLOAD;
iconKind = kinds.DANGER;
title = `Import failed: ${sourceTitle}`;
title = translate('ImportFailed', [sourceTitle]);
} else {
iconName = icons.DOWNLOADING;
iconKind = kinds.DANGER;
title = 'Download failed';
title = translate('DownloadFailed');
}
}
@@ -145,8 +150,8 @@ QueueStatusCell.propTypes = {
};
QueueStatusCell.defaultProps = {
trackedDownloadStatus: 'Ok',
trackedDownloadState: 'Downloading'
trackedDownloadStatus: translate('Ok'),
trackedDownloadState: translate('Downloading')
};
export default QueueStatusCell;

View File

@@ -1,15 +1,16 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { inputTypes, kinds, sizes } from 'Helpers/Props';
import FormGroup from 'Components/Form/FormGroup';
import FormInputGroup from 'Components/Form/FormInputGroup';
import FormLabel from 'Components/Form/FormLabel';
import Button from 'Components/Link/Button';
import Modal from 'Components/Modal/Modal';
import FormGroup from 'Components/Form/FormGroup';
import FormLabel from 'Components/Form/FormLabel';
import FormInputGroup from 'Components/Form/FormInputGroup';
import ModalContent from 'Components/Modal/ModalContent';
import ModalHeader from 'Components/Modal/ModalHeader';
import ModalBody from 'Components/Modal/ModalBody';
import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { inputTypes, kinds, sizes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
class RemoveQueueItemModal extends Component {
@@ -80,34 +81,34 @@ class RemoveQueueItemModal extends Component {
onModalClose={this.onModalClose}
>
<ModalHeader>
Remove - {sourceTitle}
{translate('Remove')} - {sourceTitle}
</ModalHeader>
<ModalBody>
<div>
Are you sure you want to remove '{sourceTitle}' from the queue?
{translate('RemoveFromQueueText', [sourceTitle])}
</div>
<FormGroup>
<FormLabel>Remove From Download Client</FormLabel>
<FormLabel>{translate('RemoveFromDownloadClient')}</FormLabel>
<FormInputGroup
type={inputTypes.CHECK}
name="remove"
value={remove}
helpTextWarning="Removing will remove the download and the file(s) from the download client."
helpTextWarning={translate('RemoveHelpTextWarning')}
isDisabled={!canIgnore}
onChange={this.onRemoveChange}
/>
</FormGroup>
<FormGroup>
<FormLabel>Blacklist Release</FormLabel>
<FormLabel>{translate('BlacklistRelease')}</FormLabel>
<FormInputGroup
type={inputTypes.CHECK}
name="blacklist"
value={blacklist}
helpText="Starts a search for this movie again and prevents this release from being grabbed again"
helpText={translate('BlacklistHelpText')}
onChange={this.onBlacklistChange}
/>
</FormGroup>
@@ -116,7 +117,7 @@ class RemoveQueueItemModal extends Component {
<ModalFooter>
<Button onPress={this.onModalClose}>
Close
{translate('Close')}
</Button>
<Button

View File

@@ -1,15 +1,16 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { inputTypes, kinds, sizes } from 'Helpers/Props';
import FormGroup from 'Components/Form/FormGroup';
import FormInputGroup from 'Components/Form/FormInputGroup';
import FormLabel from 'Components/Form/FormLabel';
import Button from 'Components/Link/Button';
import Modal from 'Components/Modal/Modal';
import FormGroup from 'Components/Form/FormGroup';
import FormLabel from 'Components/Form/FormLabel';
import FormInputGroup from 'Components/Form/FormInputGroup';
import ModalContent from 'Components/Modal/ModalContent';
import ModalHeader from 'Components/Modal/ModalHeader';
import ModalBody from 'Components/Modal/ModalBody';
import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { inputTypes, kinds, sizes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import styles from './RemoveQueueItemsModal.css';
class RemoveQueueItemsModal extends Component {
@@ -86,17 +87,17 @@ class RemoveQueueItemsModal extends Component {
<ModalBody>
<div className={styles.message}>
Are you sure you want to remove {selectedCount} item{selectedCount > 1 ? 's' : ''} from the queue?
{translate('AreYouSureYouWantToRemoveSelectedItemsFromQueue', [selectedCount, selectedCount > 1 ? 's' : ''])}
</div>
<FormGroup>
<FormLabel>Remove From Download Client</FormLabel>
<FormLabel>{translate('RemoveFromDownloadClient')}</FormLabel>
<FormInputGroup
type={inputTypes.CHECK}
name="remove"
value={remove}
helpTextWarning="Removing will remove the download and the file(s) from the download client."
helpTextWarning={translate('RemoveHelpTextWarning')}
isDisabled={!canIgnore}
onChange={this.onRemoveChange}
/>
@@ -111,7 +112,7 @@ class RemoveQueueItemsModal extends Component {
type={inputTypes.CHECK}
name="blacklist"
value={blacklist}
helpText="Prevents Radarr from automatically grabbing this movie again"
helpText={translate('BlacklistHelpText')}
onChange={this.onBlacklistChange}
/>
</FormGroup>
@@ -120,7 +121,7 @@ class RemoveQueueItemsModal extends Component {
<ModalFooter>
<Button onPress={this.onModalClose}>
Close
{translate('Close')}
</Button>
<Button

View File

@@ -2,8 +2,8 @@ import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import { fetchQueueStatus } from 'Store/Actions/queueActions';
import PageSidebarStatus from 'Components/Page/Sidebar/PageSidebarStatus';
import { fetchQueueStatus } from 'Store/Actions/queueActions';
function createMapStateToProps() {
return createSelector(

View File

@@ -1,10 +1,11 @@
import PropTypes from 'prop-types';
import React from 'react';
import TableRowCell from 'Components/Table/Cells/TableRowCell';
import formatTime from 'Utilities/Date/formatTime';
import formatTimeSpan from 'Utilities/Date/formatTimeSpan';
import getRelativeDate from 'Utilities/Date/getRelativeDate';
import formatBytes from 'Utilities/Number/formatBytes';
import TableRowCell from 'Components/Table/Cells/TableRowCell';
import translate from 'Utilities/String/translate';
import styles from './TimeleftCell.css';
function TimeleftCell(props) {
@@ -19,35 +20,35 @@ function TimeleftCell(props) {
timeFormat
} = props;
if (status === 'Delay') {
if (status === 'delay') {
const date = getRelativeDate(estimatedCompletionTime, shortDateFormat, showRelativeDates);
const time = formatTime(estimatedCompletionTime, timeFormat, { includeMinuteZero: true });
return (
<TableRowCell
className={styles.timeleft}
title={`Delaying download until ${date} at ${time}`}
title={translate('DelayingDownloadUntilInterp', [date, time])}
>
-
</TableRowCell>
);
}
if (status === 'DownloadClientUnavailable') {
if (status === 'downloadClientUnavailable') {
const date = getRelativeDate(estimatedCompletionTime, shortDateFormat, showRelativeDates);
const time = formatTime(estimatedCompletionTime, timeFormat, { includeMinuteZero: true });
return (
<TableRowCell
className={styles.timeleft}
title={`Retrying download ${date} at ${time}`}
title={translate('RetryingDownloadInterp', [date, time])}
>
-
</TableRowCell>
);
}
if (!timeleft) {
if (!timeleft || status === 'completed' || status === 'failed') {
return (
<TableRowCell className={styles.timeleft}>
-

View File

@@ -1,113 +0,0 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import createAddMovieClientSideCollectionItemsSelector from 'Store/Selectors/createAddMovieClientSideCollectionItemsSelector';
import createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';
import { fetchRootFolders } from 'Store/Actions/rootFolderActions';
import { fetchListMovies, clearAddMovie, setListMovieSort, setListMovieFilter, setListMovieView, setListMovieTableOption } from 'Store/Actions/addMovieActions';
import scrollPositions from 'Store/scrollPositions';
import { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator';
import withScrollPosition from 'Components/withScrollPosition';
import AddListMovie from './AddListMovie';
function createMapStateToProps() {
return createSelector(
createAddMovieClientSideCollectionItemsSelector('addMovie'),
createDimensionsSelector(),
(
movies,
dimensionsState
) => {
return {
...movies,
isSmallScreen: dimensionsState.isSmallScreen
};
}
);
}
function createMapDispatchToProps(dispatch, props) {
return {
dispatchFetchRootFolders() {
dispatch(fetchRootFolders());
},
dispatchFetchListMovies() {
dispatch(fetchListMovies());
},
onTableOptionChange(payload) {
dispatch(setListMovieTableOption(payload));
},
onSortSelect(sortKey) {
dispatch(setListMovieSort({ sortKey }));
},
onFilterSelect(selectedFilterKey) {
dispatch(setListMovieFilter({ selectedFilterKey }));
},
dispatchSetListMovieView(view) {
dispatch(setListMovieView({ view }));
},
dispatchClearListMovie() {
dispatch(clearAddMovie());
}
};
}
class AddListMovieConnector extends Component {
componentDidMount() {
registerPagePopulator(this.repopulate);
this.props.dispatchFetchRootFolders();
this.props.dispatchFetchListMovies();
}
componentWillUnmount() {
this.props.dispatchClearListMovie();
unregisterPagePopulator(this.repopulate);
}
//
// Listeners
onViewSelect = (view) => {
this.props.dispatchSetListMovieView(view);
}
onScroll = ({ scrollTop }) => {
scrollPositions.addMovie = scrollTop;
}
//
// Render
render() {
return (
<AddListMovie
{...this.props}
onViewSelect={this.onViewSelect}
onScroll={this.onScroll}
onSaveSelected={this.onSaveSelected}
/>
);
}
}
AddListMovieConnector.propTypes = {
isSmallScreen: PropTypes.bool.isRequired,
view: PropTypes.string.isRequired,
dispatchFetchRootFolders: PropTypes.func.isRequired,
dispatchFetchListMovies: PropTypes.func.isRequired,
dispatchClearListMovie: PropTypes.func.isRequired,
dispatchSetListMovieView: PropTypes.func.isRequired
};
export default withScrollPosition(
connect(createMapStateToProps, createMapDispatchToProps)(AddListMovieConnector),
'addMovie'
);

View File

@@ -1,156 +0,0 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import TextTruncate from 'react-text-truncate';
import dimensions from 'Styles/Variables/dimensions';
import fonts from 'Styles/Variables/fonts';
import MoviePoster from 'Movie/MoviePoster';
import Link from 'Components/Link/Link';
import AddNewMovieModal from 'AddMovie/AddNewMovie/AddNewMovieModal';
import styles from './AddListMovieOverview.css';
const columnPadding = parseInt(dimensions.movieIndexColumnPadding);
const columnPaddingSmallScreen = parseInt(dimensions.movieIndexColumnPaddingSmallScreen);
const defaultFontSize = parseInt(fonts.defaultFontSize);
const lineHeight = parseFloat(fonts.lineHeight);
// Hardcoded height beased on line-height of 32 + bottom margin of 10.
// Less side-effecty than using react-measure.
const titleRowHeight = 42;
function getContentHeight(rowHeight, isSmallScreen) {
const padding = isSmallScreen ? columnPaddingSmallScreen : columnPadding;
return rowHeight - padding;
}
class AddListMovieOverview extends Component {
//
// Lifecycle
constructor(props, context) {
super(props, context);
this.state = {
isNewAddMovieModalOpen: false
};
}
//
// Listeners
onPress = () => {
this.setState({ isNewAddMovieModalOpen: true });
}
onAddMovieModalClose = () => {
this.setState({ isNewAddMovieModalOpen: false });
}
//
// Render
render() {
const {
tmdbId,
title,
titleSlug,
folder,
year,
overview,
images,
posterWidth,
posterHeight,
rowHeight,
isSmallScreen,
isExistingMovie
} = this.props;
const {
isNewAddMovieModalOpen
} = this.state;
const elementStyle = {
width: `${posterWidth}px`,
height: `${posterHeight}px`
};
const linkProps = isExistingMovie ? { to: `/movie/${titleSlug}` } : { onPress: this.onPress };
const contentHeight = getContentHeight(rowHeight, isSmallScreen);
const overviewHeight = contentHeight - titleRowHeight;
return (
<div className={styles.container}>
<Link
className={styles.content}
{...linkProps}
>
<div className={styles.poster}>
<div className={styles.posterContainer}>
<MoviePoster
className={styles.poster}
style={elementStyle}
images={images}
size={250}
lazy={false}
overflow={true}
/>
</div>
</div>
<div className={styles.info} style={{ maxHeight: contentHeight }}>
<div className={styles.titleRow}>
{title} ({year})
</div>
<div className={styles.details}>
<TextTruncate
line={Math.floor(overviewHeight / (defaultFontSize * lineHeight))}
text={overview}
/>
</div>
</div>
</Link>
<AddNewMovieModal
isOpen={isNewAddMovieModalOpen && !isExistingMovie}
tmdbId={tmdbId}
title={title}
year={year}
overview={overview}
folder={folder}
images={images}
onModalClose={this.onAddMovieModalClose}
/>
</div>
);
}
}
AddListMovieOverview.propTypes = {
tmdbId: PropTypes.number.isRequired,
title: PropTypes.string.isRequired,
folder: PropTypes.string.isRequired,
year: PropTypes.number.isRequired,
overview: PropTypes.string.isRequired,
monitored: PropTypes.bool.isRequired,
status: PropTypes.string.isRequired,
titleSlug: PropTypes.string.isRequired,
images: PropTypes.arrayOf(PropTypes.object).isRequired,
posterWidth: PropTypes.number.isRequired,
posterHeight: PropTypes.number.isRequired,
rowHeight: PropTypes.number.isRequired,
overviewOptions: PropTypes.object.isRequired,
showRelativeDates: PropTypes.bool.isRequired,
shortDateFormat: PropTypes.string.isRequired,
longDateFormat: PropTypes.string.isRequired,
timeFormat: PropTypes.string.isRequired,
isSmallScreen: PropTypes.bool.isRequired,
isExistingMovie: PropTypes.bool.isRequired,
isExclusionMovie: PropTypes.bool.isRequired
};
export default AddListMovieOverview;

View File

@@ -1,23 +0,0 @@
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import createExistingMovieSelector from 'Store/Selectors/createExistingMovieSelector';
import createExclusionMovieSelector from 'Store/Selectors/createExclusionMovieSelector';
import createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';
import AddListMovieOverview from './AddListMovieOverview';
function createMapStateToProps() {
return createSelector(
createExistingMovieSelector(),
createExclusionMovieSelector(),
createDimensionsSelector(),
(isExistingMovie, isExclusionMovie, dimensions) => {
return {
isExistingMovie,
isExclusionMovie,
isSmallScreen: dimensions.isSmallScreen
};
}
);
}
export default connect(createMapStateToProps)(AddListMovieOverview);

View File

@@ -1,132 +0,0 @@
import _ from 'lodash';
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { inputTypes } from 'Helpers/Props';
import Button from 'Components/Link/Button';
import Form from 'Components/Form/Form';
import FormGroup from 'Components/Form/FormGroup';
import FormLabel from 'Components/Form/FormLabel';
import FormInputGroup from 'Components/Form/FormInputGroup';
import ModalContent from 'Components/Modal/ModalContent';
import ModalHeader from 'Components/Modal/ModalHeader';
import ModalBody from 'Components/Modal/ModalBody';
import ModalFooter from 'Components/Modal/ModalFooter';
const posterSizeOptions = [
{ key: 'small', value: 'Small' },
{ key: 'medium', value: 'Medium' },
{ key: 'large', value: 'Large' }
];
class AddListMovieOverviewOptionsModalContent extends Component {
//
// Lifecycle
constructor(props, context) {
super(props, context);
this.state = {
size: props.size,
showStudio: props.showStudio
};
}
componentDidUpdate(prevProps) {
const {
size,
showStudio
} = this.props;
const state = {};
if (size !== prevProps.size) {
state.size = size;
}
if (showStudio !== prevProps.showStudio) {
state.showStudio = showStudio;
}
if (!_.isEmpty(state)) {
this.setState(state);
}
}
//
// Listeners
onChangeOverviewOption = ({ name, value }) => {
this.setState({
[name]: value
}, () => {
this.props.onChangeOverviewOption({ [name]: value });
});
}
//
// Render
render() {
const {
onModalClose
} = this.props;
const {
size,
showStudio
} = this.state;
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
Overview Options
</ModalHeader>
<ModalBody>
<Form>
<FormGroup>
<FormLabel>Poster Size</FormLabel>
<FormInputGroup
type={inputTypes.SELECT}
name="size"
value={size}
values={posterSizeOptions}
onChange={this.onChangeOverviewOption}
/>
</FormGroup>
<FormGroup>
<FormLabel>Show Studio</FormLabel>
<FormInputGroup
type={inputTypes.CHECK}
name="showStudio"
value={showStudio}
onChange={this.onChangeOverviewOption}
/>
</FormGroup>
</Form>
</ModalBody>
<ModalFooter>
<Button
onPress={onModalClose}
>
Close
</Button>
</ModalFooter>
</ModalContent>
);
}
}
AddListMovieOverviewOptionsModalContent.propTypes = {
size: PropTypes.string.isRequired,
showStudio: PropTypes.bool.isRequired,
onChangeOverviewOption: PropTypes.func.isRequired,
onModalClose: PropTypes.func.isRequired
};
export default AddListMovieOverviewOptionsModalContent;

View File

@@ -1,23 +0,0 @@
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import { setListMovieOverviewOption } from 'Store/Actions/addMovieActions';
import AddListMovieOverviewOptionsModalContent from './AddListMovieOverviewOptionsModalContent';
function createMapStateToProps() {
return createSelector(
(state) => state.addMovie,
(addMovie) => {
return addMovie.overviewOptions;
}
);
}
function createMapDispatchToProps(dispatch, props) {
return {
onChangeOverviewOption(payload) {
dispatch(setListMovieOverviewOption(payload));
}
};
}
export default connect(createMapStateToProps, createMapDispatchToProps)(AddListMovieOverviewOptionsModalContent);

View File

@@ -1,159 +0,0 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import Link from 'Components/Link/Link';
import MoviePoster from 'Movie/MoviePoster';
import AddNewMovieModal from 'AddMovie/AddNewMovie/AddNewMovieModal';
import styles from './AddListMoviePoster.css';
class AddListMoviePoster extends Component {
//
// Lifecycle
constructor(props, context) {
super(props, context);
this.state = {
hasPosterError: false,
isNewAddMovieModalOpen: false
};
}
//
// Listeners
onPress = () => {
this.setState({ isNewAddMovieModalOpen: true });
}
onAddMovieModalClose = () => {
this.setState({ isNewAddMovieModalOpen: false });
}
onPosterLoad = () => {
if (this.state.hasPosterError) {
this.setState({ hasPosterError: false });
}
}
onPosterLoadError = () => {
if (!this.state.hasPosterError) {
this.setState({ hasPosterError: true });
}
}
//
// Render
render() {
const {
tmdbId,
title,
year,
overview,
folder,
status,
titleSlug,
images,
posterWidth,
posterHeight,
showTitle,
isExistingMovie
} = this.props;
const {
hasPosterError,
isNewAddMovieModalOpen
} = this.state;
const linkProps = isExistingMovie ? { to: `/movie/${titleSlug}` } : { onPress: this.onPress };
const elementStyle = {
width: `${posterWidth}px`,
height: `${posterHeight}px`
};
return (
<div className={styles.content}>
<div className={styles.posterContainer}>
{
status === 'ended' &&
<div
className={styles.ended}
title="Ended"
/>
}
<Link
className={styles.link}
style={elementStyle}
{...linkProps}
>
<MoviePoster
className={styles.poster}
style={elementStyle}
images={images}
size={250}
lazy={false}
overflow={true}
onError={this.onPosterLoadError}
onLoad={this.onPosterLoad}
/>
{
hasPosterError &&
<div className={styles.overlayTitle}>
{title}
</div>
}
</Link>
</div>
{
showTitle &&
<div className={styles.title}>
{title}
</div>
}
<AddNewMovieModal
isOpen={isNewAddMovieModalOpen && !isExistingMovie}
tmdbId={tmdbId}
title={title}
year={year}
overview={overview}
folder={folder}
images={images}
onModalClose={this.onAddMovieModalClose}
/>
</div>
);
}
}
AddListMoviePoster.propTypes = {
tmdbId: PropTypes.number.isRequired,
title: PropTypes.string.isRequired,
year: PropTypes.number.isRequired,
overview: PropTypes.string.isRequired,
folder: PropTypes.string.isRequired,
status: PropTypes.string.isRequired,
titleSlug: PropTypes.string.isRequired,
images: PropTypes.arrayOf(PropTypes.object).isRequired,
posterWidth: PropTypes.number.isRequired,
posterHeight: PropTypes.number.isRequired,
showTitle: PropTypes.bool.isRequired,
showRelativeDates: PropTypes.bool.isRequired,
shortDateFormat: PropTypes.string.isRequired,
timeFormat: PropTypes.string.isRequired,
isExistingMovie: PropTypes.bool.isRequired,
isExclusionMovie: PropTypes.bool.isRequired
};
AddListMoviePoster.defaultProps = {
statistics: {
movieFileCount: 0
}
};
export default AddListMoviePoster;

View File

@@ -1,23 +0,0 @@
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import createExistingMovieSelector from 'Store/Selectors/createExistingMovieSelector';
import createExclusionMovieSelector from 'Store/Selectors/createExclusionMovieSelector';
import createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';
import AddListMoviePoster from './AddListMoviePoster';
function createMapStateToProps() {
return createSelector(
createExistingMovieSelector(),
createExclusionMovieSelector(),
createDimensionsSelector(),
(isExistingMovie, isExclusionMovie, dimensions) => {
return {
isExistingMovie,
isExclusionMovie,
isSmallScreen: dimensions.isSmallScreen
};
}
);
}
export default connect(createMapStateToProps)(AddListMoviePoster);

View File

@@ -1,30 +0,0 @@
import PropTypes from 'prop-types';
import React from 'react';
import styles from './AddListMoviePosterInfo.css';
function AddListMoviePosterInfo(props) {
const {
studio,
sortKey
} = props;
if (sortKey === 'studio' && studio) {
return (
<div className={styles.info}>
{studio}
</div>
);
}
return null;
}
AddListMoviePosterInfo.propTypes = {
studio: PropTypes.string,
sortKey: PropTypes.string.isRequired,
showRelativeDates: PropTypes.bool.isRequired,
shortDateFormat: PropTypes.string.isRequired,
timeFormat: PropTypes.string.isRequired
};
export default AddListMoviePosterInfo;

View File

@@ -1,23 +0,0 @@
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import { setListMoviePosterOption } from 'Store/Actions/addMovieActions';
import AddListMoviePosterOptionsModalContent from './AddListMoviePosterOptionsModalContent';
function createMapStateToProps() {
return createSelector(
(state) => state.addMovie,
(addMovie) => {
return addMovie.posterOptions;
}
);
}
function createMapDispatchToProps(dispatch, props) {
return {
onChangePosterOption(payload) {
dispatch(setListMoviePosterOption(payload));
}
};
}
export default connect(createMapStateToProps, createMapDispatchToProps)(AddListMoviePosterOptionsModalContent);

View File

@@ -1,13 +0,0 @@
import { connect } from 'react-redux';
import { setListMovieTableOption } from 'Store/Actions/addMovieActions';
import AddListMovieHeader from './AddListMovieHeader';
function createMapDispatchToProps(dispatch, props) {
return {
onTableOptionChange(payload) {
dispatch(setListMovieTableOption(payload));
}
};
}
export default connect(undefined, createMapDispatchToProps)(AddListMovieHeader);

View File

@@ -1,56 +0,0 @@
.status {
composes: cell from '~Components/Table/Cells/VirtualTableRowCell.css';
flex: 0 0 60px;
}
.sortTitle {
composes: cell from '~Components/Table/Cells/VirtualTableRowCell.css';
flex: 4 0 110px;
}
.studio {
composes: cell from '~Components/Table/Cells/VirtualTableRowCell.css';
flex: 2 0 90px;
}
.inCinemas,
.physicalRelease,
.genres {
composes: cell from '~Components/Table/Cells/VirtualTableRowCell.css';
flex: 0 0 180px;
}
.movieStatus,
.certification {
composes: cell from '~Components/Table/Cells/VirtualTableRowCell.css';
flex: 0 0 100px;
}
.ratings {
composes: headerCell from '~Components/Table/VirtualTableHeaderCell.css';
flex: 0 0 80px;
}
.tags {
composes: cell from '~Components/Table/Cells/VirtualTableRowCell.css';
flex: 1 0 60px;
}
.actions {
composes: cell from '~Components/Table/Cells/VirtualTableRowCell.css';
flex: 0 1 90px;
}
.checkInput {
composes: input from '~Components/Form/CheckInput.css';
margin-top: 0;
}

View File

@@ -1,218 +0,0 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import HeartRating from 'Components/HeartRating';
import VirtualTableRowCell from 'Components/Table/Cells/VirtualTableRowCell';
import RelativeDateCellConnector from 'Components/Table/Cells/RelativeDateCellConnector';
import MovieStatusCell from './MovieStatusCell';
import Link from 'Components/Link/Link';
import AddNewMovieModal from 'AddMovie/AddNewMovie/AddNewMovieModal';
import styles from './AddListMovieRow.css';
class AddListMovieRow extends Component {
//
// Lifecycle
constructor(props, context) {
super(props, context);
this.state = {
isNewAddMovieModalOpen: false
};
}
//
// Listeners
onPress = () => {
this.setState({ isNewAddMovieModalOpen: true });
}
onAddMovieModalClose = () => {
this.setState({ isNewAddMovieModalOpen: false });
}
//
// Render
render() {
const {
status,
tmdbId,
title,
titleSlug,
studio,
inCinemas,
physicalRelease,
year,
overview,
folder,
images,
genres,
ratings,
certification,
columns,
isExistingMovie
} = this.props;
const {
isNewAddMovieModalOpen
} = this.state;
const linkProps = isExistingMovie ? { to: `/movie/${titleSlug}` } : { onPress: this.onPress };
return (
<>
{
columns.map((column) => {
const {
name,
isVisible
} = column;
if (!isVisible) {
return null;
}
if (name === 'status') {
return (
<MovieStatusCell
key={name}
className={styles[name]}
status={status}
component={VirtualTableRowCell}
/>
);
}
if (name === 'sortTitle') {
return (
<VirtualTableRowCell
key={name}
className={styles[name]}
>
<Link
{...linkProps}
>
{title}
</Link>
</VirtualTableRowCell>
);
}
if (name === 'studio') {
return (
<VirtualTableRowCell
key={name}
className={styles[name]}
>
{studio}
</VirtualTableRowCell>
);
}
if (name === 'inCinemas') {
return (
<RelativeDateCellConnector
key={name}
className={styles[name]}
date={inCinemas}
component={VirtualTableRowCell}
/>
);
}
if (name === 'physicalRelease') {
return (
<RelativeDateCellConnector
key={name}
className={styles[name]}
date={physicalRelease}
component={VirtualTableRowCell}
/>
);
}
if (name === 'genres') {
const joinedGenres = genres.join(', ');
return (
<VirtualTableRowCell
key={name}
className={styles[name]}
>
<span title={joinedGenres}>
{joinedGenres}
</span>
</VirtualTableRowCell>
);
}
if (name === 'ratings') {
return (
<VirtualTableRowCell
key={name}
className={styles[name]}
>
<HeartRating
rating={ratings.value}
/>
</VirtualTableRowCell>
);
}
if (name === 'certification') {
return (
<VirtualTableRowCell
key={name}
className={styles[name]}
>
{certification}
</VirtualTableRowCell>
);
}
return null;
})
}
<AddNewMovieModal
isOpen={isNewAddMovieModalOpen && !isExistingMovie}
tmdbId={tmdbId}
title={title}
year={year}
overview={overview}
folder={folder}
images={images}
onModalClose={this.onAddMovieModalClose}
/>
</>
);
}
}
AddListMovieRow.propTypes = {
tmdbId: PropTypes.number.isRequired,
status: PropTypes.string.isRequired,
title: PropTypes.string.isRequired,
year: PropTypes.number.isRequired,
overview: PropTypes.string.isRequired,
folder: PropTypes.string.isRequired,
images: PropTypes.arrayOf(PropTypes.object).isRequired,
titleSlug: PropTypes.string.isRequired,
studio: PropTypes.string,
inCinemas: PropTypes.string,
physicalRelease: PropTypes.string,
genres: PropTypes.arrayOf(PropTypes.string).isRequired,
ratings: PropTypes.object.isRequired,
certification: PropTypes.string,
columns: PropTypes.arrayOf(PropTypes.object).isRequired,
isExistingMovie: PropTypes.bool.isRequired
};
AddListMovieRow.defaultProps = {
genres: [],
tags: []
};
export default AddListMovieRow;

View File

@@ -1,23 +0,0 @@
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import createExistingMovieSelector from 'Store/Selectors/createExistingMovieSelector';
import createExclusionMovieSelector from 'Store/Selectors/createExclusionMovieSelector';
import createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';
import AddListMovieRow from './AddListMovieRow';
function createMapStateToProps() {
return createSelector(
createExistingMovieSelector(),
createExclusionMovieSelector(),
createDimensionsSelector(),
(isExistingMovie, isExclusionMovie, dimensions) => {
return {
isExistingMovie,
isExclusionMovie,
isSmallScreen: dimensions.isSmallScreen
};
}
);
}
export default connect(createMapStateToProps)(AddListMovieRow);

View File

@@ -1,9 +0,0 @@
.status {
composes: cell from '~Components/Table/Cells/TableRowCell.css';
width: 60px;
}
.statusIcon {
width: 20px !important;
}

View File

@@ -1,62 +0,0 @@
import PropTypes from 'prop-types';
import React from 'react';
import { icons } from 'Helpers/Props';
import Icon from 'Components/Icon';
import VirtualTableRowCell from 'Components/Table/Cells/TableRowCell';
import styles from './MovieStatusCell.css';
function MovieStatusCell(props) {
const {
className,
status,
component: Component,
...otherProps
} = props;
return (
<Component
className={className}
{...otherProps}
>
{
status === 'announced' ?
<Icon
className={styles.statusIcon}
name={icons.ANNOUNCED}
title={'Movie is announced'}
/> : null
}
{
status === 'inCinemas' ?
<Icon
className={styles.statusIcon}
name={icons.IN_CINEMAS}
title={'Movie is in Cinemas'}
/> : null
}
{
status === 'released' ?
<Icon
className={styles.statusIcon}
name={icons.MOVIE_FILE}
title={'Movie is released'}
/> : null
}
</Component>
);
}
MovieStatusCell.propTypes = {
className: PropTypes.string.isRequired,
status: PropTypes.string.isRequired,
component: PropTypes.elementType
};
MovieStatusCell.defaultProps = {
className: styles.status,
component: VirtualTableRowCell
};
export default MovieStatusCell;

View File

@@ -1,14 +1,15 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import getErrorMessage from 'Utilities/Object/getErrorMessage';
import { icons, kinds } from 'Helpers/Props';
import TextInput from 'Components/Form/TextInput';
import Icon from 'Components/Icon';
import Button from 'Components/Link/Button';
import Link from 'Components/Link/Link';
import Icon from 'Components/Icon';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import TextInput from 'Components/Form/TextInput';
import PageContent from 'Components/Page/PageContent';
import PageContentBodyConnector from 'Components/Page/PageContentBodyConnector';
import PageContentBody from 'Components/Page/PageContentBody';
import { icons, kinds } from 'Helpers/Props';
import getErrorMessage from 'Utilities/Object/getErrorMessage';
import translate from 'Utilities/String/translate';
import AddNewMovieSearchResultConnector from './AddNewMovieSearchResultConnector';
import styles from './AddNewMovie.css';
@@ -87,8 +88,8 @@ class AddNewMovie extends Component {
const isFetching = this.state.isFetching;
return (
<PageContent title="Add New Movie">
<PageContentBodyConnector>
<PageContent title={translate('AddNewMovie')}>
<PageContentBody>
<div className={styles.searchContainer}>
<div className={styles.searchIconContainer}>
<Icon
@@ -126,7 +127,7 @@ class AddNewMovie extends Component {
!isFetching && !!error ?
<div className={styles.message}>
<div className={styles.helpText}>
Failed to load search results, please try again.
{translate('FailedLoadingSearchResults')}
</div>
<div>{getErrorMessage(error)}</div>
</div> : null
@@ -151,11 +152,15 @@ class AddNewMovie extends Component {
{
!isFetching && !error && !items.length && !!term &&
<div className={styles.message}>
<div className={styles.noResults}>Couldn't find any results for '{term}'</div>
<div>You can also search using TMDB ID or IMDB ID of a movie. eg. tmdb:71663</div>
<div className={styles.noResults}>
{translate('CouldNotFindResults', [term])}
</div>
<div>
<Link to="https://github.com/Radarr/Radarr/wiki/FAQ#why-cant-i-add-a-new-movie-when-i-know-the-tmdb-id">
Why can't I find my movie?
{translate('YouCanAlsoSearch')}
</div>
<div>
<Link to="https://wiki.servarr.com/Radarr_FAQ#Why_cant_I_add_a_new_movie_to_Radarr">
{translate('CantFindMovie')}
</Link>
</div>
</div>
@@ -166,9 +171,11 @@ class AddNewMovie extends Component {
null :
<div className={styles.message}>
<div className={styles.helpText}>
It's easy to add a new movie, just start typing the name the movie you want to add.
{translate('AddNewMessage')}
</div>
<div>
{translate('AddNewTmdbIdMessage')}
</div>
<div>You can also search using TMDB ID of a movie. eg. tmdb:71663</div>
</div>
}
@@ -176,14 +183,14 @@ class AddNewMovie extends Component {
!term && !hasExistingMovies ?
<div className={styles.message}>
<div className={styles.noMoviesText}>
You haven't added any movies yet, do you want to import some or all of your movies first?
{translate('HaveNotAddedMovies')}
</div>
<div>
<Button
to="/add/import"
kind={kinds.PRIMARY}
>
Import Existing Movies
{translate('ImportExistingMovies')}
</Button>
</div>
</div> :
@@ -191,7 +198,7 @@ class AddNewMovie extends Component {
}
<div />
</PageContentBodyConnector>
</PageContentBody>
</PageContent>
);
}

View File

@@ -2,10 +2,10 @@ import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import parseUrl from 'Utilities/String/parseUrl';
import { lookupMovie, clearAddMovie } from 'Store/Actions/addMovieActions';
import { clearAddMovie, lookupMovie } from 'Store/Actions/addMovieActions';
import { fetchRootFolders } from 'Store/Actions/rootFolderActions';
import { fetchNetImportExclusions } from 'Store/Actions/Settings/netImportExclusions';
import { fetchImportExclusions } from 'Store/Actions/Settings/importExclusions';
import parseUrl from 'Utilities/String/parseUrl';
import AddNewMovie from './AddNewMovie';
function createMapStateToProps() {
@@ -29,7 +29,7 @@ const mapDispatchToProps = {
lookupMovie,
clearAddMovie,
fetchRootFolders,
fetchNetImportExclusions
fetchImportExclusions
};
class AddNewMovieConnector extends Component {
@@ -45,7 +45,7 @@ class AddNewMovieConnector extends Component {
componentDidMount() {
this.props.fetchRootFolders();
this.props.fetchNetImportExclusions();
this.props.fetchImportExclusions();
}
componentWillUnmount() {
@@ -102,7 +102,7 @@ AddNewMovieConnector.propTypes = {
lookupMovie: PropTypes.func.isRequired,
clearAddMovie: PropTypes.func.isRequired,
fetchRootFolders: PropTypes.func.isRequired,
fetchNetImportExclusions: PropTypes.func.isRequired
fetchImportExclusions: PropTypes.func.isRequired
};
export default connect(createMapStateToProps, mapDispatchToProps)(AddNewMovieConnector);

View File

@@ -1,45 +1,31 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { kinds, inputTypes } from 'Helpers/Props';
import SpinnerButton from 'Components/Link/SpinnerButton';
import CheckInput from 'Components/Form/CheckInput';
import Form from 'Components/Form/Form';
import FormGroup from 'Components/Form/FormGroup';
import FormLabel from 'Components/Form/FormLabel';
import FormInputGroup from 'Components/Form/FormInputGroup';
import CheckInput from 'Components/Form/CheckInput';
import ModalContent from 'Components/Modal/ModalContent';
import ModalHeader from 'Components/Modal/ModalHeader';
import FormLabel from 'Components/Form/FormLabel';
import SpinnerButton from 'Components/Link/SpinnerButton';
import ModalBody from 'Components/Modal/ModalBody';
import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { inputTypes, kinds } from 'Helpers/Props';
import MoviePoster from 'Movie/MoviePoster';
import translate from 'Utilities/String/translate';
import styles from './AddNewMovieModalContent.css';
class AddNewMovieModalContent extends Component {
//
// Lifecycle
constructor(props, context) {
super(props, context);
this.state = {
searchForMovie: false
};
}
//
// Listeners
onSearchForMissingMovieChange = ({ value }) => {
this.setState({ searchForMovie: value });
}
onQualityProfileIdChange = ({ value }) => {
this.props.onInputChange({ name: 'qualityProfileId', value: parseInt(value) });
}
onAddMoviePress = () => {
this.props.onAddMoviePress(this.state.searchForMovie);
this.props.onAddMoviePress();
}
//
@@ -56,6 +42,7 @@ class AddNewMovieModalContent extends Component {
monitor,
qualityProfileId,
minimumAvailability,
searchForMovie,
folder,
tags,
isSmallScreen,
@@ -95,7 +82,7 @@ class AddNewMovieModalContent extends Component {
<Form>
<FormGroup>
<FormLabel>Root Folder</FormLabel>
<FormLabel>{translate('RootFolder')}</FormLabel>
<FormInputGroup
type={inputTypes.ROOT_FOLDER_SELECT}
@@ -108,7 +95,7 @@ class AddNewMovieModalContent extends Component {
movieFolder: folder,
isWindows
}}
helpText={`'${folder}' subfolder will be created automatically`}
helpText={translate('SubfolderWillBeCreatedAutomaticallyInterp', [folder])}
onChange={onInputChange}
{...rootFolderPath}
/>
@@ -116,7 +103,7 @@ class AddNewMovieModalContent extends Component {
<FormGroup>
<FormLabel>
Monitor
{translate('Monitor')}
</FormLabel>
<FormInputGroup
@@ -128,7 +115,7 @@ class AddNewMovieModalContent extends Component {
</FormGroup>
<FormGroup>
<FormLabel>Minimum Availability</FormLabel>
<FormLabel>{translate('MinimumAvailability')}</FormLabel>
<FormInputGroup
type={inputTypes.AVAILABILITY_SELECT}
@@ -139,7 +126,7 @@ class AddNewMovieModalContent extends Component {
</FormGroup>
<FormGroup>
<FormLabel>Quality Profile</FormLabel>
<FormLabel>{translate('QualityProfile')}</FormLabel>
<FormInputGroup
type={inputTypes.QUALITY_PROFILE_SELECT}
@@ -150,7 +137,7 @@ class AddNewMovieModalContent extends Component {
</FormGroup>
<FormGroup>
<FormLabel>Tags</FormLabel>
<FormLabel>{translate('Tags')}</FormLabel>
<FormInputGroup
type={inputTypes.TAG}
@@ -167,15 +154,15 @@ class AddNewMovieModalContent extends Component {
<ModalFooter className={styles.modalFooter}>
<label className={styles.searchForMissingMovieLabelContainer}>
<span className={styles.searchForMissingMovieLabel}>
Start search for missing movie
{translate('StartSearchForMissingMovie')}
</span>
<CheckInput
containerClassName={styles.searchForMissingMovieContainer}
className={styles.searchForMissingMovieInput}
name="searchForMovie"
value={this.state.searchForMovie}
onChange={this.onSearchForMissingMovieChange}
onChange={onInputChange}
{...searchForMovie}
/>
</label>
@@ -185,7 +172,7 @@ class AddNewMovieModalContent extends Component {
isSpinning={isAdding}
onPress={this.onAddMoviePress}
>
Add {title}
{translate('AddMovie')}
</SpinnerButton>
</ModalFooter>
</ModalContent>
@@ -204,6 +191,7 @@ AddNewMovieModalContent.propTypes = {
monitor: PropTypes.object.isRequired,
qualityProfileId: PropTypes.object,
minimumAvailability: PropTypes.object.isRequired,
searchForMovie: PropTypes.object.isRequired,
folder: PropTypes.string.isRequired,
tags: PropTypes.object.isRequired,
isSmallScreen: PropTypes.bool.isRequired,

View File

@@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import { setAddMovieDefault, addMovie } from 'Store/Actions/addMovieActions';
import { addMovie, setAddMovieDefault } from 'Store/Actions/addMovieActions';
import createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';
import createSystemStatusSelector from 'Store/Selectors/createSystemStatusSelector';
import selectSettings from 'Store/Selectors/selectSettings';
@@ -53,13 +53,14 @@ class AddNewMovieModalContentConnector extends Component {
this.props.setAddMovieDefault({ [name]: value });
}
onAddMoviePress = (searchForMovie) => {
onAddMoviePress = () => {
const {
tmdbId,
rootFolderPath,
monitor,
qualityProfileId,
minimumAvailability,
searchForMovie,
tags
} = this.props;
@@ -69,8 +70,8 @@ class AddNewMovieModalContentConnector extends Component {
monitor: monitor.value,
qualityProfileId: qualityProfileId.value,
minimumAvailability: minimumAvailability.value,
tags: tags.value,
searchForMovie
searchForMovie: searchForMovie.value,
tags: tags.value
});
}
@@ -94,6 +95,7 @@ AddNewMovieModalContentConnector.propTypes = {
monitor: PropTypes.object.isRequired,
qualityProfileId: PropTypes.object,
minimumAvailability: PropTypes.object.isRequired,
searchForMovie: PropTypes.object.isRequired,
tags: PropTypes.object.isRequired,
onModalClose: PropTypes.func.isRequired,
setAddMovieDefault: PropTypes.func.isRequired,

View File

@@ -34,10 +34,20 @@
.content {
flex: 0 1 100%;
overflow: hidden;
}
.titleRow {
display: flex;
}
.titleContainer {
display: flex;
align-items: flex-end;
flex: 0 1 auto;
}
.title {
display: flex;
font-weight: 300;
font-size: 36px;
}
@@ -47,16 +57,12 @@
color: $disabledColor;
}
.tmdbLink {
composes: link from '~Components/Link/Link.css';
margin-top: -4px;
margin-left: auto;
color: $textColor;
}
.tmdbLinkIcon {
margin-left: 10px;
.icons {
display: flex;
align-items: center;
justify-content: space-between;
flex: 1 0 auto;
height: 55px;
}
.alreadyExistsIcon {
@@ -67,10 +73,22 @@
.exclusionIcon {
margin-left: 10px;
color: #bc3737;
color: $dangerColor;
pointer-events: all;
}
.overview {
margin-top: 20px;
}
.links {
margin-left: 8px;
pointer-events: all;
}
@media only screen and (max-width: $breakpointMedium) {
.titleRow {
justify-content: space-between;
overflow: hidden;
}
}

View File

@@ -1,11 +1,14 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { icons, kinds, sizes } from 'Helpers/Props';
import HeartRating from 'Components/HeartRating';
import Icon from 'Components/Icon';
import Label from 'Components/Label';
import Link from 'Components/Link/Link';
import Tooltip from 'Components/Tooltip/Tooltip';
import { icons, kinds, sizes, tooltipPositions } from 'Helpers/Props';
import MovieDetailsLinks from 'Movie/Details/MovieDetailsLinks';
import MoviePoster from 'Movie/MoviePoster';
import translate from 'Utilities/String/translate';
import AddNewMovieModal from './AddNewMovieModal';
import styles from './AddNewMovieSearchResult.css';
@@ -39,7 +42,7 @@ class AddNewMovieSearchResult extends Component {
this.setState({ isNewAddMovieModalOpen: false });
}
onTMDBLinkPress = (event) => {
onExternalLinkPress = (event) => {
event.stopPropagation();
}
@@ -49,6 +52,8 @@ class AddNewMovieSearchResult extends Component {
render() {
const {
tmdbId,
imdbId,
youTubeTrailerId,
title,
titleSlug,
year,
@@ -89,45 +94,43 @@ class AddNewMovieSearchResult extends Component {
}
<div className={styles.content}>
<div className={styles.title}>
{title}
<div className={styles.titleRow}>
<div className={styles.titleContainer}>
<div className={styles.title}>
{title}
{
!title.contains(year) && !!year &&
<span className={styles.year}>({year})</span>
}
{
!title.contains(year) && !!year ?
<span className={styles.year}>
({year})
</span> :
null
}
</div>
</div>
{
isExistingMovie &&
<Icon
className={styles.alreadyExistsIcon}
name={icons.CHECK_CIRCLE}
size={36}
title="Already in your library"
/>
}
<div className={styles.icons}>
{
isExclusionMovie &&
<Icon
className={styles.exclusionIcon}
name={icons.DANGER}
size={36}
title="Movie is on Net Import Exclusion List"
/>
}
{
isExistingMovie &&
<Icon
className={styles.alreadyExistsIcon}
name={icons.CHECK_CIRCLE}
size={36}
title={translate('AlreadyInYourLibrary')}
/>
}
<Link
className={styles.tmdbLink}
to={`https://www.themoviedb.org/movie/${tmdbId}`}
onPress={this.onTMDBLinkPress}
>
<Icon
className={styles.tmdbLinkIcon}
name={icons.EXTERNAL_LINK}
size={28}
/>
</Link>
{
isExclusionMovie &&
<Icon
className={styles.exclusionIcon}
name={icons.DANGER}
size={36}
title={translate('MovieIsOnImportExclusionList')}
/>
}
</div>
</div>
<div>
@@ -145,6 +148,33 @@ class AddNewMovieSearchResult extends Component {
</Label>
}
<Tooltip
anchor={
<Label
size={sizes.LARGE}
>
<Icon
name={icons.EXTERNAL_LINK}
size={13}
/>
<span className={styles.links}>
Links
</span>
</Label>
}
tooltip={
<MovieDetailsLinks
tmdbId={tmdbId}
youTubeTrailerId={youTubeTrailerId}
imdbId={imdbId}
/>
}
canFlip={true}
kind={kinds.INVERSE}
position={tooltipPositions.BOTTOM}
/>
{
status === 'ended' &&
<Label
@@ -179,6 +209,8 @@ class AddNewMovieSearchResult extends Component {
AddNewMovieSearchResult.propTypes = {
tmdbId: PropTypes.number.isRequired,
imdbId: PropTypes.string,
youTubeTrailerId: PropTypes.string,
title: PropTypes.string.isRequired,
titleSlug: PropTypes.string.isRequired,
year: PropTypes.number.isRequired,

View File

@@ -1,8 +1,8 @@
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import createExistingMovieSelector from 'Store/Selectors/createExistingMovieSelector';
import createExclusionMovieSelector from 'Store/Selectors/createExclusionMovieSelector';
import createDimensionsSelector from 'Store/Selectors/createDimensionsSelector';
import createExclusionMovieSelector from 'Store/Selectors/createExclusionMovieSelector';
import createExistingMovieSelector from 'Store/Selectors/createExistingMovieSelector';
import AddNewMovieSearchResult from './AddNewMovieSearchResult';
function createMapStateToProps() {

View File

@@ -1,13 +1,14 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import PageContent from 'Components/Page/PageContent';
import PageContentBody from 'Components/Page/PageContentBody';
import translate from 'Utilities/String/translate';
import getSelectedIds from 'Utilities/Table/getSelectedIds';
import selectAll from 'Utilities/Table/selectAll';
import toggleSelected from 'Utilities/Table/toggleSelected';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import PageContent from 'Components/Page/PageContent';
import PageContentBodyConnector from 'Components/Page/PageContentBodyConnector';
import ImportMovieTableConnector from './ImportMovieTableConnector';
import ImportMovieFooterConnector from './ImportMovieFooterConnector';
import ImportMovieTableConnector from './ImportMovieTableConnector';
class ImportMovie extends Component {
@@ -79,8 +80,8 @@ class ImportMovie extends Component {
rootFolderId,
path,
rootFoldersFetching,
rootFoldersPopulated,
rootFoldersError,
rootFoldersPopulated,
unmappedFolders
} = this.props;
@@ -92,30 +93,40 @@ class ImportMovie extends Component {
} = this.state;
return (
<PageContent title="Import Movies">
<PageContentBodyConnector
<PageContent title={translate('ImportMovies')}>
<PageContentBody
registerScroller={this.setScrollerRef}
onScroll={this.onScroll}
>
{
rootFoldersFetching && !rootFoldersPopulated &&
<LoadingIndicator />
rootFoldersFetching ? <LoadingIndicator /> : null
}
{
!rootFoldersFetching && !!rootFoldersError &&
<div>Unable to load root folders</div>
}
{
!rootFoldersError && rootFoldersPopulated && !unmappedFolders.length &&
!rootFoldersFetching && !!rootFoldersError ?
<div>
All movies in {path} have been imported
</div>
{translate('UnableToLoadRootFolders')}
</div> :
null
}
{
!rootFoldersError && rootFoldersPopulated && !!unmappedFolders.length && scroller &&
!rootFoldersError &&
!rootFoldersFetching &&
rootFoldersPopulated &&
!unmappedFolders.length ?
<div>
{translate('AllMoviesInPathHaveBeenImported', [path])}
</div> :
null
}
{
!rootFoldersError &&
!rootFoldersFetching &&
rootFoldersPopulated &&
!!unmappedFolders.length &&
scroller ?
<ImportMovieTableConnector
rootFolderId={rootFolderId}
unmappedFolders={unmappedFolders}
@@ -126,17 +137,21 @@ class ImportMovie extends Component {
onSelectAllChange={this.onSelectAllChange}
onSelectedChange={this.onSelectedChange}
onRemoveSelectedStateItem={this.onRemoveSelectedStateItem}
/>
/> :
null
}
</PageContentBodyConnector>
</PageContentBody>
{
!rootFoldersError && rootFoldersPopulated && !!unmappedFolders.length &&
!rootFoldersError &&
!rootFoldersFetching &&
!!unmappedFolders.length ?
<ImportMovieFooterConnector
selectedIds={this.getSelectedIds()}
onInputChange={this.onInputChange}
onImportPress={this.onImportPress}
/>
/> :
null
}
</PageContent>
);

View File

@@ -3,10 +3,10 @@ import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import { setImportMovieValue, importMovie, clearImportMovie } from 'Store/Actions/importMovieActions';
import { fetchRootFolders } from 'Store/Actions/rootFolderActions';
import { setAddMovieDefault } from 'Store/Actions/addMovieActions';
import createRouteMatchShape from 'Helpers/Props/Shapes/createRouteMatchShape';
import { setAddMovieDefault } from 'Store/Actions/addMovieActions';
import { clearImportMovie, importMovie, setImportMovieValue } from 'Store/Actions/importMovieActions';
import { fetchRootFolders } from 'Store/Actions/rootFolderActions';
import ImportMovie from './ImportMovie';
function createMapStateToProps() {
@@ -71,15 +71,14 @@ class ImportMovieConnector extends Component {
componentDidMount() {
const {
rootFolderId,
qualityProfiles,
defaultQualityProfileId,
dispatchFetchRootFolders,
dispatchSetAddMovieDefault
} = this.props;
if (!this.props.rootFoldersPopulated) {
dispatchFetchRootFolders();
}
dispatchFetchRootFolders({ id: rootFolderId, timeout: false });
let setDefaults = false;
const setDefaultPayload = {};
@@ -139,6 +138,8 @@ const routeMatchShape = createRouteMatchShape({
ImportMovieConnector.propTypes = {
match: routeMatchShape.isRequired,
rootFolderId: PropTypes.number.isRequired,
rootFoldersFetching: PropTypes.bool.isRequired,
rootFoldersPopulated: PropTypes.bool.isRequired,
qualityProfiles: PropTypes.arrayOf(PropTypes.object).isRequired,
defaultQualityProfileId: PropTypes.number.isRequired,

View File

@@ -31,3 +31,7 @@
margin: 0 10px 0 12px;
text-align: left;
}
.importError {
margin-left: 10px;
}

View File

@@ -1,13 +1,16 @@
import _ from 'lodash';
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { inputTypes, kinds } from 'Helpers/Props';
// import CheckInput from 'Components/Form/CheckInput';
import FormInputGroup from 'Components/Form/FormInputGroup';
import Icon from 'Components/Icon';
import Button from 'Components/Link/Button';
import SpinnerButton from 'Components/Link/SpinnerButton';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
// import CheckInput from 'Components/Form/CheckInput';
import FormInputGroup from 'Components/Form/FormInputGroup';
import PageContentFooter from 'Components/Page/PageContentFooter';
import Popover from 'Components/Tooltip/Popover';
import { icons, inputTypes, kinds, tooltipPositions } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import styles from './ImportMovieFooter.css';
const MIXED = 'mixed';
@@ -93,7 +96,10 @@ class ImportMovieFooter extends Component {
isMonitorMixed,
isQualityProfileIdMixed,
isMinimumAvailabilityMixed,
hasUnsearchedItems,
importError,
onImportPress,
onLookupPress,
onCancelLookupPress
} = this.props;
@@ -107,7 +113,7 @@ class ImportMovieFooter extends Component {
<PageContentFooter>
<div className={styles.inputContainer}>
<div className={styles.label}>
Monitor
{translate('Monitor')}
</div>
<FormInputGroup
@@ -122,7 +128,7 @@ class ImportMovieFooter extends Component {
<div className={styles.inputContainer}>
<div className={styles.label}>
Minimum Availability
{translate('MinimumAvailability')}
</div>
<FormInputGroup
@@ -137,7 +143,7 @@ class ImportMovieFooter extends Component {
<div className={styles.inputContainer}>
<div className={styles.label}>
Quality Profile
{translate('QualityProfile')}
</div>
<FormInputGroup
@@ -163,31 +169,75 @@ class ImportMovieFooter extends Component {
isDisabled={!selectedCount || isLookingUpMovie}
onPress={onImportPress}
>
Import {selectedCount} {selectedCount > 1 ? 'Movies' : 'Movie'}
{translate('Import')} {selectedCount} {selectedCount > 1 ? translate('Movies') : translate('Movie')}
</SpinnerButton>
{
isLookingUpMovie &&
isLookingUpMovie ?
<Button
className={styles.loadingButton}
kind={kinds.WARNING}
onPress={onCancelLookupPress}
>
Cancel Processing
</Button>
{translate('CancelProcessing')}
</Button> :
null
}
{
isLookingUpMovie &&
hasUnsearchedItems ?
<Button
className={styles.loadingButton}
kind={kinds.SUCCESS}
onPress={onLookupPress}
>
{translate('StartProcessing')}
</Button> :
null
}
{
isLookingUpMovie ?
<LoadingIndicator
className={styles.loading}
size={24}
/>
/> :
null
}
{
isLookingUpMovie &&
'Processing Folders'
isLookingUpMovie ?
translate('ProcessingFolders') :
null
}
{
importError ?
<Popover
anchor={
<Icon
className={styles.importError}
name={icons.WARNING}
kind={kinds.WARNING}
/>
}
title={translate('ImportErrors')}
body={
<ul>
{
importError.responseJSON.map((error, index) => {
return (
<li key={index}>
{error.errorMessage}
</li>
);
})
}
</ul>
}
position={tooltipPositions.RIGHT}
/> :
null
}
</div>
</div>
@@ -206,8 +256,11 @@ ImportMovieFooter.propTypes = {
isMonitorMixed: PropTypes.bool.isRequired,
isQualityProfileIdMixed: PropTypes.bool.isRequired,
isMinimumAvailabilityMixed: PropTypes.bool.isRequired,
hasUnsearchedItems: PropTypes.bool.isRequired,
importError: PropTypes.object,
onInputChange: PropTypes.func.isRequired,
onImportPress: PropTypes.func.isRequired,
onLookupPress: PropTypes.func.isRequired,
onCancelLookupPress: PropTypes.func.isRequired
};

View File

@@ -1,7 +1,7 @@
import _ from 'lodash';
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import { cancelLookupMovie } from 'Store/Actions/importMovieActions';
import { cancelLookupMovie, lookupUnsearchedMovies } from 'Store/Actions/importMovieActions';
import ImportMovieFooter from './ImportMovieFooter';
function isMixed(items, selectedIds, defaultValue, key) {
@@ -25,12 +25,14 @@ function createMapStateToProps() {
const {
isLookingUpMovie,
isImporting,
items
items,
importError
} = importMovie;
const isMonitorMixed = isMixed(items, selectedIds, defaultMonitor, 'monitor');
const isQualityProfileIdMixed = isMixed(items, selectedIds, defaultQualityProfileId, 'qualityProfileId');
const isMinimumAvailabilityMixed = isMixed(items, selectedIds, defaultMinimumAvailability, 'minimumAvailability');
const hasUnsearchedItems = !isLookingUpMovie && items.some((item) => !item.isPopulated);
return {
selectedCount: selectedIds.length,
@@ -41,13 +43,16 @@ function createMapStateToProps() {
defaultMinimumAvailability,
isMonitorMixed,
isQualityProfileIdMixed,
isMinimumAvailabilityMixed
isMinimumAvailabilityMixed,
importError,
hasUnsearchedItems
};
}
);
}
const mapDispatchToProps = {
onLookupPress: lookupUnsearchedMovies,
onCancelLookupPress: cancelLookupMovie
};

View File

@@ -3,6 +3,7 @@ import React from 'react';
import VirtualTableHeader from 'Components/Table/VirtualTableHeader';
import VirtualTableHeaderCell from 'Components/Table/VirtualTableHeaderCell';
import VirtualTableSelectAllHeaderCell from 'Components/Table/VirtualTableSelectAllHeaderCell';
import translate from 'Utilities/String/translate';
import styles from './ImportMovieHeader.css';
function ImportMovieHeader(props) {
@@ -24,35 +25,35 @@ function ImportMovieHeader(props) {
className={styles.folder}
name="folder"
>
Folder
</VirtualTableHeaderCell>
<VirtualTableHeaderCell
className={styles.monitor}
name="monitor"
>
Monitor
</VirtualTableHeaderCell>
<VirtualTableHeaderCell
className={styles.minimumAvailability}
name="minimumAvailability"
>
Min Availability
</VirtualTableHeaderCell>
<VirtualTableHeaderCell
className={styles.qualityProfile}
name="qualityProfileId"
>
Quality Profile
{translate('Folder')}
</VirtualTableHeaderCell>
<VirtualTableHeaderCell
className={styles.movie}
name="movie"
>
Movie
{translate('Movie')}
</VirtualTableHeaderCell>
<VirtualTableHeaderCell
className={styles.monitor}
name="monitor"
>
{translate('Monitor')}
</VirtualTableHeaderCell>
<VirtualTableHeaderCell
className={styles.minimumAvailability}
name="minimumAvailability"
>
{translate('MinAvailability')}
</VirtualTableHeaderCell>
<VirtualTableHeaderCell
className={styles.qualityProfile}
name="qualityProfileId"
>
{translate('QualityProfile')}
</VirtualTableHeaderCell>
</VirtualTableHeader>
);

View File

@@ -1,9 +1,9 @@
import PropTypes from 'prop-types';
import React from 'react';
import { inputTypes } from 'Helpers/Props';
import FormInputGroup from 'Components/Form/FormInputGroup';
import VirtualTableRowCell from 'Components/Table/Cells/VirtualTableRowCell';
import VirtualTableSelectCell from 'Components/Table/Cells/VirtualTableSelectCell';
import { inputTypes } from 'Helpers/Props';
import ImportMovieSelectMovieConnector from './SelectMovie/ImportMovieSelectMovieConnector';
import styles from './ImportMovieRow.css';
@@ -34,6 +34,13 @@ function ImportMovieRow(props) {
{id}
</VirtualTableRowCell>
<VirtualTableRowCell className={styles.movie}>
<ImportMovieSelectMovieConnector
id={id}
isExistingMovie={isExistingMovie}
/>
</VirtualTableRowCell>
<VirtualTableRowCell className={styles.monitor}>
<FormInputGroup
type={inputTypes.MOVIE_MONITORED_SELECT}
@@ -60,13 +67,6 @@ function ImportMovieRow(props) {
onChange={onInputChange}
/>
</VirtualTableRowCell>
<VirtualTableRowCell className={styles.movie}>
<ImportMovieSelectMovieConnector
id={id}
isExistingMovie={isExistingMovie}
/>
</VirtualTableRowCell>
</>
);
}

View File

@@ -1,14 +1,15 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { Manager, Popper, Reference } from 'react-popper';
import getUniqueElememtId from 'Utilities/getUniqueElementId';
import { icons, kinds } from 'Helpers/Props';
import Icon from 'Components/Icon';
import Portal from 'Components/Portal';
import FormInputButton from 'Components/Form/FormInputButton';
import TextInput from 'Components/Form/TextInput';
import Icon from 'Components/Icon';
import Link from 'Components/Link/Link';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import TextInput from 'Components/Form/TextInput';
import Portal from 'Components/Portal';
import { icons, kinds } from 'Helpers/Props';
import getUniqueElememtId from 'Utilities/getUniqueElementId';
import translate from 'Utilities/String/translate';
import ImportMovieSearchResultConnector from './ImportMovieSearchResultConnector';
import ImportMovieTitle from './ImportMovieTitle';
import styles from './ImportMovieSelectMovie.css';
@@ -174,7 +175,7 @@ class ImportMovieSelectMovie extends Component {
kind={kinds.WARNING}
/>
No match found!
{translate('NoMatchFound')}
</div> :
null
}
@@ -189,7 +190,7 @@ class ImportMovieSelectMovie extends Component {
kind={kinds.WARNING}
/>
Search failed, please try again later.
{translate('SearchFailedPleaseTryAgainLater')}
</div> :
null
}

View File

@@ -1,7 +1,8 @@
import PropTypes from 'prop-types';
import React from 'react';
import { kinds } from 'Helpers/Props';
import Label from 'Components/Label';
import { kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import styles from './ImportMovieTitle.css';
function ImportMovieTitle(props) {
@@ -33,7 +34,7 @@ function ImportMovieTitle(props) {
<Label
kind={kinds.WARNING}
>
Existing
{translate('Existing')}
</Label>
}
</div>

View File

@@ -1,8 +1,8 @@
import React, { Component } from 'react';
import { Route } from 'react-router-dom';
import Switch from 'Components/Router/Switch';
import ImportMovieSelectFolderConnector from 'AddMovie/ImportMovie/SelectFolder/ImportMovieSelectFolderConnector';
import ImportMovieConnector from 'AddMovie/ImportMovie/Import/ImportMovieConnector';
import ImportMovieSelectFolderConnector from 'AddMovie/ImportMovie/SelectFolder/ImportMovieSelectFolderConnector';
import Switch from 'Components/Router/Switch';
class ImportMovies extends Component {

View File

@@ -1,11 +1,12 @@
import PropTypes from 'prop-types';
import React from 'react';
import formatBytes from 'Utilities/Number/formatBytes';
import { icons } from 'Helpers/Props';
import IconButton from 'Components/Link/IconButton';
import Link from 'Components/Link/Link';
import TableRow from 'Components/Table/TableRow';
import TableRowCell from 'Components/Table/Cells/TableRowCell';
import TableRow from 'Components/Table/TableRow';
import { icons } from 'Helpers/Props';
import formatBytes from 'Utilities/Number/formatBytes';
import translate from 'Utilities/String/translate';
import styles from './ImportMovieRootFolderRow.css';
function ImportMovieRootFolderRow(props) {
@@ -40,7 +41,7 @@ function ImportMovieRootFolderRow(props) {
<TableRowCell className={styles.actions}>
<IconButton
title="Remove root folder"
title={translate('RemoveRootFolder')}
name={icons.REMOVE}
onPress={onDeletePress}
/>

View File

@@ -1,32 +1,33 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { icons, kinds, sizes } from 'Helpers/Props';
import Button from 'Components/Link/Button';
import FieldSet from 'Components/FieldSet';
import Icon from 'Components/Icon';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import FileBrowserModal from 'Components/FileBrowser/FileBrowserModal';
import Icon from 'Components/Icon';
import Button from 'Components/Link/Button';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import PageContent from 'Components/Page/PageContent';
import PageContentBodyConnector from 'Components/Page/PageContentBodyConnector';
import PageContentBody from 'Components/Page/PageContentBody';
import Table from 'Components/Table/Table';
import TableBody from 'Components/Table/TableBody';
import { icons, kinds, sizes } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import ImportMovieRootFolderRowConnector from './ImportMovieRootFolderRowConnector';
import styles from './ImportMovieSelectFolder.css';
const rootFolderColumns = [
{
name: 'path',
label: 'Path',
label: translate('Path'),
isVisible: true
},
{
name: 'freeSpace',
label: 'Free Space',
label: translate('FreeSpace'),
isVisible: true
},
{
name: 'unmappedFolders',
label: 'Unmapped Folders',
label: translate('UnmappedFolders'),
isVisible: true
},
{
@@ -76,8 +77,8 @@ class ImportMovieSelectFolder extends Component {
} = this.props;
return (
<PageContent title="Import Movies">
<PageContentBodyConnector>
<PageContent title={translate('ImportMovies')}>
<PageContentBody>
{
isFetching && !isPopulated &&
<LoadingIndicator />
@@ -85,32 +86,31 @@ class ImportMovieSelectFolder extends Component {
{
!isFetching && !!error &&
<div>Unable to load root folders</div>
<div>
{translate('UnableToLoadRootFolders')}
</div>
}
{
!error && isPopulated &&
<div>
<div className={styles.header}>
Import movies you already have
{translate('ImportHeader')}
</div>
<div className={styles.tips}>
Some tips to ensure the import goes smoothly:
{translate('ImportTipsMessage')}
<ul>
<li className={styles.tip}>
Make sure that your files include the quality in their filenames. eg. <span className={styles.code}>movie.2008.bluray.mkv</span>
</li>
<li className={styles.tip}>
Point Radarr to the folder containing all of your movies, not a specific one. eg. <span className={styles.code}>"{isWindows ? 'C:\\movies' : '/movies'}"</span> and not <span className={styles.code}>"{isWindows ? 'C:\\movies\\the matrix' : '/movies/the matrix'}"</span>
</li>
<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}>{translate('ImportNotForDownloads')}</li>
</ul>
</div>
{
items.length > 0 ?
<div className={styles.recentFolders}>
<FieldSet legend="Recent Folders">
<FieldSet legend={translate('RecentFolders')}>
<Table
columns={rootFolderColumns}
>
@@ -141,7 +141,7 @@ class ImportMovieSelectFolder extends Component {
className={styles.importButtonIcon}
name={icons.DRIVE}
/>
Choose another folder
{translate('ChooseAnotherFolder')}
</Button>
</div> :
@@ -155,7 +155,7 @@ class ImportMovieSelectFolder extends Component {
className={styles.importButtonIcon}
name={icons.DRIVE}
/>
Start Import
{translate('StartImport')}
</Button>
</div>
}
@@ -169,7 +169,7 @@ class ImportMovieSelectFolder extends Component {
/>
</div>
}
</PageContentBodyConnector>
</PageContentBody>
</PageContent>
);
}

View File

@@ -1,11 +1,11 @@
import { push } from 'connected-react-router';
import _ from 'lodash';
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import { push } from 'connected-react-router';
import { addRootFolder, deleteRootFolder, fetchRootFolders } from 'Store/Actions/rootFolderActions';
import createSystemStatusSelector from 'Store/Selectors/createSystemStatusSelector';
import { fetchRootFolders, addRootFolder, deleteRootFolder } from 'Store/Actions/rootFolderActions';
import ImportMovieSelectFolder from './ImportMovieSelectFolder';
function createMapStateToProps() {

View File

@@ -1,8 +1,8 @@
import { ConnectedRouter } from 'connected-react-router';
import PropTypes from 'prop-types';
import React from 'react';
import DocumentTitle from 'react-document-title';
import { Provider } from 'react-redux';
import { ConnectedRouter } from 'connected-react-router';
import PageConnector from 'Components/Page/PageConnector';
import AppRoutes from './AppRoutes';

View File

@@ -1,38 +1,37 @@
import PropTypes from 'prop-types';
import React from 'react';
import { Route, Redirect } from 'react-router-dom';
import getPathWithUrlBase from 'Utilities/getPathWithUrlBase';
import NotFound from 'Components/NotFound';
import Switch from 'Components/Router/Switch';
import MovieIndexConnector from 'Movie/Index/MovieIndexConnector';
import AddNewMovieConnector from 'AddMovie/AddNewMovie/AddNewMovieConnector';
import AddListMovieConnector from 'AddMovie/AddListMovie/AddListMovieConnector';
import AddDiscoverMovieConnector from 'AddMovie/AddListMovie/AddDiscoverMovieConnector';
import ImportMovies from 'AddMovie/ImportMovie/ImportMovies';
import MovieDetailsPageConnector from 'Movie/Details/MovieDetailsPageConnector';
import CalendarPageConnector from 'Calendar/CalendarPageConnector';
import { Redirect, Route } from 'react-router-dom';
import BlacklistConnector from 'Activity/Blacklist/BlacklistConnector';
import HistoryConnector from 'Activity/History/HistoryConnector';
import QueueConnector from 'Activity/Queue/QueueConnector';
import BlacklistConnector from 'Activity/Blacklist/BlacklistConnector';
import Settings from 'Settings/Settings';
import AddNewMovieConnector from 'AddMovie/AddNewMovie/AddNewMovieConnector';
import ImportMovies from 'AddMovie/ImportMovie/ImportMovies';
import CalendarPageConnector from 'Calendar/CalendarPageConnector';
import NotFound from 'Components/NotFound';
import Switch from 'Components/Router/Switch';
import DiscoverMovieConnector from 'DiscoverMovie/DiscoverMovieConnector';
import MovieDetailsPageConnector from 'Movie/Details/MovieDetailsPageConnector';
import MovieIndexConnector from 'Movie/Index/MovieIndexConnector';
import CustomFormatSettingsConnector from 'Settings/CustomFormats/CustomFormatSettingsConnector';
import DownloadClientSettingsConnector from 'Settings/DownloadClients/DownloadClientSettingsConnector';
import GeneralSettingsConnector from 'Settings/General/GeneralSettingsConnector';
import ImportListSettingsConnector from 'Settings/ImportLists/ImportListSettingsConnector';
import IndexerSettingsConnector from 'Settings/Indexers/IndexerSettingsConnector';
import MediaManagementConnector from 'Settings/MediaManagement/MediaManagementConnector';
import MetadataSettings from 'Settings/Metadata/MetadataSettings';
import NotificationSettings from 'Settings/Notifications/NotificationSettings';
import Profiles from 'Settings/Profiles/Profiles';
import Quality from 'Settings/Quality/Quality';
import CustomFormatSettingsConnector from 'Settings/CustomFormats/CustomFormatSettingsConnector';
import IndexerSettingsConnector from 'Settings/Indexers/IndexerSettingsConnector';
import DownloadClientSettingsConnector from 'Settings/DownloadClients/DownloadClientSettingsConnector';
import NetImportSettingsConnector from 'Settings/NetImport/NetImportSettingsConnector';
import NotificationSettings from 'Settings/Notifications/NotificationSettings';
import MetadataSettings from 'Settings/Metadata/MetadataSettings';
import Settings from 'Settings/Settings';
import TagSettings from 'Settings/Tags/TagSettings';
import GeneralSettingsConnector from 'Settings/General/GeneralSettingsConnector';
import UISettingsConnector from 'Settings/UI/UISettingsConnector';
import Status from 'System/Status/Status';
import Tasks from 'System/Tasks/Tasks';
import BackupsConnector from 'System/Backup/BackupsConnector';
import UpdatesConnector from 'System/Updates/UpdatesConnector';
import LogsTableConnector from 'System/Events/LogsTableConnector';
import Logs from 'System/Logs/Logs';
import Status from 'System/Status/Status';
import Tasks from 'System/Tasks/Tasks';
import UpdatesConnector from 'System/Updates/UpdatesConnector';
import getPathWithUrlBase from 'Utilities/getPathWithUrlBase';
function AppRoutes(props) {
const {
@@ -78,14 +77,9 @@ function AppRoutes(props) {
component={ImportMovies}
/>
<Route
path="/add/list"
component={AddListMovieConnector}
/>
<Route
path="/add/discover"
component={AddDiscoverMovieConnector}
component={DiscoverMovieConnector}
/>
<Route
@@ -162,8 +156,8 @@ function AppRoutes(props) {
/>
<Route
path="/settings/netimports"
component={NetImportSettingsConnector}
path="/settings/importlists"
component={ImportListSettingsConnector}
/>
<Route

View File

@@ -1,13 +1,14 @@
import PropTypes from 'prop-types';
import React from 'react';
import { kinds } from 'Helpers/Props';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import Button from 'Components/Link/Button';
import ModalContent from 'Components/Modal/ModalContent';
import ModalHeader from 'Components/Modal/ModalHeader';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import ModalBody from 'Components/Modal/ModalBody';
import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { kinds } from 'Helpers/Props';
import UpdateChanges from 'System/Updates/UpdateChanges';
import translate from 'Utilities/String/translate';
import styles from './AppUpdatedModalContent.css';
function AppUpdatedModalContent(props) {
@@ -25,36 +26,36 @@ function AppUpdatedModalContent(props) {
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
Radarr Updated
{translate('RadarrUpdated')}
</ModalHeader>
<ModalBody>
<div>
Version <span className={styles.version}>{version}</span> of Radarr has been installed, in order to get the latest changes you'll need to reload Radarr.
</div>
<div dangerouslySetInnerHTML={{ __html: translate('VersionUpdateText', [`<span className=${styles.version}>${version}</span>`]) }} />
{
isPopulated && !error && !!update &&
<div>
{
!update.changes &&
<div className={styles.maintenance}>Maintenance release</div>
<div className={styles.maintenance}>
{translate('MaintenanceRelease')}
</div>
}
{
!!update.changes &&
<div>
<div className={styles.changes}>
What's new?
{translate('WhatsNew')}
</div>
<UpdateChanges
title="New"
title={translate('New')}
changes={update.changes.new}
/>
<UpdateChanges
title="Fixed"
title={translate('Fixed')}
changes={update.changes.fixed}
/>
</div>
@@ -72,14 +73,14 @@ function AppUpdatedModalContent(props) {
<Button
onPress={onSeeChangesPress}
>
Recent Changes
{translate('RecentChanges')}
</Button>
<Button
kind={kinds.PRIMARY}
onPress={onModalClose}
>
Reload
{translate('Reload')}
</Button>
</ModalFooter>
</ModalContent>

View File

@@ -1,12 +1,13 @@
import PropTypes from 'prop-types';
import React from 'react';
import { kinds } from 'Helpers/Props';
import Button from 'Components/Link/Button';
import Modal from 'Components/Modal/Modal';
import ModalContent from 'Components/Modal/ModalContent';
import ModalHeader from 'Components/Modal/ModalHeader';
import ModalBody from 'Components/Modal/ModalBody';
import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import styles from './ConnectionLostModal.css';
function ConnectionLostModal(props) {
@@ -22,16 +23,16 @@ function ConnectionLostModal(props) {
>
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
Connnection Lost
{translate('ConnectionLost')}
</ModalHeader>
<ModalBody>
<div>
Radarr has lost it's connection to the backend and will need to be reloaded to restore functionality.
{translate('ConnectionLostMessage')}
</div>
<div className={styles.automatic}>
Radarr will try to connect automatically, or you can click reload below.
{translate('ConnectionLostAutomaticMessage')}
</div>
</ModalBody>
<ModalFooter>
@@ -39,7 +40,7 @@ function ConnectionLostModal(props) {
kind={kinds.PRIMARY}
onPress={onModalClose}
>
Reload
{translate('Reload')}
</Button>
</ModalFooter>
</ModalContent>

View File

@@ -6,9 +6,38 @@ import styles from './Agenda.css';
function Agenda(props) {
const {
items
items,
start,
end
} = props;
const startDateParsed = Date.parse(start);
const endDateParsed = Date.parse(end);
items.forEach((item) => {
const cinemaDateParsed = Date.parse(item.inCinemas);
const digitalDateParsed = Date.parse(item.digitalRelease);
const physicalDateParsed = Date.parse(item.physicalRelease);
const dates = [];
if (cinemaDateParsed > 0 && cinemaDateParsed >= startDateParsed && cinemaDateParsed <= endDateParsed) {
dates.push(cinemaDateParsed);
}
if (digitalDateParsed > 0 && digitalDateParsed >= startDateParsed && digitalDateParsed <= endDateParsed) {
dates.push(digitalDateParsed);
}
if (physicalDateParsed > 0 && physicalDateParsed >= startDateParsed && physicalDateParsed <= endDateParsed) {
dates.push(physicalDateParsed);
}
item.sortDate = Math.min(...dates);
item.cinemaDateParsed = cinemaDateParsed;
item.digitalDateParsed = digitalDateParsed;
item.physicalDateParsed = physicalDateParsed;
});
items.sort((a, b) => ((a.sortDate > b.sortDate) ? 1 : -1));
return (
<div className={styles.agenda}>
{
@@ -32,7 +61,9 @@ function Agenda(props) {
}
Agenda.propTypes = {
items: PropTypes.arrayOf(PropTypes.object).isRequired
items: PropTypes.arrayOf(PropTypes.object).isRequired,
start: PropTypes.string.isRequired,
end: PropTypes.string.isRequired
};
export default Agenda;

View File

@@ -10,6 +10,10 @@
}
}
.link {
composes: link from '~Calendar/Events/CalendarEvent.css';
}
.eventWrapper {
display: flex;
flex: 1 0 1px;
@@ -30,7 +34,8 @@
border: none !important;
}
.movieTitle {
.movieTitle,
.genres {
@add-mixin truncate;
flex: 0 1 300px;
@@ -61,6 +66,10 @@
composes: missing from '~Calendar/Events/CalendarEvent.css';
}
.unreleased {
composes: unreleased from '~Calendar/Events/CalendarEvent.css';
}
@media only screen and (max-width: $breakpointSmall) {
.event {
flex-direction: column;
@@ -81,3 +90,7 @@
flex: 0 0 100%;
}
}
.dateIcon {
width: 25px;
}

View File

@@ -1,13 +1,13 @@
import classNames from 'classnames';
import moment from 'moment';
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import classNames from 'classnames';
import { icons, kinds } from 'Helpers/Props';
import CalendarEventQueueDetails from 'Calendar/Events/CalendarEventQueueDetails';
import getStatusStyle from 'Calendar/getStatusStyle';
import Icon from 'Components/Icon';
import Link from 'Components/Link/Link';
import CalendarEventQueueDetails from 'Calendar/Events/CalendarEventQueueDetails';
import MovieTitleLink from 'Movie/MovieTitleLink';
import { icons, kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
import styles from './AgendaEvent.css';
class AgendaEvent extends Component {
@@ -41,34 +41,69 @@ class AgendaEvent extends Component {
movieFile,
title,
titleSlug,
genres,
isAvailable,
inCinemas,
digitalRelease,
physicalRelease,
monitored,
hasFile,
grabbed,
queueItem,
showDate,
showMovieInformation,
showCutoffUnmetIcon,
longDateFormat,
colorImpairedMode
colorImpairedMode,
cinemaDateParsed,
digitalDateParsed,
physicalDateParsed,
sortDate
} = this.props;
const startTime = moment(inCinemas);
let startTime = null;
let releaseIcon = null;
if (physicalDateParsed === sortDate) {
startTime = physicalRelease;
releaseIcon = icons.DISC;
}
if (digitalDateParsed === sortDate) {
startTime = digitalRelease;
releaseIcon = icons.MOVIE_FILE;
}
if (cinemaDateParsed === sortDate) {
startTime = inCinemas;
releaseIcon = icons.IN_CINEMAS;
}
startTime = moment(startTime);
const downloading = !!(queueItem || grabbed);
const isMonitored = monitored;
const statusStyle = getStatusStyle(hasFile, downloading, startTime, isMonitored);
const statusStyle = getStatusStyle(hasFile, downloading, isAvailable, isMonitored);
const joinedGenres = genres.slice(0, 2).join(', ');
const link = `/movie/${titleSlug}`;
return (
<div>
<Link
className={styles.event}
component="div"
onPress={this.onPress}
className={classNames(
styles.event,
styles.link
)}
to={link}
>
<div className={styles.dateIcon}>
<Icon
name={releaseIcon}
kind={kinds.DEFAULT}
/>
</div>
<div className={styles.date}>
{
showDate &&
startTime.format(longDateFormat)
}
{(showDate) ? startTime.format(longDateFormat) : null}
</div>
<div
@@ -79,12 +114,16 @@ class AgendaEvent extends Component {
)}
>
<div className={styles.movieTitle}>
<MovieTitleLink
titleSlug={titleSlug}
title={title}
/>
{title}
</div>
{
showMovieInformation &&
<div className={styles.genres}>
{joinedGenres}
</div>
}
{
!!queueItem &&
<span className={styles.statusIcon}>
@@ -99,7 +138,7 @@ class AgendaEvent extends Component {
<Icon
className={styles.statusIcon}
name={icons.DOWNLOADING}
title="Movie is downloading"
title={translate('MovieIsDownloading')}
/>
}
@@ -111,7 +150,7 @@ class AgendaEvent extends Component {
className={styles.statusIcon}
name={icons.MOVIE_FILE}
kind={kinds.WARNING}
title="Quality cutoff has not been met"
title={translate('QualityCutoffHasNotBeenMet')}
/>
}
</div>
@@ -126,16 +165,29 @@ AgendaEvent.propTypes = {
movieFile: PropTypes.object,
title: PropTypes.string.isRequired,
titleSlug: PropTypes.string.isRequired,
inCinemas: PropTypes.string.isRequired,
genres: PropTypes.arrayOf(PropTypes.string).isRequired,
isAvailable: PropTypes.bool.isRequired,
inCinemas: PropTypes.string,
digitalRelease: PropTypes.string,
physicalRelease: PropTypes.string,
monitored: PropTypes.bool.isRequired,
hasFile: PropTypes.bool.isRequired,
grabbed: PropTypes.bool,
queueItem: PropTypes.object,
showDate: PropTypes.bool.isRequired,
showMovieInformation: PropTypes.bool.isRequired,
showCutoffUnmetIcon: PropTypes.bool.isRequired,
timeFormat: PropTypes.string.isRequired,
longDateFormat: PropTypes.string.isRequired,
colorImpairedMode: PropTypes.bool.isRequired
colorImpairedMode: PropTypes.bool.isRequired,
cinemaDateParsed: PropTypes.number,
digitalDateParsed: PropTypes.number,
physicalDateParsed: PropTypes.number,
sortDate: PropTypes.number
};
AgendaEvent.defaultProps = {
genres: []
};
export default AgendaEvent;

View File

@@ -1,11 +1,12 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import * as calendarViews from './calendarViews';
import CalendarHeaderConnector from './Header/CalendarHeaderConnector';
import DaysOfWeekConnector from './Day/DaysOfWeekConnector';
import CalendarDaysConnector from './Day/CalendarDaysConnector';
import translate from 'Utilities/String/translate';
import AgendaConnector from './Agenda/AgendaConnector';
import * as calendarViews from './calendarViews';
import CalendarDaysConnector from './Day/CalendarDaysConnector';
import DaysOfWeekConnector from './Day/DaysOfWeekConnector';
import CalendarHeaderConnector from './Header/CalendarHeaderConnector';
import styles from './Calendar.css';
class Calendar extends Component {
@@ -30,7 +31,9 @@ class Calendar extends Component {
{
!isFetching && !!error &&
<div>Unable to load the calendar</div>
<div>
{translate('UnableToLoadTheCalendar')}
</div>
}
{

View File

@@ -2,14 +2,14 @@ import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator';
import * as commandNames from 'Commands/commandNames';
import * as calendarActions from 'Store/Actions/calendarActions';
import { clearMovieFiles, fetchMovieFiles } from 'Store/Actions/movieFileActions';
import { clearQueueDetails, fetchQueueDetails } from 'Store/Actions/queueActions';
import createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';
import hasDifferentItems from 'Utilities/Object/hasDifferentItems';
import selectUniqueIds from 'Utilities/Object/selectUniqueIds';
import * as calendarActions from 'Store/Actions/calendarActions';
import { fetchMovieFiles, clearMovieFiles } from 'Store/Actions/movieFileActions';
import { fetchQueueDetails, clearQueueDetails } from 'Store/Actions/queueActions';
import createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';
import * as commandNames from 'Commands/commandNames';
import { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator';
import Calendar from './Calendar';
const UPDATE_DELAY = 3600000; // 1 hour
@@ -76,16 +76,15 @@ class CalendarConnector extends Component {
} = this.props;
if (hasDifferentItems(prevProps.items, items)) {
const movieIds = selectUniqueIds(items, 'id');
const movieFileIds = selectUniqueIds(items, 'movieFileId');
if (items.length) {
this.props.fetchQueueDetails({ movieIds });
}
if (movieFileIds.length) {
this.props.fetchMovieFiles({ movieFileIds });
}
if (items.length) {
this.props.fetchQueueDetails();
}
}
if (prevProps.time !== time) {

View File

@@ -1,20 +1,22 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import getErrorMessage from 'Utilities/Object/getErrorMessage';
import { align, icons } from 'Helpers/Props';
import PageContent from 'Components/Page/PageContent';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
import Measure from 'Components/Measure';
import PageContentBodyConnector from 'Components/Page/PageContentBodyConnector';
import FilterMenu from 'Components/Menu/FilterMenu';
import PageContent from 'Components/Page/PageContent';
import PageContentBody from 'Components/Page/PageContentBody';
import PageToolbar from 'Components/Page/Toolbar/PageToolbar';
import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';
import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
import PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';
import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';
import FilterMenu from 'Components/Menu/FilterMenu';
import { align, icons } from 'Helpers/Props';
import NoMovie from 'Movie/NoMovie';
import CalendarLinkModal from './iCal/CalendarLinkModal';
import CalendarOptionsModal from './Options/CalendarOptionsModal';
import LegendConnector from './Legend/LegendConnector';
import getErrorMessage from 'Utilities/Object/getErrorMessage';
import translate from 'Utilities/String/translate';
import CalendarConnector from './CalendarConnector';
import CalendarLinkModal from './iCal/CalendarLinkModal';
import LegendConnector from './Legend/LegendConnector';
import CalendarOptionsModal from './Options/CalendarOptionsModal';
import styles from './CalendarPage.css';
const MINIMUM_DAY_WIDTH = 120;
@@ -78,6 +80,8 @@ class CalendarPage extends Component {
filters,
hasMovie,
movieError,
movieIsFetching,
movieIsPopulated,
missingMovieIds,
isRssSyncExecuting,
isSearchingForMissing,
@@ -92,14 +96,13 @@ class CalendarPage extends Component {
} = this.state;
const isMeasured = this.state.width > 0;
const PageComponent = hasMovie ? CalendarConnector : NoMovie;
return (
<PageContent title="Calendar">
<PageContent title={translate('Calendar')}>
<PageToolbar>
<PageToolbarSection>
<PageToolbarButton
label="iCal Link"
label={translate('iCalLink')}
iconName={icons.CALENDAR}
onPress={this.onGetCalendarLinkPress}
/>
@@ -107,14 +110,14 @@ class CalendarPage extends Component {
<PageToolbarSeparator />
<PageToolbarButton
label="RSS Sync"
label={translate('RSSSync')}
iconName={icons.RSS}
isSpinning={isRssSyncExecuting}
onPress={onRssSyncPress}
/>
<PageToolbarButton
label="Search for Missing"
label={translate('SearchForMissing')}
iconName={icons.SEARCH}
isDisabled={!missingMovieIds.length}
isSpinning={isSearchingForMissing}
@@ -124,7 +127,7 @@ class CalendarPage extends Component {
<PageToolbarSection alignContent={align.RIGHT}>
<PageToolbarButton
label="Options"
label={translate('Options')}
iconName={icons.POSTER}
onPress={this.onOptionsPress}
/>
@@ -140,26 +143,31 @@ class CalendarPage extends Component {
</PageToolbarSection>
</PageToolbar>
<PageContentBodyConnector
<PageContentBody
className={styles.calendarPageBody}
innerClassName={styles.calendarInnerPageBody}
>
{
movieIsFetching && !movieIsPopulated &&
<LoadingIndicator />
}
{
movieError &&
<div className={styles.errorMessage}>
{getErrorMessage(movieError, 'Failed to load movie from API')}
{getErrorMessage(movieError, 'Failed to load movies from API')}
</div>
}
{
!movieError &&
!movieError && movieIsPopulated && hasMovie &&
<Measure
whitelist={['width']}
onMeasure={this.onMeasure}
>
{
isMeasured ?
<PageComponent
<CalendarConnector
useCurrentPage={useCurrentPage}
/> :
<div />
@@ -167,11 +175,16 @@ class CalendarPage extends Component {
</Measure>
}
{
!movieError && movieIsPopulated && !hasMovie &&
<NoMovie />
}
{
hasMovie && !movieError &&
<LegendConnector />
}
</PageContentBodyConnector>
</PageContentBody>
<CalendarLinkModal
isOpen={isCalendarLinkModalOpen}
@@ -192,6 +205,8 @@ CalendarPage.propTypes = {
filters: PropTypes.arrayOf(PropTypes.object).isRequired,
hasMovie: PropTypes.bool.isRequired,
movieError: PropTypes.object,
movieIsFetching: PropTypes.bool.isRequired,
movieIsPopulated: PropTypes.bool.isRequired,
missingMovieIds: PropTypes.arrayOf(PropTypes.number).isRequired,
isRssSyncExecuting: PropTypes.bool.isRequired,
isSearchingForMissing: PropTypes.bool.isRequired,

View File

@@ -1,16 +1,16 @@
import moment from 'moment';
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import moment from 'moment';
import { isCommandExecuting } from 'Utilities/Command';
import isBefore from 'Utilities/Date/isBefore';
import * as commandNames from 'Commands/commandNames';
import withCurrentPage from 'Components/withCurrentPage';
import { executeCommand } from 'Store/Actions/commandActions';
import { searchMissing, setCalendarDaysCount, setCalendarFilter } from 'Store/Actions/calendarActions';
import { executeCommand } from 'Store/Actions/commandActions';
import createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';
import createCommandsSelector from 'Store/Selectors/createCommandsSelector';
import createMovieCountSelector from 'Store/Selectors/createMovieCountSelector';
import createUISettingsSelector from 'Store/Selectors/createUISettingsSelector';
import createCommandsSelector from 'Store/Selectors/createCommandsSelector';
import createCommandExecutingSelector from 'Store/Selectors/createCommandExecutingSelector';
import { isCommandExecuting } from 'Utilities/Command';
import isBefore from 'Utilities/Date/isBefore';
import CalendarPage from './CalendarPage';
function createMissingMovieIdsSelector() {
@@ -79,6 +79,8 @@ function createMapStateToProps() {
colorImpairedMode: uiSettings.enableColorImpairedMode,
hasMovie: !!movieCount.count,
movieError: movieCount.error,
movieIsFetching: movieCount.isFetching,
movieIsPopulated: movieCount.isPopulated,
missingMovieIds,
isRssSyncExecuting,
isSearchingForMissing

View File

@@ -1,7 +1,7 @@
import classNames from 'classnames';
import moment from 'moment';
import PropTypes from 'prop-types';
import React from 'react';
import classNames from 'classnames';
import * as calendarViews from 'Calendar/calendarViews';
import CalendarEventConnector from 'Calendar/Events/CalendarEventConnector';
import styles from './CalendarDay.css';

View File

@@ -22,7 +22,9 @@ function createCalendarEventsConnector() {
(state) => state.calendar.items,
(date, items) => {
const filtered = _.filter(items, (item) => {
return moment(date).isSame(moment(item.inCinemas), 'day') || moment(date).isSame(moment(item.physicalRelease), 'day');
return (item.inCinemas && moment(date).isSame(moment(item.inCinemas), 'day')) ||
(item.physicalRelease && moment(date).isSame(moment(item.physicalRelease), 'day')) ||
(item.digitalRelease && moment(date).isSame(moment(item.digitalRelease), 'day'));
});
return sort(filtered);

View File

@@ -1,9 +1,9 @@
import classNames from 'classnames';
import moment from 'moment';
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import classNames from 'classnames';
import isToday from 'Utilities/Date/isToday';
import * as calendarViews from 'Calendar/calendarViews';
import isToday from 'Utilities/Date/isToday';
import CalendarDayConnector from './CalendarDayConnector';
import styles from './CalendarDays.css';

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