diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-04-24 20:58:56 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-04-24 20:58:56 -0400 |
| commit | 2d5f8a3edf2a4ba1c88e12f0b980f4aa223a27b5 (patch) | |
| tree | ec2e3ca449cda5b974b996ba6398bfc74b48e024 | |
| parent | 9fb1e8c00fcb47f1be0d3d77cc1cf644323dcf24 (diff) | |
adding stubs for rotten tomatoes
6 files changed, 246 insertions, 1 deletions
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index c478151b4..83690c243 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -29,6 +29,7 @@ namespace MediaBrowser.Controller.Entities TrailerUrls = new List<string>(); Studios = new List<string>(); People = new List<PersonInfo>(); + CriticReviews = new List<ItemReview>(); } /// <summary> @@ -588,6 +589,18 @@ namespace MediaBrowser.Controller.Entities public List<string> ProductionLocations { get; set; } /// <summary> + /// Gets or sets the critic rating. + /// </summary> + /// <value>The critic rating.</value> + public float? CriticRating { get; set; } + + /// <summary> + /// Gets or sets the critic rating summary. + /// </summary> + /// <value>The critic rating summary.</value> + public string CriticRatingSummary { get; set; } + + /// <summary> /// Gets or sets the community rating. /// </summary> /// <value>The community rating.</value> @@ -623,6 +636,12 @@ namespace MediaBrowser.Controller.Entities public int? ParentIndexNumber { get; set; } /// <summary> + /// Gets or sets the critic reviews. + /// </summary> + /// <value>The critic reviews.</value> + public List<ItemReview> CriticReviews { get; set; } + + /// <summary> /// The _local trailers /// </summary> private List<Video> _localTrailers; diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index 09a59286e..4c6d81dcf 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -115,6 +115,7 @@ <Compile Include="Providers\IProviderManager.cs" /> <Compile Include="Providers\MediaInfo\MediaEncoderHelpers.cs" /> <Compile Include="Providers\MetadataProviderPriority.cs" /> + <Compile Include="Providers\Movies\RottenTomatoesMovieProvider.cs" /> <Compile Include="Providers\Music\FanArtArtistByNameProvider.cs" /> <Compile Include="Providers\Music\LastfmAlbumProvider.cs" /> <Compile Include="Providers\Music\FanArtAlbumProvider.cs" /> diff --git a/MediaBrowser.Controller/Providers/Movies/RottenTomatoesMovieProvider.cs b/MediaBrowser.Controller/Providers/Movies/RottenTomatoesMovieProvider.cs new file mode 100644 index 000000000..edb6db14d --- /dev/null +++ b/MediaBrowser.Controller/Providers/Movies/RottenTomatoesMovieProvider.cs @@ -0,0 +1,168 @@ +using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Movies; +using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Serialization; +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.Controller.Providers.Movies +{ + /// <summary> + /// Class RottenTomatoesMovieProvider + /// </summary> + public class RottenTomatoesMovieProvider : BaseMetadataProvider + { + // http://developer.rottentomatoes.com/iodocs + /// <summary> + /// The API key + /// </summary> + private const string ApiKey = "x9wjnvv39ntjmt9zs95nm7bg"; + + /// <summary> + /// The _rotten tomatoes resource pool + /// </summary> + private SemaphoreSlim _rottenTomatoesResourcePool = new SemaphoreSlim(3, 3); + + /// <summary> + /// Gets the json serializer. + /// </summary> + /// <value>The json serializer.</value> + protected IJsonSerializer JsonSerializer { get; private set; } + + /// <summary> + /// Gets the HTTP client. + /// </summary> + /// <value>The HTTP client.</value> + protected IHttpClient HttpClient { get; private set; } + + /// <summary> + /// Initializes a new instance of the <see cref="RottenTomatoesMovieProvider"/> class. + /// </summary> + /// <param name="logManager">The log manager.</param> + /// <param name="configurationManager">The configuration manager.</param> + /// <param name="jsonSerializer">The json serializer.</param> + /// <param name="httpClient">The HTTP client.</param> + public RottenTomatoesMovieProvider(ILogManager logManager, IServerConfigurationManager configurationManager, IJsonSerializer jsonSerializer, IHttpClient httpClient) + : base(logManager, configurationManager) + { + JsonSerializer = jsonSerializer; + HttpClient = httpClient; + } + + /// <summary> + /// Gets the provider version. + /// </summary> + /// <value>The provider version.</value> + protected override string ProviderVersion + { + get + { + return "1"; + } + } + + /// <summary> + /// Gets a value indicating whether [requires internet]. + /// </summary> + /// <value><c>true</c> if [requires internet]; otherwise, <c>false</c>.</value> + public override bool RequiresInternet + { + get + { + return true; + } + } + + /// <summary> + /// Gets a value indicating whether [refresh on version change]. + /// </summary> + /// <value><c>true</c> if [refresh on version change]; otherwise, <c>false</c>.</value> + protected override bool RefreshOnVersionChange + { + get + { + return true; + } + } + + /// <summary> + /// Supportses the specified item. + /// </summary> + /// <param name="item">The item.</param> + /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns> + public override bool Supports(BaseItem item) + { + return item is Movie; + } + + /// <summary> + /// Needses the refresh internal. + /// </summary> + /// <param name="item">The item.</param> + /// <param name="providerInfo">The provider info.</param> + /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns> + protected override bool NeedsRefreshInternal(BaseItem item, BaseProviderInfo providerInfo) + { + if (providerInfo.LastRefreshStatus != ProviderRefreshStatus.Success) + { + Logger.Debug("RottenTomatoesMovieProvider for {0} - last attempt had errors. Will try again.", item.Path); + return true; + } + + // Refresh if imdb id has changed + if (!string.Equals(item.GetProviderId(MetadataProviders.Imdb), providerInfo.CustomData)) + { + return true; + } + + if (DateTime.Today.Subtract(providerInfo.LastRefreshed).TotalDays < ConfigurationManager.Configuration.MetadataRefreshDays) + { + return false; + } + + return base.NeedsRefreshInternal(item, providerInfo); + } + + /// <summary> + /// Fetches metadata and returns true or false indicating if any work that requires persistence was done + /// </summary> + /// <param name="item">The item.</param> + /// <param name="force">if set to <c>true</c> [force].</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <returns>Task{System.Boolean}.</returns> + public override Task<bool> FetchAsync(BaseItem item, bool force, CancellationToken cancellationToken) + { + // Do work here + + + // Lastly, record the Imdb id here + BaseProviderInfo data; + + if (item.ProviderData.TryGetValue(Id, out data)) + { + data.CustomData = item.GetProviderId(MetadataProviders.Imdb); + } + + SetLastRefreshed(item, DateTime.UtcNow); + + return Task.FromResult(true); + } + + /// <summary> + /// Gets the priority. + /// </summary> + /// <value>The priority.</value> + public override MetadataProviderPriority Priority + { + get + { + // Run after moviedb and xml providers + return MetadataProviderPriority.Last; + } + } + } +} diff --git a/MediaBrowser.Model/Entities/ItemReview.cs b/MediaBrowser.Model/Entities/ItemReview.cs new file mode 100644 index 000000000..fcd4c1c2b --- /dev/null +++ b/MediaBrowser.Model/Entities/ItemReview.cs @@ -0,0 +1,52 @@ +using System; + +namespace MediaBrowser.Model.Entities +{ + /// <summary> + /// Class ItemReview + /// </summary> + public class ItemReview + { + /// <summary> + /// Gets or sets the name of the reviewer. + /// </summary> + /// <value>The name of the reviewer.</value> + public string ReviewerName { get; set; } + + /// <summary> + /// Gets or sets the publisher. + /// </summary> + /// <value>The publisher.</value> + public string Publisher { get; set; } + + /// <summary> + /// Gets or sets the date. + /// </summary> + /// <value>The date.</value> + public DateTime Date { get; set; } + + /// <summary> + /// Gets or sets the score. + /// </summary> + /// <value>The score.</value> + public float Score { get; set; } + + /// <summary> + /// Gets or sets the URL. + /// </summary> + /// <value>The URL.</value> + public string Url { get; set; } + + /// <summary> + /// Gets or sets the caption. + /// </summary> + /// <value>The caption.</value> + public string Caption { get; set; } + + /// <summary> + /// Gets or sets the text. + /// </summary> + /// <value>The text.</value> + public string Text { get; set; } + } +} diff --git a/MediaBrowser.Model/Entities/MetadataProviders.cs b/MediaBrowser.Model/Entities/MetadataProviders.cs index 28e4b1646..15648604f 100644 --- a/MediaBrowser.Model/Entities/MetadataProviders.cs +++ b/MediaBrowser.Model/Entities/MetadataProviders.cs @@ -25,6 +25,10 @@ namespace MediaBrowser.Model.Entities /// <summary> /// MusicBrainz /// </summary> - Musicbrainz + Musicbrainz, + /// <summary> + /// The rotten tomatoes + /// </summary> + RottenTomatoes } } diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index 8e29d302c..99e34aaf6 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -47,6 +47,7 @@ <Compile Include="Dto\IItemDto.cs" /> <Compile Include="Dto\ItemByNameCounts.cs" /> <Compile Include="Entities\IByReferenceItem.cs" /> + <Compile Include="Entities\ItemReview.cs" /> <Compile Include="Net\WebSocketMessage.cs" /> <Compile Include="Net\WebSocketMessageType.cs" /> <Compile Include="Net\WebSocketState.cs" /> |
