224 lines
7.3 KiB
C#
224 lines
7.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using RestSharp;
|
|
using RestSharp.Deserializers;
|
|
|
|
namespace NzbDrone.Core.Tvdb
|
|
{
|
|
public partial class Tvdb
|
|
{
|
|
private T ProcessRequest <T>(RestRequest request)
|
|
where T: new()
|
|
{
|
|
return ProcessRequest<T>(BASE_URL, request);
|
|
}
|
|
|
|
private T ProcessRequest <T>(string url, RestRequest request)
|
|
where T: new()
|
|
{
|
|
var client = new RestClient(url);
|
|
client.AddHandler("text/xml", new DotNetXmlDeserializer());
|
|
|
|
if(Timeout.HasValue)
|
|
client.Timeout = Timeout.Value;
|
|
|
|
#if !WINDOWS_PHONE
|
|
if(Proxy != null)
|
|
client.Proxy = Proxy;
|
|
#endif
|
|
|
|
Error = null;
|
|
|
|
//var resp = client.Execute(request);
|
|
IRestResponse<T> resp = client.Execute<T>(request);
|
|
|
|
ResponseContent = resp.Content;
|
|
ResponseHeaders = resp.Headers.ToDictionary(k => k.Name, v => v.Value);
|
|
|
|
if(resp.ResponseStatus == ResponseStatus.Completed)
|
|
{
|
|
return resp.Data;
|
|
|
|
// Manual deserialization
|
|
//TextReader r = new StringReader(resp.Content);
|
|
//XmlSerializer s = new XmlSerializer(typeof(T));
|
|
//return (T)s.Deserialize(r);
|
|
}
|
|
else
|
|
{
|
|
if(resp.ErrorException != null)
|
|
throw resp.ErrorException;
|
|
else
|
|
Error = resp.ErrorMessage;
|
|
}
|
|
|
|
return default(T);
|
|
}
|
|
|
|
public TvdbMirrors GetMirrors()
|
|
{
|
|
return ProcessRequest<TvdbMirrors>(BuildGetMirrorsRequest());
|
|
}
|
|
|
|
/// <summary>
|
|
/// http://www.thetvdb.com/api/Updates.php?type=none
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public TvdbServerTime GetServerTime()
|
|
{
|
|
return ProcessRequest<TvdbServerTime>(BuildGetServerTimeRequest());
|
|
}
|
|
|
|
/// <summary>
|
|
/// http://www.thetvdb.com/api/{apikey}/languages.xml
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public List<TvdbLanguage> GetLanguages()
|
|
{
|
|
var root = ProcessRequest<TvdbLanguagesRoot>(BuildGetLanguagesRequest());
|
|
if(root != null)
|
|
return root.Languages;
|
|
|
|
return null;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// http://www.thetvdb.com/api/GetSeries.php?seriesname={series}
|
|
/// </summary>
|
|
/// <param name="search"></param>
|
|
/// <returns></returns>
|
|
public List<TvdbSeriesSearchItem> SearchSeries(string search)
|
|
{
|
|
var root = ProcessRequest<TvdbSeriesSearchRoot>(BuildGetSearchSeriesRequest(search));
|
|
if(root != null)
|
|
return root.Series;
|
|
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// http://thetvdb.com/api/{apikey}/series/79349/en.xml
|
|
/// </summary>
|
|
/// <param name="XMLMirror"></param>
|
|
/// <param name="SeriesId"></param>
|
|
/// <param name="Language"></param>
|
|
/// <returns></returns>
|
|
public TvdbSeriesBase GetSeriesBaseRecord(string XMLMirror, int SeriesId, string Language)
|
|
{
|
|
if(string.IsNullOrEmpty(Language))
|
|
Language = "en";
|
|
|
|
var root = ProcessRequest<TvdbSeriesRecordRoot>(XMLMirror,
|
|
BuildGetSeriesBaseRecordRequest(SeriesId, Language));
|
|
if(root != null)
|
|
return root.Series;
|
|
|
|
return null;
|
|
}
|
|
|
|
public TvdbSeriesBase GetSeriesBaseRecord(string XMLMirror, int SeriesId)
|
|
{
|
|
return GetSeriesBaseRecord(XMLMirror, SeriesId, null);
|
|
}
|
|
|
|
/// <summary>
|
|
/// http://thetvdb.com/api/{apikey}/series/79349/all/en.xml
|
|
/// </summary>
|
|
/// <param name="XMLMirror"></param>
|
|
/// <param name="SeriesId"></param>
|
|
/// <param name="Language"></param>
|
|
/// <returns></returns>
|
|
public TvdbSeriesFull GetSeriesFullRecord(string XMLMirror, int SeriesId, string Language)
|
|
{
|
|
if(string.IsNullOrEmpty(Language))
|
|
Language = "en";
|
|
|
|
return ProcessRequest<TvdbSeriesFull>(XMLMirror, BuildGetSeriesFullRecordRequest(SeriesId, Language));
|
|
}
|
|
|
|
public TvdbSeriesFull GetSeriesFullRecord(string MirrorPath, int SeriesId)
|
|
{
|
|
return GetSeriesFullRecord(MirrorPath, SeriesId, null);
|
|
}
|
|
|
|
/// <summary>
|
|
/// http://thetvdb.com/api/{apikey}/series/79349/banners.xml
|
|
/// </summary>
|
|
/// <param name="XMLMirror"></param>
|
|
/// <param name="SeriesId"></param>
|
|
/// <returns></returns>
|
|
public List<TvdbBanner> GetSeriesBanners(string XMLMirror, int SeriesId)
|
|
{
|
|
var root = ProcessRequest<TvdbBannerRoot>(XMLMirror, BuildGetSeriesBannersRequest(SeriesId));
|
|
if(root != null)
|
|
return root.Banners;
|
|
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// http://thetvdb.com/api/{apikey}/series/79349/actors.xml
|
|
/// </summary>
|
|
/// <param name="XMLMirror"></param>
|
|
/// <param name="SeriesId"></param>
|
|
/// <returns></returns>
|
|
public List<TvdbActor> GetSeriesActors(string XMLMirror, int SeriesId)
|
|
{
|
|
var root = ProcessRequest<TvdbActorRoot>(XMLMirror, BuildGetSeriesActorsRequest(SeriesId));
|
|
if(root != null)
|
|
return root.Actors;
|
|
|
|
return null;
|
|
}
|
|
|
|
public TvdbEpisode GetEpisode(string XMLMirror, int EpisodeId, string Language)
|
|
{
|
|
if(string.IsNullOrEmpty(Language))
|
|
Language = "en";
|
|
|
|
var root = ProcessRequest<TvdbEpisodeRoot>(XMLMirror, BuildGetEpisodeRequest(EpisodeId, Language));
|
|
if(root != null)
|
|
return root.Episode;
|
|
|
|
return null;
|
|
}
|
|
|
|
public TvdbEpisode GetEpisode(string XMLMirror, int EpisodeId)
|
|
{
|
|
return GetEpisode(XMLMirror, EpisodeId, null);
|
|
}
|
|
|
|
public TvdbEpisode GetSeriesEpisode(string XMLMirror, int SeriesId, int SeasonNum, int EpisodeNum,
|
|
string Language)
|
|
{
|
|
if(string.IsNullOrEmpty(Language))
|
|
Language = "en";
|
|
|
|
var root = ProcessRequest<TvdbEpisodeRoot>(XMLMirror,
|
|
BuildGetSeriesEpisodeRequest(SeriesId, SeasonNum, EpisodeNum,
|
|
Language));
|
|
if(root != null)
|
|
return root.Episode;
|
|
|
|
return null;
|
|
}
|
|
|
|
public TvdbEpisode GetSeriesEpisode(string XMLMirror, int SeriesId, int SeasonNum, int EpisodeNum)
|
|
{
|
|
return GetSeriesEpisode(XMLMirror, SeriesId, SeasonNum, EpisodeNum, null);
|
|
}
|
|
|
|
public TvdbUpdates GetUpdates(string XMLMirror, TvdbUpdatePeriod Period)
|
|
{
|
|
return ProcessRequest<TvdbUpdates>(XMLMirror, BuildGetUpdatesRequest(Period));
|
|
}
|
|
|
|
public TvdbUpdateItems GetUpdatesSince(string XMLMirror, Int64 LastTime)
|
|
{
|
|
return ProcessRequest<TvdbUpdateItems>(XMLMirror, BuildGetUpdatesSinceRequest(LastTime));
|
|
}
|
|
}
|
|
}
|