1
0
mirror of https://github.com/Radarr/Radarr.git synced 2026-03-19 16:34:34 -04:00

Compare commits

..

17 Commits

Author SHA1 Message Date
ta264
d96dfd228e Ipv6 logging 2022-01-30 04:09:03 +00:00
ta264
e7a8f6332c Fixed: Handle missing category when getting Qbittorrent download path
Fixes RADARR-7HC
Fixes RADARR-V49

(cherry picked from commit 6f97ca9a55471386454457ca52b93733e18e85e4)
Closes #6993
2022-01-25 20:10:52 -06:00
Qstick
b8c92d23f4 Fixed: Ignore case for DIVX VideoCodecID 2022-01-25 19:01:01 -06:00
bakerboy448
093e076db0 Fixed: Clarify Indexer Priority Helptext 2022-01-24 19:35:38 -06:00
Volodymyr Medvid
f6f949415c Fix Ukrainian language mappings 2022-01-24 19:23:12 -06:00
Qstick
ea2576a56c Bump to 4.0.4 2022-01-23 19:03:07 -06:00
Qstick
595acb696d Fixed: Bump FFMpegCore to avoid DivideByZero error 2022-01-23 18:24:28 -06:00
Qstick
38c9534eac Fixed: Webhook fails due to Frames/Analysis property serialization on MediaInfo 2022-01-23 18:24:28 -06:00
bakerboy448
9377ef7942 Fixed: Improved Indexer test failure message when no results are returned
(cherry picked from commit 05b1581b7dfa5bc8a2b38a60179e3472c8134f74)
2022-01-23 16:18:37 -06:00
bakerboy448
c2e5686bcf fixed sonarr ref in UTorrentSettings 2022-01-23 14:44:31 -06:00
Qstick
f08807daf6 Update donation links [common] 2022-01-23 12:12:16 -06:00
bakerboy448
72b3caa72d Fixed: Various Translations 2022-01-21 18:52:46 -06:00
Qstick
589368781b Fixed Incorrect placeholder width on search page
Co-Authored-By: nitsua <8321115+austinwbest@users.noreply.github.com>
2022-01-20 21:12:30 -06:00
Qstick
8fd6101121 New: Add AppName to system status response
Fixes #6952
2022-01-18 23:23:41 -06:00
Mark McDowall
ac9d6cbf0a Fixed: Jump bar on series page not showing when window is made wider
(cherry picked from commit 0cb8d93069d6310abd39ee2fe73219e17aa83fe6)
2022-01-17 11:30:47 -06:00
Qstick
6e0ed36e9f Fixed: Correct queue color for status bars 2022-01-17 08:58:07 -06:00
Qstick
fcb65055ef Bump to 4.0.3 2022-01-15 16:24:50 -06:00
20 changed files with 69 additions and 46 deletions

View File

@@ -7,7 +7,7 @@ variables:
outputFolder: './_output'
artifactsFolder: './_artifacts'
testsFolder: './_tests'
majorVersion: '4.0.2'
majorVersion: '4.0.4'
minorVersion: $[counter('minorVersion', 2000)]
radarrVersion: '$(majorVersion).$(minorVersion)'
buildName: '$(Build.SourceBranchName).$(radarrVersion)'

View File

@@ -86,6 +86,13 @@ class AddNewMovieSearchResult extends Component {
} = this.state;
const linkProps = isExistingMovie ? { to: `/movie/${titleSlug}` } : { onPress: this.onPress };
const posterWidth = 167;
const posterHeight = 250;
const elementStyle = {
width: `${posterWidth}px`,
height: `${posterHeight}px`
};
return (
<div className={styles.searchResult}>
@@ -102,6 +109,7 @@ class AddNewMovieSearchResult extends Component {
<div className={styles.posterContainer}>
<MoviePoster
className={styles.poster}
style={elementStyle}
images={images}
size={250}
overflow={true}
@@ -114,7 +122,7 @@ class AddNewMovieSearchResult extends Component {
monitored={monitored}
hasFile={hasFile}
status={status}
posterWidth={167}
posterWidth={posterWidth}
detailedProgressBar={true}
queueStatus={queueStatus}
queueState={queueState}

View File

@@ -81,7 +81,7 @@ class PageHeader extends Component {
<IconButton
className={styles.donate}
name={icons.HEART}
to="https://opencollective.com/radarr"
to="https://radarr.video/donate"
size={14}
/>
<IconButton

View File

@@ -100,7 +100,9 @@ class PageJumpBar extends Component {
// Listeners
onMeasure = ({ height }) => {
this.setState({ height });
if (height > 0) {
this.setState({ height });
}
}
//

View File

@@ -13,7 +13,7 @@ class Donations extends Component {
return (
<FieldSet legend={translate('Donations')}>
<div className={styles.logoContainer} title="Radarr">
<Link to="https://opencollective.com/radarr">
<Link to="https://radarr.video/donate">
<img
className={styles.logo}
src={`${window.Radarr.urlBase}/Content/Images/Icons/logo-radarr.png`}
@@ -21,7 +21,7 @@ class Donations extends Component {
</Link>
</div>
<div className={styles.logoContainer} title="Lidarr">
<Link to="https://opencollective.com/lidarr">
<Link to="https://lidarr.audio/donate">
<img
className={styles.logo}
src={`${window.Radarr.urlBase}/Content/Images/Icons/logo-lidarr.png`}
@@ -29,7 +29,7 @@ class Donations extends Component {
</Link>
</div>
<div className={styles.logoContainer} title="Readarr">
<Link to="https://opencollective.com/readarr">
<Link to="https://readarr.com/donate">
<img
className={styles.logo}
src={`${window.Radarr.urlBase}/Content/Images/Icons/logo-readarr.png`}
@@ -37,7 +37,7 @@ class Donations extends Component {
</Link>
</div>
<div className={styles.logoContainer} title="Prowlarr">
<Link to="https://opencollective.com/prowlarr">
<Link to="https://prowlarr.com/donate">
<img
className={styles.logo}
src={`${window.Radarr.urlBase}/Content/Images/Icons/logo-prowlarr.png`}
@@ -45,7 +45,7 @@ class Donations extends Component {
</Link>
</div>
<div className={styles.logoContainer} title="Sonarr">
<Link to="https://opencollective.com/sonarr">
<Link to="https://sonarr.tv/donate">
<img
className={styles.logo}
src={`${window.Radarr.urlBase}/Content/Images/Icons/logo-sonarr.png`}

View File

@@ -200,7 +200,7 @@ class QueuedTaskRow extends Component {
{
clientUserAgent ?
<span className={styles.userAgent} title={translate('TaskUserAgentTooltip')}>
{translate('from')}: {clientUserAgent}
{translate('From')}: {clientUserAgent}
</span> :
null
}

View File

@@ -2,7 +2,7 @@ import { kinds } from 'Helpers/Props';
function getStatusStyle(status, monitored, hasFile, isAvailable, returnType, queue = false) {
if (queue) {
return returnType === 'kinds' ? kinds.SUCCESS : 'queue';
return returnType === 'kinds' ? kinds.QUEUE : 'queue';
}
if (hasFile && monitored) {

View File

@@ -7,17 +7,21 @@ using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using NLog;
using NzbDrone.Common.Cache;
using NzbDrone.Common.Extensions;
using NzbDrone.Common.Http.Proxy;
using NzbDrone.Common.Instrumentation;
namespace NzbDrone.Common.Http.Dispatchers
{
public class ManagedHttpDispatcher : IHttpDispatcher
{
private const string NO_PROXY_KEY = "no-proxy";
private const int connection_establish_timeout = 2000;
private static readonly Logger Logger = NzbDroneLogger.GetLogger(typeof(ManagedHttpDispatcher));
private static bool useIPv6 = Socket.OSSupportsIPv6;
private static bool hasResolvedIPv6Availability;
@@ -29,10 +33,10 @@ namespace NzbDrone.Common.Http.Dispatchers
private readonly ICached<CredentialCache> _credentialCache;
public ManagedHttpDispatcher(IHttpProxySettingsProvider proxySettingsProvider,
ICreateManagedWebProxy createManagedWebProxy,
ICertificateValidationService certificateValidationService,
IUserAgentBuilder userAgentBuilder,
ICacheManager cacheManager)
ICreateManagedWebProxy createManagedWebProxy,
ICertificateValidationService certificateValidationService,
IUserAgentBuilder userAgentBuilder,
ICacheManager cacheManager)
{
_proxySettingsProvider = proxySettingsProvider;
_createManagedWebProxy = createManagedWebProxy;
@@ -235,16 +239,21 @@ namespace NzbDrone.Common.Http.Dispatchers
private static async ValueTask<Stream> onConnect(SocketsHttpConnectionContext context, CancellationToken cancellationToken)
{
Logger.Trace($"useIPv6: {useIPv6} hasResolvedipv6availability: {hasResolvedIPv6Availability}");
// Until .NET supports an implementation of Happy Eyeballs (https://tools.ietf.org/html/rfc8305#section-2), let's make IPv4 fallback work in a simple way.
// This issue is being tracked at https://github.com/dotnet/runtime/issues/26177 and expected to be fixed in .NET 6.
if (useIPv6)
{
Logger.Trace("Trying Ipv6");
try
{
var localToken = cancellationToken;
if (!hasResolvedIPv6Availability)
{
Logger.Trace($"Using fast timeout {connection_establish_timeout}");
// to make things move fast, use a very low timeout for the initial ipv6 attempt.
var quickFailCts = new CancellationTokenSource(connection_establish_timeout);
var linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, quickFailCts.Token);
@@ -254,8 +263,10 @@ namespace NzbDrone.Common.Http.Dispatchers
return await attemptConnection(AddressFamily.InterNetworkV6, context, localToken);
}
catch
catch (Exception e)
{
Logger.Trace(e, "Error in ipv6 attempt");
// very naively fallback to ipv4 permanently for this execution based on the response of the first connection attempt.
// note that this may cause users to eventually get switched to ipv4 (on a random failure when they are switching networks, for instance)
// but in the interest of keeping this implementation simple, this is acceptable.
@@ -267,6 +278,8 @@ namespace NzbDrone.Common.Http.Dispatchers
}
}
Logger.Trace("Falling back to ipv4");
// fallback to IPv4.
return await attemptConnection(AddressFamily.InterNetwork, context, cancellationToken);
}

View File

@@ -19,6 +19,8 @@ namespace NzbDrone.Core.Test.MediaFiles.MediaInfo.MediaInfoFormatterTests
[TestCase("wmv1, WMV1", "Droned.wmv", "WMV")]
[TestCase("wmv2, WMV2", "Droned.wmv", "WMV")]
[TestCase("mpeg4, XVID", "", "XviD")]
[TestCase("mpeg4, DIVX", "", "DivX")]
[TestCase("mpeg4, divx", "", "DivX")]
[TestCase("mpeg4, DIV3", "spsm.dvdrip.divx.avi'.", "DivX")]
[TestCase("msmpeg4, DIV3", "Exit the Dragon, Enter the Tiger (1976) 360p MPEG Audio.avi", "DivX")]
[TestCase("msmpeg4v2, DIV3", "Exit the Dragon, Enter the Tiger (1976) 360p MPEG Audio.avi", "DivX")]

View File

@@ -368,9 +368,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
if (Settings.MovieCategory.IsNotNullOrWhiteSpace() && version >= Version.Parse("2.0"))
{
var label = Proxy.GetLabels(Settings)[Settings.MovieCategory];
if (label.SavePath.IsNotNullOrWhiteSpace())
if (Proxy.GetLabels(Settings).TryGetValue(Settings.MovieCategory, out var label) && label.SavePath.IsNotNullOrWhiteSpace())
{
var labelDir = new OsPath(label.SavePath);

View File

@@ -49,7 +49,7 @@ namespace NzbDrone.Core.Download.Clients.UTorrent
[FieldDefinition(6, Label = "Category", Type = FieldType.Textbox, HelpText = "Adding a category specific to Radarr avoids conflicts with unrelated downloads, but it's optional")]
public string MovieCategory { get; set; }
[FieldDefinition(7, Label = "Post-Import Category", Type = FieldType.Textbox, Advanced = true, HelpText = "Category for Radarr to set after it has imported the download. Sonarr will not remove the torrent if seeding has finished. Leave blank to keep same category.")]
[FieldDefinition(7, Label = "Post-Import Category", Type = FieldType.Textbox, Advanced = true, HelpText = "Category for Radarr to set after it has imported the download. Radarr will not remove the torrent if seeding has finished. Leave blank to keep same category.")]
public string MovieImportedCategory { get; set; }
[FieldDefinition(8, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(UTorrentPriority), HelpText = "Priority to use when grabbing movies that aired within the last 21 days")]

View File

@@ -335,7 +335,7 @@ namespace NzbDrone.Core.Indexers
if (releases.Empty())
{
return new ValidationFailure(string.Empty, "Query successful, but no results were returned from your indexer. This may be an issue with the indexer or your indexer category settings.");
return new ValidationFailure(string.Empty, "Query successful, but no results in the configured categories were returned from your indexer. This may be an issue with the indexer or your indexer category settings.");
}
}
catch (ApiKeyException ex)

View File

@@ -102,7 +102,7 @@ namespace NzbDrone.Core.Languages
public static Language Bulgarian => new Language(29, "Bulgarian");
public static Language PortugueseBR => new Language(30, "Portuguese (Brazil)");
public static Language Arabic => new Language(31, "Arabic");
public static Language Ukrainian => new Language(32, "Unkrainian");
public static Language Ukrainian => new Language(32, "Ukrainian");
public static Language Persian => new Language(33, "Persian");
public static Language Bengali => new Language(34, "Bengali");
public static Language Any => new Language(-1, "Any");

View File

@@ -71,6 +71,7 @@
"Authentication": "Authentication",
"AuthenticationMethodHelpText": "Require Username and Password to access Radarr",
"AuthForm": "Forms (Login Page)",
"Auto": "Auto",
"Automatic": "Automatic",
"AutomaticSearch": "Automatic Search",
"AutoRedownloadFailedHelpText": "Automatically search for and attempt to download a different release",
@@ -226,10 +227,6 @@
"DetailedProgressBar": "Detailed Progress Bar",
"DetailedProgressBarHelpText": "Show text on progress bar",
"Details": "Details",
"TmdbRating": "TMDb Rating",
"TmdbVotes": "TMDb Votes",
"ImdbRating": "IMDb Rating",
"ImdbVotes": "IMDb Votes",
"DigitalRelease": "Digital Release",
"Disabled": "Disabled",
"Discord": "Discord",
@@ -266,6 +263,7 @@
"DownloadPropersAndRepacksHelpTextWarning": "Use custom formats for automatic upgrades to Propers/Repacks",
"DownloadWarning": "Download warning: {0}",
"DownloadWarningCheckDownloadClientForMoreDetails": "Download warning: check download client for more details",
"Duration": "Duration",
"Edit": "Edit",
"EditCustomFormat": "Edit Custom Format",
"EditDelayProfile": "Edit Delay Profile",
@@ -347,7 +345,7 @@
"ForMoreInformationOnTheIndividualImportListsClinkOnTheInfoButtons": "For more information on the individual import lists, click on the info buttons.",
"ForMoreInformationOnTheIndividualIndexers": "For more information on the individual indexers, click on the info buttons.",
"FreeSpace": "Free Space",
"From": "From",
"From": "from",
"General": "General",
"GeneralSettings": "General Settings",
"GeneralSettingsSummary": "Port, SSL, username/password, proxy, analytics and updates",
@@ -386,6 +384,8 @@
"IllRestartLater": "I'll restart later",
"Images": "Images",
"IMDb": "IMDb",
"ImdbRating": "IMDb Rating",
"ImdbVotes": "IMDb Votes",
"Import": "Import",
"ImportCustomFormat": "Import Custom Format",
"Imported": "Imported",
@@ -423,10 +423,11 @@
"Indexer": "Indexer",
"IndexerDownloadClientHelpText": "Specify which download client is used for grabs from this indexer",
"IndexerFlags": "Indexer Flags",
"IndexerJackettAll": "Indexers using the unsupported Jackett 'all' endpoint: {0}",
"IndexerLongTermStatusCheckAllClientMessage": "All indexers are unavailable due to failures for more than 6 hours",
"IndexerLongTermStatusCheckSingleClientMessage": "Indexers unavailable due to failures for more than 6 hours: {0}",
"IndexerPriority": "Indexer Priority",
"IndexerPriorityHelpText": "Indexer Priority from 1 (Highest) to 50 (Lowest). Default: 25.",
"IndexerPriorityHelpText": "Indexer Priority from 1 (Highest) to 50 (Lowest). Default: 25. Used when grabbing releases as a tiebreaker for otherwise equal releases, Radarr will still use all enabled indexers for RSS Sync and Searching",
"IndexerRssHealthCheckNoAvailableIndexers": "All rss-capable indexers are temporarily unavailable due to recent indexer errors",
"IndexerRssHealthCheckNoIndexers": "No indexers available with RSS sync enabled, Radarr will not grab new releases automatically",
"Indexers": "Indexers",
@@ -438,7 +439,6 @@
"IndexerStatusCheckAllClientMessage": "All indexers are unavailable due to failures",
"IndexerStatusCheckSingleClientMessage": "Indexers unavailable due to failures: {0}",
"IndexerTagHelpText": "Only use this indexer for movies with at least one matching tag. Leave blank to use with all movies.",
"IndexerJackettAll": "Indexers using the unsupported Jackett 'all' endpoint: {0}",
"Info": "Info",
"InstallLatest": "Install Latest",
"InteractiveImport": "Interactive Import",
@@ -463,6 +463,7 @@
"Level": "Level",
"LinkHere": "here",
"Links": "Links",
"List": "List",
"ListExclusions": "List Exclusions",
"Lists": "Lists",
"ListSettings": "List Settings",
@@ -589,6 +590,7 @@
"Negated": "Negated",
"NegateHelpText": "If checked, the custom format will not apply if this {0} condition matches.",
"NetCore": ".NET",
"Never": "Never",
"New": "New",
"NextExecution": "Next Execution",
"No": "No",
@@ -727,6 +729,7 @@
"RadarrSupportsCustomConditionsAgainstTheReleasePropertiesBelow": "Radarr supports custom conditions against the release properties below.",
"RadarrTags": "Radarr Tags",
"RadarrUpdated": "Radarr Updated",
"Rating": "Rating",
"Ratings": "Ratings",
"ReadTheWikiForMoreInformation": "Read the Wiki for more information",
"Real": "Real",
@@ -943,6 +946,7 @@
"SSLCertPathHelpText": "Path to pfx file",
"SSLPort": "SSL Port",
"StandardMovieFormat": "Standard Movie Format",
"Started": "Started",
"StartImport": "Start Import",
"StartProcessing": "Start Processing",
"StartSearchForMissingMovie": "Start search for missing movie",
@@ -983,6 +987,8 @@
"TMDb": "TMDb",
"TMDBId": "TMDb Id",
"TmdbIdHelpText": "The TMDb Id of the movie to exclude",
"TmdbRating": "TMDb Rating",
"TmdbVotes": "TMDb Votes",
"Today": "Today",
"Tomorrow": "Tomorrow",
"TorrentDelay": "Torrent Delay",
@@ -1088,6 +1094,7 @@
"VideoCodec": "Video Codec",
"View": "View",
"VisitGithubCustomFormatsAphrodite": "Visit the wiki for more details: ",
"Waiting": "Waiting",
"WaitingToImport": "Waiting to Import",
"WaitingToProcess": "Waiting to Process",
"Wanted": "Wanted",
@@ -1106,4 +1113,4 @@
"YesMoveFiles": "Yes, Move the Files",
"Yesterday": "Yesterday",
"YouCanAlsoSearch": "You can also search using TMDb ID or IMDb ID of a movie. e.g. `tmdb:71663`"
}
}

View File

@@ -217,8 +217,8 @@ namespace NzbDrone.Core.MediaFiles.MediaInfo
}
if (videoCodecID == "DIV3" ||
videoCodecID == "DIVX" ||
videoCodecID == "DX50")
videoCodecID == "DX50" ||
videoCodecID.ToUpperInvariant() == "DIVX")
{
return "DivX";
}
@@ -256,7 +256,8 @@ namespace NzbDrone.Core.MediaFiles.MediaInfo
videoFormat == "rv10" ||
videoFormat == "rv20" ||
videoFormat == "rv30" ||
videoFormat == "rv40")
videoFormat == "rv40" ||
videoFormat == "cinepak")
{
return "";
}

View File

@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
using System.Text.Json.Serialization;
using FFMpegCore;
using NzbDrone.Core.Datastore;
@@ -12,12 +11,6 @@ namespace NzbDrone.Core.MediaFiles.MediaInfo
public string RawFrameData { get; set; }
public int SchemaRevision { get; set; }
[JsonIgnore]
public IMediaAnalysis Analysis => FFProbe.Analyse(RawStreamData);
[JsonIgnore]
public IMediaAnalysis Frames => FFProbe.Analyse(RawFrameData);
public string ContainerFormat { get; set; }
public string VideoFormat { get; set; }

View File

@@ -1,10 +1,8 @@
using System;
using System.Collections.Generic;
using System;
using System.Collections.Specialized;
using System.Net;
using FluentValidation.Results;
using NLog;
using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Common.Http;
namespace NzbDrone.Core.Notifications.Notifiarr

View File

@@ -40,7 +40,7 @@ namespace NzbDrone.Core.Parser
new IsoLanguage("ro", "", "ron", "Romanian", Language.Romanian),
new IsoLanguage("pt", "br", "", "Portuguese (Brazil)", Language.PortugueseBR),
new IsoLanguage("ar", "", "ara", "Arabic", Language.Arabic),
new IsoLanguage("uk", "", "uar", "Ukrainian", Language.Ukrainian),
new IsoLanguage("uk", "", "ukr", "Ukrainian", Language.Ukrainian),
new IsoLanguage("fa", "", "fas", "Persian", Language.Persian),
new IsoLanguage("be", "", "ben", "Bengali", Language.Bengali)
};

View File

@@ -5,6 +5,7 @@
<ItemGroup>
<PackageReference Include="Dapper" Version="2.0.123" />
<PackageReference Include="MailKit" Version="2.15.0" />
<PackageReference Include="Servarr.FFMpegCore" Version="4.5.0-25" />
<PackageReference Include="Servarr.FFprobe" Version="4.4.1.63" />
<PackageReference Include="System.Memory" Version="4.5.4" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
@@ -19,7 +20,6 @@
<PackageReference Include="System.Data.SQLite.Core.Servarr" Version="1.0.115.5-18" />
<PackageReference Include="System.Text.Json" Version="6.0.1" />
<PackageReference Include="MonoTorrent" Version="2.0.1" />
<PackageReference Include="FFMpegCore" Version="4.6.16" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\NzbDrone.Common\Radarr.Common.csproj" />

View File

@@ -58,6 +58,7 @@ namespace Radarr.Api.V3.System
{
return new
{
AppName = BuildInfo.AppName,
Version = BuildInfo.Version.ToString(),
BuildTime = BuildInfo.BuildDateTime,
IsDebug = BuildInfo.IsDebug,