aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-06-23 13:56:11 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-06-23 13:56:11 -0400
commit41f84fc6b27e54d5f15820e5086638fc65279c24 (patch)
tree362e4f475798e920b14b71a6f9397644a2d7a85d
parentd6cf7b51acda145d32c9944f1b66728c7e09a9f8 (diff)
save person.xml
-rw-r--r--MediaBrowser.Providers/MediaBrowser.Providers.csproj3
-rw-r--r--MediaBrowser.Providers/Movies/MovieDbProvider.cs2
-rw-r--r--MediaBrowser.Providers/Movies/PersonProviderFromXml.cs (renamed from MediaBrowser.Providers/Movies/PersonProviderFromJson.cs)90
-rw-r--r--MediaBrowser.Providers/Movies/TmdbPersonProvider.cs25
-rw-r--r--MediaBrowser.Providers/Savers/PersonXmlSaver.cs66
-rw-r--r--MediaBrowser.Server.Implementations/Providers/ProviderManager.cs13
6 files changed, 130 insertions, 69 deletions
diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
index 06c921521..ec0d0c2b9 100644
--- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj
+++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
@@ -62,7 +62,7 @@
<Compile Include="Movies\MovieDbProvider.cs" />
<Compile Include="Movies\MovieProviderFromXml.cs" />
<Compile Include="Movies\OpenMovieDatabaseProvider.cs" />
- <Compile Include="Movies\PersonProviderFromJson.cs" />
+ <Compile Include="Movies\PersonProviderFromXml.cs" />
<Compile Include="Movies\TmdbPersonProvider.cs" />
<Compile Include="Music\ArtistsPostScanTask.cs" />
<Compile Include="Music\FanArtAlbumProvider.cs" />
@@ -79,6 +79,7 @@
<Compile Include="Savers\EpisodeXmlSaver.cs" />
<Compile Include="Savers\FolderXmlSaver.cs" />
<Compile Include="Savers\MovieXmlSaver.cs" />
+ <Compile Include="Savers\PersonXmlSaver.cs" />
<Compile Include="Savers\SeriesXmlSaver.cs" />
<Compile Include="Savers\XmlHelpers.cs" />
<Compile Include="TV\EpisodeImageFromMediaLocationProvider.cs" />
diff --git a/MediaBrowser.Providers/Movies/MovieDbProvider.cs b/MediaBrowser.Providers/Movies/MovieDbProvider.cs
index 10234a094..8fecf6f44 100644
--- a/MediaBrowser.Providers/Movies/MovieDbProvider.cs
+++ b/MediaBrowser.Providers/Movies/MovieDbProvider.cs
@@ -199,7 +199,7 @@ namespace MediaBrowser.Providers.Movies
protected override bool NeedsRefreshInternal(BaseItem item, BaseProviderInfo providerInfo)
{
if (HasAltMeta(item))
- return false; //never refresh if has meta from other source
+ return false;
return base.NeedsRefreshInternal(item, providerInfo);
}
diff --git a/MediaBrowser.Providers/Movies/PersonProviderFromJson.cs b/MediaBrowser.Providers/Movies/PersonProviderFromXml.cs
index 9829331ba..7fe646c78 100644
--- a/MediaBrowser.Providers/Movies/PersonProviderFromJson.cs
+++ b/MediaBrowser.Providers/Movies/PersonProviderFromXml.cs
@@ -2,7 +2,6 @@
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Logging;
-using MediaBrowser.Model.Serialization;
using System;
using System.IO;
using System.Threading;
@@ -10,14 +9,14 @@ using System.Threading.Tasks;
namespace MediaBrowser.Providers.Movies
{
- /// <summary>
- /// Class PersonProviderFromJson
- /// </summary>
- class PersonProviderFromJson : TmdbPersonProvider
+ class PersonProviderFromXml : BaseMetadataProvider
{
- public PersonProviderFromJson(IJsonSerializer jsonSerializer, ILogManager logManager, IServerConfigurationManager configurationManager, IProviderManager providerManager)
- : base(jsonSerializer, logManager, configurationManager, providerManager)
+ internal static PersonProviderFromXml Current { get; private set; }
+
+ public PersonProviderFromXml(ILogManager logManager, IServerConfigurationManager configurationManager)
+ : base(logManager, configurationManager)
{
+ Current = this;
}
/// <summary>
@@ -31,32 +30,12 @@ namespace MediaBrowser.Providers.Movies
}
/// <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 false;
- }
- }
-
- // Need to re-override to jump over intermediate implementation
- /// <summary>
- /// Needses the refresh internal.
+ /// Gets the priority.
/// </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)
+ /// <value>The priority.</value>
+ public override MetadataProviderPriority Priority
{
- if (!item.ResolveArgs.ContainsMetaFileByName(MetaFileName))
- {
- return false;
- }
-
- return CompareDate(item) > providerInfo.LastRefreshed;
+ get { return MetadataProviderPriority.Second; }
}
/// <summary>
@@ -67,49 +46,54 @@ namespace MediaBrowser.Providers.Movies
/// <returns>DateTime.</returns>
protected override DateTime CompareDate(BaseItem item)
{
- var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation,MetaFileName));
+ var entry = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "person.xml"));
return entry != null ? entry.LastWriteTimeUtc : DateTime.MinValue;
}
/// <summary>
- /// Gets the priority.
+ /// Fetches metadata and returns true or false indicating if any work that requires persistence was done
/// </summary>
- /// <value>The priority.</value>
- public override MetadataProviderPriority Priority
+ /// <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)
{
- get
- {
- return MetadataProviderPriority.Third;
- }
+ return Fetch(item, cancellationToken);
}
/// <summary>
- /// Fetches metadata and returns true or false indicating if any work that requires persistence was done
+ /// Fetches the specified item.
/// </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)
+ /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
+ private async Task<bool> Fetch(BaseItem item, CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
- try
+ var metadataFile = item.ResolveArgs.GetMetaFileByPath(Path.Combine(item.MetaLocation, "person.xml"));
+
+ if (metadataFile != null)
{
- var personInfo = JsonSerializer.DeserializeFromFile<PersonResult>(Path.Combine(item.MetaLocation, MetaFileName));
+ var path = metadataFile.FullName;
- cancellationToken.ThrowIfCancellationRequested();
+ await XmlParsingResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false);
- ProcessInfo((Person)item, personInfo);
+ try
+ {
+ new BaseItemXmlParser<Person>(Logger).Fetch((Person)item, path, cancellationToken);
+ }
+ finally
+ {
+ XmlParsingResourcePool.Release();
+ }
SetLastRefreshed(item, DateTime.UtcNow);
- return TrueTaskResult;
- }
- catch (FileNotFoundException)
- {
- // This is okay - just means we force refreshed and there isn't a json file
- return FalseTaskResult;
+ return true;
}
+
+ return false;
}
}
}
diff --git a/MediaBrowser.Providers/Movies/TmdbPersonProvider.cs b/MediaBrowser.Providers/Movies/TmdbPersonProvider.cs
index 1b02aec3d..fbf084218 100644
--- a/MediaBrowser.Providers/Movies/TmdbPersonProvider.cs
+++ b/MediaBrowser.Providers/Movies/TmdbPersonProvider.cs
@@ -21,11 +21,6 @@ namespace MediaBrowser.Providers.Movies
/// </summary>
public class TmdbPersonProvider : BaseMetadataProvider
{
- /// <summary>
- /// The meta file name
- /// </summary>
- protected const string MetaFileName = "tmdb3.json";
-
protected readonly IProviderManager ProviderManager;
public TmdbPersonProvider(IJsonSerializer jsonSerializer, ILogManager logManager, IServerConfigurationManager configurationManager, IProviderManager providerManager)
@@ -71,6 +66,19 @@ namespace MediaBrowser.Providers.Movies
}
}
+ protected override bool NeedsRefreshInternal(BaseItem item, BaseProviderInfo providerInfo)
+ {
+ if (HasAltMeta(item))
+ return false;
+
+ return base.NeedsRefreshInternal(item, providerInfo);
+ }
+
+ private bool HasAltMeta(BaseItem item)
+ {
+ return item.LocationType == LocationType.FileSystem && item.ResolveArgs.ContainsMetaFileByName("person.xml");
+ }
+
/// <summary>
/// Fetches metadata and returns true or false indicating if any work that requires persistence was done
/// </summary>
@@ -184,13 +192,6 @@ namespace MediaBrowser.Providers.Movies
{
ProcessInfo(person, searchResult);
- //save locally
- var memoryStream = new MemoryStream();
-
- JsonSerializer.SerializeToStream(searchResult, memoryStream);
-
- await ProviderManager.SaveToLibraryFilesystem(person, Path.Combine(person.MetaLocation, MetaFileName), memoryStream, cancellationToken);
-
Logger.Debug("TmdbPersonProvider downloaded and saved information for {0}", person.Name);
await FetchImages(person, searchResult.images, cancellationToken).ConfigureAwait(false);
diff --git a/MediaBrowser.Providers/Savers/PersonXmlSaver.cs b/MediaBrowser.Providers/Savers/PersonXmlSaver.cs
new file mode 100644
index 000000000..03b535312
--- /dev/null
+++ b/MediaBrowser.Providers/Savers/PersonXmlSaver.cs
@@ -0,0 +1,66 @@
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Library;
+using MediaBrowser.Model.Entities;
+using MediaBrowser.Providers.Movies;
+using System;
+using System.IO;
+using System.Text;
+using System.Threading;
+
+namespace MediaBrowser.Providers.Savers
+{
+ /// <summary>
+ /// Class PersonXmlSaver
+ /// </summary>
+ public class PersonXmlSaver : IMetadataSaver
+ {
+ /// <summary>
+ /// Supportses the specified item.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
+ public bool Supports(BaseItem item)
+ {
+ if (item.LocationType != LocationType.FileSystem)
+ {
+ return false;
+ }
+
+ return item is Person;
+ }
+
+ /// <summary>
+ /// Saves the specified item.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <param name="cancellationToken">The cancellation token.</param>
+ /// <returns>Task.</returns>
+ public void Save(BaseItem item, CancellationToken cancellationToken)
+ {
+ var builder = new StringBuilder();
+
+ builder.Append("<Item>");
+
+ XmlHelpers.AddCommonNodes(item, builder);
+
+ builder.Append("</Item>");
+
+ var xmlFilePath = GetSavePath(item);
+
+ XmlHelpers.Save(builder, xmlFilePath);
+
+ // Set last refreshed so that the provider doesn't trigger after the file save
+ PersonProviderFromXml.Current.SetLastRefreshed(item, DateTime.UtcNow);
+ }
+
+ /// <summary>
+ /// Gets the save path.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <returns>System.String.</returns>
+ public string GetSavePath(BaseItem item)
+ {
+ return Path.Combine(item.Path, "person.xml");
+ }
+ }
+}
diff --git a/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs b/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs
index 3c1a7aa1e..395a4298b 100644
--- a/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs
+++ b/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs
@@ -83,12 +83,22 @@ namespace MediaBrowser.Server.Implementations.Providers
libraryManager.ItemUpdated += libraryManager_ItemUpdated;
}
+ /// <summary>
+ /// Handles the ItemUpdated event of the libraryManager control.
+ /// </summary>
+ /// <param name="sender">The source of the event.</param>
+ /// <param name="e">The <see cref="ItemChangeEventArgs"/> instance containing the event data.</param>
void libraryManager_ItemUpdated(object sender, ItemChangeEventArgs e)
{
var item = e.Item;
- if (ConfigurationManager.Configuration.SaveLocalMeta && item.LocationType == LocationType.FileSystem)
+ if (ConfigurationManager.Configuration.SaveLocalMeta)
{
+ if (item.LocationType != LocationType.FileSystem)
+ {
+ return;
+ }
+
foreach (var saver in _savers.Where(i => i.Supports(item)))
{
var path = saver.GetSavePath(item);
@@ -109,7 +119,6 @@ namespace MediaBrowser.Server.Implementations.Providers
}
}
}
-
}
/// <summary>