diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-06-23 13:56:11 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-06-23 13:56:11 -0400 |
| commit | 41f84fc6b27e54d5f15820e5086638fc65279c24 (patch) | |
| tree | 362e4f475798e920b14b71a6f9397644a2d7a85d | |
| parent | d6cf7b51acda145d32c9944f1b66728c7e09a9f8 (diff) | |
save person.xml
| -rw-r--r-- | MediaBrowser.Providers/MediaBrowser.Providers.csproj | 3 | ||||
| -rw-r--r-- | MediaBrowser.Providers/Movies/MovieDbProvider.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Providers/Movies/PersonProviderFromXml.cs (renamed from MediaBrowser.Providers/Movies/PersonProviderFromJson.cs) | 90 | ||||
| -rw-r--r-- | MediaBrowser.Providers/Movies/TmdbPersonProvider.cs | 25 | ||||
| -rw-r--r-- | MediaBrowser.Providers/Savers/PersonXmlSaver.cs | 66 | ||||
| -rw-r--r-- | MediaBrowser.Server.Implementations/Providers/ProviderManager.cs | 13 |
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> |
