diff --git a/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs b/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs index d9b880b6e..565a76a97 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs @@ -15,6 +15,7 @@ using NzbDrone.Common.Http; using NzbDrone.Common.Serializer; using NzbDrone.Core.Annotations; using NzbDrone.Core.Configuration; +using NzbDrone.Core.Exceptions; using NzbDrone.Core.Indexers.Exceptions; using NzbDrone.Core.Indexers.Settings; using NzbDrone.Core.IndexerSearch.Definitions; @@ -55,7 +56,7 @@ namespace NzbDrone.Core.Indexers.Definitions public override async Task Download(Uri link) { - if (Settings.Freeleech) + if (Settings.Freeleech != (int)MyAnonamouseFreeleech.Never) { _logger.Debug($"Attempting to use freeleech token for {link.AbsoluteUri}"); @@ -76,13 +77,25 @@ namespace NzbDrone.Core.Indexers.Definitions var response = await FetchIndexerResponse(indexerReq).ConfigureAwait(false); var resource = Json.Deserialize(response.Content); - if (resource.Success) + if (!resource.Success) { - _logger.Debug($"Successfully to used freeleech token for torrentid ${id}"); + _logger.Debug($"Failed to use freeleech token: {resource.Error}"); + + if (Settings.Freeleech == (int)MyAnonamouseFreeleech.Preferred) + { + _logger.Debug($"'Use Freeleech Token' option set to preferred, continuing download"); + } + else + { + // TODO Find a way to deal with failures due to already being freeleech (either personal or VIP) + // TODO Find a better way to abort downloads + throw new ReleaseUnavailableException( + "Failed to buy freeleech token and 'Use Freeleech Token' is set to required, aborting download"); + } } else { - _logger.Debug($"Failed to use freeleech token: ${resource.Error}"); + _logger.Debug($"Successfully used freeleech token for torrentid ${id}"); } } else @@ -525,8 +538,8 @@ namespace NzbDrone.Core.Indexers.Definitions [FieldDefinition(3, Type = FieldType.Select, Label = "Search Type", SelectOptions = typeof(MyAnonamouseSearchType), HelpText = "Specify the desired search type")] public int SearchType { get; set; } - [FieldDefinition(4, Type = FieldType.Checkbox, Label = "Buy Freeleech Token", HelpText = "Buy personal freeleech token for download")] - public bool Freeleech { get; set; } + [FieldDefinition(4, Type = FieldType.Select, Label = "Buy Freeleech Token", SelectOptions = typeof(MyAnonamouseFreeleech), HelpText = "Buy personal freeleech token for download")] + public int Freeleech { get; set; } [FieldDefinition(5, Type = FieldType.Checkbox, Label = "Search in description", HelpText = "Search text in the description")] public bool SearchInDescription { get; set; } @@ -559,6 +572,16 @@ namespace NzbDrone.Core.Indexers.Definitions NotVip = 5, } + public enum MyAnonamouseFreeleech + { + [FieldOption(Label="Never", Hint = "Do not buy tokens")] + Never = 0, + [FieldOption(Label="Preferred", Hint = "Buy and use token if possible")] + Preferred = 1, + [FieldOption(Label="Required", Hint = "Abort download if unable to buy token")] + Required = 2, + } + public class MyAnonamouseTorrent { public int Id { get; set; }