mirror of
https://github.com/Jackett/Jackett
synced 2025-03-10 14:14:25 +00:00
bit-titan: C# -> yaml
This commit is contained in:
parent
a01c42c79f
commit
8562f19a30
2 changed files with 183 additions and 234 deletions
183
src/Jackett.Common/Definitions/bit-titan.yml
Normal file
183
src/Jackett.Common/Definitions/bit-titan.yml
Normal file
|
@ -0,0 +1,183 @@
|
|||
---
|
||||
id: bit-titan
|
||||
name: BiT-TiTAN
|
||||
description: "BiT-TiTAN is a GERMAN Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: de-DE
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://bit-titan.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1010, cat: Movies/UHD, desc: "Movies 2160p"}
|
||||
- {id: 1020, cat: Movies/HD, desc: "Movies 1080p"}
|
||||
- {id: 1030, cat: Movies/HD, desc: "Movies 720p"}
|
||||
- {id: 1040, cat: Movies/HD, desc: "Movies x264"}
|
||||
- {id: 1050, cat: Movies/HD, desc: "Movies x265"}
|
||||
- {id: 1060, cat: Movies/SD, desc: "Movies XviD"}
|
||||
- {id: 1070, cat: Movies/3D, desc: "Movies 3D"}
|
||||
- {id: 1080, cat: Movies/DVD, desc: "Movies DVD"}
|
||||
- {id: 1090, cat: Movies/BluRay, desc: "Movies BluRay"}
|
||||
- {id: 1100, cat: Movies/DVD, desc: "Movies HD2DVD"}
|
||||
- {id: 1110, cat: Movies/Foreign, desc: "Movies International"}
|
||||
- {id: 1120, cat: Movies/HD, desc: "Movies HD Packs"}
|
||||
- {id: 1130, cat: Movies/SD, desc: "Movies SD Packs"}
|
||||
- {id: 2010, cat: TV/UHD, desc: "TV 2160p"}
|
||||
- {id: 2020, cat: TV/HD, desc: "TV 1080p"}
|
||||
- {id: 2030, cat: TV/HD, desc: "TV 720p"}
|
||||
- {id: 2040, cat: TV/HD, desc: "TV x264"}
|
||||
- {id: 2050, cat: TV/HD, desc: "TV x265"}
|
||||
- {id: 2060, cat: TV/SD, desc: "TV XviD"}
|
||||
- {id: 2070, cat: TV/HD, desc: "TV HD Packs"}
|
||||
- {id: 2080, cat: TV/SD, desc: "TV SD Packs"}
|
||||
- {id: 2090, cat: TV/Foreign, desc: "TV International"}
|
||||
- {id: 3010, cat: TV/Documentary, desc: "Docu 2160p"}
|
||||
- {id: 3020, cat: TV/Documentary, desc: "Docu 1080p"}
|
||||
- {id: 3030, cat: TV/Documentary, desc: "Docu 720p"}
|
||||
- {id: 3040, cat: TV/Documentary, desc: "Docu x264"}
|
||||
- {id: 3050, cat: TV/Documentary, desc: "Docu x265"}
|
||||
- {id: 3060, cat: TV/Documentary, desc: "Docu XviD"}
|
||||
- {id: 3070, cat: TV/Documentary, desc: "Docu HD Packs"}
|
||||
- {id: 3080, cat: TV/Documentary, desc: "Docu SD Packs"}
|
||||
- {id: 3090, cat: TV/Documentary, desc: "Docu International"}
|
||||
- {id: 4010, cat: TV/Sport, desc: "Sport 2160p"}
|
||||
- {id: 4020, cat: TV/Sport, desc: "Sport 1080p"}
|
||||
- {id: 4030, cat: TV/Sport, desc: "Sport 720p"}
|
||||
- {id: 4040, cat: TV/Sport, desc: "Sport SD Sport"}
|
||||
- {id: 4050, cat: TV/Sport, desc: "Sport HD Packs"}
|
||||
- {id: 4060, cat: TV/Sport, desc: "Sport SD Packs"}
|
||||
- {id: 5010, cat: XXX, desc: "XXX 2160p"}
|
||||
- {id: 5020, cat: XXX, desc: "XXX 1080p"}
|
||||
- {id: 5030, cat: XXX, desc: "XXX 720p"}
|
||||
- {id: 5040, cat: XXX, desc: "XXX x264"}
|
||||
- {id: 5050, cat: XXX, desc: "XXX x265"}
|
||||
- {id: 5060, cat: XXX, desc: "XXX XviD"}
|
||||
- {id: 5070, cat: XXX, desc: "XXX HD Packs"}
|
||||
- {id: 5080, cat: XXX, desc: "XXX SD Packs"}
|
||||
- {id: 5090, cat: XXX, desc: "XXX Sonstiges"}
|
||||
- {id: 6010, cat: PC/Games, desc: "Games Windows"}
|
||||
- {id: 6020, cat: Console, desc: "Games Linux"}
|
||||
- {id: 6030, cat: PC/Mac, desc: "Games MacOS"}
|
||||
- {id: 6040, cat: PC/Mobile-Android, desc: "Games Android"}
|
||||
- {id: 6050, cat: Console/XBox, desc: "Games Xbox"}
|
||||
- {id: 6060, cat: Console/PSP, desc: "Games PlayStation"}
|
||||
- {id: 6070, cat: Console/NDS, desc: "Games Nintendo"}
|
||||
- {id: 6080, cat: Console, desc: "Games Sonstige"}
|
||||
- {id: 7010, cat: PC/0day, desc: "Software Windows"}
|
||||
- {id: 7020, cat: PC, desc: "Software Linux"}
|
||||
- {id: 7030, cat: PC/Mac, desc: "Software MacOS"}
|
||||
- {id: 7040, cat: PC/Mobile-Android, desc: "Software Android"}
|
||||
- {id: 8010, cat: Audio/MP3, desc: "Music MP3-Album"}
|
||||
- {id: 8020, cat: Audio/MP3, desc: "Music MP3-Charts"}
|
||||
- {id: 8030, cat: Audio/MP3, desc: "Music MP3-Sampler"}
|
||||
- {id: 8040, cat: Audio/MP3, desc: "Music MP3-Single"}
|
||||
- {id: 8050, cat: Audio/Lossless, desc: "Music FLAC-Album"}
|
||||
- {id: 8060, cat: Audio/Lossless, desc: "Music FLAC-Charts"}
|
||||
- {id: 8070, cat: Audio/Lossless, desc: "Music FLAC-Sampler"}
|
||||
- {id: 8080, cat: Audio/Lossless, desc: "Music FLAC-Single"}
|
||||
- {id: 8090, cat: Audio/Video, desc: "Music Video"}
|
||||
- {id: 9010, cat: Audio/Audiobook, desc: "Books A-Book"}
|
||||
- {id: 9020, cat: Books/EBook, desc: "Books E-Book"}
|
||||
- {id: 9030, cat: Books, desc: "Books E-Paper"}
|
||||
- {id: 9040, cat: Books, desc: "Books E-Learning"}
|
||||
- {id: 9060, cat: TV/Anime, desc: "Anime HD"}
|
||||
- {id: 9070, cat: TV/Anime, desc: "Anime SD"}
|
||||
- {id: 9080, cat: TV/Anime, desc: "Anime Pack"}
|
||||
- {id: 9999, cat: Other, desc: "unsort"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: APIKey
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your API key
|
||||
default: "Find or Generate a new key <a href=\"https://bit-titan.net/api_cp.php\" target =_blank>here</a>."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 1
|
||||
options:
|
||||
1: created
|
||||
2: seeders
|
||||
5: size
|
||||
9: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: DESC
|
||||
options:
|
||||
DESC: desc
|
||||
ASC: asc
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: api.php
|
||||
response:
|
||||
type: json
|
||||
|
||||
inputs:
|
||||
apiKey: "{{ .Config.apikey }}"
|
||||
categories: "{{ if .Categories }}{{ join .Categories \",\" }}{{ else }}0{{ end }}"
|
||||
search: "{{ .Keywords }}"
|
||||
# searchIn: 0 all, 1 active, 2 dead, 3 highlights, 4 own uploads, 5 uploads bots, 6 onlyupload, 7 multiplier, 8 %download, 9 freeleech
|
||||
searchIn: "{{ if .Config.freeleech }}9{{ else }}0{{ end }}"
|
||||
# 1 25, 2 50, 3 75, 4 100
|
||||
limit: 2
|
||||
downloadLink: 1
|
||||
# 1 = Sat, 28 Nov 2020 23:29:38 +0100 (DEFAULT VALUE) , 2 = 1606606178 (UNIX TIMESTAMP) , 3 = 28.11.2020 23:29.38 (German Timestamp) , 4 = 2020-11-28 23:29:38 (Default Datetime)
|
||||
timeFormat: 2
|
||||
orderBy: "{{ .Config.sort }}"
|
||||
order: "{{ .Config.type }}"
|
||||
|
||||
rows:
|
||||
selector: results
|
||||
count:
|
||||
selector: filesFound
|
||||
|
||||
fields:
|
||||
id:
|
||||
selector: id
|
||||
category:
|
||||
selector: category
|
||||
title:
|
||||
selector: name
|
||||
details:
|
||||
text: "details.php?id={{ .Result.id }}"
|
||||
download:
|
||||
selector: download
|
||||
poster:
|
||||
selector: poster
|
||||
seeders:
|
||||
selector: seeds
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: snatchers
|
||||
date:
|
||||
# unix
|
||||
selector: added
|
||||
size:
|
||||
selector: size
|
||||
downloadvolumefactor:
|
||||
selector: downloadFactor
|
||||
uploadvolumefactor:
|
||||
selector: uploadFactor
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 2 day (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
# json engine v.2.011.021
|
|
@ -1,234 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
using Jackett.Common.Utils;
|
||||
using Jackett.Common.Utils.Clients;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NLog;
|
||||
using static Jackett.Common.Models.IndexerConfig.ConfigurationData;
|
||||
|
||||
namespace Jackett.Common.Indexers
|
||||
{
|
||||
[ExcludeFromCodeCoverage]
|
||||
public class BitTitan : BaseWebIndexer
|
||||
{
|
||||
private string APIBASE => SiteLink + "api.php";
|
||||
private string DETAILS => SiteLink + "details.php";
|
||||
|
||||
private new ConfigurationDataAPIKey configData => (ConfigurationDataAPIKey)base.configData;
|
||||
public BitTitan(IIndexerConfigurationService configService, WebClient wc, Logger l,
|
||||
IProtectionService ps, ICacheService cs)
|
||||
: base(id: "bit-titan",
|
||||
name: "BiT-TiTAN",
|
||||
description: "BiT-TiTAN is a GERMAN Private Torrent Tracker for MOVIES / TV / GENERAL",
|
||||
link: "https://bit-titan.net/",
|
||||
caps: new TorznabCapabilities
|
||||
{
|
||||
TvSearchParams = new List<TvSearchParam>
|
||||
{
|
||||
TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep
|
||||
},
|
||||
MovieSearchParams = new List<MovieSearchParam>
|
||||
{
|
||||
MovieSearchParam.Q
|
||||
},
|
||||
MusicSearchParams = new List<MusicSearchParam>
|
||||
{
|
||||
MusicSearchParam.Q
|
||||
},
|
||||
BookSearchParams = new List<BookSearchParam>
|
||||
{
|
||||
BookSearchParam.Q
|
||||
}
|
||||
},
|
||||
configService: configService,
|
||||
client: wc,
|
||||
logger: l,
|
||||
p: ps,
|
||||
cacheService: cs,
|
||||
configData: new ConfigurationDataAPIKey())
|
||||
{
|
||||
Encoding = Encoding.UTF8;
|
||||
Language = "de-DE";
|
||||
Type = "private";
|
||||
|
||||
configData.AddDynamic("keyInfo", new DisplayInfoConfigurationItem(String.Empty, "Find or Generate a new key <a href=\"https://bit-titan.net/api_cp.php\" target =_blank>here</a>."));
|
||||
configData.AddDynamic("freeleech", new BoolConfigurationItem("Search freeleech only") { Value = false });
|
||||
|
||||
// Configure the category mappings
|
||||
AddCategoryMapping(1010, TorznabCatType.MoviesUHD, "Movies 2160p");
|
||||
AddCategoryMapping(1020, TorznabCatType.MoviesHD, "Movies 1080p");
|
||||
AddCategoryMapping(1030, TorznabCatType.MoviesHD, "Movies 720p");
|
||||
AddCategoryMapping(1040, TorznabCatType.MoviesHD, "Movies x264");
|
||||
AddCategoryMapping(1050, TorznabCatType.MoviesHD, "Movies x265");
|
||||
AddCategoryMapping(1060, TorznabCatType.MoviesSD, "Movies XviD");
|
||||
AddCategoryMapping(1070, TorznabCatType.Movies3D, "Movies 3D");
|
||||
AddCategoryMapping(1080, TorznabCatType.MoviesDVD, "Movies DVD");
|
||||
AddCategoryMapping(1090, TorznabCatType.MoviesBluRay, "Movies BluRay");
|
||||
AddCategoryMapping(1100, TorznabCatType.MoviesDVD, "Movies HD2DVD");
|
||||
AddCategoryMapping(1110, TorznabCatType.MoviesForeign, "Movies International");
|
||||
AddCategoryMapping(1120, TorznabCatType.MoviesHD, "Movies HD Packs");
|
||||
AddCategoryMapping(1130, TorznabCatType.MoviesSD, "Movies SD Packs");
|
||||
AddCategoryMapping(2010, TorznabCatType.TVUHD, "TV 2160p");
|
||||
AddCategoryMapping(2020, TorznabCatType.TVHD, "TV 1080p");
|
||||
AddCategoryMapping(2030, TorznabCatType.TVHD, "TV 720p");
|
||||
AddCategoryMapping(2040, TorznabCatType.TVHD, "TV x264");
|
||||
AddCategoryMapping(2050, TorznabCatType.TVHD, "TV x265");
|
||||
AddCategoryMapping(2060, TorznabCatType.TVSD, "TV XviD");
|
||||
AddCategoryMapping(2070, TorznabCatType.TVHD, "TV HD Packs");
|
||||
AddCategoryMapping(2080, TorznabCatType.TVSD, "TV SD Packs");
|
||||
AddCategoryMapping(2090, TorznabCatType.TVForeign, "TV International");
|
||||
AddCategoryMapping(3010, TorznabCatType.TVDocumentary, "Docu 2160p");
|
||||
AddCategoryMapping(3020, TorznabCatType.TVDocumentary, "Docu 1080p");
|
||||
AddCategoryMapping(3030, TorznabCatType.TVDocumentary, "Docu 720p");
|
||||
AddCategoryMapping(3040, TorznabCatType.TVDocumentary, "Docu x264");
|
||||
AddCategoryMapping(3050, TorznabCatType.TVDocumentary, "Docu x265");
|
||||
AddCategoryMapping(3060, TorznabCatType.TVDocumentary, "Docu XviD");
|
||||
AddCategoryMapping(3070, TorznabCatType.TVDocumentary, "Docu HD Packs");
|
||||
AddCategoryMapping(3080, TorznabCatType.TVDocumentary, "Docu SD Packs");
|
||||
AddCategoryMapping(3090, TorznabCatType.TVDocumentary, "Docu International");
|
||||
AddCategoryMapping(4010, TorznabCatType.TVSport, "Sport 2160p");
|
||||
AddCategoryMapping(4020, TorznabCatType.TVSport, "Sport 1080p");
|
||||
AddCategoryMapping(4030, TorznabCatType.TVSport, "Sport 720p");
|
||||
AddCategoryMapping(4040, TorznabCatType.TVSport, "Sport SD Sport");
|
||||
AddCategoryMapping(4050, TorznabCatType.TVSport, "Sport HD Packs");
|
||||
AddCategoryMapping(4060, TorznabCatType.TVSport, "Sport SD Packs");
|
||||
AddCategoryMapping(5010, TorznabCatType.XXX, "XXX 2160p");
|
||||
AddCategoryMapping(5020, TorznabCatType.XXX, "XXX 1080p");
|
||||
AddCategoryMapping(5030, TorznabCatType.XXX, "XXX 720p");
|
||||
AddCategoryMapping(5040, TorznabCatType.XXX, "XXX x264");
|
||||
AddCategoryMapping(5050, TorznabCatType.XXX, "XXX x265");
|
||||
AddCategoryMapping(5060, TorznabCatType.XXX, "XXX XviD");
|
||||
AddCategoryMapping(5070, TorznabCatType.XXX, "XXX HD Packs");
|
||||
AddCategoryMapping(5080, TorznabCatType.XXX, "XXX SD Packs");
|
||||
AddCategoryMapping(5090, TorznabCatType.XXX, "XXX Sonstiges");
|
||||
AddCategoryMapping(6010, TorznabCatType.PCGames, "Games Windows");
|
||||
AddCategoryMapping(6020, TorznabCatType.Console, "Games Linux");
|
||||
AddCategoryMapping(6030, TorznabCatType.PCMac, "Games MacOS");
|
||||
AddCategoryMapping(6040, TorznabCatType.PCMobileAndroid, "Games Android");
|
||||
AddCategoryMapping(6050, TorznabCatType.ConsoleXBox, "Games Xbox");
|
||||
AddCategoryMapping(6060, TorznabCatType.ConsolePSP, "Games PlayStation");
|
||||
AddCategoryMapping(6070, TorznabCatType.ConsoleNDS, "Games Nintendo");
|
||||
AddCategoryMapping(6080, TorznabCatType.Console, "Games Sonstige");
|
||||
AddCategoryMapping(7010, TorznabCatType.PC0day, "Software Windows");
|
||||
AddCategoryMapping(7020, TorznabCatType.PC, "Software Linux");
|
||||
AddCategoryMapping(7030, TorznabCatType.PCMac, "Software MacOS");
|
||||
AddCategoryMapping(7040, TorznabCatType.PCMobileAndroid, "Software Android");
|
||||
AddCategoryMapping(8010, TorznabCatType.AudioMP3, "Music MP3-Album");
|
||||
AddCategoryMapping(8020, TorznabCatType.AudioMP3, "Music MP3-Charts");
|
||||
AddCategoryMapping(8030, TorznabCatType.AudioMP3, "Music MP3-Sampler");
|
||||
AddCategoryMapping(8040, TorznabCatType.AudioMP3, "Music MP3-Single");
|
||||
AddCategoryMapping(8050, TorznabCatType.AudioLossless, "Music FLAC-Album");
|
||||
AddCategoryMapping(8060, TorznabCatType.AudioLossless, "Music FLAC-Charts");
|
||||
AddCategoryMapping(8070, TorznabCatType.AudioLossless, "Music FLAC-Sampler");
|
||||
AddCategoryMapping(8080, TorznabCatType.AudioLossless, "Music FLAC-Single");
|
||||
AddCategoryMapping(8090, TorznabCatType.AudioVideo, "Music Video");
|
||||
AddCategoryMapping(9010, TorznabCatType.AudioAudiobook, "Books A-Book");
|
||||
AddCategoryMapping(9020, TorznabCatType.BooksEBook, "Books E-Book");
|
||||
AddCategoryMapping(9030, TorznabCatType.Books, "Books E-Paper");
|
||||
AddCategoryMapping(9040, TorznabCatType.Books, "Books E-Learning");
|
||||
AddCategoryMapping(9060, TorznabCatType.TVAnime, "Anime HD");
|
||||
AddCategoryMapping(9070, TorznabCatType.TVAnime, "Anime SD");
|
||||
AddCategoryMapping(9080, TorznabCatType.TVAnime, "Anime Pack");
|
||||
AddCategoryMapping(9999, TorznabCatType.Other, "unsort");
|
||||
}
|
||||
|
||||
|
||||
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
|
||||
{
|
||||
LoadValuesFromJson(configJson);
|
||||
|
||||
IsConfigured = false;
|
||||
try
|
||||
{
|
||||
var results = await PerformQuery(new TorznabQuery());
|
||||
if (results.Count() == 0)
|
||||
throw new Exception("Testing returned no results!");
|
||||
IsConfigured = true;
|
||||
SaveConfig();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new ExceptionWithConfigData(e.Message, configData);
|
||||
}
|
||||
|
||||
return IndexerConfigurationStatus.Completed;
|
||||
}
|
||||
|
||||
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||
{
|
||||
var releases = new List<ReleaseInfo>();
|
||||
|
||||
var apiKey = configData.Key.Value;
|
||||
var searchUrl = $"{APIBASE}?apiKey={apiKey}";
|
||||
|
||||
var cats = MapTorznabCapsToTrackers(query);
|
||||
if (cats.Count > 0)
|
||||
searchUrl += "&categories=" + string.Join(",", cats);
|
||||
|
||||
searchUrl += "&search=" + query.SanitizedSearchTerm;
|
||||
|
||||
searchUrl += "&downloadLink=1";
|
||||
|
||||
searchUrl += "&limit=2";
|
||||
|
||||
if (((BoolConfigurationItem)configData.GetDynamic("freeleech")).Value)
|
||||
searchUrl += "&searchIn=9";
|
||||
|
||||
var results = await RequestWithCookiesAndRetryAsync(searchUrl);
|
||||
|
||||
try
|
||||
{
|
||||
var rows = (JArray)((JObject)JsonConvert.DeserializeObject(results.ContentString))["results"];
|
||||
foreach (var row in rows)
|
||||
{
|
||||
var title = row["name"].ToString();
|
||||
if (!query.MatchQueryStringAND(title))
|
||||
continue;
|
||||
|
||||
var torrentId = row["id"].ToString();
|
||||
var details = new Uri(DETAILS + "?id=" + torrentId);
|
||||
var link = new Uri(row["download"].ToString());
|
||||
var publishDate = DateTime.Parse(row["added"].ToString());
|
||||
var seeders = (int)row["seeds"];
|
||||
var cat = MapTrackerCatToNewznab(row["category"].ToString());
|
||||
|
||||
var release = new ReleaseInfo
|
||||
{
|
||||
Title = title,
|
||||
Details = details,
|
||||
Guid = details,
|
||||
Link = link,
|
||||
PublishDate = publishDate,
|
||||
Category = cat,
|
||||
Size = (long)row["size"],
|
||||
Grabs = (int)row["snatchers"],
|
||||
Seeders = seeders,
|
||||
Peers = seeders + (int)row["leechers"],
|
||||
Imdb = null,
|
||||
UploadVolumeFactor = (int)row["uploadFactor"],
|
||||
DownloadVolumeFactor = (int)row["downloadFactor"],
|
||||
MinimumRatio = 1,
|
||||
MinimumSeedTime = 172800 // 2 days
|
||||
};
|
||||
|
||||
releases.Add(release);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
OnParseError(results.ContentString, ex);
|
||||
}
|
||||
|
||||
return releases;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue