aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Providers
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-04-13 14:02:30 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-04-13 14:02:30 -0400
commit785deff188ba51243739b827dbe42b5645404367 (patch)
tree236515b0e5502b65c6eee3d23412093588c9c5e6 /MediaBrowser.Controller/Providers
parent6688d35e65352fbf9b0a06a5fdf5a31eaaf425d8 (diff)
removed excess hashing in providers and made user data key-based
Diffstat (limited to 'MediaBrowser.Controller/Providers')
-rw-r--r--MediaBrowser.Controller/Providers/BaseMetadataProvider.cs44
-rw-r--r--MediaBrowser.Controller/Providers/BaseProviderInfo.cs12
-rw-r--r--MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs9
-rw-r--r--MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs18
-rw-r--r--MediaBrowser.Controller/Providers/Music/FanArtAlbumProvider.cs28
-rw-r--r--MediaBrowser.Controller/Providers/Music/FanArtArtistProvider.cs10
-rw-r--r--MediaBrowser.Controller/Providers/Music/LastfmBaseProvider.cs8
-rw-r--r--MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs10
8 files changed, 94 insertions, 45 deletions
diff --git a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs
index aaf3fe6bfb..3f71e398a3 100644
--- a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs
+++ b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs
@@ -29,19 +29,7 @@ namespace MediaBrowser.Controller.Providers
/// <summary>
/// The _id
/// </summary>
- protected Guid _id;
- /// <summary>
- /// Gets the id.
- /// </summary>
- /// <value>The id.</value>
- public virtual Guid Id
- {
- get
- {
- if (_id == Guid.Empty) _id = GetType().FullName.GetMD5();
- return _id;
- }
- }
+ protected readonly Guid Id;
/// <summary>
/// Supportses the specified item.
@@ -105,6 +93,7 @@ namespace MediaBrowser.Controller.Providers
Logger = logManager.GetLogger(GetType().Name);
LogManager = logManager;
ConfigurationManager = configurationManager;
+ Id = GetType().FullName.GetMD5();
Initialize();
}
@@ -130,8 +119,14 @@ namespace MediaBrowser.Controller.Providers
{
throw new ArgumentNullException("item");
}
-
- var data = item.ProviderData.GetValueOrDefault(Id, new BaseProviderInfo { ProviderId = Id });
+
+ BaseProviderInfo data;
+
+ if (!item.ProviderData.TryGetValue(Id, out data))
+ {
+ data = new BaseProviderInfo();
+ }
+
data.LastRefreshed = value;
data.LastRefreshStatus = status;
data.ProviderVersion = providerVersion;
@@ -155,7 +150,7 @@ namespace MediaBrowser.Controller.Providers
{
SetLastRefreshed(item, value, ProviderVersion, status);
}
-
+
/// <summary>
/// Returns whether or not this provider should be re-fetched. Default functionality can
/// compare a provided date with a last refresh time. This can be overridden for more complex
@@ -171,9 +166,14 @@ namespace MediaBrowser.Controller.Providers
throw new ArgumentNullException();
}
- var providerInfo = item.ProviderData.GetValueOrDefault(Id, new BaseProviderInfo());
+ BaseProviderInfo data;
- return NeedsRefreshInternal(item, providerInfo);
+ if (!item.ProviderData.TryGetValue(Id, out data))
+ {
+ data = new BaseProviderInfo();
+ }
+
+ return NeedsRefreshInternal(item, data);
}
/// <summary>
@@ -194,7 +194,7 @@ namespace MediaBrowser.Controller.Providers
{
throw new ArgumentNullException("providerInfo");
}
-
+
if (CompareDate(item) > providerInfo.LastRefreshed)
{
return true;
@@ -209,7 +209,7 @@ namespace MediaBrowser.Controller.Providers
{
return true;
}
-
+
return false;
}
@@ -221,7 +221,7 @@ namespace MediaBrowser.Controller.Providers
/// <returns><c>true</c> if [has file system stamp changed] [the specified item]; otherwise, <c>false</c>.</returns>
protected bool HasFileSystemStampChanged(BaseItem item, BaseProviderInfo providerInfo)
{
- return GetCurrentFileSystemStamp(item) != providerInfo.FileSystemStamp;
+ return !string.Equals(GetCurrentFileSystemStamp(item), providerInfo.FileSystemStamp);
}
/// <summary>
@@ -279,7 +279,7 @@ namespace MediaBrowser.Controller.Providers
/// </summary>
/// <param name="item">The item.</param>
/// <returns>Guid.</returns>
- private Guid GetCurrentFileSystemStamp(BaseItem item)
+ private string GetCurrentFileSystemStamp(BaseItem item)
{
if (UseParentFileSystemStamp(item) && item.Parent != null)
{
diff --git a/MediaBrowser.Controller/Providers/BaseProviderInfo.cs b/MediaBrowser.Controller/Providers/BaseProviderInfo.cs
index 877ba5c4bf..5a72491c1e 100644
--- a/MediaBrowser.Controller/Providers/BaseProviderInfo.cs
+++ b/MediaBrowser.Controller/Providers/BaseProviderInfo.cs
@@ -8,11 +8,6 @@ namespace MediaBrowser.Controller.Providers
public class BaseProviderInfo
{
/// <summary>
- /// Gets or sets the provider id.
- /// </summary>
- /// <value>The provider id.</value>
- public Guid ProviderId { get; set; }
- /// <summary>
/// Gets or sets the last refreshed.
/// </summary>
/// <value>The last refreshed.</value>
@@ -21,7 +16,7 @@ namespace MediaBrowser.Controller.Providers
/// Gets or sets the file system stamp.
/// </summary>
/// <value>The file system stamp.</value>
- public Guid FileSystemStamp { get; set; }
+ public string FileSystemStamp { get; set; }
/// <summary>
/// Gets or sets the last refresh status.
/// </summary>
@@ -32,11 +27,6 @@ namespace MediaBrowser.Controller.Providers
/// </summary>
/// <value>The provider version.</value>
public string ProviderVersion { get; set; }
- /// <summary>
- /// Gets or sets the data hash.
- /// </summary>
- /// <value>The data hash.</value>
- public Guid DataHash { get; set; }
}
/// <summary>
diff --git a/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs b/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs
index 3152ceac93..94fe386806 100644
--- a/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs
+++ b/MediaBrowser.Controller/Providers/Movies/FanArtMovieProvider.cs
@@ -104,7 +104,14 @@ namespace MediaBrowser.Controller.Providers.Movies
cancellationToken.ThrowIfCancellationRequested();
var movie = item;
- if (ShouldFetch(movie, movie.ProviderData.GetValueOrDefault(Id, new BaseProviderInfo { ProviderId = Id })))
+
+ BaseProviderInfo providerData;
+
+ if (!item.ProviderData.TryGetValue(Id, out providerData))
+ {
+ providerData = new BaseProviderInfo();
+ }
+ if (ShouldFetch(movie, providerData))
{
var language = ConfigurationManager.Configuration.PreferredMetadataLanguage.ToLower();
var url = string.Format(FanArtBaseUrl, APIKey, movie.GetProviderId(MetadataProviders.Tmdb));
diff --git a/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs b/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs
index fb8370248c..8e20f0fada 100644
--- a/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs
+++ b/MediaBrowser.Controller/Providers/Movies/MovieDbProvider.cs
@@ -22,10 +22,11 @@ namespace MediaBrowser.Controller.Providers.Movies
{
class MovieDbProviderException : ApplicationException
{
- public MovieDbProviderException(string msg) : base(msg)
+ public MovieDbProviderException(string msg)
+ : base(msg)
{
}
-
+
}
/// <summary>
/// Class MovieDbProvider
@@ -33,7 +34,7 @@ namespace MediaBrowser.Controller.Providers.Movies
public class MovieDbProvider : BaseMetadataProvider, IDisposable
{
protected readonly IProviderManager ProviderManager;
-
+
/// <summary>
/// The movie db
/// </summary>
@@ -198,7 +199,7 @@ namespace MediaBrowser.Controller.Providers.Movies
base_url = "http://cf2.imgobject.com/t/p/"
}
- };
+ };
}
}
@@ -223,7 +224,14 @@ namespace MediaBrowser.Controller.Providers.Movies
//in addition to ours, we need to set the last refreshed time for the local data provider
//so it won't see the new files we download and process them all over again
if (JsonProvider == null) JsonProvider = new MovieProviderFromJson(LogManager, ConfigurationManager, JsonSerializer, HttpClient, ProviderManager);
- var data = item.ProviderData.GetValueOrDefault(JsonProvider.Id, new BaseProviderInfo { ProviderId = JsonProvider.Id });
+
+ BaseProviderInfo data;
+
+ if (!item.ProviderData.TryGetValue(JsonProvider.Id, out data))
+ {
+ data = new BaseProviderInfo();
+ }
+
data.LastRefreshed = value;
item.ProviderData[JsonProvider.Id] = data;
}
diff --git a/MediaBrowser.Controller/Providers/Music/FanArtAlbumProvider.cs b/MediaBrowser.Controller/Providers/Music/FanArtAlbumProvider.cs
index b533848412..72169f245e 100644
--- a/MediaBrowser.Controller/Providers/Music/FanArtAlbumProvider.cs
+++ b/MediaBrowser.Controller/Providers/Music/FanArtAlbumProvider.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Common.Extensions;
+using System.Collections.Generic;
+using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
@@ -52,14 +53,15 @@ namespace MediaBrowser.Controller.Providers.Music
//Look at our parent for our album cover
var artist = (MusicArtist)item.Parent;
- var cover = artist.AlbumCovers != null ? artist.AlbumCovers.GetValueOrDefault(mbid, null) : null;
+
+ var cover = artist.AlbumCovers != null ? GetValueOrDefault(artist.AlbumCovers, mbid, null) : null;
if (cover == null)
{
// Not there - maybe it is new since artist last refreshed so refresh it and try again
await artist.RefreshMetadata(cancellationToken).ConfigureAwait(false);
cancellationToken.ThrowIfCancellationRequested();
- cover = artist.AlbumCovers != null ? artist.AlbumCovers.GetValueOrDefault(mbid, null) : null;
+ cover = artist.AlbumCovers != null ? GetValueOrDefault(artist.AlbumCovers, mbid, null) : null;
}
if (cover == null)
{
@@ -71,5 +73,25 @@ namespace MediaBrowser.Controller.Providers.Music
item.SetImage(ImageType.Primary, await _providerManager.DownloadAndSaveImage(item, cover, "folder.jpg", FanArtResourcePool, cancellationToken).ConfigureAwait(false));
return true;
}
+
+ /// <summary>
+ /// Helper method for Dictionaries since they throw on not-found keys
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <typeparam name="U"></typeparam>
+ /// <param name="dictionary">The dictionary.</param>
+ /// <param name="key">The key.</param>
+ /// <param name="defaultValue">The default value.</param>
+ /// <returns>``1.</returns>
+ private static U GetValueOrDefault<T, U>(Dictionary<T, U> dictionary, T key, U defaultValue)
+ {
+ U val;
+ if (!dictionary.TryGetValue(key, out val))
+ {
+ val = defaultValue;
+ }
+ return val;
+
+ }
}
}
diff --git a/MediaBrowser.Controller/Providers/Music/FanArtArtistProvider.cs b/MediaBrowser.Controller/Providers/Music/FanArtArtistProvider.cs
index ec7a96d99d..1dd5c7cd25 100644
--- a/MediaBrowser.Controller/Providers/Music/FanArtArtistProvider.cs
+++ b/MediaBrowser.Controller/Providers/Music/FanArtArtistProvider.cs
@@ -86,7 +86,15 @@ namespace MediaBrowser.Controller.Providers.Music
cancellationToken.ThrowIfCancellationRequested();
var artist = (MusicArtist)item;
- if (ShouldFetch(artist, artist.ProviderData.GetValueOrDefault(Id, new BaseProviderInfo { ProviderId = Id })))
+
+ BaseProviderInfo providerData;
+
+ if (!item.ProviderData.TryGetValue(Id, out providerData))
+ {
+ providerData = new BaseProviderInfo();
+ }
+
+ if (ShouldFetch(artist, providerData))
{
var url = string.Format(FanArtBaseUrl, APIKey, artist.GetProviderId(MetadataProviders.Musicbrainz));
var doc = new XmlDocument();
diff --git a/MediaBrowser.Controller/Providers/Music/LastfmBaseProvider.cs b/MediaBrowser.Controller/Providers/Music/LastfmBaseProvider.cs
index f58bd3bb77..f7e0eef48d 100644
--- a/MediaBrowser.Controller/Providers/Music/LastfmBaseProvider.cs
+++ b/MediaBrowser.Controller/Providers/Music/LastfmBaseProvider.cs
@@ -229,7 +229,13 @@ namespace MediaBrowser.Controller.Providers.Music
cancellationToken.ThrowIfCancellationRequested();
- var providerData = item.ProviderData.GetValueOrDefault(Id, new BaseProviderInfo { ProviderId = Id });
+ BaseProviderInfo providerData;
+
+ if (!item.ProviderData.TryGetValue(Id, out providerData))
+ {
+ providerData = new BaseProviderInfo();
+ }
+
if (!ConfigurationManager.Configuration.SaveLocalMeta || !HasLocalMeta(item) || (force && !HasLocalMeta(item)) || (RefreshOnVersionChange && providerData.ProviderVersion != ProviderVersion))
{
try
diff --git a/MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs b/MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs
index 4d06143fce..a7fc4586f1 100644
--- a/MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs
+++ b/MediaBrowser.Controller/Providers/TV/FanArtTVProvider.cs
@@ -60,7 +60,15 @@ namespace MediaBrowser.Controller.Providers.TV
cancellationToken.ThrowIfCancellationRequested();
var series = (Series)item;
- if (ShouldFetch(series, series.ProviderData.GetValueOrDefault(Id, new BaseProviderInfo { ProviderId = Id })))
+
+ BaseProviderInfo providerData;
+
+ if (!item.ProviderData.TryGetValue(Id, out providerData))
+ {
+ providerData = new BaseProviderInfo();
+ }
+
+ if (ShouldFetch(series, providerData))
{
string language = ConfigurationManager.Configuration.PreferredMetadataLanguage.ToLower();
string url = string.Format(FanArtBaseUrl, APIKey, series.GetProviderId(MetadataProviders.Tvdb));