aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-06-28 21:10:45 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-06-28 21:10:45 -0400
commitb1be09242c6c82a9bf747e5256da6dd422309ad9 (patch)
tree6cf63e873befc1bb45dbe521317b63e2270567ff
parentb3dd4beb8a5dd806dd06eff240a29869e07f9bf0 (diff)
update people saving
-rw-r--r--MediaBrowser.Controller/Entities/Audio/MusicArtist.cs9
-rw-r--r--MediaBrowser.Controller/Entities/Audio/MusicGenre.cs9
-rw-r--r--MediaBrowser.Controller/Entities/BaseItem.cs8
-rw-r--r--MediaBrowser.Controller/Entities/BasePluginFolder.cs11
-rw-r--r--MediaBrowser.Controller/Entities/CollectionFolder.cs9
-rw-r--r--MediaBrowser.Controller/Entities/GameGenre.cs9
-rw-r--r--MediaBrowser.Controller/Entities/GameSystem.cs9
-rw-r--r--MediaBrowser.Controller/Entities/Genre.cs9
-rw-r--r--MediaBrowser.Controller/Entities/IHasMetadata.cs6
-rw-r--r--MediaBrowser.Controller/Entities/Person.cs9
-rw-r--r--MediaBrowser.Controller/Entities/Studio.cs9
-rw-r--r--MediaBrowser.Controller/Entities/User.cs9
-rw-r--r--MediaBrowser.Controller/Entities/UserView.cs12
-rw-r--r--MediaBrowser.Controller/Entities/Year.cs9
-rw-r--r--MediaBrowser.Controller/Persistence/IItemRepository.cs15
-rw-r--r--MediaBrowser.Controller/Providers/BaseItemXmlParser.cs24
-rw-r--r--MediaBrowser.Controller/Providers/LocalMetadataResult.cs10
-rw-r--r--MediaBrowser.Controller/Providers/MetadataResult.cs10
-rw-r--r--MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs6
-rw-r--r--MediaBrowser.LocalMetadata/Parsers/EpisodeXmlParser.cs30
-rw-r--r--MediaBrowser.LocalMetadata/Parsers/GameSystemXmlParser.cs10
-rw-r--r--MediaBrowser.LocalMetadata/Parsers/GameXmlParser.cs10
-rw-r--r--MediaBrowser.LocalMetadata/Parsers/MovieXmlParser.cs52
-rw-r--r--MediaBrowser.LocalMetadata/Parsers/MusicVideoXmlParser.cs10
-rw-r--r--MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs6
-rw-r--r--MediaBrowser.LocalMetadata/Parsers/SeasonXmlParser.cs8
-rw-r--r--MediaBrowser.LocalMetadata/Parsers/SeriesXmlParser.cs10
-rw-r--r--MediaBrowser.LocalMetadata/Providers/BoxSetXmlProvider.cs2
-rw-r--r--MediaBrowser.LocalMetadata/Providers/EpisodeXmlProvider.cs3
-rw-r--r--MediaBrowser.LocalMetadata/Providers/FolderXmlProvider.cs2
-rw-r--r--MediaBrowser.LocalMetadata/Providers/GameSystemXmlProvider.cs2
-rw-r--r--MediaBrowser.LocalMetadata/Providers/GameXmlProvider.cs2
-rw-r--r--MediaBrowser.LocalMetadata/Providers/MovieXmlProvider.cs8
-rw-r--r--MediaBrowser.LocalMetadata/Providers/MusicVideoXmlProvider.cs2
-rw-r--r--MediaBrowser.LocalMetadata/Providers/PersonXmlProvider.cs2
-rw-r--r--MediaBrowser.LocalMetadata/Providers/PlaylistXmlProvider.cs2
-rw-r--r--MediaBrowser.LocalMetadata/Providers/SeasonXmlProvider.cs2
-rw-r--r--MediaBrowser.LocalMetadata/Providers/SeriesXmlProvider.cs2
-rw-r--r--MediaBrowser.LocalMetadata/Providers/VideoXmlProvider.cs14
-rw-r--r--MediaBrowser.Providers/Books/BookMetadataService.cs16
-rw-r--r--MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs43
-rw-r--r--MediaBrowser.Providers/Channels/AudioChannelItemMetadataService.cs12
-rw-r--r--MediaBrowser.Providers/Channels/ChannelMetadataService.cs12
-rw-r--r--MediaBrowser.Providers/Channels/VideoChannelItemMetadataService.cs12
-rw-r--r--MediaBrowser.Providers/Folders/FolderMetadataService.cs20
-rw-r--r--MediaBrowser.Providers/Folders/UserViewMetadataService.cs13
-rw-r--r--MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs12
-rw-r--r--MediaBrowser.Providers/Games/GameMetadataService.cs23
-rw-r--r--MediaBrowser.Providers/Games/GameSystemMetadataService.cs19
-rw-r--r--MediaBrowser.Providers/Genres/GenreMetadataService.cs12
-rw-r--r--MediaBrowser.Providers/LiveTv/AudioRecordingService.cs11
-rw-r--r--MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs7
-rw-r--r--MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs16
-rw-r--r--MediaBrowser.Providers/LiveTv/VideoRecordingService.cs11
-rw-r--r--MediaBrowser.Providers/Manager/MetadataService.cs52
-rw-r--r--MediaBrowser.Providers/Manager/ProviderUtils.cs13
-rw-r--r--MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs10
-rw-r--r--MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs30
-rw-r--r--MediaBrowser.Providers/Movies/MovieMetadataService.cs33
-rw-r--r--MediaBrowser.Providers/Music/AlbumMetadataService.cs33
-rw-r--r--MediaBrowser.Providers/Music/ArtistMetadataService.cs25
-rw-r--r--MediaBrowser.Providers/Music/AudioMetadataService.cs23
-rw-r--r--MediaBrowser.Providers/Music/MusicVideoMetadataService.cs23
-rw-r--r--MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs12
-rw-r--r--MediaBrowser.Providers/People/PersonMetadataService.cs19
-rw-r--r--MediaBrowser.Providers/Photos/PhotoAlbumMetadataService.cs13
-rw-r--r--MediaBrowser.Providers/Photos/PhotoMetadataService.cs12
-rw-r--r--MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs23
-rw-r--r--MediaBrowser.Providers/Studios/StudioMetadataService.cs11
-rw-r--r--MediaBrowser.Providers/TV/EpisodeMetadataService.cs43
-rw-r--r--MediaBrowser.Providers/TV/SeasonMetadataService.cs20
-rw-r--r--MediaBrowser.Providers/TV/SeriesMetadataService.cs76
-rw-r--r--MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs66
-rw-r--r--MediaBrowser.Providers/TV/TvdbSeriesProvider.cs22
-rw-r--r--MediaBrowser.Providers/Users/UserMetadataService.cs12
-rw-r--r--MediaBrowser.Providers/Videos/VideoMetadataService.cs20
-rw-r--r--MediaBrowser.Providers/Years/YearMetadataService.cs12
-rw-r--r--MediaBrowser.Server.Implementations/Library/LibraryManager.cs13
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs153
-rw-r--r--MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs41
-rw-r--r--MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs29
-rw-r--r--MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs29
-rw-r--r--MediaBrowser.XbmcMetadata/Parsers/SeasonNfoParser.cs12
-rw-r--r--MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs10
-rw-r--r--MediaBrowser.XbmcMetadata/Providers/AlbumNfoProvider.cs2
-rw-r--r--MediaBrowser.XbmcMetadata/Providers/ArtistNfoProvider.cs2
-rw-r--r--MediaBrowser.XbmcMetadata/Providers/BaseVideoNfoProvider.cs14
-rw-r--r--MediaBrowser.XbmcMetadata/Providers/EpisodeNfoProvider.cs4
-rw-r--r--MediaBrowser.XbmcMetadata/Providers/SeasonNfoProvider.cs2
-rw-r--r--MediaBrowser.XbmcMetadata/Providers/SeriesNfoProvider.cs2
90 files changed, 799 insertions, 727 deletions
diff --git a/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs b/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs
index 4185590ab..f6d1d32a4 100644
--- a/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs
+++ b/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs
@@ -216,5 +216,14 @@ namespace MediaBrowser.Controller.Entities.Audio
return hasArtist != null && hasArtist.HasAnyArtist(Name);
};
}
+
+ [IgnoreDataMember]
+ public override bool SupportsPeople
+ {
+ get
+ {
+ return false;
+ }
+ }
}
}
diff --git a/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs b/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs
index 971c09236..5f24dbf67 100644
--- a/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs
+++ b/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs
@@ -71,5 +71,14 @@ namespace MediaBrowser.Controller.Entities.Audio
{
return i => (i is IHasMusicGenres) && i.Genres.Contains(Name, StringComparer.OrdinalIgnoreCase);
}
+
+ [IgnoreDataMember]
+ public override bool SupportsPeople
+ {
+ get
+ {
+ return false;
+ }
+ }
}
}
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs
index 6e8c9ae54..5d7c02f48 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -35,7 +35,6 @@ namespace MediaBrowser.Controller.Entities
{
Genres = new List<string>();
Studios = new List<string>();
- People = new List<PersonInfo>();
ProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
LockedFields = new List<MetadataFields>();
ImageInfos = new List<ItemImageInfo>();
@@ -776,6 +775,12 @@ namespace MediaBrowser.Controller.Entities
get { return IsFolder || Parent != null; }
}
+ [IgnoreDataMember]
+ public virtual bool SupportsPeople
+ {
+ get { return true; }
+ }
+
/// <summary>
/// Refreshes owned items such as trailers, theme videos, special features, etc.
/// Returns true or false indicating if changes were found.
@@ -1239,7 +1244,6 @@ namespace MediaBrowser.Controller.Entities
/// <exception cref="System.ArgumentNullException"></exception>
public void AddPerson(PersonInfo person)
{
- PeopleHelper.AddPerson(People, person);
}
/// <summary>
diff --git a/MediaBrowser.Controller/Entities/BasePluginFolder.cs b/MediaBrowser.Controller/Entities/BasePluginFolder.cs
index 1cc547790..5a1ad6b15 100644
--- a/MediaBrowser.Controller/Entities/BasePluginFolder.cs
+++ b/MediaBrowser.Controller/Entities/BasePluginFolder.cs
@@ -1,4 +1,6 @@

+using System.Runtime.Serialization;
+
namespace MediaBrowser.Controller.Entities
{
/// <summary>
@@ -21,5 +23,14 @@ namespace MediaBrowser.Controller.Entities
{
return true;
}
+
+ [IgnoreDataMember]
+ public override bool SupportsPeople
+ {
+ get
+ {
+ return false;
+ }
+ }
}
}
diff --git a/MediaBrowser.Controller/Entities/CollectionFolder.cs b/MediaBrowser.Controller/Entities/CollectionFolder.cs
index bcf68263a..3a610be64 100644
--- a/MediaBrowser.Controller/Entities/CollectionFolder.cs
+++ b/MediaBrowser.Controller/Entities/CollectionFolder.cs
@@ -194,5 +194,14 @@ namespace MediaBrowser.Controller.Entities
.Where(i => i.Path != null && PhysicalLocations.Contains(i.Path, StringComparer.OrdinalIgnoreCase))
.SelectMany(c => c.Children);
}
+
+ [IgnoreDataMember]
+ public override bool SupportsPeople
+ {
+ get
+ {
+ return false;
+ }
+ }
}
}
diff --git a/MediaBrowser.Controller/Entities/GameGenre.cs b/MediaBrowser.Controller/Entities/GameGenre.cs
index c91acbe3f..bf448da0d 100644
--- a/MediaBrowser.Controller/Entities/GameGenre.cs
+++ b/MediaBrowser.Controller/Entities/GameGenre.cs
@@ -62,5 +62,14 @@ namespace MediaBrowser.Controller.Entities
{
return i => (i is Game) && i.Genres.Contains(Name, StringComparer.OrdinalIgnoreCase);
}
+
+ [IgnoreDataMember]
+ public override bool SupportsPeople
+ {
+ get
+ {
+ return false;
+ }
+ }
}
}
diff --git a/MediaBrowser.Controller/Entities/GameSystem.cs b/MediaBrowser.Controller/Entities/GameSystem.cs
index cf6916763..35f7e3350 100644
--- a/MediaBrowser.Controller/Entities/GameSystem.cs
+++ b/MediaBrowser.Controller/Entities/GameSystem.cs
@@ -58,5 +58,14 @@ namespace MediaBrowser.Controller.Entities
return id;
}
+
+ [IgnoreDataMember]
+ public override bool SupportsPeople
+ {
+ get
+ {
+ return false;
+ }
+ }
}
}
diff --git a/MediaBrowser.Controller/Entities/Genre.cs b/MediaBrowser.Controller/Entities/Genre.cs
index cb68e5dae..233e1e0fd 100644
--- a/MediaBrowser.Controller/Entities/Genre.cs
+++ b/MediaBrowser.Controller/Entities/Genre.cs
@@ -66,5 +66,14 @@ namespace MediaBrowser.Controller.Entities
{
return i => !(i is Game) && !(i is IHasMusicGenres) && i.Genres.Contains(Name, StringComparer.OrdinalIgnoreCase);
}
+
+ [IgnoreDataMember]
+ public override bool SupportsPeople
+ {
+ get
+ {
+ return false;
+ }
+ }
}
}
diff --git a/MediaBrowser.Controller/Entities/IHasMetadata.cs b/MediaBrowser.Controller/Entities/IHasMetadata.cs
index 3643c58b3..158bcb6d1 100644
--- a/MediaBrowser.Controller/Entities/IHasMetadata.cs
+++ b/MediaBrowser.Controller/Entities/IHasMetadata.cs
@@ -59,5 +59,11 @@ namespace MediaBrowser.Controller.Entities
/// Afters the metadata refresh.
/// </summary>
void AfterMetadataRefresh();
+
+ /// <summary>
+ /// Gets a value indicating whether [supports people].
+ /// </summary>
+ /// <value><c>true</c> if [supports people]; otherwise, <c>false</c>.</value>
+ bool SupportsPeople { get; }
}
}
diff --git a/MediaBrowser.Controller/Entities/Person.cs b/MediaBrowser.Controller/Entities/Person.cs
index bbd112de0..390fcaf80 100644
--- a/MediaBrowser.Controller/Entities/Person.cs
+++ b/MediaBrowser.Controller/Entities/Person.cs
@@ -78,6 +78,15 @@ namespace MediaBrowser.Controller.Entities
{
return i => LibraryManager.GetPeople(i).Any(p => string.Equals(p.Name, Name, StringComparison.OrdinalIgnoreCase));
}
+
+ [IgnoreDataMember]
+ public override bool SupportsPeople
+ {
+ get
+ {
+ return false;
+ }
+ }
}
/// <summary>
diff --git a/MediaBrowser.Controller/Entities/Studio.cs b/MediaBrowser.Controller/Entities/Studio.cs
index b8d359369..822f305ed 100644
--- a/MediaBrowser.Controller/Entities/Studio.cs
+++ b/MediaBrowser.Controller/Entities/Studio.cs
@@ -72,5 +72,14 @@ namespace MediaBrowser.Controller.Entities
{
return i => i.Studios.Contains(Name, StringComparer.OrdinalIgnoreCase);
}
+
+ [IgnoreDataMember]
+ public override bool SupportsPeople
+ {
+ get
+ {
+ return false;
+ }
+ }
}
}
diff --git a/MediaBrowser.Controller/Entities/User.cs b/MediaBrowser.Controller/Entities/User.cs
index 5b70ee5f4..71e3d1ce0 100644
--- a/MediaBrowser.Controller/Entities/User.cs
+++ b/MediaBrowser.Controller/Entities/User.cs
@@ -295,5 +295,14 @@ namespace MediaBrowser.Controller.Entities
return config.GroupedFolders.Select(i => new Guid(i)).Contains(id);
}
+
+ [IgnoreDataMember]
+ public override bool SupportsPeople
+ {
+ get
+ {
+ return false;
+ }
+ }
}
}
diff --git a/MediaBrowser.Controller/Entities/UserView.cs b/MediaBrowser.Controller/Entities/UserView.cs
index 9be30273a..dad6de01a 100644
--- a/MediaBrowser.Controller/Entities/UserView.cs
+++ b/MediaBrowser.Controller/Entities/UserView.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Controller.Playlists;
+using System.Runtime.Serialization;
+using MediaBrowser.Controller.Playlists;
using MediaBrowser.Controller.TV;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Querying;
@@ -93,5 +94,14 @@ namespace MediaBrowser.Controller.Entities
return standaloneTypes.Contains(collectionFolder.CollectionType ?? string.Empty);
}
+
+ [IgnoreDataMember]
+ public override bool SupportsPeople
+ {
+ get
+ {
+ return false;
+ }
+ }
}
}
diff --git a/MediaBrowser.Controller/Entities/Year.cs b/MediaBrowser.Controller/Entities/Year.cs
index a1a152387..163dcd667 100644
--- a/MediaBrowser.Controller/Entities/Year.cs
+++ b/MediaBrowser.Controller/Entities/Year.cs
@@ -88,5 +88,14 @@ namespace MediaBrowser.Controller.Entities
var val = GetYearValue();
return i => i.ProductionYear.HasValue && val.HasValue && i.ProductionYear.Value == val.Value;
}
+
+ [IgnoreDataMember]
+ public override bool SupportsPeople
+ {
+ get
+ {
+ return false;
+ }
+ }
}
}
diff --git a/MediaBrowser.Controller/Persistence/IItemRepository.cs b/MediaBrowser.Controller/Persistence/IItemRepository.cs
index 7c02a0ea1..fba5f4c03 100644
--- a/MediaBrowser.Controller/Persistence/IItemRepository.cs
+++ b/MediaBrowser.Controller/Persistence/IItemRepository.cs
@@ -147,6 +147,21 @@ namespace MediaBrowser.Controller.Persistence
/// <param name="query">The query.</param>
/// <returns>List&lt;Guid&gt;.</returns>
List<Guid> GetItemIdsList(InternalItemsQuery query);
+
+ /// <summary>
+ /// Gets the people.
+ /// </summary>
+ /// <param name="itemId">The item identifier.</param>
+ /// <returns>List&lt;PersonInfo&gt;.</returns>
+ List<PersonInfo> GetPeople(Guid itemId);
+
+ /// <summary>
+ /// Updates the people.
+ /// </summary>
+ /// <param name="itemId">The item identifier.</param>
+ /// <param name="people">The people.</param>
+ /// <returns>Task.</returns>
+ Task UpdatePeople(Guid itemId, List<PersonInfo> people);
}
}
diff --git a/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs b/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs
index 2ed12973b..c1a4fa765 100644
--- a/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs
+++ b/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs
@@ -40,7 +40,7 @@ namespace MediaBrowser.Controller.Providers
/// <param name="metadataFile">The metadata file.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <exception cref="System.ArgumentNullException"></exception>
- public void Fetch(T item, string metadataFile, CancellationToken cancellationToken)
+ public void Fetch(MetadataResult<T> item, string metadataFile, CancellationToken cancellationToken)
{
if (item == null)
{
@@ -72,7 +72,7 @@ namespace MediaBrowser.Controller.Providers
/// <param name="settings">The settings.</param>
/// <param name="encoding">The encoding.</param>
/// <param name="cancellationToken">The cancellation token.</param>
- private void Fetch(T item, string metadataFile, XmlReaderSettings settings, Encoding encoding, CancellationToken cancellationToken)
+ private void Fetch(MetadataResult<T> item, string metadataFile, XmlReaderSettings settings, Encoding encoding, CancellationToken cancellationToken)
{
using (var streamReader = new StreamReader(metadataFile, encoding))
{
@@ -101,9 +101,11 @@ namespace MediaBrowser.Controller.Providers
/// Fetches metadata from one Xml Element
/// </summary>
/// <param name="reader">The reader.</param>
- /// <param name="item">The item.</param>
- protected virtual void FetchDataFromXmlNode(XmlReader reader, T item)
+ /// <param name="itemResult">The item result.</param>
+ protected virtual void FetchDataFromXmlNode(XmlReader reader, MetadataResult<T> itemResult)
{
+ var item = itemResult.Item;
+
switch (reader.Name)
{
// DateCreated
@@ -490,7 +492,7 @@ namespace MediaBrowser.Controller.Providers
{
continue;
}
- PeopleHelper.AddPerson(item.People, p);
+ PeopleHelper.AddPerson(itemResult.People, p);
}
break;
}
@@ -502,7 +504,7 @@ namespace MediaBrowser.Controller.Providers
{
continue;
}
- PeopleHelper.AddPerson(item.People, p);
+ PeopleHelper.AddPerson(itemResult.People, p);
}
break;
}
@@ -516,7 +518,7 @@ namespace MediaBrowser.Controller.Providers
{
// This is one of the mis-named "Actors" full nodes created by MB2
// Create a reader and pass it to the persons node processor
- FetchDataFromPersonsNode(new XmlTextReader(new StringReader("<Persons>" + actors + "</Persons>")), item);
+ FetchDataFromPersonsNode(new XmlTextReader(new StringReader("<Persons>" + actors + "</Persons>")), itemResult);
}
else
{
@@ -527,7 +529,7 @@ namespace MediaBrowser.Controller.Providers
{
continue;
}
- PeopleHelper.AddPerson(item.People, p);
+ PeopleHelper.AddPerson(itemResult.People, p);
}
}
break;
@@ -541,7 +543,7 @@ namespace MediaBrowser.Controller.Providers
{
continue;
}
- PeopleHelper.AddPerson(item.People, p);
+ PeopleHelper.AddPerson(itemResult.People, p);
}
break;
}
@@ -833,7 +835,7 @@ namespace MediaBrowser.Controller.Providers
{
using (var subtree = reader.ReadSubtree())
{
- FetchDataFromPersonsNode(subtree, item);
+ FetchDataFromPersonsNode(subtree, itemResult);
}
break;
}
@@ -1133,7 +1135,7 @@ namespace MediaBrowser.Controller.Providers
/// </summary>
/// <param name="reader">The reader.</param>
/// <param name="item">The item.</param>
- private void FetchDataFromPersonsNode(XmlReader reader, T item)
+ private void FetchDataFromPersonsNode(XmlReader reader, MetadataResult<T> item)
{
reader.MoveToContent();
diff --git a/MediaBrowser.Controller/Providers/LocalMetadataResult.cs b/MediaBrowser.Controller/Providers/LocalMetadataResult.cs
index 8be3ee7aa..76b7a3136 100644
--- a/MediaBrowser.Controller/Providers/LocalMetadataResult.cs
+++ b/MediaBrowser.Controller/Providers/LocalMetadataResult.cs
@@ -1,23 +1,17 @@
-using System.Collections.Generic;
using MediaBrowser.Controller.Entities;
-using MediaBrowser.Model.Entities;
+using System.Collections.Generic;
namespace MediaBrowser.Controller.Providers
{
- public class LocalMetadataResult<T>
+ public class LocalMetadataResult<T> : MetadataResult<T>
where T : IHasMetadata
{
- public bool HasMetadata { get; set; }
- public T Item { get; set; }
-
public List<LocalImageInfo> Images { get; set; }
- public List<ChapterInfo> Chapters { get; set; }
public List<UserItemData> UserDataLIst { get; set; }
public LocalMetadataResult()
{
Images = new List<LocalImageInfo>();
- Chapters = new List<ChapterInfo>();
UserDataLIst = new List<UserItemData>();
}
}
diff --git a/MediaBrowser.Controller/Providers/MetadataResult.cs b/MediaBrowser.Controller/Providers/MetadataResult.cs
index 756458cfa..a18dd83e8 100644
--- a/MediaBrowser.Controller/Providers/MetadataResult.cs
+++ b/MediaBrowser.Controller/Providers/MetadataResult.cs
@@ -1,8 +1,18 @@
+using MediaBrowser.Controller.Entities;
+using System.Collections.Generic;
+
namespace MediaBrowser.Controller.Providers
{
public class MetadataResult<T>
{
+ public List<PersonInfo> People { get; set; }
+
public bool HasMetadata { get; set; }
public T Item { get; set; }
+
+ public MetadataResult()
+ {
+ People = new List<PersonInfo>();
+ }
}
} \ No newline at end of file
diff --git a/MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs
index f89e29d54..772af0673 100644
--- a/MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs
+++ b/MediaBrowser.LocalMetadata/Parsers/BoxSetXmlParser.cs
@@ -14,7 +14,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
{
}
- protected override void FetchDataFromXmlNode(XmlReader reader, BoxSet item)
+ protected override void FetchDataFromXmlNode(XmlReader reader, MetadataResult<BoxSet> item)
{
switch (reader.Name)
{
@@ -32,7 +32,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
}
}
- private void FetchFromCollectionItemsNode(XmlReader reader, BoxSet item)
+ private void FetchFromCollectionItemsNode(XmlReader reader, MetadataResult<BoxSet> item)
{
reader.MoveToContent();
@@ -66,7 +66,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
}
}
- item.LinkedChildren = list;
+ item.Item.LinkedChildren = list;
}
}
}
diff --git a/MediaBrowser.LocalMetadata/Parsers/EpisodeXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/EpisodeXmlParser.cs
index 8430f3b3c..08454c8e7 100644
--- a/MediaBrowser.LocalMetadata/Parsers/EpisodeXmlParser.cs
+++ b/MediaBrowser.LocalMetadata/Parsers/EpisodeXmlParser.cs
@@ -1,13 +1,13 @@
-using System;
+using MediaBrowser.Controller.Entities.TV;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Logging;
+using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Threading;
using System.Xml;
-using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Logging;
namespace MediaBrowser.LocalMetadata.Parsers
{
@@ -17,7 +17,6 @@ namespace MediaBrowser.LocalMetadata.Parsers
public class EpisodeXmlParser : BaseItemXmlParser<Episode>
{
private List<LocalImageInfo> _imagesFound;
- private List<ChapterInfo> _chaptersFound;
public EpisodeXmlParser(ILogger logger)
: base(logger)
@@ -26,14 +25,12 @@ namespace MediaBrowser.LocalMetadata.Parsers
private string _xmlPath;
- public void Fetch(Episode item,
+ public void Fetch(MetadataResult<Episode> item,
List<LocalImageInfo> images,
- List<ChapterInfo> chapters,
string metadataFile,
CancellationToken cancellationToken)
{
_imagesFound = images;
- _chaptersFound = chapters;
_xmlPath = metadataFile;
Fetch(item, metadataFile, cancellationToken);
@@ -45,16 +42,13 @@ namespace MediaBrowser.LocalMetadata.Parsers
/// Fetches the data from XML node.
/// </summary>
/// <param name="reader">The reader.</param>
- /// <param name="item">The item.</param>
- protected override void FetchDataFromXmlNode(XmlReader reader, Episode item)
+ /// <param name="result">The result.</param>
+ protected override void FetchDataFromXmlNode(XmlReader reader, MetadataResult<Episode> result)
{
+ var item = result.Item;
+
switch (reader.Name)
{
- case "Chapters":
-
- _chaptersFound.AddRange(FetchChaptersFromXmlNode(item, reader.ReadSubtree()));
- break;
-
case "Episode":
//MB generated metadata is within an "Episode" node
@@ -67,7 +61,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
{
if (subTree.NodeType == XmlNodeType.Element)
{
- FetchDataFromXmlNode(subTree, item);
+ FetchDataFromXmlNode(subTree, result);
}
}
@@ -263,7 +257,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
default:
- base.FetchDataFromXmlNode(reader, item);
+ base.FetchDataFromXmlNode(reader, result);
break;
}
}
diff --git a/MediaBrowser.LocalMetadata/Parsers/GameSystemXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/GameSystemXmlParser.cs
index d449108c4..8ae0eafec 100644
--- a/MediaBrowser.LocalMetadata/Parsers/GameSystemXmlParser.cs
+++ b/MediaBrowser.LocalMetadata/Parsers/GameSystemXmlParser.cs
@@ -16,7 +16,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
}
private readonly Task _cachedTask = Task.FromResult(true);
- public Task FetchAsync(GameSystem item, string metadataFile, CancellationToken cancellationToken)
+ public Task FetchAsync(MetadataResult<GameSystem> item, string metadataFile, CancellationToken cancellationToken)
{
Fetch(item, metadataFile, cancellationToken);
@@ -29,9 +29,11 @@ namespace MediaBrowser.LocalMetadata.Parsers
/// Fetches the data from XML node.
/// </summary>
/// <param name="reader">The reader.</param>
- /// <param name="item">The item.</param>
- protected override void FetchDataFromXmlNode(XmlReader reader, GameSystem item)
+ /// <param name="result">The result.</param>
+ protected override void FetchDataFromXmlNode(XmlReader reader, MetadataResult<GameSystem> result)
{
+ var item = result.Item;
+
switch (reader.Name)
{
case "GameSystem":
@@ -56,7 +58,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
default:
- base.FetchDataFromXmlNode(reader, item);
+ base.FetchDataFromXmlNode(reader, result);
break;
}
}
diff --git a/MediaBrowser.LocalMetadata/Parsers/GameXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/GameXmlParser.cs
index 2caced8a9..b5a68c61f 100644
--- a/MediaBrowser.LocalMetadata/Parsers/GameXmlParser.cs
+++ b/MediaBrowser.LocalMetadata/Parsers/GameXmlParser.cs
@@ -22,7 +22,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
}
private readonly Task _cachedTask = Task.FromResult(true);
- public Task FetchAsync(Game item, string metadataFile, CancellationToken cancellationToken)
+ public Task FetchAsync(MetadataResult<Game> item, string metadataFile, CancellationToken cancellationToken)
{
Fetch(item, metadataFile, cancellationToken);
@@ -35,9 +35,11 @@ namespace MediaBrowser.LocalMetadata.Parsers
/// Fetches the data from XML node.
/// </summary>
/// <param name="reader">The reader.</param>
- /// <param name="item">The item.</param>
- protected override void FetchDataFromXmlNode(XmlReader reader, Game item)
+ /// <param name="result">The result.</param>
+ protected override void FetchDataFromXmlNode(XmlReader reader, MetadataResult<Game> result)
{
+ var item = result.Item;
+
switch (reader.Name)
{
case "GameSystem":
@@ -97,7 +99,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
default:
- base.FetchDataFromXmlNode(reader, item);
+ base.FetchDataFromXmlNode(reader, result);
break;
}
}
diff --git a/MediaBrowser.LocalMetadata/Parsers/MovieXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/MovieXmlParser.cs
index 388a0d20d..0b434231f 100644
--- a/MediaBrowser.LocalMetadata/Parsers/MovieXmlParser.cs
+++ b/MediaBrowser.LocalMetadata/Parsers/MovieXmlParser.cs
@@ -1,43 +1,31 @@
-using System.Collections.Generic;
-using System.Threading;
-using System.Xml;
-using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
+using System.Xml;
namespace MediaBrowser.LocalMetadata.Parsers
{
/// <summary>
/// Class EpisodeXmlParser
/// </summary>
- public class MovieXmlParser : BaseItemXmlParser<Video>
+ public class BaseVideoXmlParser<T> : BaseItemXmlParser<T>
+ where T : Video
{
- private List<ChapterInfo> _chaptersFound;
-
- public MovieXmlParser(ILogger logger)
+ public BaseVideoXmlParser(ILogger logger)
: base(logger)
{
}
- public void Fetch(Video item,
- List<ChapterInfo> chapters,
- string metadataFile,
- CancellationToken cancellationToken)
- {
- _chaptersFound = chapters;
-
- Fetch(item, metadataFile, cancellationToken);
- }
-
/// <summary>
/// Fetches the data from XML node.
/// </summary>
/// <param name="reader">The reader.</param>
- /// <param name="item">The item.</param>
- protected override void FetchDataFromXmlNode(XmlReader reader, Video item)
+ /// <param name="result">The result.</param>
+ protected override void FetchDataFromXmlNode(XmlReader reader, MetadataResult<T> result)
{
+ var item = result.Item;
+
switch (reader.Name)
{
case "TmdbCollectionName":
@@ -53,15 +41,25 @@ namespace MediaBrowser.LocalMetadata.Parsers
break;
}
- case "Chapters":
-
- _chaptersFound.AddRange(FetchChaptersFromXmlNode(item, reader.ReadSubtree()));
- break;
-
default:
- base.FetchDataFromXmlNode(reader, item);
+ base.FetchDataFromXmlNode(reader, result);
break;
}
}
}
+
+ public class MovieXmlParser : BaseVideoXmlParser<Movie>
+ {
+ public MovieXmlParser(ILogger logger) : base(logger)
+ {
+ }
+ }
+
+ public class VideoXmlParser : BaseVideoXmlParser<Video>
+ {
+ public VideoXmlParser(ILogger logger)
+ : base(logger)
+ {
+ }
+ }
}
diff --git a/MediaBrowser.LocalMetadata/Parsers/MusicVideoXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/MusicVideoXmlParser.cs
index f695487c5..d93746aa0 100644
--- a/MediaBrowser.LocalMetadata/Parsers/MusicVideoXmlParser.cs
+++ b/MediaBrowser.LocalMetadata/Parsers/MusicVideoXmlParser.cs
@@ -6,7 +6,7 @@ using System.Xml;
namespace MediaBrowser.LocalMetadata.Parsers
{
- public class MusicVideoXmlParser : BaseItemXmlParser<MusicVideo>
+ public class MusicVideoXmlParser : BaseVideoXmlParser<MusicVideo>
{
/// <summary>
/// Initializes a new instance of the <see cref="BaseItemXmlParser{T}" /> class.
@@ -21,9 +21,11 @@ namespace MediaBrowser.LocalMetadata.Parsers
/// Fetches the data from XML node.
/// </summary>
/// <param name="reader">The reader.</param>
- /// <param name="item">The item.</param>
- protected override void FetchDataFromXmlNode(XmlReader reader, MusicVideo item)
+ /// <param name="result">The result.</param>
+ protected override void FetchDataFromXmlNode(XmlReader reader, MetadataResult<MusicVideo> result)
{
+ var item = result.Item;
+
switch (reader.Name)
{
case "Artist":
@@ -44,7 +46,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
break;
default:
- base.FetchDataFromXmlNode(reader, item);
+ base.FetchDataFromXmlNode(reader, result);
break;
}
}
diff --git a/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs
index 02457ee73..d4552fe12 100644
--- a/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs
+++ b/MediaBrowser.LocalMetadata/Parsers/PlaylistXmlParser.cs
@@ -16,8 +16,10 @@ namespace MediaBrowser.LocalMetadata.Parsers
{
}
- protected override void FetchDataFromXmlNode(XmlReader reader, Playlist item)
+ protected override void FetchDataFromXmlNode(XmlReader reader, MetadataResult<Playlist> result)
{
+ var item = result.Item;
+
switch (reader.Name)
{
case "OwnerUserId":
@@ -59,7 +61,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
break;
default:
- base.FetchDataFromXmlNode(reader, item);
+ base.FetchDataFromXmlNode(reader, result);
break;
}
}
diff --git a/MediaBrowser.LocalMetadata/Parsers/SeasonXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/SeasonXmlParser.cs
index 62a7d37cf..7fd60d3f7 100644
--- a/MediaBrowser.LocalMetadata/Parsers/SeasonXmlParser.cs
+++ b/MediaBrowser.LocalMetadata/Parsers/SeasonXmlParser.cs
@@ -16,9 +16,11 @@ namespace MediaBrowser.LocalMetadata.Parsers
/// Fetches the data from XML node.
/// </summary>
/// <param name="reader">The reader.</param>
- /// <param name="item">The item.</param>
- protected override void FetchDataFromXmlNode(XmlReader reader, Season item)
+ /// <param name="result">The result.</param>
+ protected override void FetchDataFromXmlNode(XmlReader reader, MetadataResult<Season> result)
{
+ var item = result.Item;
+
switch (reader.Name)
{
case "SeasonNumber":
@@ -38,7 +40,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
}
default:
- base.FetchDataFromXmlNode(reader, item);
+ base.FetchDataFromXmlNode(reader, result);
break;
}
}
diff --git a/MediaBrowser.LocalMetadata/Parsers/SeriesXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/SeriesXmlParser.cs
index a3d45034e..8133bd9fe 100644
--- a/MediaBrowser.LocalMetadata/Parsers/SeriesXmlParser.cs
+++ b/MediaBrowser.LocalMetadata/Parsers/SeriesXmlParser.cs
@@ -26,9 +26,11 @@ namespace MediaBrowser.LocalMetadata.Parsers
/// Fetches the data from XML node.
/// </summary>
/// <param name="reader">The reader.</param>
- /// <param name="item">The item.</param>
- protected override void FetchDataFromXmlNode(XmlReader reader, Series item)
+ /// <param name="result">The result.</param>
+ protected override void FetchDataFromXmlNode(XmlReader reader, MetadataResult<Series> result)
{
+ var item = result.Item;
+
switch (reader.Name)
{
case "Series":
@@ -42,7 +44,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
{
if (subTree.NodeType == XmlNodeType.Element)
{
- FetchDataFromXmlNode(subTree, item);
+ FetchDataFromXmlNode(subTree, result);
}
}
@@ -110,7 +112,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
}
default:
- base.FetchDataFromXmlNode(reader, item);
+ base.FetchDataFromXmlNode(reader, result);
break;
}
}
diff --git a/MediaBrowser.LocalMetadata/Providers/BoxSetXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/BoxSetXmlProvider.cs
index 6e40c3594..98a5d5e91 100644
--- a/MediaBrowser.LocalMetadata/Providers/BoxSetXmlProvider.cs
+++ b/MediaBrowser.LocalMetadata/Providers/BoxSetXmlProvider.cs
@@ -23,7 +23,7 @@ namespace MediaBrowser.LocalMetadata.Providers
protected override void Fetch(LocalMetadataResult<BoxSet> result, string path, CancellationToken cancellationToken)
{
- new BoxSetXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
+ new BoxSetXmlParser(_logger).Fetch(result, path, cancellationToken);
}
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
diff --git a/MediaBrowser.LocalMetadata/Providers/EpisodeXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/EpisodeXmlProvider.cs
index d80009330..c1fc1ba5e 100644
--- a/MediaBrowser.LocalMetadata/Providers/EpisodeXmlProvider.cs
+++ b/MediaBrowser.LocalMetadata/Providers/EpisodeXmlProvider.cs
@@ -25,10 +25,9 @@ namespace MediaBrowser.LocalMetadata.Providers
var images = new List<LocalImageInfo>();
var chapters = new List<ChapterInfo>();
- new EpisodeXmlParser(_logger).Fetch(result.Item, images, chapters, path, cancellationToken);
+ new EpisodeXmlParser(_logger).Fetch(result, images, path, cancellationToken);
result.Images = images;
- result.Chapters = chapters;
}
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
diff --git a/MediaBrowser.LocalMetadata/Providers/FolderXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/FolderXmlProvider.cs
index 0a2b33744..d18e92f16 100644
--- a/MediaBrowser.LocalMetadata/Providers/FolderXmlProvider.cs
+++ b/MediaBrowser.LocalMetadata/Providers/FolderXmlProvider.cs
@@ -22,7 +22,7 @@ namespace MediaBrowser.LocalMetadata.Providers
protected override void Fetch(LocalMetadataResult<Folder> result, string path, CancellationToken cancellationToken)
{
- new BaseItemXmlParser<Folder>(_logger).Fetch(result.Item, path, cancellationToken);
+ new BaseItemXmlParser<Folder>(_logger).Fetch(result, path, cancellationToken);
}
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
diff --git a/MediaBrowser.LocalMetadata/Providers/GameSystemXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/GameSystemXmlProvider.cs
index dd486da1d..9d86edbf9 100644
--- a/MediaBrowser.LocalMetadata/Providers/GameSystemXmlProvider.cs
+++ b/MediaBrowser.LocalMetadata/Providers/GameSystemXmlProvider.cs
@@ -20,7 +20,7 @@ namespace MediaBrowser.LocalMetadata.Providers
protected override void Fetch(LocalMetadataResult<GameSystem> result, string path, CancellationToken cancellationToken)
{
- new GameSystemXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
+ new GameSystemXmlParser(_logger).Fetch(result, path, cancellationToken);
}
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
diff --git a/MediaBrowser.LocalMetadata/Providers/GameXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/GameXmlProvider.cs
index 0a25ce9b6..97a3da147 100644
--- a/MediaBrowser.LocalMetadata/Providers/GameXmlProvider.cs
+++ b/MediaBrowser.LocalMetadata/Providers/GameXmlProvider.cs
@@ -20,7 +20,7 @@ namespace MediaBrowser.LocalMetadata.Providers
protected override void Fetch(LocalMetadataResult<Game> result, string path, CancellationToken cancellationToken)
{
- new GameXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
+ new GameXmlParser(_logger).Fetch(result, path, cancellationToken);
}
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
diff --git a/MediaBrowser.LocalMetadata/Providers/MovieXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/MovieXmlProvider.cs
index fb3a01bf2..09f13b2ea 100644
--- a/MediaBrowser.LocalMetadata/Providers/MovieXmlProvider.cs
+++ b/MediaBrowser.LocalMetadata/Providers/MovieXmlProvider.cs
@@ -2,9 +2,7 @@
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Providers;
using MediaBrowser.LocalMetadata.Parsers;
-using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
-using System.Collections.Generic;
using System.IO;
using System.Threading;
@@ -22,11 +20,7 @@ namespace MediaBrowser.LocalMetadata.Providers
protected override void Fetch(LocalMetadataResult<Movie> result, string path, CancellationToken cancellationToken)
{
- var chapters = new List<ChapterInfo>();
-
- new MovieXmlParser(_logger).Fetch(result.Item, chapters, path, cancellationToken);
-
- result.Chapters = chapters;
+ new MovieXmlParser(_logger).Fetch(result, path, cancellationToken);
}
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
diff --git a/MediaBrowser.LocalMetadata/Providers/MusicVideoXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/MusicVideoXmlProvider.cs
index 6289dcb56..b3476c03b 100644
--- a/MediaBrowser.LocalMetadata/Providers/MusicVideoXmlProvider.cs
+++ b/MediaBrowser.LocalMetadata/Providers/MusicVideoXmlProvider.cs
@@ -20,7 +20,7 @@ namespace MediaBrowser.LocalMetadata.Providers
protected override void Fetch(LocalMetadataResult<MusicVideo> result, string path, CancellationToken cancellationToken)
{
- new MusicVideoXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
+ new MusicVideoXmlParser(_logger).Fetch(result, path, cancellationToken);
}
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
diff --git a/MediaBrowser.LocalMetadata/Providers/PersonXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/PersonXmlProvider.cs
index 9f27d6c7d..a97d86406 100644
--- a/MediaBrowser.LocalMetadata/Providers/PersonXmlProvider.cs
+++ b/MediaBrowser.LocalMetadata/Providers/PersonXmlProvider.cs
@@ -19,7 +19,7 @@ namespace MediaBrowser.LocalMetadata.Providers
protected override void Fetch(LocalMetadataResult<Person> result, string path, CancellationToken cancellationToken)
{
- new BaseItemXmlParser<Person>(_logger).Fetch(result.Item, path, cancellationToken);
+ new BaseItemXmlParser<Person>(_logger).Fetch(result, path, cancellationToken);
}
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
diff --git a/MediaBrowser.LocalMetadata/Providers/PlaylistXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/PlaylistXmlProvider.cs
index 2279ae052..f4c2a6afb 100644
--- a/MediaBrowser.LocalMetadata/Providers/PlaylistXmlProvider.cs
+++ b/MediaBrowser.LocalMetadata/Providers/PlaylistXmlProvider.cs
@@ -20,7 +20,7 @@ namespace MediaBrowser.LocalMetadata.Providers
protected override void Fetch(LocalMetadataResult<Playlist> result, string path, CancellationToken cancellationToken)
{
- new PlaylistXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
+ new PlaylistXmlParser(_logger).Fetch(result, path, cancellationToken);
}
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
diff --git a/MediaBrowser.LocalMetadata/Providers/SeasonXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/SeasonXmlProvider.cs
index 2320982c3..ab68e1e86 100644
--- a/MediaBrowser.LocalMetadata/Providers/SeasonXmlProvider.cs
+++ b/MediaBrowser.LocalMetadata/Providers/SeasonXmlProvider.cs
@@ -23,7 +23,7 @@ namespace MediaBrowser.LocalMetadata.Providers
protected override void Fetch(LocalMetadataResult<Season> result, string path, CancellationToken cancellationToken)
{
- new SeasonXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
+ new SeasonXmlParser(_logger).Fetch(result, path, cancellationToken);
}
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
diff --git a/MediaBrowser.LocalMetadata/Providers/SeriesXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/SeriesXmlProvider.cs
index 311c10287..f27612f2f 100644
--- a/MediaBrowser.LocalMetadata/Providers/SeriesXmlProvider.cs
+++ b/MediaBrowser.LocalMetadata/Providers/SeriesXmlProvider.cs
@@ -23,7 +23,7 @@ namespace MediaBrowser.LocalMetadata.Providers
protected override void Fetch(LocalMetadataResult<Series> result, string path, CancellationToken cancellationToken)
{
- new SeriesXmlParser(_logger).Fetch(result.Item, path, cancellationToken);
+ new SeriesXmlParser(_logger).Fetch(result, path, cancellationToken);
}
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
diff --git a/MediaBrowser.LocalMetadata/Providers/VideoXmlProvider.cs b/MediaBrowser.LocalMetadata/Providers/VideoXmlProvider.cs
index 25aa61baf..9ba64164e 100644
--- a/MediaBrowser.LocalMetadata/Providers/VideoXmlProvider.cs
+++ b/MediaBrowser.LocalMetadata/Providers/VideoXmlProvider.cs
@@ -1,12 +1,10 @@
-using System.Collections.Generic;
-using System.IO;
-using System.Threading;
-using MediaBrowser.Common.IO;
+using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Providers;
using MediaBrowser.LocalMetadata.Parsers;
-using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
+using System.IO;
+using System.Threading;
namespace MediaBrowser.LocalMetadata.Providers
{
@@ -22,11 +20,7 @@ namespace MediaBrowser.LocalMetadata.Providers
protected override void Fetch(LocalMetadataResult<Video> result, string path, CancellationToken cancellationToken)
{
- var chapters = new List<ChapterInfo>();
-
- new MovieXmlParser(_logger).Fetch(result.Item, chapters, path, cancellationToken);
-
- result.Chapters = chapters;
+ new VideoXmlParser(_logger).Fetch(result, path, cancellationToken);
}
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
diff --git a/MediaBrowser.Providers/Books/BookMetadataService.cs b/MediaBrowser.Providers/Books/BookMetadataService.cs
index 53e2af3a5..311082d96 100644
--- a/MediaBrowser.Providers/Books/BookMetadataService.cs
+++ b/MediaBrowser.Providers/Books/BookMetadataService.cs
@@ -12,25 +12,17 @@ namespace MediaBrowser.Providers.Books
{
public class BookMetadataService : MetadataService<Book, BookInfo>
{
- public BookMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public BookMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(Book source, Book target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<Book> source, MetadataResult<Book> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
- if (replaceData || string.IsNullOrEmpty(target.SeriesName))
+ if (replaceData || string.IsNullOrEmpty(target.Item.SeriesName))
{
- target.SeriesName = source.SeriesName;
+ target.Item.SeriesName = source.Item.SeriesName;
}
}
}
diff --git a/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs b/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs
index 69b78b5f1..8b405302e 100644
--- a/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs
+++ b/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs
@@ -15,33 +15,10 @@ namespace MediaBrowser.Providers.BoxSets
{
public class BoxSetMetadataService : MetadataService<BoxSet, BoxSetInfo>
{
- public BoxSetMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public BoxSetMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(BoxSet source, BoxSet target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
- {
- ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
-
- if (mergeMetadataSettings)
- {
- var list = source.LinkedChildren.Where(i => i.Type != LinkedChildType.Manual).ToList();
-
- list.AddRange(target.LinkedChildren.Where(i => i.Type == LinkedChildType.Manual));
-
- target.LinkedChildren = list;
- target.Shares = source.Shares;
- }
- }
-
protected override async Task<ItemUpdateType> BeforeSave(BoxSet item, bool isFullRefresh, ItemUpdateType currentUpdateType)
{
var updateType = await base.BeforeSave(item, isFullRefresh, currentUpdateType).ConfigureAwait(false);
@@ -59,5 +36,23 @@ namespace MediaBrowser.Providers.BoxSets
return updateType;
}
+
+ protected override void MergeData(MetadataResult<BoxSet> source, MetadataResult<BoxSet> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ {
+ ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
+
+ var sourceItem = source.Item;
+ var targetItem = target.Item;
+
+ if (mergeMetadataSettings)
+ {
+ var list = sourceItem.LinkedChildren.Where(i => i.Type != LinkedChildType.Manual).ToList();
+
+ list.AddRange(targetItem.LinkedChildren.Where(i => i.Type == LinkedChildType.Manual));
+
+ targetItem.LinkedChildren = list;
+ targetItem.Shares = sourceItem.Shares;
+ }
+ }
}
}
diff --git a/MediaBrowser.Providers/Channels/AudioChannelItemMetadataService.cs b/MediaBrowser.Providers/Channels/AudioChannelItemMetadataService.cs
index 70a72fba5..9d80559f1 100644
--- a/MediaBrowser.Providers/Channels/AudioChannelItemMetadataService.cs
+++ b/MediaBrowser.Providers/Channels/AudioChannelItemMetadataService.cs
@@ -12,19 +12,11 @@ namespace MediaBrowser.Providers.Channels
{
public class AudioChannelItemMetadataService : MetadataService<ChannelAudioItem, ItemLookupInfo>
{
- public AudioChannelItemMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public AudioChannelItemMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(ChannelAudioItem source, ChannelAudioItem target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<ChannelAudioItem> source, MetadataResult<ChannelAudioItem> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
diff --git a/MediaBrowser.Providers/Channels/ChannelMetadataService.cs b/MediaBrowser.Providers/Channels/ChannelMetadataService.cs
index 957fc2d93..faa35b379 100644
--- a/MediaBrowser.Providers/Channels/ChannelMetadataService.cs
+++ b/MediaBrowser.Providers/Channels/ChannelMetadataService.cs
@@ -12,19 +12,11 @@ namespace MediaBrowser.Providers.Channels
{
public class ChannelMetadataService : MetadataService<Channel, ItemLookupInfo>
{
- public ChannelMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public ChannelMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(Channel source, Channel target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<Channel> source, MetadataResult<Channel> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
diff --git a/MediaBrowser.Providers/Channels/VideoChannelItemMetadataService.cs b/MediaBrowser.Providers/Channels/VideoChannelItemMetadataService.cs
index b815f3ccd..1e7b5aca8 100644
--- a/MediaBrowser.Providers/Channels/VideoChannelItemMetadataService.cs
+++ b/MediaBrowser.Providers/Channels/VideoChannelItemMetadataService.cs
@@ -12,19 +12,11 @@ namespace MediaBrowser.Providers.Channels
{
public class VideoChannelItemMetadataService : MetadataService<ChannelVideoItem, ChannelItemLookupInfo>
{
- public VideoChannelItemMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public VideoChannelItemMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(ChannelVideoItem source, ChannelVideoItem target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<ChannelVideoItem> source, MetadataResult<ChannelVideoItem> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
diff --git a/MediaBrowser.Providers/Folders/FolderMetadataService.cs b/MediaBrowser.Providers/Folders/FolderMetadataService.cs
index 3f4691aa0..d54093da6 100644
--- a/MediaBrowser.Providers/Folders/FolderMetadataService.cs
+++ b/MediaBrowser.Providers/Folders/FolderMetadataService.cs
@@ -12,23 +12,10 @@ namespace MediaBrowser.Providers.Folders
{
public class FolderMetadataService : MetadataService<Folder, ItemLookupInfo>
{
- public FolderMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public FolderMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(Folder source, Folder target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
- {
- ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
- }
-
public override int Order
{
get
@@ -37,5 +24,10 @@ namespace MediaBrowser.Providers.Folders
return 10;
}
}
+
+ protected override void MergeData(MetadataResult<Folder> source, MetadataResult<Folder> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ {
+ ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
+ }
}
}
diff --git a/MediaBrowser.Providers/Folders/UserViewMetadataService.cs b/MediaBrowser.Providers/Folders/UserViewMetadataService.cs
index 97ac78a82..1dc09e01d 100644
--- a/MediaBrowser.Providers/Folders/UserViewMetadataService.cs
+++ b/MediaBrowser.Providers/Folders/UserViewMetadataService.cs
@@ -12,20 +12,11 @@ namespace MediaBrowser.Providers.Folders
{
public class UserViewMetadataService : MetadataService<UserView, ItemLookupInfo>
{
- public UserViewMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager)
- : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public UserViewMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(UserView source, UserView target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<UserView> source, MetadataResult<UserView> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
diff --git a/MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs b/MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs
index 3e94de95a..957596a30 100644
--- a/MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs
+++ b/MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs
@@ -12,19 +12,11 @@ namespace MediaBrowser.Providers.GameGenres
{
public class GameGenreMetadataService : MetadataService<GameGenre, ItemLookupInfo>
{
- public GameGenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public GameGenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(GameGenre source, GameGenre target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<GameGenre> source, MetadataResult<GameGenre> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
diff --git a/MediaBrowser.Providers/Games/GameMetadataService.cs b/MediaBrowser.Providers/Games/GameMetadataService.cs
index 46715fcbd..b9403aaa6 100644
--- a/MediaBrowser.Providers/Games/GameMetadataService.cs
+++ b/MediaBrowser.Providers/Games/GameMetadataService.cs
@@ -12,30 +12,25 @@ namespace MediaBrowser.Providers.Games
{
public class GameMetadataService : MetadataService<Game, GameInfo>
{
- public GameMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public GameMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(Game source, Game target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<Game> source, MetadataResult<Game> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
- if (replaceData || string.IsNullOrEmpty(target.GameSystem))
+ var sourceItem = source.Item;
+ var targetItem = target.Item;
+
+ if (replaceData || string.IsNullOrEmpty(targetItem.GameSystem))
{
- target.GameSystem = source.GameSystem;
+ targetItem.GameSystem = sourceItem.GameSystem;
}
- if (replaceData || !target.PlayersSupported.HasValue)
+ if (replaceData || !targetItem.PlayersSupported.HasValue)
{
- target.PlayersSupported = source.PlayersSupported;
+ targetItem.PlayersSupported = sourceItem.PlayersSupported;
}
}
}
diff --git a/MediaBrowser.Providers/Games/GameSystemMetadataService.cs b/MediaBrowser.Providers/Games/GameSystemMetadataService.cs
index 963b2e49f..24786034d 100644
--- a/MediaBrowser.Providers/Games/GameSystemMetadataService.cs
+++ b/MediaBrowser.Providers/Games/GameSystemMetadataService.cs
@@ -14,25 +14,20 @@ namespace MediaBrowser.Providers.Games
{
public class GameSystemMetadataService : MetadataService<GameSystem, GameSystemInfo>
{
- public GameSystemMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public GameSystemMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(GameSystem source, GameSystem target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<GameSystem> source, MetadataResult<GameSystem> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
- if (replaceData || string.IsNullOrEmpty(target.GameSystemName))
+ var sourceItem = source.Item;
+ var targetItem = target.Item;
+
+ if (replaceData || string.IsNullOrEmpty(targetItem.GameSystemName))
{
- target.GameSystemName = source.GameSystemName;
+ targetItem.GameSystemName = sourceItem.GameSystemName;
}
}
}
diff --git a/MediaBrowser.Providers/Genres/GenreMetadataService.cs b/MediaBrowser.Providers/Genres/GenreMetadataService.cs
index abe025577..5cdd6d847 100644
--- a/MediaBrowser.Providers/Genres/GenreMetadataService.cs
+++ b/MediaBrowser.Providers/Genres/GenreMetadataService.cs
@@ -12,19 +12,11 @@ namespace MediaBrowser.Providers.Genres
{
public class GenreMetadataService : MetadataService<Genre, ItemLookupInfo>
{
- public GenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public GenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(Genre source, Genre target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<Genre> source, MetadataResult<Genre> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
diff --git a/MediaBrowser.Providers/LiveTv/AudioRecordingService.cs b/MediaBrowser.Providers/LiveTv/AudioRecordingService.cs
index 4fc5ba40d..b3d9d6a72 100644
--- a/MediaBrowser.Providers/LiveTv/AudioRecordingService.cs
+++ b/MediaBrowser.Providers/LiveTv/AudioRecordingService.cs
@@ -14,18 +14,11 @@ namespace MediaBrowser.Providers.LiveTv
{
public class AudioRecordingService : MetadataService<LiveTvAudioRecording, ItemLookupInfo>
{
- public AudioRecordingService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public AudioRecordingService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- protected override void MergeData(LiveTvAudioRecording source, LiveTvAudioRecording target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<LiveTvAudioRecording> source, MetadataResult<LiveTvAudioRecording> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
diff --git a/MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs b/MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs
index 37bfe4107..231017cd9 100644
--- a/MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs
+++ b/MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs
@@ -14,14 +14,11 @@ namespace MediaBrowser.Providers.LiveTv
{
public class ChannelMetadataService : MetadataService<LiveTvChannel, ItemLookupInfo>
{
- public ChannelMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public ChannelMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- protected override void MergeData(LiveTvChannel source, LiveTvChannel target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<LiveTvChannel> source, MetadataResult<LiveTvChannel> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
diff --git a/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs b/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs
index f17389615..8576993fd 100644
--- a/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs
+++ b/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs
@@ -12,23 +12,11 @@ namespace MediaBrowser.Providers.LiveTv
{
public class ProgramMetadataService : MetadataService<LiveTvProgram, LiveTvProgramLookupInfo>
{
- public ProgramMetadataService(
- IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager,
- IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager)
- : base(
- serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public ProgramMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings"></param>
- protected override void MergeData(LiveTvProgram source, LiveTvProgram target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<LiveTvProgram> source, MetadataResult<LiveTvProgram> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
diff --git a/MediaBrowser.Providers/LiveTv/VideoRecordingService.cs b/MediaBrowser.Providers/LiveTv/VideoRecordingService.cs
index c47297d9c..4d8b27285 100644
--- a/MediaBrowser.Providers/LiveTv/VideoRecordingService.cs
+++ b/MediaBrowser.Providers/LiveTv/VideoRecordingService.cs
@@ -14,18 +14,11 @@ namespace MediaBrowser.Providers.LiveTv
{
public class VideoRecordingService : MetadataService<LiveTvVideoRecording, ItemLookupInfo>
{
- public VideoRecordingService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public VideoRecordingService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- protected override void MergeData(LiveTvVideoRecording source, LiveTvVideoRecording target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<LiveTvVideoRecording> source, MetadataResult<LiveTvVideoRecording> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs
index bc0b1bcb2..de41a0f96 100644
--- a/MediaBrowser.Providers/Manager/MetadataService.cs
+++ b/MediaBrowser.Providers/Manager/MetadataService.cs
@@ -24,8 +24,9 @@ namespace MediaBrowser.Providers.Manager
protected readonly IProviderRepository ProviderRepo;
protected readonly IFileSystem FileSystem;
protected readonly IUserDataManager UserDataManager;
+ protected readonly ILibraryManager LibraryManager;
- protected MetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager)
+ protected MetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager)
{
ServerConfigurationManager = serverConfigurationManager;
Logger = logger;
@@ -33,6 +34,7 @@ namespace MediaBrowser.Providers.Manager
ProviderRepo = providerRepo;
FileSystem = fileSystem;
UserDataManager = userDataManager;
+ LibraryManager = libraryManager;
}
/// <summary>
@@ -118,6 +120,11 @@ namespace MediaBrowser.Providers.Manager
refreshResult.AddStatus(ProviderRefreshStatus.Failure, ex.Message);
}
+ var metadataResult = new MetadataResult<TItemType>
+ {
+ Item = itemOfType
+ };
+
// Next run metadata providers
if (refreshOptions.MetadataRefreshMode != MetadataRefreshMode.None)
{
@@ -136,7 +143,7 @@ namespace MediaBrowser.Providers.Manager
{
var id = await CreateInitialLookupInfo(itemOfType, cancellationToken).ConfigureAwait(false);
- var result = await RefreshWithProviders(itemOfType, id, refreshOptions, providers, itemImageProvider, cancellationToken).ConfigureAwait(false);
+ var result = await RefreshWithProviders(metadataResult, id, refreshOptions, providers, itemImageProvider, cancellationToken).ConfigureAwait(false);
updateType = updateType | result.UpdateType;
refreshResult.AddStatus(result.Status, result.ErrorMessage);
@@ -174,7 +181,7 @@ namespace MediaBrowser.Providers.Manager
}
// Save to database
- await SaveItem(itemOfType, updateType, cancellationToken);
+ await SaveItem(metadataResult, updateType, cancellationToken).ConfigureAwait(false);
}
if (updateType > ItemUpdateType.None || refreshResult.IsDirty)
@@ -321,9 +328,14 @@ namespace MediaBrowser.Providers.Manager
return providers;
}
- protected Task SaveItem(TItemType item, ItemUpdateType reason, CancellationToken cancellationToken)
+ protected async Task SaveItem(MetadataResult<TItemType> result, ItemUpdateType reason, CancellationToken cancellationToken)
{
- return item.UpdateToRepository(reason, cancellationToken);
+ await result.Item.UpdateToRepository(reason, cancellationToken).ConfigureAwait(false);
+
+ if (result.Item.SupportsPeople)
+ {
+ await LibraryManager.UpdatePeople(result.Item as BaseItem, result.People);
+ }
}
public bool CanRefresh(IHasMetadata item)
@@ -331,7 +343,7 @@ namespace MediaBrowser.Providers.Manager
return item is TItemType;
}
- protected virtual async Task<RefreshResult> RefreshWithProviders(TItemType item,
+ protected virtual async Task<RefreshResult> RefreshWithProviders(MetadataResult<TItemType> metadata,
TIdType id,
MetadataRefreshOptions options,
List<IMetadataProvider> providers,
@@ -344,6 +356,8 @@ namespace MediaBrowser.Providers.Manager
Providers = providers.Select(i => i.GetType().FullName.GetMD5()).ToList()
};
+ var item = metadata.Item;
+
var customProviders = providers.OfType<ICustomMetadataProvider<TItemType>>().ToList();
var logName = item.LocationType == LocationType.Remote ? item.Name ?? item.Path : item.Path ?? item.Name;
@@ -352,11 +366,16 @@ namespace MediaBrowser.Providers.Manager
await RunCustomProvider(provider, item, logName, options, refreshResult, cancellationToken).ConfigureAwait(false);
}
- var temp = CreateNew();
- temp.Path = item.Path;
+ var temp = new MetadataResult<TItemType>
+ {
+ Item = CreateNew()
+ };
+ temp.Item.Path = item.Path;
var successfulProviderCount = 0;
var failedProviderCount = 0;
+ var userDataList = new List<UserItemData>();
+
// If replacing all metadata, run internet providers first
if (options.ReplaceAllMetadata)
{
@@ -371,7 +390,6 @@ namespace MediaBrowser.Providers.Manager
}
var hasLocalMetadata = false;
- var userDataList = new List<UserItemData>();
foreach (var provider in providers.OfType<ILocalMetadataProvider<TItemType>>().ToList())
{
@@ -393,7 +411,7 @@ namespace MediaBrowser.Providers.Manager
userDataList = localItem.UserDataLIst;
- MergeData(localItem.Item, temp, new List<MetadataFields>(), !options.ReplaceAllMetadata, true);
+ MergeData(localItem, temp, new List<MetadataFields>(), !options.ReplaceAllMetadata, true);
refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.MetadataImport;
// Only one local provider allowed per item
@@ -452,10 +470,10 @@ namespace MediaBrowser.Providers.Manager
if (!hasLocalMetadata)
{
// TODO: If the new metadata from above has some blank data, this can cause old data to get filled into those empty fields
- MergeData(item, temp, new List<MetadataFields>(), false, true);
+ MergeData(metadata, temp, new List<MetadataFields>(), false, true);
}
- MergeData(temp, item, item.LockedFields, true, true);
+ MergeData(temp, metadata, item.LockedFields, true, true);
}
}
@@ -526,7 +544,7 @@ namespace MediaBrowser.Providers.Manager
return new TItemType();
}
- private async Task<RefreshResult> ExecuteRemoteProviders(TItemType temp, string logName, TIdType id, IEnumerable<IRemoteMetadataProvider<TItemType, TIdType>> providers, CancellationToken cancellationToken)
+ private async Task<RefreshResult> ExecuteRemoteProviders(MetadataResult<TItemType> temp, string logName, TIdType id, IEnumerable<IRemoteMetadataProvider<TItemType, TIdType>> providers, CancellationToken cancellationToken)
{
var refreshResult = new RefreshResult();
@@ -537,7 +555,7 @@ namespace MediaBrowser.Providers.Manager
if (id != null)
{
- MergeNewData(temp, id);
+ MergeNewData(temp.Item, id);
}
try
@@ -548,7 +566,7 @@ namespace MediaBrowser.Providers.Manager
{
NormalizeRemoteResult(result.Item);
- MergeData(result.Item, temp, new List<MetadataFields>(), false, false);
+ MergeData(result, temp, new List<MetadataFields>(), false, false);
refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.MetadataDownload;
@@ -624,8 +642,8 @@ namespace MediaBrowser.Providers.Manager
}
}
- protected abstract void MergeData(TItemType source,
- TItemType target,
+ protected abstract void MergeData(MetadataResult<TItemType> source,
+ MetadataResult<TItemType> target,
List<MetadataFields> lockedFields,
bool replaceData,
bool mergeMetadataSettings);
diff --git a/MediaBrowser.Providers/Manager/ProviderUtils.cs b/MediaBrowser.Providers/Manager/ProviderUtils.cs
index 1c526b4db..a0a0493d5 100644
--- a/MediaBrowser.Providers/Manager/ProviderUtils.cs
+++ b/MediaBrowser.Providers/Manager/ProviderUtils.cs
@@ -1,5 +1,6 @@
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
+using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using System;
using System.Collections.Generic;
@@ -8,12 +9,16 @@ namespace MediaBrowser.Providers.Manager
{
public static class ProviderUtils
{
- public static void MergeBaseItemData(BaseItem source,
- BaseItem target,
+ public static void MergeBaseItemData<T>(MetadataResult<T> sourceResult,
+ MetadataResult<T> targetResult,
List<MetadataFields> lockedFields,
bool replaceData,
bool mergeMetadataSettings)
+ where T : BaseItem
{
+ var source = sourceResult.Item;
+ var target = targetResult.Item;
+
if (source == null)
{
throw new ArgumentNullException("source");
@@ -100,9 +105,9 @@ namespace MediaBrowser.Providers.Manager
if (!lockedFields.Contains(MetadataFields.Cast))
{
- if (replaceData || target.People.Count == 0)
+ if (replaceData || targetResult.People.Count == 0)
{
- target.People = source.People;
+ targetResult.People = sourceResult.People;
}
}
diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs b/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs
index a6d3c0271..af7fc3df4 100644
--- a/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs
+++ b/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs
@@ -51,6 +51,7 @@ namespace MediaBrowser.Providers.MediaInfo
private readonly IServerConfigurationManager _config;
private readonly ISubtitleManager _subtitleManager;
private readonly IChapterManager _chapterManager;
+ private readonly ILibraryManager _libraryManager;
public string Name
{
@@ -92,7 +93,7 @@ namespace MediaBrowser.Providers.MediaInfo
return FetchAudioInfo(item, cancellationToken);
}
- public FFProbeProvider(ILogger logger, IIsoManager isoManager, IMediaEncoder mediaEncoder, IItemRepository itemRepo, IBlurayExaminer blurayExaminer, ILocalizationManager localization, IApplicationPaths appPaths, IJsonSerializer json, IEncodingManager encodingManager, IFileSystem fileSystem, IServerConfigurationManager config, ISubtitleManager subtitleManager, IChapterManager chapterManager)
+ public FFProbeProvider(ILogger logger, IIsoManager isoManager, IMediaEncoder mediaEncoder, IItemRepository itemRepo, IBlurayExaminer blurayExaminer, ILocalizationManager localization, IApplicationPaths appPaths, IJsonSerializer json, IEncodingManager encodingManager, IFileSystem fileSystem, IServerConfigurationManager config, ISubtitleManager subtitleManager, IChapterManager chapterManager, ILibraryManager libraryManager)
{
_logger = logger;
_isoManager = isoManager;
@@ -107,6 +108,7 @@ namespace MediaBrowser.Providers.MediaInfo
_config = config;
_subtitleManager = subtitleManager;
_chapterManager = chapterManager;
+ _libraryManager = libraryManager;
}
private readonly Task<ItemUpdateType> _cachedTask = Task.FromResult(ItemUpdateType.None);
@@ -138,8 +140,8 @@ namespace MediaBrowser.Providers.MediaInfo
FetchShortcutInfo(item);
return Task.FromResult(ItemUpdateType.MetadataEdit);
}
-
- var prober = new FFProbeVideoInfo(_logger, _isoManager, _mediaEncoder, _itemRepo, _blurayExaminer, _localization, _appPaths, _json, _encodingManager, _fileSystem, _config, _subtitleManager, _chapterManager);
+
+ var prober = new FFProbeVideoInfo(_logger, _isoManager, _mediaEncoder, _itemRepo, _blurayExaminer, _localization, _appPaths, _json, _encodingManager, _fileSystem, _config, _subtitleManager, _chapterManager, _libraryManager);
return prober.ProbeVideo(item, options, cancellationToken);
}
@@ -157,7 +159,7 @@ namespace MediaBrowser.Providers.MediaInfo
return _cachedTask;
}
- var prober = new FFProbeAudioInfo(_mediaEncoder, _itemRepo, _appPaths, _json);
+ var prober = new FFProbeAudioInfo(_mediaEncoder, _itemRepo, _appPaths, _json, _libraryManager);
return prober.Probe(item, cancellationToken);
}
diff --git a/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs b/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs
index dcf19f0d0..6854ff12b 100644
--- a/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs
+++ b/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs
@@ -34,8 +34,6 @@ namespace MediaBrowser.Providers.Movies
public async Task<MetadataResult<T>> GetMetadata(ItemLookupInfo itemId, CancellationToken cancellationToken)
{
- var result = new MetadataResult<T>();
-
var tmdbId = itemId.GetProviderId(MetadataProviders.Tmdb);
var imdbId = itemId.GetProviderId(MetadataProviders.Imdb);
@@ -56,12 +54,10 @@ namespace MediaBrowser.Providers.Movies
{
cancellationToken.ThrowIfCancellationRequested();
- result.Item = await FetchMovieData(tmdbId, imdbId, itemId.MetadataLanguage, itemId.MetadataCountryCode, cancellationToken).ConfigureAwait(false);
-
- result.HasMetadata = result.Item != null;
+ return await FetchMovieData(tmdbId, imdbId, itemId.MetadataLanguage, itemId.MetadataCountryCode, cancellationToken).ConfigureAwait(false);
}
- return result;
+ return new MetadataResult<T>();
}
/// <summary>
@@ -73,8 +69,13 @@ namespace MediaBrowser.Providers.Movies
/// <param name="preferredCountryCode">The preferred country code.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{`0}.</returns>
- private async Task<T> FetchMovieData(string tmdbId, string imdbId, string language, string preferredCountryCode, CancellationToken cancellationToken)
+ private async Task<MetadataResult<T>> FetchMovieData(string tmdbId, string imdbId, string language, string preferredCountryCode, CancellationToken cancellationToken)
{
+ var item = new MetadataResult<T>
+ {
+ Item = new T()
+ };
+
string dataFilePath = null;
MovieDbProvider.CompleteMovieData movieInfo = null;
@@ -82,7 +83,7 @@ namespace MediaBrowser.Providers.Movies
if (string.IsNullOrEmpty(tmdbId))
{
movieInfo = await MovieDbProvider.Current.FetchMainResult(imdbId, false, language, cancellationToken).ConfigureAwait(false);
- if (movieInfo == null) return null;
+ if (movieInfo == null) return item;
tmdbId = movieInfo.id.ToString(_usCulture);
@@ -96,9 +97,8 @@ namespace MediaBrowser.Providers.Movies
dataFilePath = dataFilePath ?? MovieDbProvider.Current.GetDataFilePath(tmdbId, language);
movieInfo = movieInfo ?? _jsonSerializer.DeserializeFromFile<MovieDbProvider.CompleteMovieData>(dataFilePath);
- var item = new T();
-
ProcessMainInfo(item, preferredCountryCode, movieInfo);
+ item.HasMetadata = true;
return item;
}
@@ -106,11 +106,13 @@ namespace MediaBrowser.Providers.Movies
/// <summary>
/// Processes the main info.
/// </summary>
- /// <param name="movie">The movie.</param>
+ /// <param name="resultItem">The result item.</param>
/// <param name="preferredCountryCode">The preferred country code.</param>
/// <param name="movieData">The movie data.</param>
- private void ProcessMainInfo(T movie, string preferredCountryCode, MovieDbProvider.CompleteMovieData movieData)
+ private void ProcessMainInfo(MetadataResult<T> resultItem, string preferredCountryCode, MovieDbProvider.CompleteMovieData movieData)
{
+ var movie = resultItem.Item;
+
movie.Name = movieData.GetTitle() ?? movie.Name;
var hasOriginalTitle = movie as IHasOriginalTitle;
@@ -235,7 +237,7 @@ namespace MediaBrowser.Providers.Movies
{
foreach (var actor in movieData.casts.cast.OrderBy(a => a.order))
{
- PeopleHelper.AddPerson(movie.People, new PersonInfo { Name = actor.name.Trim(), Role = actor.character, Type = PersonType.Actor, SortOrder = actor.order });
+ PeopleHelper.AddPerson(resultItem.People, new PersonInfo { Name = actor.name.Trim(), Role = actor.character, Type = PersonType.Actor, SortOrder = actor.order });
}
}
@@ -244,7 +246,7 @@ namespace MediaBrowser.Providers.Movies
{
foreach (var person in movieData.casts.crew)
{
- PeopleHelper.AddPerson(movie.People, new PersonInfo { Name = person.name.Trim(), Role = person.job, Type = person.department });
+ PeopleHelper.AddPerson(resultItem.People, new PersonInfo { Name = person.name.Trim(), Role = person.job, Type = person.department });
}
}
diff --git a/MediaBrowser.Providers/Movies/MovieMetadataService.cs b/MediaBrowser.Providers/Movies/MovieMetadataService.cs
index f886deb00..e96e89a78 100644
--- a/MediaBrowser.Providers/Movies/MovieMetadataService.cs
+++ b/MediaBrowser.Providers/Movies/MovieMetadataService.cs
@@ -12,28 +12,10 @@ namespace MediaBrowser.Providers.Movies
{
public class MovieMetadataService : MetadataService<Movie, MovieInfo>
{
- public MovieMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public MovieMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(Movie source, Movie target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
- {
- ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
-
- if (replaceData || string.IsNullOrEmpty(target.TmdbCollectionName))
- {
- target.TmdbCollectionName = source.TmdbCollectionName;
- }
- }
-
protected override bool IsFullLocalMetadata(Movie item)
{
if (string.IsNullOrWhiteSpace(item.Overview))
@@ -46,5 +28,18 @@ namespace MediaBrowser.Providers.Movies
}
return base.IsFullLocalMetadata(item);
}
+
+ protected override void MergeData(MetadataResult<Movie> source, MetadataResult<Movie> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ {
+ ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
+
+ var sourceItem = source.Item;
+ var targetItem = target.Item;
+
+ if (replaceData || string.IsNullOrEmpty(targetItem.TmdbCollectionName))
+ {
+ targetItem.TmdbCollectionName = sourceItem.TmdbCollectionName;
+ }
+ }
}
}
diff --git a/MediaBrowser.Providers/Music/AlbumMetadataService.cs b/MediaBrowser.Providers/Music/AlbumMetadataService.cs
index 90248e418..859db37ba 100644
--- a/MediaBrowser.Providers/Music/AlbumMetadataService.cs
+++ b/MediaBrowser.Providers/Music/AlbumMetadataService.cs
@@ -15,28 +15,10 @@ namespace MediaBrowser.Providers.Music
{
public class AlbumMetadataService : MetadataService<MusicAlbum, AlbumInfo>
{
- public AlbumMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public AlbumMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(MusicAlbum source, MusicAlbum target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
- {
- ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
-
- if (replaceData || target.Artists.Count == 0)
- {
- target.Artists = source.Artists;
- }
- }
-
protected override async Task<ItemUpdateType> BeforeSave(MusicAlbum item, bool isFullRefresh, ItemUpdateType currentUpdateType)
{
var updateType = await base.BeforeSave(item, isFullRefresh, currentUpdateType).ConfigureAwait(false);
@@ -171,5 +153,18 @@ namespace MediaBrowser.Providers.Music
return updateType;
}
+
+ protected override void MergeData(MetadataResult<MusicAlbum> source, MetadataResult<MusicAlbum> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ {
+ ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
+
+ var sourceItem = source.Item;
+ var targetItem = target.Item;
+
+ if (replaceData || targetItem.Artists.Count == 0)
+ {
+ targetItem.Artists = sourceItem.Artists;
+ }
+ }
}
}
diff --git a/MediaBrowser.Providers/Music/ArtistMetadataService.cs b/MediaBrowser.Providers/Music/ArtistMetadataService.cs
index 790529371..0032aac62 100644
--- a/MediaBrowser.Providers/Music/ArtistMetadataService.cs
+++ b/MediaBrowser.Providers/Music/ArtistMetadataService.cs
@@ -15,24 +15,8 @@ namespace MediaBrowser.Providers.Music
{
public class ArtistMetadataService : MetadataService<MusicArtist, ArtistInfo>
{
- private readonly ILibraryManager _libraryManager;
-
- public ArtistMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public ArtistMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
- _libraryManager = libraryManager;
- }
-
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(MusicArtist source, MusicArtist target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
- {
- ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
protected override async Task<ItemUpdateType> BeforeSave(MusicArtist item, bool isFullRefresh, ItemUpdateType currentUpdateType)
@@ -46,7 +30,7 @@ namespace MediaBrowser.Providers.Music
var itemFilter = item.GetItemFilter();
var taggedItems = item.IsAccessedByName ?
- _libraryManager.RootFolder.GetRecursiveChildren(i => !i.IsFolder && itemFilter(i)).ToList() :
+ LibraryManager.RootFolder.GetRecursiveChildren(i => !i.IsFolder && itemFilter(i)).ToList() :
item.GetRecursiveChildren(i => i is IHasArtist && !i.IsFolder).ToList();
if (!item.LockedFields.Contains(MetadataFields.Genres))
@@ -67,5 +51,10 @@ namespace MediaBrowser.Providers.Music
return updateType;
}
+
+ protected override void MergeData(MetadataResult<MusicArtist> source, MetadataResult<MusicArtist> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ {
+ ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
+ }
}
}
diff --git a/MediaBrowser.Providers/Music/AudioMetadataService.cs b/MediaBrowser.Providers/Music/AudioMetadataService.cs
index 908913910..b4d50a173 100644
--- a/MediaBrowser.Providers/Music/AudioMetadataService.cs
+++ b/MediaBrowser.Providers/Music/AudioMetadataService.cs
@@ -12,30 +12,25 @@ namespace MediaBrowser.Providers.Music
{
public class AudioMetadataService : MetadataService<Audio, SongInfo>
{
- public AudioMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public AudioMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(Audio source, Audio target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<Audio> source, MetadataResult<Audio> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
- if (replaceData || target.Artists.Count == 0)
+ var sourceItem = source.Item;
+ var targetItem = target.Item;
+
+ if (replaceData || targetItem.Artists.Count == 0)
{
- target.Artists = source.Artists;
+ targetItem.Artists = sourceItem.Artists;
}
- if (replaceData || string.IsNullOrEmpty(target.Album))
+ if (replaceData || string.IsNullOrEmpty(targetItem.Album))
{
- target.Album = source.Album;
+ targetItem.Album = sourceItem.Album;
}
}
}
diff --git a/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs b/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs
index bbb456b2b..0456dbfba 100644
--- a/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs
+++ b/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs
@@ -13,30 +13,25 @@ namespace MediaBrowser.Providers.Music
{
class MusicVideoMetadataService : MetadataService<MusicVideo, MusicVideoInfo>
{
- public MusicVideoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public MusicVideoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(MusicVideo source, MusicVideo target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<MusicVideo> source, MetadataResult<MusicVideo> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
- if (replaceData || string.IsNullOrEmpty(target.Album))
+ var sourceItem = source.Item;
+ var targetItem = target.Item;
+
+ if (replaceData || string.IsNullOrEmpty(targetItem.Album))
{
- target.Album = source.Album;
+ targetItem.Album = sourceItem.Album;
}
- if (replaceData || target.Artists.Count == 0)
+ if (replaceData || targetItem.Artists.Count == 0)
{
- target.Artists = source.Artists.ToList();
+ targetItem.Artists = sourceItem.Artists.ToList();
}
}
}
diff --git a/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs b/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs
index b3c0427bf..107b76609 100644
--- a/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs
+++ b/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs
@@ -12,19 +12,11 @@ namespace MediaBrowser.Providers.MusicGenres
{
public class MusicGenreMetadataService : MetadataService<MusicGenre, ItemLookupInfo>
{
- public MusicGenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public MusicGenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(MusicGenre source, MusicGenre target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<MusicGenre> source, MetadataResult<MusicGenre> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
diff --git a/MediaBrowser.Providers/People/PersonMetadataService.cs b/MediaBrowser.Providers/People/PersonMetadataService.cs
index dff5a7e61..9961ff8dc 100644
--- a/MediaBrowser.Providers/People/PersonMetadataService.cs
+++ b/MediaBrowser.Providers/People/PersonMetadataService.cs
@@ -14,25 +14,20 @@ namespace MediaBrowser.Providers.People
{
public class PersonMetadataService : MetadataService<Person, PersonLookupInfo>
{
- public PersonMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public PersonMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(Person source, Person target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<Person> source, MetadataResult<Person> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
- if (replaceData || string.IsNullOrEmpty(target.PlaceOfBirth))
+ var sourceItem = source.Item;
+ var targetItem = target.Item;
+
+ if (replaceData || string.IsNullOrEmpty(targetItem.PlaceOfBirth))
{
- target.PlaceOfBirth = source.PlaceOfBirth;
+ targetItem.PlaceOfBirth = sourceItem.PlaceOfBirth;
}
}
}
diff --git a/MediaBrowser.Providers/Photos/PhotoAlbumMetadataService.cs b/MediaBrowser.Providers/Photos/PhotoAlbumMetadataService.cs
index 822961d81..1c5d7f1b5 100644
--- a/MediaBrowser.Providers/Photos/PhotoAlbumMetadataService.cs
+++ b/MediaBrowser.Providers/Photos/PhotoAlbumMetadataService.cs
@@ -12,20 +12,11 @@ namespace MediaBrowser.Providers.Photos
{
class PhotoAlbumMetadataService : MetadataService<PhotoAlbum, ItemLookupInfo>
{
- public PhotoAlbumMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager)
- : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public PhotoAlbumMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(PhotoAlbum source, PhotoAlbum target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<PhotoAlbum> source, MetadataResult<PhotoAlbum> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
diff --git a/MediaBrowser.Providers/Photos/PhotoMetadataService.cs b/MediaBrowser.Providers/Photos/PhotoMetadataService.cs
index 5e903bdc3..22a60ea08 100644
--- a/MediaBrowser.Providers/Photos/PhotoMetadataService.cs
+++ b/MediaBrowser.Providers/Photos/PhotoMetadataService.cs
@@ -12,19 +12,11 @@ namespace MediaBrowser.Providers.Photos
{
class PhotoMetadataService : MetadataService<Photo, ItemLookupInfo>
{
- public PhotoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public PhotoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(Photo source, Photo target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<Photo> source, MetadataResult<Photo> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
diff --git a/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs b/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs
index c53a89db7..af4393d18 100644
--- a/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs
+++ b/MediaBrowser.Providers/Playlists/PlaylistMetadataService.cs
@@ -12,31 +12,26 @@ namespace MediaBrowser.Providers.Playlists
{
class PlaylistMetadataService : MetadataService<Playlist, ItemLookupInfo>
{
- public PlaylistMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public PlaylistMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(Playlist source, Playlist target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<Playlist> source, MetadataResult<Playlist> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
- if (replaceData || string.IsNullOrEmpty(target.PlaylistMediaType))
+ var sourceItem = source.Item;
+ var targetItem = target.Item;
+
+ if (replaceData || string.IsNullOrEmpty(targetItem.PlaylistMediaType))
{
- target.PlaylistMediaType = source.PlaylistMediaType;
+ targetItem.PlaylistMediaType = sourceItem.PlaylistMediaType;
}
if (mergeMetadataSettings)
{
- target.LinkedChildren = source.LinkedChildren;
- target.Shares = source.Shares;
+ targetItem.LinkedChildren = sourceItem.LinkedChildren;
+ targetItem.Shares = sourceItem.Shares;
}
}
}
diff --git a/MediaBrowser.Providers/Studios/StudioMetadataService.cs b/MediaBrowser.Providers/Studios/StudioMetadataService.cs
index dcd90ecf6..5b273d8ca 100644
--- a/MediaBrowser.Providers/Studios/StudioMetadataService.cs
+++ b/MediaBrowser.Providers/Studios/StudioMetadataService.cs
@@ -14,18 +14,11 @@ namespace MediaBrowser.Providers.Studios
{
public class StudioMetadataService : MetadataService<Studio, ItemLookupInfo>
{
- public StudioMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public StudioMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- protected override void MergeData(Studio source, Studio target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<Studio> source, MetadataResult<Studio> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
diff --git a/MediaBrowser.Providers/TV/EpisodeMetadataService.cs b/MediaBrowser.Providers/TV/EpisodeMetadataService.cs
index 616db8d86..339967eeb 100644
--- a/MediaBrowser.Providers/TV/EpisodeMetadataService.cs
+++ b/MediaBrowser.Providers/TV/EpisodeMetadataService.cs
@@ -12,55 +12,50 @@ namespace MediaBrowser.Providers.TV
{
public class EpisodeMetadataService : MetadataService<Episode, EpisodeInfo>
{
- public EpisodeMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public EpisodeMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(Episode source, Episode target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<Episode> source, MetadataResult<Episode> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
- if (replaceData || !target.AirsBeforeSeasonNumber.HasValue)
+ var sourceItem = source.Item;
+ var targetItem = target.Item;
+
+ if (replaceData || !targetItem.AirsBeforeSeasonNumber.HasValue)
{
- target.AirsBeforeSeasonNumber = source.AirsBeforeSeasonNumber;
+ targetItem.AirsBeforeSeasonNumber = sourceItem.AirsBeforeSeasonNumber;
}
- if (replaceData || !target.AirsAfterSeasonNumber.HasValue)
+ if (replaceData || !targetItem.AirsAfterSeasonNumber.HasValue)
{
- target.AirsAfterSeasonNumber = source.AirsAfterSeasonNumber;
+ targetItem.AirsAfterSeasonNumber = sourceItem.AirsAfterSeasonNumber;
}
- if (replaceData || !target.AirsBeforeEpisodeNumber.HasValue)
+ if (replaceData || !targetItem.AirsBeforeEpisodeNumber.HasValue)
{
- target.AirsBeforeEpisodeNumber = source.AirsBeforeEpisodeNumber;
+ targetItem.AirsBeforeEpisodeNumber = sourceItem.AirsBeforeEpisodeNumber;
}
- if (replaceData || !target.DvdSeasonNumber.HasValue)
+ if (replaceData || !targetItem.DvdSeasonNumber.HasValue)
{
- target.DvdSeasonNumber = source.DvdSeasonNumber;
+ targetItem.DvdSeasonNumber = sourceItem.DvdSeasonNumber;
}
- if (replaceData || !target.DvdEpisodeNumber.HasValue)
+ if (replaceData || !targetItem.DvdEpisodeNumber.HasValue)
{
- target.DvdEpisodeNumber = source.DvdEpisodeNumber;
+ targetItem.DvdEpisodeNumber = sourceItem.DvdEpisodeNumber;
}
- if (replaceData || !target.AbsoluteEpisodeNumber.HasValue)
+ if (replaceData || !targetItem.AbsoluteEpisodeNumber.HasValue)
{
- target.AbsoluteEpisodeNumber = source.AbsoluteEpisodeNumber;
+ targetItem.AbsoluteEpisodeNumber = sourceItem.AbsoluteEpisodeNumber;
}
- if (replaceData || !target.IndexNumberEnd.HasValue)
+ if (replaceData || !targetItem.IndexNumberEnd.HasValue)
{
- target.IndexNumberEnd = source.IndexNumberEnd;
+ targetItem.IndexNumberEnd = sourceItem.IndexNumberEnd;
}
}
}
diff --git a/MediaBrowser.Providers/TV/SeasonMetadataService.cs b/MediaBrowser.Providers/TV/SeasonMetadataService.cs
index 8955b224e..800960c09 100644
--- a/MediaBrowser.Providers/TV/SeasonMetadataService.cs
+++ b/MediaBrowser.Providers/TV/SeasonMetadataService.cs
@@ -14,23 +14,10 @@ namespace MediaBrowser.Providers.TV
{
public class SeasonMetadataService : MetadataService<Season, SeasonInfo>
{
- public SeasonMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public SeasonMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(Season source, Season target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
- {
- ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
- }
-
protected override async Task<ItemUpdateType> BeforeSave(Season item, bool isFullRefresh, ItemUpdateType currentUpdateType)
{
var updateType = await base.BeforeSave(item, isFullRefresh, currentUpdateType).ConfigureAwait(false);
@@ -46,5 +33,10 @@ namespace MediaBrowser.Providers.TV
return updateType;
}
+
+ protected override void MergeData(MetadataResult<Season> source, MetadataResult<Season> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ {
+ ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
+ }
}
}
diff --git a/MediaBrowser.Providers/TV/SeriesMetadataService.cs b/MediaBrowser.Providers/TV/SeriesMetadataService.cs
index eeff03703..779e3c39d 100644
--- a/MediaBrowser.Providers/TV/SeriesMetadataService.cs
+++ b/MediaBrowser.Providers/TV/SeriesMetadataService.cs
@@ -16,76 +16,68 @@ namespace MediaBrowser.Providers.TV
public class SeriesMetadataService : MetadataService<Series, SeriesInfo>
{
private readonly ILocalizationManager _localization;
- private readonly ILibraryManager _libraryManager;
- public SeriesMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILocalizationManager localization, ILibraryManager libraryManager)
- : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public SeriesMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager, ILocalizationManager localization) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
_localization = localization;
- _libraryManager = libraryManager;
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(Series source, Series target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override async Task AfterMetadataRefresh(Series item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken)
{
- ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
+ await base.AfterMetadataRefresh(item, refreshOptions, cancellationToken).ConfigureAwait(false);
- if (replaceData || target.SeasonCount == 0)
+ if (refreshOptions.IsPostRecursiveRefresh)
{
- target.SeasonCount = source.SeasonCount;
+ var provider = new DummySeasonProvider(ServerConfigurationManager, Logger, _localization, LibraryManager);
+
+ await provider.Run(item, CancellationToken.None).ConfigureAwait(false);
}
+ }
- if (replaceData || string.IsNullOrEmpty(target.AirTime))
+ protected override bool IsFullLocalMetadata(Series item)
+ {
+ if (string.IsNullOrWhiteSpace(item.Overview))
{
- target.AirTime = source.AirTime;
+ return false;
}
-
- if (replaceData || !target.Status.HasValue)
+ if (!item.ProductionYear.HasValue)
{
- target.Status = source.Status;
+ return false;
}
+ return base.IsFullLocalMetadata(item);
+ }
+
+ protected override void MergeData(MetadataResult<Series> source, MetadataResult<Series> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ {
+ ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
+
+ var sourceItem = source.Item;
+ var targetItem = target.Item;
- if (replaceData || target.AirDays == null || target.AirDays.Count == 0)
+ if (replaceData || targetItem.SeasonCount == 0)
{
- target.AirDays = source.AirDays;
+ targetItem.SeasonCount = sourceItem.SeasonCount;
}
- if (mergeMetadataSettings)
+ if (replaceData || string.IsNullOrEmpty(targetItem.AirTime))
{
- target.DisplaySpecialsWithSeasons = source.DisplaySpecialsWithSeasons;
+ targetItem.AirTime = sourceItem.AirTime;
}
- }
-
- protected override async Task AfterMetadataRefresh(Series item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken)
- {
- await base.AfterMetadataRefresh(item, refreshOptions, cancellationToken).ConfigureAwait(false);
- if (refreshOptions.IsPostRecursiveRefresh)
+ if (replaceData || !targetItem.Status.HasValue)
{
- var provider = new DummySeasonProvider(ServerConfigurationManager, Logger, _localization, _libraryManager);
-
- await provider.Run(item, CancellationToken.None).ConfigureAwait(false);
+ targetItem.Status = sourceItem.Status;
}
- }
- protected override bool IsFullLocalMetadata(Series item)
- {
- if (string.IsNullOrWhiteSpace(item.Overview))
+ if (replaceData || targetItem.AirDays == null || targetItem.AirDays.Count == 0)
{
- return false;
+ targetItem.AirDays = sourceItem.AirDays;
}
- if (!item.ProductionYear.HasValue)
+
+ if (mergeMetadataSettings)
{
- return false;
+ targetItem.DisplaySpecialsWithSeasons = sourceItem.DisplaySpecialsWithSeasons;
}
- return base.IsFullLocalMetadata(item);
}
}
}
diff --git a/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs b/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs
index b8ef6e5ae..f36de88c9 100644
--- a/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs
+++ b/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs
@@ -56,10 +56,12 @@ namespace MediaBrowser.Providers.TV
try
{
- var item = FetchEpisodeData(searchInfo, identity, seriesDataPath, searchInfo.SeriesProviderIds, cancellationToken);
+ var metadataResult = FetchEpisodeData(searchInfo, identity, seriesDataPath, searchInfo.SeriesProviderIds, cancellationToken);
- if (item != null)
+ if (metadataResult.HasMetadata)
{
+ var item = metadataResult.Item;
+
list.Add(new RemoteSearchResult
{
IndexNumber = item.IndexNumber,
@@ -103,9 +105,7 @@ namespace MediaBrowser.Providers.TV
try
{
- result.Item = FetchEpisodeData(searchInfo, identity, seriesDataPath, searchInfo.SeriesProviderIds,
- cancellationToken);
- result.HasMetadata = result.Item != null;
+ result = FetchEpisodeData(searchInfo, identity, seriesDataPath, searchInfo.SeriesProviderIds, cancellationToken);
}
catch (FileNotFoundException)
{
@@ -231,21 +231,23 @@ namespace MediaBrowser.Providers.TV
/// <param name="seriesProviderIds">The series provider ids.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{System.Boolean}.</returns>
- private Episode FetchEpisodeData(EpisodeInfo id, EpisodeIdentity identity, string seriesDataPath, Dictionary<string, string> seriesProviderIds, CancellationToken cancellationToken)
+ private MetadataResult<Episode> FetchEpisodeData(EpisodeInfo id, EpisodeIdentity identity, string seriesDataPath, Dictionary<string, string> seriesProviderIds, CancellationToken cancellationToken)
{
var episodeNumber = identity.IndexNumber;
var seasonOffset = TvdbSeriesProvider.GetSeriesOffset(seriesProviderIds) ?? 0;
var seasonNumber = identity.SeasonIndex + seasonOffset;
string file;
- var success = false;
var usingAbsoluteData = false;
- var episode = new Episode
+ var result = new MetadataResult<Episode>()
{
- IndexNumber = id.IndexNumber,
- ParentIndexNumber = id.ParentIndexNumber,
- IndexNumberEnd = id.IndexNumberEnd
+ Item = new Episode
+ {
+ IndexNumber = id.IndexNumber,
+ ParentIndexNumber = id.ParentIndexNumber,
+ IndexNumberEnd = id.IndexNumberEnd
+ }
};
try
@@ -253,9 +255,9 @@ namespace MediaBrowser.Providers.TV
if (seasonNumber != null)
{
file = Path.Combine(seriesDataPath, string.Format("episode-{0}-{1}.xml", seasonNumber.Value, episodeNumber));
- FetchMainEpisodeInfo(episode, file, cancellationToken);
+ FetchMainEpisodeInfo(result, file, cancellationToken);
- success = true;
+ result.HasMetadata = true;
}
}
catch (FileNotFoundException)
@@ -267,11 +269,12 @@ namespace MediaBrowser.Providers.TV
}
}
- if (!success)
+ if (!result.HasMetadata)
{
file = Path.Combine(seriesDataPath, string.Format("episode-abs-{0}.xml", episodeNumber));
- FetchMainEpisodeInfo(episode, file, cancellationToken);
+ FetchMainEpisodeInfo(result, file, cancellationToken);
+ result.HasMetadata = true;
usingAbsoluteData = true;
}
@@ -291,7 +294,7 @@ namespace MediaBrowser.Providers.TV
try
{
- FetchAdditionalPartInfo(episode, file, cancellationToken);
+ FetchAdditionalPartInfo(result, file, cancellationToken);
}
catch (FileNotFoundException)
{
@@ -305,13 +308,15 @@ namespace MediaBrowser.Providers.TV
episodeNumber++;
}
- return episode;
+ return result;
}
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
- private void FetchMainEpisodeInfo(Episode item, string xmlFile, CancellationToken cancellationToken)
+ private void FetchMainEpisodeInfo(MetadataResult<Episode> result, string xmlFile, CancellationToken cancellationToken)
{
+ var item = result.Item;
+
using (var streamReader = new StreamReader(xmlFile, Encoding.UTF8))
{
// Use XmlReader for best performance
@@ -546,7 +551,7 @@ namespace MediaBrowser.Providers.TV
{
if (!item.LockedFields.Contains(MetadataFields.Cast))
{
- AddPeople(item, val, PersonType.Director);
+ AddPeople(result, val, PersonType.Director);
}
}
@@ -560,7 +565,7 @@ namespace MediaBrowser.Providers.TV
{
if (!item.LockedFields.Contains(MetadataFields.Cast))
{
- AddGuestStars(item, val);
+ AddGuestStars(result, val);
}
}
@@ -574,7 +579,7 @@ namespace MediaBrowser.Providers.TV
{
if (!item.LockedFields.Contains(MetadataFields.Cast))
{
- AddPeople(item, val, PersonType.Writer);
+ AddPeople(result, val, PersonType.Writer);
}
}
@@ -591,18 +596,19 @@ namespace MediaBrowser.Providers.TV
}
}
- private void AddPeople(BaseItem item, string val, string personType)
+ private void AddPeople<T>(MetadataResult<T> result, string val, string personType)
{
// Sometimes tvdb actors have leading spaces
foreach (var person in val.Split(new[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries)
.Where(i => !string.IsNullOrWhiteSpace(i))
.Select(str => new PersonInfo { Type = personType, Name = str.Trim() }))
{
- PeopleHelper.AddPerson(item.People, person);
+ PeopleHelper.AddPerson(result.People, person);
}
}
- private void AddGuestStars(BaseItem item, string val)
+ private void AddGuestStars<T>(MetadataResult<T> result, string val)
+ where T : BaseItem
{
// Sometimes tvdb actors have leading spaces
//Regex Info:
@@ -626,13 +632,15 @@ namespace MediaBrowser.Providers.TV
{
if (!string.IsNullOrWhiteSpace(person.Name))
{
- PeopleHelper.AddPerson(item.People, person);
+ PeopleHelper.AddPerson(result.People, person);
}
}
}
- private void FetchAdditionalPartInfo(Episode item, string xmlFile, CancellationToken cancellationToken)
+ private void FetchAdditionalPartInfo(MetadataResult<Episode> result, string xmlFile, CancellationToken cancellationToken)
{
+ var item = result.Item;
+
using (var streamReader = new StreamReader(xmlFile, Encoding.UTF8))
{
// Use XmlReader for best performance
@@ -688,7 +696,7 @@ namespace MediaBrowser.Providers.TV
{
if (!item.LockedFields.Contains(MetadataFields.Cast))
{
- AddPeople(item, val, PersonType.Director);
+ AddPeople(result, val, PersonType.Director);
}
}
@@ -702,7 +710,7 @@ namespace MediaBrowser.Providers.TV
{
if (!item.LockedFields.Contains(MetadataFields.Cast))
{
- AddGuestStars(item, val);
+ AddGuestStars(result, val);
}
}
@@ -716,7 +724,7 @@ namespace MediaBrowser.Providers.TV
{
if (!item.LockedFields.Contains(MetadataFields.Cast))
{
- AddPeople(item, val, PersonType.Writer);
+ AddPeople(result, val, PersonType.Writer);
}
}
diff --git a/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs b/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs
index e7ac830d1..4c93bd57c 100644
--- a/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs
+++ b/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs
@@ -121,7 +121,7 @@ namespace MediaBrowser.Providers.TV
result.Item = new Series();
result.HasMetadata = true;
- FetchSeriesData(result.Item, seriesId, cancellationToken);
+ FetchSeriesData(result, seriesId, cancellationToken);
await FindAnimeSeriesIndex(result.Item, itemId).ConfigureAwait(false);
}
@@ -159,12 +159,14 @@ namespace MediaBrowser.Providers.TV
/// <summary>
/// Fetches the series data.
/// </summary>
- /// <param name="series">The series.</param>
+ /// <param name="result">The result.</param>
/// <param name="seriesId">The series id.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{System.Boolean}.</returns>
- private void FetchSeriesData(Series series, string seriesId, CancellationToken cancellationToken)
+ private void FetchSeriesData(MetadataResult<Series> result, string seriesId, CancellationToken cancellationToken)
{
+ var series = result.Item;
+
series.SetProviderId(MetadataProviders.Tvdb, seriesId);
var seriesDataPath = GetSeriesDataPath(_config.ApplicationPaths, seriesId);
@@ -178,7 +180,7 @@ namespace MediaBrowser.Providers.TV
cancellationToken.ThrowIfCancellationRequested();
- FetchActors(series, actorsXmlPath);
+ FetchActors(result, actorsXmlPath);
}
/// <summary>
@@ -618,9 +620,9 @@ namespace MediaBrowser.Providers.TV
/// <summary>
/// Fetches the actors.
/// </summary>
- /// <param name="series">The series.</param>
+ /// <param name="result">The result.</param>
/// <param name="actorsXmlPath">The actors XML path.</param>
- private void FetchActors(Series series, string actorsXmlPath)
+ private void FetchActors(MetadataResult<Series> result, string actorsXmlPath)
{
var settings = new XmlReaderSettings
{
@@ -648,7 +650,7 @@ namespace MediaBrowser.Providers.TV
{
using (var subtree = reader.ReadSubtree())
{
- FetchDataFromActorNode(series, subtree);
+ FetchDataFromActorNode(result, subtree);
}
break;
}
@@ -665,9 +667,9 @@ namespace MediaBrowser.Providers.TV
/// <summary>
/// Fetches the data from actor node.
/// </summary>
- /// <param name="series">The series.</param>
+ /// <param name="result">The result.</param>
/// <param name="reader">The reader.</param>
- private void FetchDataFromActorNode(Series series, XmlReader reader)
+ private void FetchDataFromActorNode(MetadataResult<Series> result, XmlReader reader)
{
reader.MoveToContent();
@@ -719,7 +721,7 @@ namespace MediaBrowser.Providers.TV
if (!string.IsNullOrWhiteSpace(personInfo.Name))
{
- PeopleHelper.AddPerson(series.People, personInfo);
+ PeopleHelper.AddPerson(result.People, personInfo);
}
}
diff --git a/MediaBrowser.Providers/Users/UserMetadataService.cs b/MediaBrowser.Providers/Users/UserMetadataService.cs
index 4062c5b9f..84f2b0380 100644
--- a/MediaBrowser.Providers/Users/UserMetadataService.cs
+++ b/MediaBrowser.Providers/Users/UserMetadataService.cs
@@ -14,19 +14,11 @@ namespace MediaBrowser.Providers.Users
{
public class UserMetadataService : MetadataService<User, ItemLookupInfo>
{
- public UserMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public UserMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(User source, User target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<User> source, MetadataResult<User> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
diff --git a/MediaBrowser.Providers/Videos/VideoMetadataService.cs b/MediaBrowser.Providers/Videos/VideoMetadataService.cs
index 3cf225233..68c36a84c 100644
--- a/MediaBrowser.Providers/Videos/VideoMetadataService.cs
+++ b/MediaBrowser.Providers/Videos/VideoMetadataService.cs
@@ -12,23 +12,10 @@ namespace MediaBrowser.Providers.Videos
{
public class VideoMetadataService : MetadataService<Video, ItemLookupInfo>
{
- public VideoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public VideoMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(Video source, Video target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
- {
- ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
- }
-
public override int Order
{
get
@@ -37,5 +24,10 @@ namespace MediaBrowser.Providers.Videos
return 10;
}
}
+
+ protected override void MergeData(MetadataResult<Video> source, MetadataResult<Video> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ {
+ ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
+ }
}
}
diff --git a/MediaBrowser.Providers/Years/YearMetadataService.cs b/MediaBrowser.Providers/Years/YearMetadataService.cs
index 057434db0..3e6db7629 100644
--- a/MediaBrowser.Providers/Years/YearMetadataService.cs
+++ b/MediaBrowser.Providers/Years/YearMetadataService.cs
@@ -14,19 +14,11 @@ namespace MediaBrowser.Providers.Years
{
public class YearMetadataService : MetadataService<Year, ItemLookupInfo>
{
- public YearMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager)
+ public YearMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager) : base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem, userDataManager, libraryManager)
{
}
- /// <summary>
- /// Merges the specified source.
- /// </summary>
- /// <param name="source">The source.</param>
- /// <param name="target">The target.</param>
- /// <param name="lockedFields">The locked fields.</param>
- /// <param name="replaceData">if set to <c>true</c> [replace data].</param>
- /// <param name="mergeMetadataSettings">if set to <c>true</c> [merge metadata settings].</param>
- protected override void MergeData(Year source, Year target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
+ protected override void MergeData(MetadataResult<Year> source, MetadataResult<Year> target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings)
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
index 351703e0c..c5171e323 100644
--- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
@@ -2060,7 +2060,7 @@ namespace MediaBrowser.Server.Implementations.Library
public List<PersonInfo> GetPeople(BaseItem item)
{
- return item.People ?? new List<PersonInfo>();
+ return item.People ?? ItemRepository.GetPeople(item.Id);
}
public List<PersonInfo> GetAllPeople()
@@ -2072,10 +2072,15 @@ namespace MediaBrowser.Server.Implementations.Library
.ToList();
}
- public Task UpdatePeople(BaseItem item, List<PersonInfo> people)
+ public async Task UpdatePeople(BaseItem item, List<PersonInfo> people)
{
- item.People = people;
- return item.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None);
+ await ItemRepository.UpdatePeople(item.Id, people).ConfigureAwait(false);
+
+ if (item.People != null)
+ {
+ item.People = null;
+ await item.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
+ }
}
}
}
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
index c02540a90..ff689ac7f 100644
--- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
+++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
@@ -65,6 +65,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
private IDbCommand _saveChildrenCommand;
private IDbCommand _deleteItemCommand;
+ private IDbCommand _deletePeopleCommand;
+ private IDbCommand _savePersonCommand;
/// <summary>
/// Initializes a new instance of the <see cref="SqliteItemRepository"/> class.
/// </summary>
@@ -121,6 +123,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
"create table if not exists ChildrenIds (ParentId GUID, ItemId GUID, PRIMARY KEY (ParentId, ItemId))",
"create index if not exists idx_ChildrenIds on ChildrenIds(ParentId,ItemId)",
+ "create table if not exists People (ItemId GUID, Name TEXT NOT NULL, Role TEXT, PersonType TEXT, SortOrder int, ListOrder int)",
+
//pragmas
"pragma temp_store = memory",
@@ -208,6 +212,19 @@ namespace MediaBrowser.Server.Implementations.Persistence
_saveChildrenCommand.CommandText = "replace into ChildrenIds (ParentId, ItemId) values (@ParentId, @ItemId)";
_saveChildrenCommand.Parameters.Add(_saveChildrenCommand, "@ParentId");
_saveChildrenCommand.Parameters.Add(_saveChildrenCommand, "@ItemId");
+
+ _deletePeopleCommand = _connection.CreateCommand();
+ _deletePeopleCommand.CommandText = "delete from People where ItemId=@Id";
+ _deletePeopleCommand.Parameters.Add(_deletePeopleCommand, "@Id");
+
+ _savePersonCommand = _connection.CreateCommand();
+ _savePersonCommand.CommandText = "insert into People (ItemId, Name, Role, PersonType, SortOrder, ListOrder) values (@ItemId, @Name, @Role, @PersonType, @SortOrder, @ListOrder)";
+ _savePersonCommand.Parameters.Add(_savePersonCommand, "@ItemId");
+ _savePersonCommand.Parameters.Add(_savePersonCommand, "@Name");
+ _savePersonCommand.Parameters.Add(_savePersonCommand, "@Role");
+ _savePersonCommand.Parameters.Add(_savePersonCommand, "@PersonType");
+ _savePersonCommand.Parameters.Add(_savePersonCommand, "@SortOrder");
+ _savePersonCommand.Parameters.Add(_savePersonCommand, "@ListOrder");
}
/// <summary>
@@ -1091,5 +1108,141 @@ namespace MediaBrowser.Server.Implementations.Persistence
CheckDisposed();
return _mediaStreamsRepository.SaveMediaStreams(id, streams, cancellationToken);
}
+
+
+ public List<PersonInfo> GetPeople(Guid itemId)
+ {
+ if (itemId == Guid.Empty)
+ {
+ throw new ArgumentNullException("itemId");
+ }
+
+ CheckDisposed();
+
+ using (var cmd = _connection.CreateCommand())
+ {
+ cmd.CommandText = "select ItemId, Name, Role, PersonType, SortOrder from People where ItemId=@ItemId order by ListOrder";
+
+ cmd.Parameters.Add(cmd, "@ItemId", DbType.Guid).Value = itemId;
+
+ var list = new List<PersonInfo>();
+
+ using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult))
+ {
+ while (reader.Read())
+ {
+ list.Add(GetPerson(reader));
+ }
+ }
+
+ return list;
+ }
+ }
+
+ public async Task UpdatePeople(Guid itemId, List<PersonInfo> people)
+ {
+ if (itemId == Guid.Empty)
+ {
+ throw new ArgumentNullException("itemId");
+ }
+
+ if (people == null)
+ {
+ throw new ArgumentNullException("people");
+ }
+
+ CheckDisposed();
+
+ var cancellationToken = CancellationToken.None;
+
+ await _writeLock.WaitAsync(cancellationToken).ConfigureAwait(false);
+
+ IDbTransaction transaction = null;
+
+ try
+ {
+ transaction = _connection.BeginTransaction();
+
+ // First delete
+ _deletePeopleCommand.GetParameter(0).Value = itemId;
+ _deletePeopleCommand.Transaction = transaction;
+
+ _deletePeopleCommand.ExecuteNonQuery();
+
+ var listIndex = 0;
+
+ foreach (var person in people)
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+
+ _savePersonCommand.GetParameter(0).Value = itemId;
+ _savePersonCommand.GetParameter(1).Value = person.Name;
+ _savePersonCommand.GetParameter(2).Value = person.Role;
+ _savePersonCommand.GetParameter(3).Value = person.Type;
+ _savePersonCommand.GetParameter(4).Value = person.SortOrder;
+ _savePersonCommand.GetParameter(5).Value = listIndex;
+
+ _savePersonCommand.Transaction = transaction;
+
+ _savePersonCommand.ExecuteNonQuery();
+ listIndex++;
+ }
+
+ transaction.Commit();
+ }
+ catch (OperationCanceledException)
+ {
+ if (transaction != null)
+ {
+ transaction.Rollback();
+ }
+
+ throw;
+ }
+ catch (Exception e)
+ {
+ _logger.ErrorException("Failed to save people:", e);
+
+ if (transaction != null)
+ {
+ transaction.Rollback();
+ }
+
+ throw;
+ }
+ finally
+ {
+ if (transaction != null)
+ {
+ transaction.Dispose();
+ }
+
+ _writeLock.Release();
+ }
+ }
+
+ private PersonInfo GetPerson(IDataReader reader)
+ {
+ var item = new PersonInfo();
+
+ item.Name = reader.GetString(1);
+
+ if (!reader.IsDBNull(2))
+ {
+ item.Role = reader.GetString(2);
+ }
+
+ if (!reader.IsDBNull(3))
+ {
+ item.Type = reader.GetString(3);
+ }
+
+ if (!reader.IsDBNull(4))
+ {
+ item.SortOrder = reader.GetInt32(4);
+ }
+
+ return item;
+ }
}
} \ No newline at end of file
diff --git a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs
index c99cf29e8..ad514492d 100644
--- a/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs
+++ b/MediaBrowser.XbmcMetadata/Parsers/BaseNfoParser.cs
@@ -1,4 +1,5 @@
using MediaBrowser.Common.Configuration;
+using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Extensions;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Entities;
@@ -42,12 +43,11 @@ namespace MediaBrowser.XbmcMetadata.Parsers
/// Fetches metadata for an item from one xml file
/// </summary>
/// <param name="item">The item.</param>
- /// <param name="userDataList">The user data list.</param>
/// <param name="metadataFile">The metadata file.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <exception cref="System.ArgumentNullException">
/// </exception>
- public void Fetch(T item, List<UserItemData> userDataList, string metadataFile, CancellationToken cancellationToken)
+ public void Fetch(LocalMetadataResult<T> item, string metadataFile, CancellationToken cancellationToken)
{
if (item == null)
{
@@ -67,7 +67,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
ValidationType = ValidationType.None
};
- Fetch(item, userDataList, metadataFile, settings, cancellationToken);
+ Fetch(item, metadataFile, settings, cancellationToken);
}
protected virtual bool SupportsUrlAfterClosingXmlTag
@@ -79,11 +79,10 @@ namespace MediaBrowser.XbmcMetadata.Parsers
/// Fetches the specified item.
/// </summary>
/// <param name="item">The item.</param>
- /// <param name="userDataList">The user data list.</param>
/// <param name="metadataFile">The metadata file.</param>
/// <param name="settings">The settings.</param>
/// <param name="cancellationToken">The cancellation token.</param>
- private void Fetch(T item, List<UserItemData> userDataList, string metadataFile, XmlReaderSettings settings, CancellationToken cancellationToken)
+ private void Fetch(LocalMetadataResult<T> item, string metadataFile, XmlReaderSettings settings, CancellationToken cancellationToken)
{
if (!SupportsUrlAfterClosingXmlTag)
{
@@ -101,7 +100,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
if (reader.NodeType == XmlNodeType.Element)
{
- FetchDataFromXmlNode(reader, item, userDataList);
+ FetchDataFromXmlNode(reader, item);
}
}
}
@@ -122,7 +121,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
{
var endingXml = xml.Substring(index);
- ParseProviderLinks(item, endingXml);
+ ParseProviderLinks(item.Item, endingXml);
// If the file is just an imdb url, don't go any further
if (index == 0)
@@ -136,7 +135,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
{
// If the file is just an Imdb url, handle that
- ParseProviderLinks(item, xml);
+ ParseProviderLinks(item.Item, xml);
return;
}
@@ -160,7 +159,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
if (reader.NodeType == XmlNodeType.Element)
{
- FetchDataFromXmlNode(reader, item, userDataList);
+ FetchDataFromXmlNode(reader, item);
}
}
}
@@ -183,8 +182,10 @@ namespace MediaBrowser.XbmcMetadata.Parsers
// http://www.themoviedb.org/movie/36557
}
- protected virtual void FetchDataFromXmlNode(XmlReader reader, T item, List<UserItemData> userDataList)
+ protected virtual void FetchDataFromXmlNode(XmlReader reader, LocalMetadataResult<T> itemResult)
{
+ var item = itemResult.Item;
+
var userDataUserId = _config.GetNfoConfiguration().UserId;
switch (reader.Name)
@@ -573,7 +574,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
{
continue;
}
- PeopleHelper.AddPerson(item.People, p);
+ PeopleHelper.AddPerson(itemResult.People, p);
}
break;
}
@@ -592,7 +593,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
{
continue;
}
- PeopleHelper.AddPerson(item.People, p);
+ PeopleHelper.AddPerson(itemResult.People, p);
}
}
break;
@@ -606,7 +607,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
{
continue;
}
- PeopleHelper.AddPerson(item.People, p);
+ PeopleHelper.AddPerson(itemResult.People, p);
}
break;
}
@@ -617,7 +618,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
{
var person = GetPersonFromXmlNode(subtree);
- PeopleHelper.AddPerson(item.People, person);
+ PeopleHelper.AddPerson(itemResult.People, person);
}
break;
}
@@ -931,7 +932,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
{
if (!string.IsNullOrWhiteSpace(userDataUserId))
{
- var userData = GetOrAdd(userDataList, userDataUserId);
+ var userData = GetOrAdd(itemResult.UserDataLIst, userDataUserId);
userData.Played = parsedValue;
}
@@ -951,7 +952,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
{
if (!string.IsNullOrWhiteSpace(userDataUserId))
{
- var userData = GetOrAdd(userDataList, userDataUserId);
+ var userData = GetOrAdd(itemResult.UserDataLIst, userDataUserId);
userData.PlayCount = parsedValue;
@@ -976,7 +977,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
{
if (!string.IsNullOrWhiteSpace(userDataUserId))
{
- var userData = GetOrAdd(userDataList, userDataUserId);
+ var userData = GetOrAdd(itemResult.UserDataLIst, userDataUserId);
userData.LastPlayedDate = parsedValue;
}
@@ -991,7 +992,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
{
if (!string.IsNullOrWhiteSpace(userDataUserId))
{
- var userData = GetOrAdd(userDataList, userDataUserId);
+ var userData = GetOrAdd(itemResult.UserDataLIst, userDataUserId);
FetchFromResumeNode(subtree, item, userData);
}
@@ -1010,7 +1011,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
{
if (!string.IsNullOrWhiteSpace(userDataUserId))
{
- var userData = GetOrAdd(userDataList, userDataUserId);
+ var userData = GetOrAdd(itemResult.UserDataLIst, userDataUserId);
userData.IsFavorite = parsedValue;
}
@@ -1030,7 +1031,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
{
if (!string.IsNullOrWhiteSpace(userDataUserId))
{
- var userData = GetOrAdd(userDataList, userDataUserId);
+ var userData = GetOrAdd(itemResult.UserDataLIst, userDataUserId);
userData.Rating = parsedValue;
}
diff --git a/MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs
index 42a60276b..355f19de7 100644
--- a/MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs
+++ b/MediaBrowser.XbmcMetadata/Parsers/EpisodeNfoParser.cs
@@ -2,7 +2,6 @@
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using System;
using System.Collections.Generic;
@@ -14,26 +13,16 @@ namespace MediaBrowser.XbmcMetadata.Parsers
{
public class EpisodeNfoParser : BaseNfoParser<Episode>
{
- private List<LocalImageInfo> _imagesFound;
- private List<ChapterInfo> _chaptersFound;
- private string _xmlPath;
-
public EpisodeNfoParser(ILogger logger, IConfigurationManager config) : base(logger, config)
{
}
- public void Fetch(Episode item,
- List<UserItemData> userDataList,
+ public void Fetch(LocalMetadataResult<Episode> item,
List<LocalImageInfo> images,
- List<ChapterInfo> chapters,
string metadataFile,
CancellationToken cancellationToken)
{
- _imagesFound = images;
- _chaptersFound = chapters;
- _xmlPath = metadataFile;
-
- Fetch(item, userDataList, metadataFile, cancellationToken);
+ Fetch(item, metadataFile, cancellationToken);
}
private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
@@ -42,17 +31,13 @@ namespace MediaBrowser.XbmcMetadata.Parsers
/// Fetches the data from XML node.
/// </summary>
/// <param name="reader">The reader.</param>
- /// <param name="item">The item.</param>
- /// <param name="userDataList">The user data list.</param>
- protected override void FetchDataFromXmlNode(XmlReader reader, Episode item, List<UserItemData> userDataList)
+ /// <param name="itemResult">The item result.</param>
+ protected override void FetchDataFromXmlNode(XmlReader reader, LocalMetadataResult<Episode> itemResult)
{
+ var item = itemResult.Item;
+
switch (reader.Name)
{
- //case "Chapters":
-
- // _chaptersFound.AddRange(FetchChaptersFromXmlNode(item, reader.ReadSubtree()));
- // break;
-
case "season":
{
var number = reader.ReadElementContentAsString();
@@ -206,7 +191,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
default:
- base.FetchDataFromXmlNode(reader, item, userDataList);
+ base.FetchDataFromXmlNode(reader, itemResult);
break;
}
}
diff --git a/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs
index 2a275320f..ab4619875 100644
--- a/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs
+++ b/MediaBrowser.XbmcMetadata/Parsers/MovieNfoParser.cs
@@ -1,33 +1,20 @@
using MediaBrowser.Common.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
+using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using System.Collections.Generic;
-using System.Threading;
using System.Xml;
namespace MediaBrowser.XbmcMetadata.Parsers
{
class MovieNfoParser : BaseNfoParser<Video>
{
- private List<ChapterInfo> _chaptersFound;
-
public MovieNfoParser(ILogger logger, IConfigurationManager config) : base(logger, config)
{
}
- public void Fetch(Video item,
- List<UserItemData> userDataList,
- List<ChapterInfo> chapters,
- string metadataFile,
- CancellationToken cancellationToken)
- {
- _chaptersFound = chapters;
-
- Fetch(item, userDataList, metadataFile, cancellationToken);
- }
-
protected override bool SupportsUrlAfterClosingXmlTag
{
get
@@ -40,10 +27,11 @@ namespace MediaBrowser.XbmcMetadata.Parsers
/// Fetches the data from XML node.
/// </summary>
/// <param name="reader">The reader.</param>
- /// <param name="item">The item.</param>
- /// <param name="userDataList">The user data list.</param>
- protected override void FetchDataFromXmlNode(XmlReader reader, Video item, List<UserItemData> userDataList)
+ /// <param name="itemResult">The item result.</param>
+ protected override void FetchDataFromXmlNode(XmlReader reader, LocalMetadataResult<Video> itemResult)
{
+ var item = itemResult.Item;
+
switch (reader.Name)
{
case "id":
@@ -93,13 +81,8 @@ namespace MediaBrowser.XbmcMetadata.Parsers
break;
}
- //case "chapter":
-
- // _chaptersFound.AddRange(FetchChaptersFromXmlNode(item, reader.ReadSubtree()));
- // break;
-
default:
- base.FetchDataFromXmlNode(reader, item, userDataList);
+ base.FetchDataFromXmlNode(reader, itemResult);
break;
}
}
diff --git a/MediaBrowser.XbmcMetadata/Parsers/SeasonNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/SeasonNfoParser.cs
index 1ea0053b3..c80684c41 100644
--- a/MediaBrowser.XbmcMetadata/Parsers/SeasonNfoParser.cs
+++ b/MediaBrowser.XbmcMetadata/Parsers/SeasonNfoParser.cs
@@ -1,8 +1,7 @@
using MediaBrowser.Common.Configuration;
-using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
+using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Logging;
-using System.Collections.Generic;
using System.Globalization;
using System.Xml;
@@ -18,10 +17,11 @@ namespace MediaBrowser.XbmcMetadata.Parsers
/// Fetches the data from XML node.
/// </summary>
/// <param name="reader">The reader.</param>
- /// <param name="item">The item.</param>
- /// <param name="userDataList">The user data list.</param>
- protected override void FetchDataFromXmlNode(XmlReader reader, Season item, List<UserItemData> userDataList)
+ /// <param name="itemResult">The item result.</param>
+ protected override void FetchDataFromXmlNode(XmlReader reader, LocalMetadataResult<Season> itemResult)
{
+ var item = itemResult.Item;
+
switch (reader.Name)
{
case "seasonnumber":
@@ -41,7 +41,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
}
default:
- base.FetchDataFromXmlNode(reader, item, userDataList);
+ base.FetchDataFromXmlNode(reader, itemResult);
break;
}
}
diff --git a/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs b/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs
index 2e8b07695..5025f4d18 100644
--- a/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs
+++ b/MediaBrowser.XbmcMetadata/Parsers/SeriesNfoParser.cs
@@ -2,6 +2,7 @@
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using System;
@@ -20,10 +21,11 @@ namespace MediaBrowser.XbmcMetadata.Parsers
/// Fetches the data from XML node.
/// </summary>
/// <param name="reader">The reader.</param>
- /// <param name="item">The item.</param>
- /// <param name="userDataList">The user data list.</param>
- protected override void FetchDataFromXmlNode(XmlReader reader, Series item, List<UserItemData> userDataList)
+ /// <param name="itemResult">The item result.</param>
+ protected override void FetchDataFromXmlNode(XmlReader reader, LocalMetadataResult<Series> itemResult)
{
+ var item = itemResult.Item;
+
switch (reader.Name)
{
case "id":
@@ -88,7 +90,7 @@ namespace MediaBrowser.XbmcMetadata.Parsers
}
default:
- base.FetchDataFromXmlNode(reader, item, userDataList);
+ base.FetchDataFromXmlNode(reader, itemResult);
break;
}
}
diff --git a/MediaBrowser.XbmcMetadata/Providers/AlbumNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/AlbumNfoProvider.cs
index 9567de2b8..ac76db771 100644
--- a/MediaBrowser.XbmcMetadata/Providers/AlbumNfoProvider.cs
+++ b/MediaBrowser.XbmcMetadata/Providers/AlbumNfoProvider.cs
@@ -23,7 +23,7 @@ namespace MediaBrowser.XbmcMetadata.Providers
protected override void Fetch(LocalMetadataResult<MusicAlbum> result, string path, CancellationToken cancellationToken)
{
- new BaseNfoParser<MusicAlbum>(_logger, _config).Fetch(result.Item, result.UserDataLIst, path, cancellationToken);
+ new BaseNfoParser<MusicAlbum>(_logger, _config).Fetch(result, path, cancellationToken);
}
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
diff --git a/MediaBrowser.XbmcMetadata/Providers/ArtistNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/ArtistNfoProvider.cs
index 1f9c78b56..8a958c3a6 100644
--- a/MediaBrowser.XbmcMetadata/Providers/ArtistNfoProvider.cs
+++ b/MediaBrowser.XbmcMetadata/Providers/ArtistNfoProvider.cs
@@ -23,7 +23,7 @@ namespace MediaBrowser.XbmcMetadata.Providers
protected override void Fetch(LocalMetadataResult<MusicArtist> result, string path, CancellationToken cancellationToken)
{
- new BaseNfoParser<MusicArtist>(_logger, _config).Fetch(result.Item, result.UserDataLIst, path, cancellationToken);
+ new BaseNfoParser<MusicArtist>(_logger, _config).Fetch(result, path, cancellationToken);
}
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
diff --git a/MediaBrowser.XbmcMetadata/Providers/BaseVideoNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/BaseVideoNfoProvider.cs
index 4dff051c7..79315cbf3 100644
--- a/MediaBrowser.XbmcMetadata/Providers/BaseVideoNfoProvider.cs
+++ b/MediaBrowser.XbmcMetadata/Providers/BaseVideoNfoProvider.cs
@@ -2,11 +2,9 @@
using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Providers;
-using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.XbmcMetadata.Parsers;
using MediaBrowser.XbmcMetadata.Savers;
-using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
@@ -28,11 +26,15 @@ namespace MediaBrowser.XbmcMetadata.Providers
protected override void Fetch(LocalMetadataResult<T> result, string path, CancellationToken cancellationToken)
{
- var chapters = new List<ChapterInfo>();
+ var tmpItem = new LocalMetadataResult<Video>
+ {
+ Item = result.Item
+ };
+ new MovieNfoParser(_logger, _config).Fetch(tmpItem, path, cancellationToken);
- new MovieNfoParser(_logger, _config).Fetch(result.Item, result.UserDataLIst, chapters, path, cancellationToken);
-
- result.Chapters = chapters;
+ result.Item = (T)tmpItem.Item;
+ result.People = tmpItem.People;
+ result.UserDataLIst = tmpItem.UserDataLIst;
}
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
diff --git a/MediaBrowser.XbmcMetadata/Providers/EpisodeNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/EpisodeNfoProvider.cs
index 2d4bb4ddc..2b5cfe9a3 100644
--- a/MediaBrowser.XbmcMetadata/Providers/EpisodeNfoProvider.cs
+++ b/MediaBrowser.XbmcMetadata/Providers/EpisodeNfoProvider.cs
@@ -26,12 +26,10 @@ namespace MediaBrowser.XbmcMetadata.Providers
protected override void Fetch(LocalMetadataResult<Episode> result, string path, CancellationToken cancellationToken)
{
var images = new List<LocalImageInfo>();
- var chapters = new List<ChapterInfo>();
- new EpisodeNfoParser(_logger, _config).Fetch(result.Item, result.UserDataLIst, images, chapters, path, cancellationToken);
+ new EpisodeNfoParser(_logger, _config).Fetch(result, images, path, cancellationToken);
result.Images = images;
- result.Chapters = chapters;
}
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
diff --git a/MediaBrowser.XbmcMetadata/Providers/SeasonNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/SeasonNfoProvider.cs
index 1be67c310..85c2d4305 100644
--- a/MediaBrowser.XbmcMetadata/Providers/SeasonNfoProvider.cs
+++ b/MediaBrowser.XbmcMetadata/Providers/SeasonNfoProvider.cs
@@ -23,7 +23,7 @@ namespace MediaBrowser.XbmcMetadata.Providers
protected override void Fetch(LocalMetadataResult<Season> result, string path, CancellationToken cancellationToken)
{
- new SeasonNfoParser(_logger, _config).Fetch(result.Item, result.UserDataLIst, path, cancellationToken);
+ new SeasonNfoParser(_logger, _config).Fetch(result, path, cancellationToken);
}
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)
diff --git a/MediaBrowser.XbmcMetadata/Providers/SeriesNfoProvider.cs b/MediaBrowser.XbmcMetadata/Providers/SeriesNfoProvider.cs
index b415571e3..e2ac866ef 100644
--- a/MediaBrowser.XbmcMetadata/Providers/SeriesNfoProvider.cs
+++ b/MediaBrowser.XbmcMetadata/Providers/SeriesNfoProvider.cs
@@ -23,7 +23,7 @@ namespace MediaBrowser.XbmcMetadata.Providers
protected override void Fetch(LocalMetadataResult<Series> result, string path, CancellationToken cancellationToken)
{
- new SeriesNfoParser(_logger, _config).Fetch(result.Item, result.UserDataLIst, path, cancellationToken);
+ new SeriesNfoParser(_logger, _config).Fetch(result, path, cancellationToken);
}
protected override FileSystemInfo GetXmlFile(ItemInfo info, IDirectoryService directoryService)