Myanonamouse: use API

This commit is contained in:
kaso17
2018-11-12 18:24:02 +01:00
parent 864eb6f1cd
commit ac1fa68260
2 changed files with 197 additions and 149 deletions

View File

@@ -1,10 +1,11 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.Specialized; using System.Collections.Specialized;
using System.Globalization;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks; using System.Threading.Tasks;
using CsQuery;
using Jackett.Common.Models; using Jackett.Common.Models;
using Jackett.Common.Models.IndexerConfig; using Jackett.Common.Models.IndexerConfig;
using Jackett.Common.Services.Interfaces; using Jackett.Common.Services.Interfaces;
@@ -18,11 +19,11 @@ namespace Jackett.Common.Indexers
public class Myanonamouse : BaseWebIndexer public class Myanonamouse : BaseWebIndexer
{ {
private string LoginUrl { get { return SiteLink + "takelogin.php"; } } private string LoginUrl { get { return SiteLink + "takelogin.php"; } }
private string SearchUrl { get { return SiteLink + "tor/js/loadSearch2.php"; } } private string SearchUrl { get { return SiteLink + "tor/js/loadSearchJSONbasic.php"; } }
private new ConfigurationDataBasicLogin configData private new ConfigurationDataMyAnonamouse configData
{ {
get { return (ConfigurationDataBasicLogin)base.configData; } get { return (ConfigurationDataMyAnonamouse)base.configData; }
set { base.configData = value; } set { base.configData = value; }
} }
@@ -30,122 +31,136 @@ namespace Jackett.Common.Indexers
: base(name: "MyAnonamouse", : base(name: "MyAnonamouse",
description: "Friendliness, Warmth and Sharing", description: "Friendliness, Warmth and Sharing",
link: "https://www.myanonamouse.net/", link: "https://www.myanonamouse.net/",
caps: new TorznabCapabilities(TorznabCatType.Books,
TorznabCatType.AudioAudiobook,
TorznabCatType.BooksComics,
TorznabCatType.BooksEbook,
TorznabCatType.BooksMagazines,
TorznabCatType.BooksTechnical),
configService: configService, configService: configService,
client: c, client: c,
logger: l, logger: l,
p: ps, p: ps,
configData: new ConfigurationDataBasicLogin()) configData: new ConfigurationDataMyAnonamouse())
{ {
Encoding = Encoding.UTF8; Encoding = Encoding.UTF8;
Language = "en-us"; Language = "en-us";
Type = "private"; Type = "private";
webclient.EmulateBrowser = false;
AddCategoryMapping("61", TorznabCatType.BooksComics); AddCategoryMapping("13", TorznabCatType.AudioAudiobook, "AudioBooks");
AddCategoryMapping("91", TorznabCatType.BooksTechnical); AddCategoryMapping("14", TorznabCatType.BooksEbook, "E-Books");
AddCategoryMapping("80", TorznabCatType.BooksTechnical); AddCategoryMapping("15", TorznabCatType.AudioAudiobook, "Musicology");
AddCategoryMapping("79", TorznabCatType.BooksMagazines); AddCategoryMapping("16", TorznabCatType.AudioAudiobook, "Radio");
AddCategoryMapping("39", TorznabCatType.AudioAudiobook); AddCategoryMapping("39", TorznabCatType.AudioAudiobook, "Audiobooks - Action/Adventure");
AddCategoryMapping("49", TorznabCatType.AudioAudiobook); AddCategoryMapping("49", TorznabCatType.AudioAudiobook, "Audiobooks - Art");
AddCategoryMapping("50", TorznabCatType.AudioAudiobook); AddCategoryMapping("50", TorznabCatType.AudioAudiobook, "Audiobooks - Biographical");
AddCategoryMapping("83", TorznabCatType.AudioAudiobook); AddCategoryMapping("83", TorznabCatType.AudioAudiobook, "Audiobooks - Business");
AddCategoryMapping("51", TorznabCatType.AudioAudiobook); AddCategoryMapping("51", TorznabCatType.AudioAudiobook, "Audiobooks - Computer/Internet");
AddCategoryMapping("97", TorznabCatType.AudioAudiobook); AddCategoryMapping("97", TorznabCatType.AudioAudiobook, "Audiobooks - Crafts");
AddCategoryMapping("40", TorznabCatType.AudioAudiobook); AddCategoryMapping("40", TorznabCatType.AudioAudiobook, "Audiobooks - Crime/Thriller");
AddCategoryMapping("41", TorznabCatType.AudioAudiobook); AddCategoryMapping("41", TorznabCatType.AudioAudiobook, "Audiobooks - Fantasy");
AddCategoryMapping("106", TorznabCatType.AudioAudiobook); AddCategoryMapping("106", TorznabCatType.AudioAudiobook, "Audiobooks - Food");
AddCategoryMapping("42", TorznabCatType.AudioAudiobook); AddCategoryMapping("42", TorznabCatType.AudioAudiobook, "Audiobooks - General Fiction");
AddCategoryMapping("52", TorznabCatType.AudioAudiobook); AddCategoryMapping("52", TorznabCatType.AudioAudiobook, "Audiobooks - General Non-Fic");
AddCategoryMapping("98", TorznabCatType.AudioAudiobook); AddCategoryMapping("98", TorznabCatType.AudioAudiobook, "Audiobooks - Historical Fiction");
AddCategoryMapping("54", TorznabCatType.AudioAudiobook); AddCategoryMapping("54", TorznabCatType.AudioAudiobook, "Audiobooks - History");
AddCategoryMapping("55", TorznabCatType.AudioAudiobook); AddCategoryMapping("55", TorznabCatType.AudioAudiobook, "Audiobooks - Home/Garden");
AddCategoryMapping("43", TorznabCatType.AudioAudiobook); AddCategoryMapping("43", TorznabCatType.AudioAudiobook, "Audiobooks - Horror");
AddCategoryMapping("99", TorznabCatType.AudioAudiobook); AddCategoryMapping("99", TorznabCatType.AudioAudiobook, "Audiobooks - Humor");
AddCategoryMapping("84", TorznabCatType.AudioAudiobook); AddCategoryMapping("84", TorznabCatType.AudioAudiobook, "Audiobooks - Instructional");
AddCategoryMapping("44", TorznabCatType.AudioAudiobook); AddCategoryMapping("44", TorznabCatType.AudioAudiobook, "Audiobooks - Juvenile");
AddCategoryMapping("56", TorznabCatType.AudioAudiobook); AddCategoryMapping("56", TorznabCatType.AudioAudiobook, "Audiobooks - Language");
AddCategoryMapping("137", TorznabCatType.AudioAudiobook); AddCategoryMapping("45", TorznabCatType.AudioAudiobook, "Audiobooks - Literary Classics");
AddCategoryMapping("45", TorznabCatType.AudioAudiobook); AddCategoryMapping("57", TorznabCatType.AudioAudiobook, "Audiobooks - Math/Science/Tech");
AddCategoryMapping("57", TorznabCatType.AudioAudiobook); AddCategoryMapping("85", TorznabCatType.AudioAudiobook, "Audiobooks - Medical");
AddCategoryMapping("85", TorznabCatType.AudioAudiobook); AddCategoryMapping("87", TorznabCatType.AudioAudiobook, "Audiobooks - Mystery");
AddCategoryMapping("87", TorznabCatType.AudioAudiobook); AddCategoryMapping("119", TorznabCatType.AudioAudiobook, "Audiobooks - Nature");
AddCategoryMapping("119", TorznabCatType.AudioAudiobook); AddCategoryMapping("88", TorznabCatType.AudioAudiobook, "Audiobooks - Philosophy");
AddCategoryMapping("88", TorznabCatType.AudioAudiobook); AddCategoryMapping("58", TorznabCatType.AudioAudiobook, "Audiobooks - Pol/Soc/Relig");
AddCategoryMapping("58", TorznabCatType.AudioAudiobook); AddCategoryMapping("59", TorznabCatType.AudioAudiobook, "Audiobooks - Recreation");
AddCategoryMapping("59", TorznabCatType.AudioAudiobook); AddCategoryMapping("46", TorznabCatType.AudioAudiobook, "Audiobooks - Romance");
AddCategoryMapping("46", TorznabCatType.AudioAudiobook); AddCategoryMapping("47", TorznabCatType.AudioAudiobook, "Audiobooks - Science Fiction");
AddCategoryMapping("47", TorznabCatType.AudioAudiobook); AddCategoryMapping("53", TorznabCatType.AudioAudiobook, "Audiobooks - Self-Help");
AddCategoryMapping("53", TorznabCatType.AudioAudiobook); AddCategoryMapping("89", TorznabCatType.AudioAudiobook, "Audiobooks - Travel/Adventure");
AddCategoryMapping("89", TorznabCatType.AudioAudiobook); AddCategoryMapping("100", TorznabCatType.AudioAudiobook, "Audiobooks - True Crime");
AddCategoryMapping("100", TorznabCatType.AudioAudiobook); AddCategoryMapping("108", TorznabCatType.AudioAudiobook, "Audiobooks - Urban Fantasy");
AddCategoryMapping("108", TorznabCatType.AudioAudiobook); AddCategoryMapping("48", TorznabCatType.AudioAudiobook, "Audiobooks - Western");
AddCategoryMapping("48", TorznabCatType.AudioAudiobook); AddCategoryMapping("111", TorznabCatType.AudioAudiobook, "Audiobooks - Young Adult");
AddCategoryMapping("111", TorznabCatType.AudioAudiobook); AddCategoryMapping("60", TorznabCatType.BooksEbook, "Ebooks - Action/Adventure");
AddCategoryMapping("60", TorznabCatType.BooksEbook); AddCategoryMapping("71", TorznabCatType.BooksEbook, "Ebooks - Art");
AddCategoryMapping("71", TorznabCatType.BooksEbook); AddCategoryMapping("72", TorznabCatType.BooksEbook, "Ebooks - Biographical");
AddCategoryMapping("72", TorznabCatType.BooksEbook); AddCategoryMapping("90", TorznabCatType.BooksEbook, "Ebooks - Business");
AddCategoryMapping("90", TorznabCatType.BooksEbook); AddCategoryMapping("61", TorznabCatType.BooksComics, "Ebooks - Comics/Graphic novels");
AddCategoryMapping("73", TorznabCatType.BooksEbook); AddCategoryMapping("73", TorznabCatType.BooksEbook, "Ebooks - Computer/Internet");
AddCategoryMapping("101", TorznabCatType.BooksEbook); AddCategoryMapping("101", TorznabCatType.BooksEbook, "Ebooks - Crafts");
AddCategoryMapping("62", TorznabCatType.BooksEbook); AddCategoryMapping("62", TorznabCatType.BooksEbook, "Ebooks - Crime/Thriller");
AddCategoryMapping("63", TorznabCatType.BooksEbook); AddCategoryMapping("63", TorznabCatType.BooksEbook, "Ebooks - Fantasy");
AddCategoryMapping("107", TorznabCatType.BooksEbook); AddCategoryMapping("107", TorznabCatType.BooksEbook, "Ebooks - Food");
AddCategoryMapping("64", TorznabCatType.BooksEbook); AddCategoryMapping("64", TorznabCatType.BooksEbook, "Ebooks - General Fiction");
AddCategoryMapping("74", TorznabCatType.BooksEbook); AddCategoryMapping("74", TorznabCatType.BooksEbook, "Ebooks - General Non-Fiction");
AddCategoryMapping("102", TorznabCatType.BooksEbook); AddCategoryMapping("102", TorznabCatType.BooksEbook, "Ebooks - Historical Fiction");
AddCategoryMapping("76", TorznabCatType.BooksEbook); AddCategoryMapping("76", TorznabCatType.BooksEbook, "Ebooks - History");
AddCategoryMapping("77", TorznabCatType.BooksEbook); AddCategoryMapping("77", TorznabCatType.BooksEbook, "Ebooks - Home/Garden");
AddCategoryMapping("65", TorznabCatType.BooksEbook); AddCategoryMapping("65", TorznabCatType.BooksEbook, "Ebooks - Horror");
AddCategoryMapping("103", TorznabCatType.BooksEbook); AddCategoryMapping("103", TorznabCatType.BooksEbook, "Ebooks - Humor");
AddCategoryMapping("115", TorznabCatType.BooksEbook); AddCategoryMapping("115", TorznabCatType.BooksEbook, "Ebooks - Illusion/Magic");
AddCategoryMapping("66", TorznabCatType.BooksEbook); AddCategoryMapping("91", TorznabCatType.BooksTechnical, "Ebooks - Instructional");
AddCategoryMapping("78", TorznabCatType.BooksEbook); AddCategoryMapping("66", TorznabCatType.BooksEbook, "Ebooks - Juvenile");
AddCategoryMapping("138", TorznabCatType.BooksEbook); AddCategoryMapping("78", TorznabCatType.BooksEbook, "Ebooks - Language");
AddCategoryMapping("67", TorznabCatType.BooksEbook); AddCategoryMapping("67", TorznabCatType.BooksEbook, "Ebooks - Literary Classics");
AddCategoryMapping("92", TorznabCatType.BooksEbook); AddCategoryMapping("79", TorznabCatType.BooksMagazines, "Ebooks - Magazines/Newspapers");
AddCategoryMapping("118", TorznabCatType.BooksEbook); AddCategoryMapping("80", TorznabCatType.BooksTechnical, "Ebooks - Math/Science/Tech");
AddCategoryMapping("94", TorznabCatType.BooksEbook); AddCategoryMapping("92", TorznabCatType.BooksEbook, "Ebooks - Medical");
AddCategoryMapping("120", TorznabCatType.BooksEbook); AddCategoryMapping("118", TorznabCatType.BooksEbook, "Ebooks - Mixed Collections");
AddCategoryMapping("95", TorznabCatType.BooksEbook); AddCategoryMapping("94", TorznabCatType.BooksEbook, "Ebooks - Mystery");
AddCategoryMapping("81", TorznabCatType.BooksEbook); AddCategoryMapping("120", TorznabCatType.BooksEbook, "Ebooks - Nature");
AddCategoryMapping("82", TorznabCatType.BooksEbook); AddCategoryMapping("95", TorznabCatType.BooksEbook, "Ebooks - Philosophy");
AddCategoryMapping("68", TorznabCatType.BooksEbook); AddCategoryMapping("81", TorznabCatType.BooksEbook, "Ebooks - Pol/Soc/Relig");
AddCategoryMapping("69", TorznabCatType.BooksEbook); AddCategoryMapping("82", TorznabCatType.BooksEbook, "Ebooks - Recreation");
AddCategoryMapping("75", TorznabCatType.BooksEbook); AddCategoryMapping("68", TorznabCatType.BooksEbook, "Ebooks - Romance");
AddCategoryMapping("96", TorznabCatType.BooksEbook); AddCategoryMapping("69", TorznabCatType.BooksEbook, "Ebooks - Science Fiction");
AddCategoryMapping("104", TorznabCatType.BooksEbook); AddCategoryMapping("75", TorznabCatType.BooksEbook, "Ebooks - Self-Help");
AddCategoryMapping("109", TorznabCatType.BooksEbook); AddCategoryMapping("96", TorznabCatType.BooksEbook, "Ebooks - Travel/Adventure");
AddCategoryMapping("70", TorznabCatType.BooksEbook); AddCategoryMapping("104", TorznabCatType.BooksEbook, "Ebooks - True Crime");
AddCategoryMapping("112", TorznabCatType.BooksEbook); AddCategoryMapping("109", TorznabCatType.BooksEbook, "Ebooks - Urban Fantasy");
AddCategoryMapping("70", TorznabCatType.BooksEbook, "Ebooks - Western");
AddCategoryMapping("112", TorznabCatType.BooksEbook, "Ebooks - Young Adult");
AddCategoryMapping("19", TorznabCatType.AudioAudiobook, "Guitar/Bass Tabs");
AddCategoryMapping("20", TorznabCatType.AudioAudiobook, "Individual Sheet");
AddCategoryMapping("24", TorznabCatType.AudioAudiobook, "Individual Sheet MP3");
AddCategoryMapping("126", TorznabCatType.AudioAudiobook, "Instructional Book with Video");
AddCategoryMapping("22", TorznabCatType.AudioAudiobook, "Instructional Media - Music");
AddCategoryMapping("113", TorznabCatType.AudioAudiobook, "Lick Library - LTP/Jam With");
AddCategoryMapping("114", TorznabCatType.AudioAudiobook, "Lick Library - Techniques/QL");
AddCategoryMapping("17", TorznabCatType.AudioAudiobook, "Music - Complete Editions");
AddCategoryMapping("26", TorznabCatType.AudioAudiobook, "Music Book");
AddCategoryMapping("27", TorznabCatType.AudioAudiobook, "Music Book MP3");
AddCategoryMapping("30", TorznabCatType.AudioAudiobook, "Sheet Collection");
AddCategoryMapping("31", TorznabCatType.AudioAudiobook, "Sheet Collection MP3");
AddCategoryMapping("127", TorznabCatType.AudioAudiobook, "Radio - Comedy");
AddCategoryMapping("130", TorznabCatType.AudioAudiobook, "Radio - Drama");
AddCategoryMapping("128", TorznabCatType.AudioAudiobook, "Radio - Factual/Documentary");
AddCategoryMapping("132", TorznabCatType.AudioAudiobook, "Radio - Reading");
} }
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson) public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
{ {
LoadValuesFromJson(configJson); LoadValuesFromJson(configJson);
var pairs = new Dictionary<string, string> {
{ "email", configData.Username.Value },
{ "password", configData.Password.Value },
{ "returnto", "/" }
};
configData.CookieHeader.Cookie = ""; // cookie reset needed in order to relogin // TODO: implement captcha
CookieHeader = "mam_id=" + configData.MamId.Value;
var preRequest = await RequestStringWithCookiesAndRetry(LoginUrl); try
var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, preRequest.Cookies, true, SearchUrl, SiteLink);
await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("Search Results"), () =>
{ {
CQ dom = result.Content; var results = await PerformQuery(new TorznabQuery());
var errorMessage = dom["table.main table td.text"].Text().Trim().Replace("\n\t", " "); if (results.Count() == 0)
throw new ExceptionWithConfigData(errorMessage, configData); {
}); throw new Exception("Your man_id did not work");
}
return IndexerConfigurationStatus.RequiresTesting; IsConfigured = true;
SaveConfig();
return IndexerConfigurationStatus.Completed;
}
catch (Exception e)
{
IsConfigured = false;
throw new Exception("Your man_id did not work: " + e.Message);
}
} }
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query) protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
@@ -162,6 +177,12 @@ namespace Jackett.Common.Indexers
qParams.Add("tor[sortType]", "default"); qParams.Add("tor[sortType]", "default");
qParams.Add("tor[startNumber]", "0"); qParams.Add("tor[startNumber]", "0");
qParams.Add("thumbnails", "1"); // gives links for thumbnail sized versions of their posters
//qParams.Add("posterLink", "1"); // gives links for a full sized poster
//qParams.Add("dlLink", "1"); // include the url to download the torrent
qParams.Add("description", "1"); // include the description
//qParams.Add("bookmarks", "0"); // include if the item is bookmarked or not
List<string> catList = MapTorznabCapsToTrackers(query); List<string> catList = MapTorznabCapsToTrackers(query);
if (catList.Any()) if (catList.Any())
{ {
@@ -182,65 +203,72 @@ namespace Jackett.Common.Indexers
} }
var response = await RequestStringWithCookiesAndRetry(urlSearch); var response = await RequestStringWithCookiesAndRetry(urlSearch);
if (response.Status == System.Net.HttpStatusCode.Forbidden || CookieHeader.Contains("pass=deleted") || response.Content.Contains("Access limits exceeded.")) if (response.Content.StartsWith("Error"))
{ {
// re-login throw new Exception(response.Content);
await ApplyConfiguration(null);
response = await RequestStringWithCookiesAndRetry(urlSearch);
} }
try try
{ {
CQ dom = response.Content; var jsonContent = JObject.Parse(response.Content);
var rows = dom["table[class='newTorTable'] > tbody > tr[id^=\"tdr\"]"]; var sitelink = new Uri(SiteLink);
foreach (IDomObject row in rows) foreach (var item in jsonContent.Value<JArray>("data"))
{ {
CQ torrentData = row.OuterHTML;
CQ cells = row.Cq().Find("td");
string tid = torrentData.Attr("id").Substring(4);
var qTitle = torrentData.Find("a[class='title']").First();
string title = qTitle.Text().Trim();
var details = new Uri(SiteLink + qTitle.Attr("href"));
string author = torrentData.Find("a[class='author']").First().Text().Trim();
Uri link = new Uri(SiteLink + "tor/download.php?tid=" + tid); // DL Link is no long available directly, build it ourself
long files = ParseUtil.CoerceLong(cells.Elements.ElementAt(4).Cq().Find("a").Text());
long size = ReleaseInfo.GetBytes(cells.Elements.ElementAt(4).Cq().Text().Split('[')[1].TrimEnd(']'));
int seeders = ParseUtil.CoerceInt(cells.Elements.ElementAt(6).Cq().Find("p").ElementAt(0).Cq().Text());
int leechers = ParseUtil.CoerceInt(cells.Elements.ElementAt(6).Cq().Find("p").ElementAt(1).Cq().Text());
long grabs = ParseUtil.CoerceLong(cells.Elements.ElementAt(6).Cq().Find("p").ElementAt(2).Cq().Text());
bool freeleech = torrentData.Find("img[alt=\"freeleech\"]").Any();
string pubDateStr = cells.Elements.ElementAt(5).Cq().Text().Split('[')[0];
DateTime publishDate = DateTime.Parse(pubDateStr).ToLocalTime();
long category = 0;
string cat = torrentData.Find("a[class='newCatLink']").First().Attr("href").Remove(0, "/tor/browse.php?tor[cat][]]=".Length);
long.TryParse(cat, out category);
var release = new ReleaseInfo(); var release = new ReleaseInfo();
var id = item.Value<long>("id");
release.Title = item.Value<string>("title");
release.Title = String.IsNullOrEmpty(author) ? title : String.Format("{0} by {1}", title, author); release.Description = item.Value<string>("description");
release.Guid = link;
release.Link = link;
release.PublishDate = publishDate;
release.Files = files;
release.Size = size;
release.Description = release.Title;
release.Seeders = seeders;
release.Peers = seeders + leechers;
release.Grabs = grabs;
release.MinimumRatio = 1;
release.MinimumSeedTime = 172800;
release.Category = MapTrackerCatToNewznab(category.ToString());
release.Comments = details;
if (freeleech) var author_info = item.Value<string>("author_info");
string author = null;
if (!string.IsNullOrWhiteSpace(author_info))
{
author_info = Regex.Unescape(author_info);
var author_info_json = JObject.Parse(author_info);
author = author_info_json.First.Last.Value<string>();
}
if (author != null)
release.Title += " by " + author;
var flags = new List<string>();
var lang_code = item.Value<string>("lang_code");
if (!string.IsNullOrEmpty(lang_code))
flags.Add(lang_code);
var filetype = item.Value<string>("filetype");
if (!string.IsNullOrEmpty(filetype))
flags.Add(filetype);
if (flags.Count > 0)
release.Title += " [" + string.Join(" / ", flags) + "]";
var category = item.Value<string>("category");
release.Category = MapTrackerCatToNewznab(category);
release.Link = new Uri(sitelink, "/tor/download.php?tid=" + id);
release.Comments = new Uri(sitelink, "/t/" + id);
release.Guid = release.Comments;
var dateStr = item.Value<string>("added");
var dateTime = DateTime.ParseExact(dateStr, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
release.PublishDate = DateTime.SpecifyKind(dateTime, DateTimeKind.Utc).ToLocalTime();
release.Grabs = item.Value<long>("times_completed");
release.Files = item.Value<long>("numfiles");
release.Seeders = item.Value<int>("seeders");
release.Peers = item.Value<int>("leechers") + release.Seeders;
var size = item.Value<string>("size");
release.Size = ReleaseInfo.GetBytes(size);
var free = item.Value<int>("free");
if (free == 1)
release.DownloadVolumeFactor = 0; release.DownloadVolumeFactor = 0;
else else
release.DownloadVolumeFactor = 1; release.DownloadVolumeFactor = 1;
release.UploadVolumeFactor = 1; release.UploadVolumeFactor = 1;
releases.Add(release); releases.Add(release);

View File

@@ -0,0 +1,20 @@
namespace Jackett.Common.Models.IndexerConfig
{
public class ConfigurationDataMyAnonamouse : ConfigurationData
{
public StringItem MamId { get; private set; }
public DisplayItem MamIdHint { get; private set; }
public ConfigurationDataMyAnonamouse()
{
MamId = new StringItem { Name = "mam_id" };
MamIdHint = new DisplayItem(
"Go to your <a href=\"https://www.myanonamouse.net/preferences/index.php?view=security\" target=\"_blank\">security preferences</a> and create a new session for the IP used by the Jackett server. Then paste the resulting mam_id value into the mam_id field here.")
{
Name = "mam_id instructions"
};
}
}
}