Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed: (Myanonamouse) Allow aborting download if FL token purchase fails #1875

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 29 additions & 6 deletions src/NzbDrone.Core/Indexers/Definitions/MyAnonamouse.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
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;
Expand Down Expand Up @@ -55,7 +56,7 @@ public override IParseIndexerResponse GetParser()

public override async Task<byte[]> Download(Uri link)
{
if (Settings.Freeleech)
if (Settings.Freeleech != (int)MyAnonamouseFreeleech.Never)
{
_logger.Debug($"Attempting to use freeleech token for {link.AbsoluteUri}");

Expand All @@ -76,13 +77,25 @@ public override async Task<byte[]> Download(Uri link)
var response = await FetchIndexerResponse(indexerReq).ConfigureAwait(false);
var resource = Json.Deserialize<MyAnonamouseBuyPersonalFreeleechResponse>(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)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why don't we check the error message?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's the main way I'm considering doing it, but I usually want to avoid comparing strings in error scenarios, since strings can change on a dime. If there's no better alternatives, it's what I'll roll with, but was hoping someone had a better idea (like maybe knew a way to check FL status via url query strings)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if (html.Contains("You do not have any freeleech tokens left.")
|| html.Contains("You do not have enough freeleech tokens")
|| html.Contains("This torrent is too large.")
|| html.Contains("You cannot use tokens here"))

// TODO Find a better way to abort downloads
throw new ReleaseUnavailableException(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now I see what you mean with ReleaseUnavailableException, I'll have to look into it later.

"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
Expand Down Expand Up @@ -507,8 +520,8 @@ public MyAnonamouseSettings()
[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; }
Expand Down Expand Up @@ -541,6 +554,16 @@ public enum MyAnonamouseSearchType
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; }
Expand Down
Loading