aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Api/Images/RemoteImageService.cs2
-rw-r--r--MediaBrowser.Controller/Entities/Audio/Audio.cs11
-rw-r--r--MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs11
-rw-r--r--MediaBrowser.Controller/Entities/BaseItem.cs2
-rw-r--r--MediaBrowser.Controller/Entities/Book.cs2
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs4
-rw-r--r--MediaBrowser.Controller/Entities/IHasImages.cs6
-rw-r--r--MediaBrowser.Controller/Entities/IHasMetadata.cs17
-rw-r--r--MediaBrowser.Controller/Entities/IHasSeries.cs12
-rw-r--r--MediaBrowser.Controller/Entities/Movies/Movie.cs9
-rw-r--r--MediaBrowser.Controller/Entities/TV/Episode.cs12
-rw-r--r--MediaBrowser.Controller/Entities/TV/Season.cs19
-rw-r--r--MediaBrowser.Controller/Entities/Trailer.cs9
-rw-r--r--MediaBrowser.Controller/Entities/Video.cs9
-rw-r--r--MediaBrowser.Controller/IServerApplicationPaths.cs16
-rw-r--r--MediaBrowser.Controller/MediaBrowser.Controller.csproj1
-rw-r--r--MediaBrowser.Controller/Providers/BaseItemXmlParser.cs5
-rw-r--r--MediaBrowser.Controller/Providers/BaseMetadataProvider.cs2
-rw-r--r--MediaBrowser.Controller/Providers/BaseProviderInfo.cs14
-rw-r--r--MediaBrowser.Controller/Providers/ILocalImageProvider.cs2
-rw-r--r--MediaBrowser.Controller/Providers/IProviderRepository.cs16
-rw-r--r--MediaBrowser.Controller/Providers/MetadataStatus.cs13
-rw-r--r--MediaBrowser.Providers/AdultVideos/AdultVideoMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/All/InternalMetadataFolderImageProvider.cs71
-rw-r--r--MediaBrowser.Providers/All/LocalImageProvider.cs54
-rw-r--r--MediaBrowser.Providers/Books/BookMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/Folders/CollectionFolderImageProvider.cs37
-rw-r--r--MediaBrowser.Providers/Folders/FolderMetadataService.cs7
-rw-r--r--MediaBrowser.Providers/Folders/ImagesByNameImageProvider.cs57
-rw-r--r--MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/Games/GameMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/Games/GameSystemMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/Genres/GenreMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/LiveTv/AudioRecordingService.cs5
-rw-r--r--MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/LiveTv/VideoRecordingService.cs5
-rw-r--r--MediaBrowser.Providers/Manager/ImageSaver.cs11
-rw-r--r--MediaBrowser.Providers/Manager/ItemImageProvider.cs7
-rw-r--r--MediaBrowser.Providers/Manager/MetadataService.cs37
-rw-r--r--MediaBrowser.Providers/Manager/ProviderManager.cs31
-rw-r--r--MediaBrowser.Providers/Manager/ProviderUtils.cs (renamed from MediaBrowser.Providers/ProviderUtils.cs)2
-rw-r--r--MediaBrowser.Providers/MediaBrowser.Providers.csproj6
-rw-r--r--MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs1
-rw-r--r--MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs5
-rw-r--r--MediaBrowser.Providers/Movies/MovieDbImageProvider.cs8
-rw-r--r--MediaBrowser.Providers/Movies/MovieDbProvider.cs2
-rw-r--r--MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs2
-rw-r--r--MediaBrowser.Providers/Movies/MovieMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/Movies/MovieUpdatesPrescanTask.cs1
-rw-r--r--MediaBrowser.Providers/Movies/TrailerMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/Music/AlbumMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/Music/ArtistMetadataService.cs9
-rw-r--r--MediaBrowser.Providers/Music/AudioMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/Music/Extensions.cs14
-rw-r--r--MediaBrowser.Providers/Music/LastfmAlbumProvider.cs27
-rw-r--r--MediaBrowser.Providers/Music/LastfmArtistProvider.cs2
-rw-r--r--MediaBrowser.Providers/Music/MovieDbMusicVideoProvider.cs3
-rw-r--r--MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs3
-rw-r--r--MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs4
-rw-r--r--MediaBrowser.Providers/Music/MusicVideoMetadataService.cs6
-rw-r--r--MediaBrowser.Providers/Music/MusicVideoXmlParser.cs1
-rw-r--r--MediaBrowser.Providers/Music/MusicVideoXmlProvider.cs1
-rw-r--r--MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/People/PersonMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/Savers/AlbumXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Savers/ArtistXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Savers/ChannelXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Savers/FolderXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Savers/GameXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Savers/MovieXmlSaver.cs8
-rw-r--r--MediaBrowser.Providers/Savers/PersonXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Savers/SeasonXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Savers/SeriesXmlSaver.cs7
-rw-r--r--MediaBrowser.Providers/Studios/StudioMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/TV/EpisodeLocalImageProvider.cs65
-rw-r--r--MediaBrowser.Providers/TV/EpisodeMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/TV/SeasonMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/TV/SeriesMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/TV/TvdbEpisodeImageProvider.cs6
-rw-r--r--MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs27
-rw-r--r--MediaBrowser.Providers/TV/TvdbSeasonImageProvider.cs5
-rw-r--r--MediaBrowser.Providers/TV/TvdbSeriesImageProvider.cs5
-rw-r--r--MediaBrowser.Providers/TV/TvdbSeriesProvider.cs3
-rw-r--r--MediaBrowser.Providers/Users/UserMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/Videos/VideoMetadataService.cs5
-rw-r--r--MediaBrowser.Providers/Years/YearMetadataService.cs5
-rw-r--r--MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs1
-rw-r--r--MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj1
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs205
-rw-r--r--MediaBrowser.Server.Implementations/ScheduledTasks/RefreshIntrosTask.cs (renamed from MediaBrowser.Providers/RefreshIntrosTask.cs)8
-rw-r--r--MediaBrowser.Server.Implementations/ServerApplicationPaths.cs30
96 files changed, 634 insertions, 530 deletions
diff --git a/MediaBrowser.Api/Images/RemoteImageService.cs b/MediaBrowser.Api/Images/RemoteImageService.cs
index dfa245c0ec..6058733222 100644
--- a/MediaBrowser.Api/Images/RemoteImageService.cs
+++ b/MediaBrowser.Api/Images/RemoteImageService.cs
@@ -378,7 +378,7 @@ namespace MediaBrowser.Api.Images
/// <returns>System.String.</returns>
private string GetFullCachePath(string filename)
{
- return Path.Combine(_appPaths.DownloadedImagesDataPath, filename.Substring(0, 1), filename);
+ return Path.Combine(_appPaths.CachePath, "remote-images", filename.Substring(0, 1), filename);
}
}
}
diff --git a/MediaBrowser.Controller/Entities/Audio/Audio.cs b/MediaBrowser.Controller/Entities/Audio/Audio.cs
index 139d8c6fb5..836874db98 100644
--- a/MediaBrowser.Controller/Entities/Audio/Audio.cs
+++ b/MediaBrowser.Controller/Entities/Audio/Audio.cs
@@ -10,7 +10,7 @@ namespace MediaBrowser.Controller.Entities.Audio
/// <summary>
/// Class Audio
/// </summary>
- public class Audio : BaseItem, IHasMediaStreams, IHasAlbumArtist, IHasArtist, IHasMusicGenres, IHasLookupInfo<SongInfo>
+ public class Audio : BaseItem, IHasMediaStreams, IHasAlbumArtist, IHasArtist, IHasMusicGenres, IHasLookupInfo<SongInfo>, IHasSeries
{
public Audio()
{
@@ -51,6 +51,15 @@ namespace MediaBrowser.Controller.Entities.Audio
}
}
+ [IgnoreDataMember]
+ public string SeriesName
+ {
+ get
+ {
+ return Album;
+ }
+ }
+
/// <summary>
/// Gets or sets the artist.
/// </summary>
diff --git a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
index 8b8c1a6ff4..51c8a87273 100644
--- a/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
+++ b/MediaBrowser.Controller/Entities/Audio/MusicAlbum.cs
@@ -11,7 +11,7 @@ namespace MediaBrowser.Controller.Entities.Audio
/// <summary>
/// Class MusicAlbum
/// </summary>
- public class MusicAlbum : Folder, IHasAlbumArtist, IHasArtist, IHasMusicGenres, IHasTags, IHasLookupInfo<AlbumInfo>
+ public class MusicAlbum : Folder, IHasAlbumArtist, IHasArtist, IHasMusicGenres, IHasTags, IHasLookupInfo<AlbumInfo>, IHasSeries
{
public List<Guid> SoundtrackIds { get; set; }
@@ -50,6 +50,15 @@ namespace MediaBrowser.Controller.Entities.Audio
}
}
+ [IgnoreDataMember]
+ public string SeriesName
+ {
+ get
+ {
+ return AlbumArtist;
+ }
+ }
+
/// <summary>
/// Override this to true if class should be grouped under a container in indicies
/// The container class should be defined via IndexContainer
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs
index 01e8741af2..b3b6361a71 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -256,7 +256,7 @@ namespace MediaBrowser.Controller.Entities
private string _sortName;
/// <summary>
- /// Gets or sets the name of the sort.
+ /// Gets the name of the sort.
/// </summary>
/// <value>The name of the sort.</value>
[IgnoreDataMember]
diff --git a/MediaBrowser.Controller/Entities/Book.cs b/MediaBrowser.Controller/Entities/Book.cs
index 211067f9d2..85cf60c522 100644
--- a/MediaBrowser.Controller/Entities/Book.cs
+++ b/MediaBrowser.Controller/Entities/Book.cs
@@ -4,7 +4,7 @@ using System.Collections.Generic;
namespace MediaBrowser.Controller.Entities
{
- public class Book : BaseItem, IHasTags, IHasPreferredMetadataLanguage, IHasLookupInfo<BookInfo>
+ public class Book : BaseItem, IHasTags, IHasPreferredMetadataLanguage, IHasLookupInfo<BookInfo>, IHasSeries
{
public override string MediaType
{
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index 101244d457..25197be675 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -518,7 +518,7 @@ namespace MediaBrowser.Controller.Entities
foreach (var child in children)
{
- if (tasks.Count > 3)
+ if (tasks.Count > 5)
{
await Task.WhenAll(tasks).ConfigureAwait(false);
tasks.Clear();
@@ -549,7 +549,7 @@ namespace MediaBrowser.Controller.Entities
}
else
{
- tasks.Add(RefreshChildMetadata(child, refreshOptions, recursive, innerProgress, cancellationToken));
+ tasks.Add(RefreshChildMetadata(child, refreshOptions, false, innerProgress, cancellationToken));
}
}
diff --git a/MediaBrowser.Controller/Entities/IHasImages.cs b/MediaBrowser.Controller/Entities/IHasImages.cs
index d260950bd2..62ef0a85a3 100644
--- a/MediaBrowser.Controller/Entities/IHasImages.cs
+++ b/MediaBrowser.Controller/Entities/IHasImages.cs
@@ -129,6 +129,12 @@ namespace MediaBrowser.Controller.Entities
/// <param name="images">The images.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
bool AddImages(ImageType imageType, IEnumerable<FileInfo> images);
+
+ /// <summary>
+ /// Determines whether [is save local metadata enabled].
+ /// </summary>
+ /// <returns><c>true</c> if [is save local metadata enabled]; otherwise, <c>false</c>.</returns>
+ bool IsSaveLocalMetadataEnabled();
}
public static class HasImagesExtensions
diff --git a/MediaBrowser.Controller/Entities/IHasMetadata.cs b/MediaBrowser.Controller/Entities/IHasMetadata.cs
index 6466e18ce6..1a1956c56e 100644
--- a/MediaBrowser.Controller/Entities/IHasMetadata.cs
+++ b/MediaBrowser.Controller/Entities/IHasMetadata.cs
@@ -1,5 +1,8 @@
using System;
using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Entities;
namespace MediaBrowser.Controller.Entities
@@ -34,15 +37,17 @@ namespace MediaBrowser.Controller.Entities
DateTime DateLastSaved { get; set; }
/// <summary>
- /// Determines whether [is save local metadata enabled].
- /// </summary>
- /// <returns><c>true</c> if [is save local metadata enabled]; otherwise, <c>false</c>.</returns>
- bool IsSaveLocalMetadataEnabled();
-
- /// <summary>
/// Gets a value indicating whether this instance is in mixed folder.
/// </summary>
/// <value><c>true</c> if this instance is in mixed folder; otherwise, <c>false</c>.</value>
bool IsInMixedFolder { get; }
+
+ /// <summary>
+ /// Updates to repository.
+ /// </summary>
+ /// <param name="updateReason">The update reason.</param>
+ /// <param name="cancellationToken">The cancellation token.</param>
+ /// <returns>Task.</returns>
+ Task UpdateToRepository(ItemUpdateType updateReason, CancellationToken cancellationToken);
}
}
diff --git a/MediaBrowser.Controller/Entities/IHasSeries.cs b/MediaBrowser.Controller/Entities/IHasSeries.cs
new file mode 100644
index 0000000000..64c33a3766
--- /dev/null
+++ b/MediaBrowser.Controller/Entities/IHasSeries.cs
@@ -0,0 +1,12 @@
+
+namespace MediaBrowser.Controller.Entities
+{
+ public interface IHasSeries
+ {
+ /// <summary>
+ /// Gets the name of the series.
+ /// </summary>
+ /// <value>The name of the series.</value>
+ string SeriesName { get; }
+ }
+}
diff --git a/MediaBrowser.Controller/Entities/Movies/Movie.cs b/MediaBrowser.Controller/Entities/Movies/Movie.cs
index 4d01c6a961..7214f0f6f3 100644
--- a/MediaBrowser.Controller/Entities/Movies/Movie.cs
+++ b/MediaBrowser.Controller/Entities/Movies/Movie.cs
@@ -13,7 +13,7 @@ namespace MediaBrowser.Controller.Entities.Movies
/// <summary>
/// Class Movie
/// </summary>
- public class Movie : Video, IHasCriticRating, IHasSoundtracks, IHasBudget, IHasKeywords, IHasTrailers, IHasThemeMedia, IHasTaglines, IHasTags, IHasPreferredMetadataLanguage, IHasAwards, IHasMetascore, IHasLookupInfo<MovieInfo>
+ public class Movie : Video, IHasCriticRating, IHasSoundtracks, IHasBudget, IHasKeywords, IHasTrailers, IHasThemeMedia, IHasTaglines, IHasPreferredMetadataLanguage, IHasAwards, IHasMetascore, IHasLookupInfo<MovieInfo>
{
public List<Guid> SpecialFeatureIds { get; set; }
@@ -39,7 +39,6 @@ namespace MediaBrowser.Controller.Entities.Movies
ThemeSongIds = new List<Guid>();
ThemeVideoIds = new List<Guid>();
Taglines = new List<string>();
- Tags = new List<string>();
Keywords = new List<string>();
}
@@ -53,12 +52,6 @@ namespace MediaBrowser.Controller.Entities.Movies
public List<MediaUrl> RemoteTrailers { get; set; }
/// <summary>
- /// Gets or sets the tags.
- /// </summary>
- /// <value>The tags.</value>
- public List<string> Tags { get; set; }
-
- /// <summary>
/// Gets or sets the taglines.
/// </summary>
/// <value>The taglines.</value>
diff --git a/MediaBrowser.Controller/Entities/TV/Episode.cs b/MediaBrowser.Controller/Entities/TV/Episode.cs
index 515f802e99..5413aa8852 100644
--- a/MediaBrowser.Controller/Entities/TV/Episode.cs
+++ b/MediaBrowser.Controller/Entities/TV/Episode.cs
@@ -10,7 +10,7 @@ namespace MediaBrowser.Controller.Entities.TV
/// <summary>
/// Class Episode
/// </summary>
- public class Episode : Video, IHasLookupInfo<EpisodeInfo>
+ public class Episode : Video, IHasLookupInfo<EpisodeInfo>, IHasSeries
{
/// <summary>
/// Gets the season in which it aired.
@@ -138,6 +138,16 @@ namespace MediaBrowser.Controller.Entities.TV
get { return FindParent<Season>(); }
}
+ [IgnoreDataMember]
+ public string SeriesName
+ {
+ get
+ {
+ var series = Series;
+ return series == null ? null : series.Name;
+ }
+ }
+
/// <summary>
/// Creates the name of the sort.
/// </summary>
diff --git a/MediaBrowser.Controller/Entities/TV/Season.cs b/MediaBrowser.Controller/Entities/TV/Season.cs
index bc7e75b726..d266f1fded 100644
--- a/MediaBrowser.Controller/Entities/TV/Season.cs
+++ b/MediaBrowser.Controller/Entities/TV/Season.cs
@@ -1,11 +1,8 @@
-using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Localization;
+using MediaBrowser.Controller.Localization;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Querying;
-using System;
using System.Collections.Generic;
-using System.IO;
using System.Linq;
using System.Runtime.Serialization;
@@ -14,7 +11,7 @@ namespace MediaBrowser.Controller.Entities.TV
/// <summary>
/// Class Season
/// </summary>
- public class Season : Folder
+ public class Season : Folder, IHasSeries
{
/// <summary>
@@ -218,7 +215,7 @@ namespace MediaBrowser.Controller.Entities.TV
{
episodes = episodes.Where(i => !i.IsVirtualUnaired);
}
-
+
return LibraryManager
.Sort(episodes, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending)
.Cast<Episode>();
@@ -234,5 +231,15 @@ namespace MediaBrowser.Controller.Entities.TV
// Don't block. Let either the entire series rating or episode rating determine it
return false;
}
+
+ [IgnoreDataMember]
+ public string SeriesName
+ {
+ get
+ {
+ var series = Series;
+ return series == null ? null : series.Name;
+ }
+ }
}
}
diff --git a/MediaBrowser.Controller/Entities/Trailer.cs b/MediaBrowser.Controller/Entities/Trailer.cs
index 9b3104037c..d655c275d8 100644
--- a/MediaBrowser.Controller/Entities/Trailer.cs
+++ b/MediaBrowser.Controller/Entities/Trailer.cs
@@ -10,7 +10,7 @@ namespace MediaBrowser.Controller.Entities
/// <summary>
/// Class Trailer
/// </summary>
- public class Trailer : Video, IHasCriticRating, IHasSoundtracks, IHasBudget, IHasTrailers, IHasKeywords, IHasTaglines, IHasTags, IHasPreferredMetadataLanguage, IHasMetascore, IHasLookupInfo<TrailerInfo>
+ public class Trailer : Video, IHasCriticRating, IHasSoundtracks, IHasBudget, IHasTrailers, IHasKeywords, IHasTaglines, IHasPreferredMetadataLanguage, IHasMetascore, IHasLookupInfo<TrailerInfo>
{
public List<Guid> SoundtrackIds { get; set; }
@@ -28,7 +28,6 @@ namespace MediaBrowser.Controller.Entities
Taglines = new List<string>();
SoundtrackIds = new List<Guid>();
LocalTrailerIds = new List<Guid>();
- Tags = new List<string>();
Keywords = new List<string>();
}
@@ -41,12 +40,6 @@ namespace MediaBrowser.Controller.Entities
public List<string> Keywords { get; set; }
/// <summary>
- /// Gets or sets the tags.
- /// </summary>
- /// <value>The tags.</value>
- public List<string> Tags { get; set; }
-
- /// <summary>
/// Gets or sets the taglines.
/// </summary>
/// <value>The taglines.</value>
diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs
index 6aa3ae819a..e7bee35f50 100644
--- a/MediaBrowser.Controller/Entities/Video.cs
+++ b/MediaBrowser.Controller/Entities/Video.cs
@@ -16,7 +16,7 @@ namespace MediaBrowser.Controller.Entities
/// <summary>
/// Class Video
/// </summary>
- public class Video : BaseItem, IHasMediaStreams, IHasAspectRatio
+ public class Video : BaseItem, IHasMediaStreams, IHasAspectRatio, IHasTags
{
public bool IsMultiPart { get; set; }
@@ -26,6 +26,7 @@ namespace MediaBrowser.Controller.Entities
{
PlayableStreamFileNames = new List<string>();
AdditionalPartIds = new List<Guid>();
+ Tags = new List<string>();
}
/// <summary>
@@ -35,6 +36,12 @@ namespace MediaBrowser.Controller.Entities
public bool HasSubtitles { get; set; }
/// <summary>
+ /// Gets or sets the tags.
+ /// </summary>
+ /// <value>The tags.</value>
+ public List<string> Tags { get; set; }
+
+ /// <summary>
/// Gets or sets the video bit rate.
/// </summary>
/// <value>The video bit rate.</value>
diff --git a/MediaBrowser.Controller/IServerApplicationPaths.cs b/MediaBrowser.Controller/IServerApplicationPaths.cs
index e163ac31dd..05f6815979 100644
--- a/MediaBrowser.Controller/IServerApplicationPaths.cs
+++ b/MediaBrowser.Controller/IServerApplicationPaths.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Common.Configuration;
+using System;
+using MediaBrowser.Common.Configuration;
namespace MediaBrowser.Controller
{
@@ -101,9 +102,16 @@ namespace MediaBrowser.Controller
string TranscodingTempPath { get; }
/// <summary>
- /// Gets the downloaded images data path.
+ /// Gets the internal metadata path.
/// </summary>
- /// <value>The downloaded images data path.</value>
- string DownloadedImagesDataPath { get; }
+ /// <value>The internal metadata path.</value>
+ string InternalMetadataPath { get; }
+
+ /// <summary>
+ /// Gets the internal metadata path.
+ /// </summary>
+ /// <param name="id">The identifier.</param>
+ /// <returns>System.String.</returns>
+ string GetInternalMetadataPath(Guid id);
}
} \ No newline at end of file
diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
index 00e84177cb..41e737300d 100644
--- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj
+++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
@@ -94,6 +94,7 @@
<Compile Include="Entities\IHasPreferredMetadataLanguage.cs" />
<Compile Include="Entities\IHasProductionLocations.cs" />
<Compile Include="Entities\IHasScreenshots.cs" />
+ <Compile Include="Entities\IHasSeries.cs" />
<Compile Include="Entities\IHasSoundtracks.cs" />
<Compile Include="Entities\IHasTaglines.cs" />
<Compile Include="Entities\IHasTags.cs" />
diff --git a/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs b/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs
index dbb8c1edf2..928e958338 100644
--- a/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs
+++ b/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs
@@ -247,7 +247,10 @@ namespace MediaBrowser.Controller.Providers
{
var val = reader.ReadElementContentAsString();
-
+ if (!string.IsNullOrWhiteSpace(val))
+ {
+ item.ForcedSortName = val;
+ }
break;
}
diff --git a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs
index 6818fa52bc..f8580244a1 100644
--- a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs
+++ b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs
@@ -40,8 +40,6 @@ namespace MediaBrowser.Controller.Providers
protected static readonly Task<bool> FalseTaskResult = Task.FromResult(false);
- protected static readonly SemaphoreSlim XmlParsingResourcePool = new SemaphoreSlim(4, 4);
-
/// <summary>
/// Supportses the specified item.
/// </summary>
diff --git a/MediaBrowser.Controller/Providers/BaseProviderInfo.cs b/MediaBrowser.Controller/Providers/BaseProviderInfo.cs
index 829dd34c8e..3a33924f0d 100644
--- a/MediaBrowser.Controller/Providers/BaseProviderInfo.cs
+++ b/MediaBrowser.Controller/Providers/BaseProviderInfo.cs
@@ -38,14 +38,14 @@ namespace MediaBrowser.Controller.Providers
/// <summary>
/// The success
/// </summary>
- Success,
- /// <summary>
- /// The failure
- /// </summary>
- Failure,
+ Success = 0,
/// <summary>
/// The completed with errors
/// </summary>
- CompletedWithErrors
- }
+ CompletedWithErrors = 1,
+ /// <summary>
+ /// The failure
+ /// </summary>
+ Failure = 2
+ }
}
diff --git a/MediaBrowser.Controller/Providers/ILocalImageProvider.cs b/MediaBrowser.Controller/Providers/ILocalImageProvider.cs
index d1ef68ce2a..6b97a552d1 100644
--- a/MediaBrowser.Controller/Providers/ILocalImageProvider.cs
+++ b/MediaBrowser.Controller/Providers/ILocalImageProvider.cs
@@ -15,7 +15,7 @@ namespace MediaBrowser.Controller.Providers
{
}
- public interface IImageFileProvider : ILocalImageProvider
+ public interface ILocalImageFileProvider : ILocalImageProvider
{
List<LocalImageInfo> GetImages(IHasImages item);
}
diff --git a/MediaBrowser.Controller/Providers/IProviderRepository.cs b/MediaBrowser.Controller/Providers/IProviderRepository.cs
index 1c0ad2cd73..3cd2c3f318 100644
--- a/MediaBrowser.Controller/Providers/IProviderRepository.cs
+++ b/MediaBrowser.Controller/Providers/IProviderRepository.cs
@@ -9,22 +9,6 @@ namespace MediaBrowser.Controller.Providers
public interface IProviderRepository : IRepository
{
/// <summary>
- /// Gets the provider history.
- /// </summary>
- /// <param name="itemId">The item identifier.</param>
- /// <returns>IEnumerable{BaseProviderInfo}.</returns>
- IEnumerable<BaseProviderInfo> GetProviderHistory(Guid itemId);
-
- /// <summary>
- /// Saves the provider history.
- /// </summary>
- /// <param name="id">The identifier.</param>
- /// <param name="history">The history.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- Task SaveProviderHistory(Guid id, IEnumerable<BaseProviderInfo> history, CancellationToken cancellationToken);
-
- /// <summary>
/// Gets the metadata status.
/// </summary>
/// <param name="itemId">The item identifier.</param>
diff --git a/MediaBrowser.Controller/Providers/MetadataStatus.cs b/MediaBrowser.Controller/Providers/MetadataStatus.cs
index 834d8ec35f..adfae54f50 100644
--- a/MediaBrowser.Controller/Providers/MetadataStatus.cs
+++ b/MediaBrowser.Controller/Providers/MetadataStatus.cs
@@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using MediaBrowser.Common.Extensions;
namespace MediaBrowser.Controller.Providers
{
@@ -14,6 +13,18 @@ namespace MediaBrowser.Controller.Providers
public Guid ItemId { get; set; }
/// <summary>
+ /// Gets or sets the name of the item.
+ /// </summary>
+ /// <value>The name of the item.</value>
+ public string ItemName { get; set; }
+
+ /// <summary>
+ /// Gets or sets the name of the series.
+ /// </summary>
+ /// <value>The name of the series.</value>
+ public string SeriesName { get; set; }
+
+ /// <summary>
/// Gets or sets the date last metadata refresh.
/// </summary>
/// <value>The date last metadata refresh.</value>
diff --git a/MediaBrowser.Providers/AdultVideos/AdultVideoMetadataService.cs b/MediaBrowser.Providers/AdultVideos/AdultVideoMetadataService.cs
index 4a713e735d..b0d6af8872 100644
--- a/MediaBrowser.Providers/AdultVideos/AdultVideoMetadataService.cs
+++ b/MediaBrowser.Providers/AdultVideos/AdultVideoMetadataService.cs
@@ -34,10 +34,5 @@ namespace MediaBrowser.Providers.AdultVideos
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(AdultVideo item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/All/InternalMetadataFolderImageProvider.cs b/MediaBrowser.Providers/All/InternalMetadataFolderImageProvider.cs
new file mode 100644
index 0000000000..cecde64ca3
--- /dev/null
+++ b/MediaBrowser.Providers/All/InternalMetadataFolderImageProvider.cs
@@ -0,0 +1,71 @@
+using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
+using System.Collections.Generic;
+using System.IO;
+
+namespace MediaBrowser.Providers.All
+{
+ public class InternalMetadataFolderImageProvider : ILocalImageFileProvider, IHasOrder
+ {
+ private readonly IServerConfigurationManager _config;
+
+ public InternalMetadataFolderImageProvider(IServerConfigurationManager config)
+ {
+ _config = config;
+ }
+
+ public string Name
+ {
+ get { return "Internal Images"; }
+ }
+
+ public bool Supports(IHasImages item)
+ {
+ if (!item.IsSaveLocalMetadataEnabled())
+ {
+ return true;
+ }
+
+ var locationType = item.LocationType;
+
+ if (locationType == LocationType.FileSystem ||
+ locationType == LocationType.Offline)
+ {
+ return false;
+ }
+
+ // These always save locally
+ if (item is IItemByName || item is User)
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ public int Order
+ {
+ get
+ {
+ // Make sure this is last so that all other locations are scanned first
+ return 1000;
+ }
+ }
+
+ public List<LocalImageInfo> GetImages(IHasImages item)
+ {
+ var path = _config.ApplicationPaths.GetInternalMetadataPath(item.Id);
+
+ try
+ {
+ return new LocalImageProvider().GetImages(item, path);
+ }
+ catch (DirectoryNotFoundException)
+ {
+ return new List<LocalImageInfo>();
+ }
+ }
+ }
+}
diff --git a/MediaBrowser.Providers/All/LocalImageProvider.cs b/MediaBrowser.Providers/All/LocalImageProvider.cs
index 0d078499d5..7d70a35b6d 100644
--- a/MediaBrowser.Providers/All/LocalImageProvider.cs
+++ b/MediaBrowser.Providers/All/LocalImageProvider.cs
@@ -1,5 +1,4 @@
-using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV;
@@ -13,15 +12,8 @@ using System.Linq;
namespace MediaBrowser.Providers.All
{
- public class LocalImageProvider : IImageFileProvider
+ public class LocalImageProvider : ILocalImageFileProvider
{
- private readonly IFileSystem _fileSystem;
-
- public LocalImageProvider(IFileSystem fileSystem)
- {
- _fileSystem = fileSystem;
- }
-
public string Name
{
get { return "Local Images"; }
@@ -91,12 +83,37 @@ namespace MediaBrowser.Providers.All
var list = new List<LocalImageInfo>();
- PopulateImages(item, list, files);
+ PopulateImages(item, list, files, true);
+
+ return list;
+ }
+
+ public List<LocalImageInfo> GetImages(IHasImages item, string path)
+ {
+ return GetImages(item, new[] { path });
+ }
+
+ public List<LocalImageInfo> GetImages(IHasImages item, IEnumerable<string> paths)
+ {
+ var files = paths.SelectMany(i => new DirectoryInfo(i).EnumerateFiles("*", SearchOption.TopDirectoryOnly))
+ .Where(i =>
+ {
+ var ext = i.Extension;
+
+ return !string.IsNullOrEmpty(ext) &&
+ BaseItem.SupportedImageExtensions.Contains(ext, StringComparer.OrdinalIgnoreCase);
+ })
+ .Cast<FileSystemInfo>()
+ .ToList();
+
+ var list = new List<LocalImageInfo>();
+
+ PopulateImages(item, list, files, false);
return list;
}
- private void PopulateImages(IHasImages item, List<LocalImageInfo> images, List<FileSystemInfo> files)
+ private void PopulateImages(IHasImages item, List<LocalImageInfo> images, List<FileSystemInfo> files, bool supportParentSeriesFiles)
{
var imagePrefix = string.Empty;
@@ -126,11 +143,14 @@ namespace MediaBrowser.Providers.All
AddImage(files, images, imagePrefix + "thumb", ImageType.Thumb);
AddImage(files, images, imagePrefix + "landscape", ImageType.Thumb);
- var season = item as Season;
-
- if (season != null)
+ if (supportParentSeriesFiles)
{
- PopulateSeasonImagesFromSeriesFolder(season, images);
+ var season = item as Season;
+
+ if (season != null)
+ {
+ PopulateSeasonImagesFromSeriesFolder(season, images);
+ }
}
}
@@ -278,7 +298,7 @@ namespace MediaBrowser.Providers.All
}
}
- private bool AddImage(List<FileSystemInfo> files, List<LocalImageInfo> images, string name, ImageType type)
+ private bool AddImage(IEnumerable<FileSystemInfo> files, List<LocalImageInfo> images, string name, ImageType type)
{
var image = GetImage(files, name) as FileInfo;
diff --git a/MediaBrowser.Providers/Books/BookMetadataService.cs b/MediaBrowser.Providers/Books/BookMetadataService.cs
index c314b0a084..0cf672e2d5 100644
--- a/MediaBrowser.Providers/Books/BookMetadataService.cs
+++ b/MediaBrowser.Providers/Books/BookMetadataService.cs
@@ -39,10 +39,5 @@ namespace MediaBrowser.Providers.Books
target.SeriesName = source.SeriesName;
}
}
-
- protected override Task SaveItem(Book item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs b/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs
index b1b5c7580c..f4716f6ddb 100644
--- a/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs
+++ b/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs
@@ -41,11 +41,6 @@ namespace MediaBrowser.Providers.BoxSets
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
- protected override Task SaveItem(BoxSet item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
-
protected override ItemUpdateType BeforeSave(BoxSet item)
{
var updateType = base.BeforeSave(item);
diff --git a/MediaBrowser.Providers/Folders/CollectionFolderImageProvider.cs b/MediaBrowser.Providers/Folders/CollectionFolderImageProvider.cs
new file mode 100644
index 0000000000..f1b9a8384e
--- /dev/null
+++ b/MediaBrowser.Providers/Folders/CollectionFolderImageProvider.cs
@@ -0,0 +1,37 @@
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
+using MediaBrowser.Providers.All;
+using System.Collections.Generic;
+
+namespace MediaBrowser.Providers.Folders
+{
+ public class CollectionFolderLocalImageProvider : ILocalImageFileProvider, IHasOrder
+ {
+ public string Name
+ {
+ get { return "Collection Folder Images"; }
+ }
+
+ public bool Supports(IHasImages item)
+ {
+ return item is CollectionFolder && item.LocationType == LocationType.FileSystem;
+ }
+
+ public int Order
+ {
+ get
+ {
+ // Run after LocalImageProvider
+ return 1;
+ }
+ }
+
+ public List<LocalImageInfo> GetImages(IHasImages item)
+ {
+ var collectionFolder = (CollectionFolder)item;
+
+ return new LocalImageProvider().GetImages(item, collectionFolder.PhysicalLocations);
+ }
+ }
+}
diff --git a/MediaBrowser.Providers/Folders/FolderMetadataService.cs b/MediaBrowser.Providers/Folders/FolderMetadataService.cs
index 5ce23aa76e..c9e44177e2 100644
--- a/MediaBrowser.Providers/Folders/FolderMetadataService.cs
+++ b/MediaBrowser.Providers/Folders/FolderMetadataService.cs
@@ -7,8 +7,6 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
namespace MediaBrowser.Providers.Folders
{
@@ -35,11 +33,6 @@ namespace MediaBrowser.Providers.Folders
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
- protected override Task SaveItem(Folder item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
-
public override int Order
{
get
diff --git a/MediaBrowser.Providers/Folders/ImagesByNameImageProvider.cs b/MediaBrowser.Providers/Folders/ImagesByNameImageProvider.cs
new file mode 100644
index 0000000000..e87f0919fd
--- /dev/null
+++ b/MediaBrowser.Providers/Folders/ImagesByNameImageProvider.cs
@@ -0,0 +1,57 @@
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Providers.All;
+using System.Collections.Generic;
+using System.IO;
+
+namespace MediaBrowser.Providers.Folders
+{
+ public class ImagesByNameImageProvider : ILocalImageFileProvider, IHasOrder
+ {
+ private readonly IFileSystem _fileSystem;
+ private readonly IServerConfigurationManager _config;
+
+ public ImagesByNameImageProvider(IFileSystem fileSystem, IServerConfigurationManager config)
+ {
+ _fileSystem = fileSystem;
+ _config = config;
+ }
+
+ public string Name
+ {
+ get { return "Images By Name"; }
+ }
+
+ public bool Supports(IHasImages item)
+ {
+ return item is ICollectionFolder;
+ }
+
+ public int Order
+ {
+ get
+ {
+ // Run after LocalImageProvider, and after CollectionFolderImageProvider
+ return 2;
+ }
+ }
+
+ public List<LocalImageInfo> GetImages(IHasImages item)
+ {
+ var name = _fileSystem.GetValidFilename(item.Name);
+
+ var path = Path.Combine(_config.ApplicationPaths.GeneralPath, name);
+
+ try
+ {
+ return new LocalImageProvider().GetImages(item, path);
+ }
+ catch (DirectoryNotFoundException)
+ {
+ return new List<LocalImageInfo>();
+ }
+ }
+ }
+}
diff --git a/MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs b/MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs
index 0f28628466..0eaed59c78 100644
--- a/MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs
+++ b/MediaBrowser.Providers/GameGenres/GameGenreMetadataService.cs
@@ -34,10 +34,5 @@ namespace MediaBrowser.Providers.GameGenres
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(GameGenre item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/Games/GameMetadataService.cs b/MediaBrowser.Providers/Games/GameMetadataService.cs
index 3a786385b7..1586414ea2 100644
--- a/MediaBrowser.Providers/Games/GameMetadataService.cs
+++ b/MediaBrowser.Providers/Games/GameMetadataService.cs
@@ -39,10 +39,5 @@ namespace MediaBrowser.Providers.Games
target.GameSystem = source.GameSystem;
}
}
-
- protected override Task SaveItem(Game item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/Games/GameSystemMetadataService.cs b/MediaBrowser.Providers/Games/GameSystemMetadataService.cs
index 9fb539d988..ae1ee1993b 100644
--- a/MediaBrowser.Providers/Games/GameSystemMetadataService.cs
+++ b/MediaBrowser.Providers/Games/GameSystemMetadataService.cs
@@ -39,10 +39,5 @@ namespace MediaBrowser.Providers.Games
target.GameSystemName = source.GameSystemName;
}
}
-
- protected override Task SaveItem(GameSystem item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/Genres/GenreMetadataService.cs b/MediaBrowser.Providers/Genres/GenreMetadataService.cs
index 199f79baf7..b19241095f 100644
--- a/MediaBrowser.Providers/Genres/GenreMetadataService.cs
+++ b/MediaBrowser.Providers/Genres/GenreMetadataService.cs
@@ -34,10 +34,5 @@ namespace MediaBrowser.Providers.Genres
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(Genre item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/LiveTv/AudioRecordingService.cs b/MediaBrowser.Providers/LiveTv/AudioRecordingService.cs
index d11fb77ee7..7ae27f4c9a 100644
--- a/MediaBrowser.Providers/LiveTv/AudioRecordingService.cs
+++ b/MediaBrowser.Providers/LiveTv/AudioRecordingService.cs
@@ -33,10 +33,5 @@ namespace MediaBrowser.Providers.LiveTv
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(LiveTvAudioRecording item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs b/MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs
index fecee3ae2c..57bc701565 100644
--- a/MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs
+++ b/MediaBrowser.Providers/LiveTv/ChannelMetadataService.cs
@@ -29,10 +29,5 @@ namespace MediaBrowser.Providers.LiveTv
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(LiveTvChannel item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs b/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs
index e6f0203238..3172e01349 100644
--- a/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs
+++ b/MediaBrowser.Providers/LiveTv/ProgramMetadataService.cs
@@ -33,10 +33,5 @@ namespace MediaBrowser.Providers.LiveTv
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(LiveTvProgram item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/LiveTv/VideoRecordingService.cs b/MediaBrowser.Providers/LiveTv/VideoRecordingService.cs
index fb4156e8db..f526db7759 100644
--- a/MediaBrowser.Providers/LiveTv/VideoRecordingService.cs
+++ b/MediaBrowser.Providers/LiveTv/VideoRecordingService.cs
@@ -33,10 +33,5 @@ namespace MediaBrowser.Providers.LiveTv
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(LiveTvVideoRecording item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/Manager/ImageSaver.cs b/MediaBrowser.Providers/Manager/ImageSaver.cs
index 1bccc6bb81..1b0ae1b5e9 100644
--- a/MediaBrowser.Providers/Manager/ImageSaver.cs
+++ b/MediaBrowser.Providers/Manager/ImageSaver.cs
@@ -30,10 +30,6 @@ namespace MediaBrowser.Providers.Manager
private readonly IServerConfigurationManager _config;
/// <summary>
- /// The remote image cache
- /// </summary>
- private readonly FileSystemRepository _remoteImageCache;
- /// <summary>
/// The _directory watchers
/// </summary>
private readonly ILibraryMonitor _libraryMonitor;
@@ -41,17 +37,18 @@ namespace MediaBrowser.Providers.Manager
private readonly ILogger _logger;
/// <summary>
- /// Initializes a new instance of the <see cref="ImageSaver"/> class.
+ /// Initializes a new instance of the <see cref="ImageSaver" /> class.
/// </summary>
/// <param name="config">The config.</param>
/// <param name="libraryMonitor">The directory watchers.</param>
+ /// <param name="fileSystem">The file system.</param>
+ /// <param name="logger">The logger.</param>
public ImageSaver(IServerConfigurationManager config, ILibraryMonitor libraryMonitor, IFileSystem fileSystem, ILogger logger)
{
_config = config;
_libraryMonitor = libraryMonitor;
_fileSystem = fileSystem;
_logger = logger;
- _remoteImageCache = new FileSystemRepository(config.ApplicationPaths.DownloadedImagesDataPath);
}
/// <summary>
@@ -348,7 +345,7 @@ namespace MediaBrowser.Providers.Manager
// None of the save local conditions passed, so store it in our internal folders
if (string.IsNullOrEmpty(path))
{
- path = _remoteImageCache.GetResourcePath(item.GetType().FullName + item.Id, filename + extension);
+ path = Path.Combine(_config.ApplicationPaths.GetInternalMetadataPath(item.Id), filename + extension);
}
return path;
diff --git a/MediaBrowser.Providers/Manager/ItemImageProvider.cs b/MediaBrowser.Providers/Manager/ItemImageProvider.cs
index 4ba959d14b..b50e028bff 100644
--- a/MediaBrowser.Providers/Manager/ItemImageProvider.cs
+++ b/MediaBrowser.Providers/Manager/ItemImageProvider.cs
@@ -38,7 +38,7 @@ namespace MediaBrowser.Providers.Manager
{
var hasChanges = item.ValidateImages();
- foreach (var provider in providers.OfType<IImageFileProvider>())
+ foreach (var provider in providers.OfType<ILocalImageFileProvider>())
{
var images = provider.GetImages(item);
@@ -117,8 +117,7 @@ namespace MediaBrowser.Providers.Manager
{
var mimeType = "image/" + Path.GetExtension(response.Path).TrimStart('.').ToLower();
- var stream = _fileSystem.GetFileStream(response.Path, FileMode.Open, FileAccess.Read,
- FileShare.Read, true);
+ var stream = _fileSystem.GetFileStream(response.Path, FileMode.Open, FileAccess.Read, FileShare.Read, true);
await _providerManager.SaveImage((BaseItem)item, stream, mimeType, imageType, null, cancellationToken).ConfigureAwait(false);
}
@@ -335,7 +334,7 @@ namespace MediaBrowser.Providers.Manager
}
catch (HttpException ex)
{
- // Sometimes providers send back bad url's. Just move onto the next image
+ // Sometimes providers send back bad url's. Just move to the next image
if (ex.StatusCode.HasValue && ex.StatusCode.Value == HttpStatusCode.NotFound)
{
continue;
diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs
index 21173aebc9..be42589b7c 100644
--- a/MediaBrowser.Providers/Manager/MetadataService.cs
+++ b/MediaBrowser.Providers/Manager/MetadataService.cs
@@ -37,10 +37,18 @@ namespace MediaBrowser.Providers.Manager
/// <summary>
/// Saves the provider result.
/// </summary>
+ /// <param name="item">The item.</param>
/// <param name="result">The result.</param>
/// <returns>Task.</returns>
- protected Task SaveProviderResult(MetadataStatus result)
+ protected Task SaveProviderResult(TItemType item, MetadataStatus result)
{
+ result.ItemId = item.Id;
+ result.ItemName = item.Name;
+
+ var series = item as IHasSeries;
+
+ result.SeriesName = series == null ? null : series.SeriesName;
+
return ProviderRepo.SaveMetadataStatus(result, CancellationToken.None);
}
@@ -97,7 +105,6 @@ namespace MediaBrowser.Providers.Manager
if (providers.Count > 0)
{
-
var result = await RefreshWithProviders(itemOfType, refreshOptions, providers, cancellationToken).ConfigureAwait(false);
updateType = updateType | result.UpdateType;
@@ -140,7 +147,7 @@ namespace MediaBrowser.Providers.Manager
if (providersHadChanges || refreshResult.IsDirty)
{
- await SaveProviderResult(refreshResult).ConfigureAwait(false);
+ await SaveProviderResult(itemOfType, refreshResult).ConfigureAwait(false);
}
}
@@ -231,7 +238,10 @@ namespace MediaBrowser.Providers.Manager
return providers;
}
- protected abstract Task SaveItem(TItemType item, ItemUpdateType reason, CancellationToken cancellationToken);
+ protected Task SaveItem(TItemType item, ItemUpdateType reason, CancellationToken cancellationToken)
+ {
+ return item.UpdateToRepository(reason, cancellationToken);
+ }
public bool CanRefresh(IHasMetadata item)
{
@@ -298,6 +308,7 @@ namespace MediaBrowser.Providers.Manager
}
}
+ // Local metadata is king - if any is found don't run remote providers
if (!options.ReplaceAllMetadata && !hasLocalMetadata)
{
await ExecuteRemoteProviders(item, temp, providers.OfType<IRemoteMetadataProvider<TItemType, TIdType>>(), refreshResult, cancellationToken).ConfigureAwait(false);
@@ -349,7 +360,14 @@ namespace MediaBrowser.Providers.Manager
{
Logger.Debug("Running {0} for {1}", provider.GetType().Name, item.Path ?? item.Name);
- id = id ?? item.GetLookupInfo();
+ if (id == null)
+ {
+ id = item.GetLookupInfo();
+ }
+ else
+ {
+ MergeNewData(temp, id);
+ }
try
{
@@ -375,6 +393,15 @@ namespace MediaBrowser.Providers.Manager
}
}
+ private void MergeNewData(TItemType source, TIdType lookupInfo)
+ {
+ // Copy new provider id's that may have been obtained
+ foreach (var providerId in source.ProviderIds)
+ {
+ lookupInfo.ProviderIds[providerId.Key] = providerId.Value;
+ }
+ }
+
protected abstract void MergeData(TItemType source, TItemType target, List<MetadataFields> lockedFields, bool replaceData, bool mergeMetadataSettings);
public virtual int Order
diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs
index aec08a2927..e0b07ef3a1 100644
--- a/MediaBrowser.Providers/Manager/ProviderManager.cs
+++ b/MediaBrowser.Providers/Manager/ProviderManager.cs
@@ -470,7 +470,7 @@ namespace MediaBrowser.Providers.Manager
}));
// Savers
- list.AddRange(_savers.Where(i => i.IsEnabledFor(item, ItemUpdateType.MetadataEdit)).OrderBy(i => i.Name).Select(i => new MetadataPlugin
+ list.AddRange(_savers.Where(i => IsSaverEnabledForItem(i, item, ItemUpdateType.MetadataEdit)).OrderBy(i => i.Name).Select(i => new MetadataPlugin
{
Name = i.Name,
Type = MetadataPluginType.MetadataSaver
@@ -506,7 +506,7 @@ namespace MediaBrowser.Providers.Manager
/// <returns>Task.</returns>
public async Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType)
{
- foreach (var saver in _savers.Where(i => i.IsEnabledFor(item, updateType)))
+ foreach (var saver in _savers.Where(i => IsSaverEnabledForItem(i, item, updateType)))
{
_logger.Debug("Saving {0} to {1}.", item.Path ?? item.Name, saver.Name);
@@ -514,13 +514,17 @@ namespace MediaBrowser.Providers.Manager
if (fileSaver != null)
{
- var locationType = item.LocationType;
- if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ string path = null;
+
+ try
{
- throw new ArgumentException("Only file-system based items can save metadata.");
+ path = fileSaver.GetSavePath(item);
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("Error in {0} GetSavePath", ex, saver.Name);
+ continue;
}
-
- var path = fileSaver.GetSavePath(item);
var semaphore = _fileLocks.GetOrAdd(path, key => new SemaphoreSlim(1, 1));
@@ -554,5 +558,18 @@ namespace MediaBrowser.Providers.Manager
}
}
}
+
+ private bool IsSaverEnabledForItem(IMetadataSaver saver, IHasMetadata item, ItemUpdateType updateType)
+ {
+ try
+ {
+ return saver.IsEnabledFor(item, updateType);
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("Error in {0}.IsEnabledFor", ex, saver.Name);
+ return false;
+ }
+ }
}
}
diff --git a/MediaBrowser.Providers/ProviderUtils.cs b/MediaBrowser.Providers/Manager/ProviderUtils.cs
index ecefb72c40..6e994c9f28 100644
--- a/MediaBrowser.Providers/ProviderUtils.cs
+++ b/MediaBrowser.Providers/Manager/ProviderUtils.cs
@@ -3,7 +3,7 @@ using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Model.Entities;
using System.Collections.Generic;
-namespace MediaBrowser.Providers
+namespace MediaBrowser.Providers.Manager
{
public static class ProviderUtils
{
diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
index da9ea2947f..d494f17b6f 100644
--- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj
+++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
@@ -66,12 +66,15 @@
<ItemGroup>
<Compile Include="AdultVideos\AdultVideoMetadataService.cs" />
<Compile Include="AdultVideos\AdultVideoXmlProvider.cs" />
+ <Compile Include="All\InternalMetadataFolderImageProvider.cs" />
<Compile Include="All\LocalImageProvider.cs" />
<Compile Include="Books\BookMetadataService.cs" />
<Compile Include="BoxSets\BoxSetMetadataService.cs" />
<Compile Include="BoxSets\MovieDbBoxSetImageProvider.cs" />
<Compile Include="BoxSets\MovieDbBoxSetProvider.cs" />
+ <Compile Include="Folders\CollectionFolderImageProvider.cs" />
<Compile Include="Folders\FolderMetadataService.cs" />
+ <Compile Include="Folders\ImagesByNameImageProvider.cs" />
<Compile Include="GameGenres\GameGenreMetadataService.cs" />
<Compile Include="Games\GameMetadataService.cs" />
<Compile Include="Games\GameSystemMetadataService.cs" />
@@ -145,8 +148,7 @@
<Compile Include="People\PersonXmlProvider.cs" />
<Compile Include="People\MovieDbPersonProvider.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="ProviderUtils.cs" />
- <Compile Include="RefreshIntrosTask.cs" />
+ <Compile Include="Manager\ProviderUtils.cs" />
<Compile Include="Savers\AlbumXmlSaver.cs" />
<Compile Include="Savers\ArtistXmlSaver.cs" />
<Compile Include="Savers\BoxSetXmlSaver.cs" />
diff --git a/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs b/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs
index 94d8566e14..ba3b468d47 100644
--- a/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs
+++ b/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs
@@ -3,6 +3,7 @@ using MediaBrowser.Common.IO;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Dto;
diff --git a/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs b/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs
index ebed0c2030..45d1eb5318 100644
--- a/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs
+++ b/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs
@@ -1,4 +1,5 @@
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
@@ -143,10 +144,6 @@ namespace MediaBrowser.Providers.Movies
movieItem.TmdbCollectionName = movieData.belongs_to_collection.name;
}
}
- else
- {
- movie.SetProviderId(MetadataProviders.TmdbCollection, null); // clear out any old entry
- }
float rating;
string voteAvg = movieData.vote_average.ToString(CultureInfo.InvariantCulture);
diff --git a/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs b/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs
index be2f7ad614..db34688165 100644
--- a/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs
+++ b/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs
@@ -1,5 +1,6 @@
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Dto;
@@ -15,7 +16,7 @@ using System.Threading.Tasks;
namespace MediaBrowser.Providers.Movies
{
- class MovieDbImageProvider : IRemoteImageProvider, IHasOrder
+ class MovieDbImageProvider : IRemoteImageProvider, IHasOrder, IHasChangeMonitor
{
private readonly IJsonSerializer _jsonSerializer;
private readonly IHttpClient _httpClient;
@@ -207,5 +208,10 @@ namespace MediaBrowser.Providers.Movies
ResourcePool = MovieDbProvider.Current.MovieDbResourcePool
});
}
+
+ public bool HasChanged(IHasMetadata item, DateTime date)
+ {
+ return MovieDbProvider.Current.HasChanged(item, date);
+ }
}
}
diff --git a/MediaBrowser.Providers/Movies/MovieDbProvider.cs b/MediaBrowser.Providers/Movies/MovieDbProvider.cs
index a9526787c4..36dfc64d2b 100644
--- a/MediaBrowser.Providers/Movies/MovieDbProvider.cs
+++ b/MediaBrowser.Providers/Movies/MovieDbProvider.cs
@@ -19,7 +19,7 @@ namespace MediaBrowser.Providers.Movies
/// <summary>
/// Class MovieDbProvider
/// </summary>
- public class MovieDbProvider : IRemoteMetadataProvider<Movie, MovieInfo>, IDisposable, IHasChangeMonitor
+ public class MovieDbProvider : IRemoteMetadataProvider<Movie, MovieInfo>, IDisposable
{
internal readonly SemaphoreSlim MovieDbResourcePool = new SemaphoreSlim(1, 1);
diff --git a/MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs b/MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs
index df786cffc8..ed36cb7afc 100644
--- a/MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs
+++ b/MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs
@@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace MediaBrowser.Providers.Movies
{
- public class MovieDbTrailerProvider : IRemoteMetadataProvider<Trailer, TrailerInfo>, IHasChangeMonitor
+ public class MovieDbTrailerProvider : IRemoteMetadataProvider<Trailer, TrailerInfo>
{
public Task<MetadataResult<Trailer>> GetMetadata(TrailerInfo info, CancellationToken cancellationToken)
{
diff --git a/MediaBrowser.Providers/Movies/MovieMetadataService.cs b/MediaBrowser.Providers/Movies/MovieMetadataService.cs
index 674b364225..34536d97da 100644
--- a/MediaBrowser.Providers/Movies/MovieMetadataService.cs
+++ b/MediaBrowser.Providers/Movies/MovieMetadataService.cs
@@ -34,10 +34,5 @@ namespace MediaBrowser.Providers.Movies
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(Movie item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/Movies/MovieUpdatesPrescanTask.cs b/MediaBrowser.Providers/Movies/MovieUpdatesPrescanTask.cs
index 3f200dc8c5..483175f371 100644
--- a/MediaBrowser.Providers/Movies/MovieUpdatesPrescanTask.cs
+++ b/MediaBrowser.Providers/Movies/MovieUpdatesPrescanTask.cs
@@ -1,6 +1,5 @@
using MediaBrowser.Common.IO;
using MediaBrowser.Common.Net;
-using MediaBrowser.Common.Progress;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
diff --git a/MediaBrowser.Providers/Movies/TrailerMetadataService.cs b/MediaBrowser.Providers/Movies/TrailerMetadataService.cs
index 620799a18d..d9ae6187cf 100644
--- a/MediaBrowser.Providers/Movies/TrailerMetadataService.cs
+++ b/MediaBrowser.Providers/Movies/TrailerMetadataService.cs
@@ -34,10 +34,5 @@ namespace MediaBrowser.Providers.Movies
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(Trailer item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/Music/AlbumMetadataService.cs b/MediaBrowser.Providers/Music/AlbumMetadataService.cs
index d4bbe5a28c..410441fc82 100644
--- a/MediaBrowser.Providers/Music/AlbumMetadataService.cs
+++ b/MediaBrowser.Providers/Music/AlbumMetadataService.cs
@@ -42,11 +42,6 @@ namespace MediaBrowser.Providers.Music
}
}
- protected override Task SaveItem(MusicAlbum item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
-
protected override ItemUpdateType BeforeSave(MusicAlbum item)
{
var updateType = base.BeforeSave(item);
diff --git a/MediaBrowser.Providers/Music/ArtistMetadataService.cs b/MediaBrowser.Providers/Music/ArtistMetadataService.cs
index 9cc4406ac0..1b7f229e47 100644
--- a/MediaBrowser.Providers/Music/ArtistMetadataService.cs
+++ b/MediaBrowser.Providers/Music/ArtistMetadataService.cs
@@ -9,12 +9,10 @@ using MediaBrowser.Providers.Manager;
using System;
using System.Collections.Generic;
using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
namespace MediaBrowser.Providers.Music
{
- public class ArtistMetadataService : MetadataService<MusicArtist, ItemLookupInfo>
+ public class ArtistMetadataService : MetadataService<MusicArtist, ArtistInfo>
{
private readonly ILibraryManager _libraryManager;
@@ -37,11 +35,6 @@ namespace MediaBrowser.Providers.Music
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
- protected override Task SaveItem(MusicArtist item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
-
protected override ItemUpdateType BeforeSave(MusicArtist item)
{
var updateType = base.BeforeSave(item);
diff --git a/MediaBrowser.Providers/Music/AudioMetadataService.cs b/MediaBrowser.Providers/Music/AudioMetadataService.cs
index 408f499dcd..cda22b0f5e 100644
--- a/MediaBrowser.Providers/Music/AudioMetadataService.cs
+++ b/MediaBrowser.Providers/Music/AudioMetadataService.cs
@@ -44,10 +44,5 @@ namespace MediaBrowser.Providers.Music
target.Album = source.Album;
}
}
-
- protected override Task SaveItem(Audio item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/Music/Extensions.cs b/MediaBrowser.Providers/Music/Extensions.cs
index 0ba02cbec2..671242eed1 100644
--- a/MediaBrowser.Providers/Music/Extensions.cs
+++ b/MediaBrowser.Providers/Music/Extensions.cs
@@ -63,5 +63,19 @@ namespace MediaBrowser.Providers.Music
return id;
}
+
+ public static string GetArtistId(this ArtistInfo info)
+ {
+ string id;
+ info.ProviderIds.TryGetValue(MetadataProviders.MusicBrainzArtist.ToString(), out id);
+
+ if (string.IsNullOrEmpty(id))
+ {
+ return info.SongInfos.Select(i => i.GetProviderId(MetadataProviders.MusicBrainzAlbumArtist))
+ .FirstOrDefault(i => !string.IsNullOrEmpty(i));
+ }
+
+ return id;
+ }
}
}
diff --git a/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs b/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs
index 0affbf9094..767c58cb99 100644
--- a/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs
+++ b/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs
@@ -5,9 +5,11 @@ using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Serialization;
+using MoreLinq;
using System;
using System.Collections.Generic;
using System.IO;
+using System.Linq;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
@@ -39,6 +41,7 @@ namespace MediaBrowser.Providers.Music
if (lastFmData != null && lastFmData.album != null)
{
result.HasMetadata = true;
+ result.Item = new MusicAlbum();
ProcessAlbumData(result.Item, lastFmData.album);
}
@@ -72,18 +75,18 @@ namespace MediaBrowser.Providers.Music
}
var albumArtist = item.GetAlbumArtist();
- //// Get each song, distinct by the combination of AlbumArtist and Album
- //var songs = item.RecursiveChildren.OfType<Audio>().DistinctBy(i => (i.AlbumArtist ?? string.Empty) + (i.Album ?? string.Empty), StringComparer.OrdinalIgnoreCase).ToList();
-
- //foreach (var song in songs.Where(song => !string.IsNullOrEmpty(song.Album) && !string.IsNullOrEmpty(song.AlbumArtist)))
- //{
- // var result = await GetAlbumResult(song.AlbumArtist, song.Album, cancellationToken).ConfigureAwait(false);
-
- // if (result != null && result.album != null)
- // {
- // return result;
- // }
- //}
+ // Get each song, distinct by the combination of AlbumArtist and Album
+ var songs = item.SongInfos.DistinctBy(i => (i.AlbumArtist ?? string.Empty) + (i.Album ?? string.Empty), StringComparer.OrdinalIgnoreCase).ToList();
+
+ foreach (var song in songs.Where(song => !string.IsNullOrEmpty(song.Album) && !string.IsNullOrEmpty(song.AlbumArtist)))
+ {
+ var result = await GetAlbumResult(song.AlbumArtist, song.Album, cancellationToken).ConfigureAwait(false);
+
+ if (result != null && result.album != null)
+ {
+ return result;
+ }
+ }
if (string.IsNullOrEmpty(albumArtist))
{
diff --git a/MediaBrowser.Providers/Music/LastfmArtistProvider.cs b/MediaBrowser.Providers/Music/LastfmArtistProvider.cs
index 865daaf005..7aceff41ad 100644
--- a/MediaBrowser.Providers/Music/LastfmArtistProvider.cs
+++ b/MediaBrowser.Providers/Music/LastfmArtistProvider.cs
@@ -42,7 +42,7 @@ namespace MediaBrowser.Providers.Music
{
var result = new MetadataResult<MusicArtist>();
- var musicBrainzId = id.GetProviderId(MetadataProviders.MusicBrainzArtist);
+ var musicBrainzId = id.GetArtistId();
if (!String.IsNullOrWhiteSpace(musicBrainzId))
{
diff --git a/MediaBrowser.Providers/Music/MovieDbMusicVideoProvider.cs b/MediaBrowser.Providers/Music/MovieDbMusicVideoProvider.cs
index 32101260b7..99fe5c38dc 100644
--- a/MediaBrowser.Providers/Music/MovieDbMusicVideoProvider.cs
+++ b/MediaBrowser.Providers/Music/MovieDbMusicVideoProvider.cs
@@ -1,4 +1,5 @@
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Providers.Movies;
using System;
@@ -7,7 +8,7 @@ using System.Threading.Tasks;
namespace MediaBrowser.Providers.Music
{
- public class MovieDbMusicVideoProvider : IRemoteMetadataProvider<MusicVideo, MusicVideoInfo>, IHasChangeMonitor
+ public class MovieDbMusicVideoProvider : IRemoteMetadataProvider<MusicVideo, MusicVideoInfo>
{
public Task<MetadataResult<MusicVideo>> GetMetadata(MusicVideoInfo info, CancellationToken cancellationToken)
{
diff --git a/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs b/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs
index 1ed5d6b389..2fbcf64ca5 100644
--- a/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs
+++ b/MediaBrowser.Providers/Music/MusicBrainzAlbumProvider.cs
@@ -47,14 +47,12 @@ namespace MediaBrowser.Providers.Music
{
releaseId = releaseResult.ReleaseId;
result.HasMetadata = true;
- result.Item.SetProviderId(MetadataProviders.MusicBrainzAlbum, releaseId);
}
if (!string.IsNullOrEmpty(releaseResult.ReleaseGroupId))
{
releaseGroupId = releaseResult.ReleaseGroupId;
result.HasMetadata = true;
- result.Item.SetProviderId(MetadataProviders.MusicBrainzReleaseGroup, releaseGroupId);
}
}
@@ -63,7 +61,6 @@ namespace MediaBrowser.Providers.Music
{
releaseGroupId = await GetReleaseGroupId(releaseId, cancellationToken).ConfigureAwait(false);
result.HasMetadata = true;
- result.Item.SetProviderId(MetadataProviders.MusicBrainzReleaseGroup, releaseGroupId);
}
if (result.HasMetadata)
diff --git a/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs b/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs
index 7eeb617a72..52a5981714 100644
--- a/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs
+++ b/MediaBrowser.Providers/Music/MusicBrainzArtistProvider.cs
@@ -17,8 +17,8 @@ namespace MediaBrowser.Providers.Music
public async Task<MetadataResult<MusicArtist>> GetMetadata(ArtistInfo id, CancellationToken cancellationToken)
{
var result = new MetadataResult<MusicArtist>();
-
- var musicBrainzId = id.GetProviderId(MetadataProviders.MusicBrainzArtist) ?? await FindId(id, cancellationToken).ConfigureAwait(false);
+
+ var musicBrainzId = id.GetArtistId() ?? await FindId(id, cancellationToken).ConfigureAwait(false);
if (!string.IsNullOrWhiteSpace(musicBrainzId))
{
diff --git a/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs b/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs
index 5b46cb6ba8..e30f93af9c 100644
--- a/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs
+++ b/MediaBrowser.Providers/Music/MusicVideoMetadataService.cs
@@ -1,6 +1,7 @@
using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
@@ -44,10 +45,5 @@ namespace MediaBrowser.Providers.Music
target.Artist = source.Artist;
}
}
-
- protected override Task SaveItem(MusicVideo item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/Music/MusicVideoXmlParser.cs b/MediaBrowser.Providers/Music/MusicVideoXmlParser.cs
index 5af203fa74..0c160ff665 100644
--- a/MediaBrowser.Providers/Music/MusicVideoXmlParser.cs
+++ b/MediaBrowser.Providers/Music/MusicVideoXmlParser.cs
@@ -1,4 +1,5 @@
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Logging;
using System.Xml;
diff --git a/MediaBrowser.Providers/Music/MusicVideoXmlProvider.cs b/MediaBrowser.Providers/Music/MusicVideoXmlProvider.cs
index 5bdc2cdd01..ec763c8524 100644
--- a/MediaBrowser.Providers/Music/MusicVideoXmlProvider.cs
+++ b/MediaBrowser.Providers/Music/MusicVideoXmlProvider.cs
@@ -1,5 +1,6 @@
using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Movies;
diff --git a/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs b/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs
index 09b069c73c..db5f1b8cea 100644
--- a/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs
+++ b/MediaBrowser.Providers/MusicGenres/MusicGenreMetadataService.cs
@@ -34,10 +34,5 @@ namespace MediaBrowser.Providers.MusicGenres
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(MusicGenre item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/People/PersonMetadataService.cs b/MediaBrowser.Providers/People/PersonMetadataService.cs
index de192ea2f2..b3b3e88d05 100644
--- a/MediaBrowser.Providers/People/PersonMetadataService.cs
+++ b/MediaBrowser.Providers/People/PersonMetadataService.cs
@@ -39,10 +39,5 @@ namespace MediaBrowser.Providers.People
target.PlaceOfBirth = source.PlaceOfBirth;
}
}
-
- protected override Task SaveItem(Person item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/Savers/AlbumXmlSaver.cs b/MediaBrowser.Providers/Savers/AlbumXmlSaver.cs
index 5d61934913..74c5073946 100644
--- a/MediaBrowser.Providers/Savers/AlbumXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/AlbumXmlSaver.cs
@@ -7,6 +7,7 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Providers.Savers
{
@@ -35,6 +36,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs b/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs
index 1ae1eaa644..c5c564fba6 100644
--- a/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs
@@ -3,6 +3,7 @@ using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
using MediaBrowser.Providers.Music;
using System;
using System.Collections.Generic;
@@ -37,6 +38,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs b/MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs
index 06a17528b6..fb5c570953 100644
--- a/MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs
@@ -7,6 +7,7 @@ using System.IO;
using System.Text;
using System.Threading;
using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Providers.Savers
{
@@ -35,6 +36,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Savers/ChannelXmlSaver.cs b/MediaBrowser.Providers/Savers/ChannelXmlSaver.cs
index 36ee0dcc69..7da6c25c1f 100644
--- a/MediaBrowser.Providers/Savers/ChannelXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/ChannelXmlSaver.cs
@@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Providers.Savers
{
@@ -22,6 +23,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs b/MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs
index f662c6cbf8..f9932ce755 100644
--- a/MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs
@@ -10,6 +10,7 @@ using System.IO;
using System.Security;
using System.Text;
using System.Threading;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Providers.Savers
{
@@ -26,6 +27,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Savers/FolderXmlSaver.cs b/MediaBrowser.Providers/Savers/FolderXmlSaver.cs
index e0ae638e95..5c21443ceb 100644
--- a/MediaBrowser.Providers/Savers/FolderXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/FolderXmlSaver.cs
@@ -9,6 +9,7 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Providers.Savers
{
@@ -37,6 +38,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var folder = item as Folder;
if (folder == null)
diff --git a/MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs b/MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs
index 017f17f8d4..f0d34df08f 100644
--- a/MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs
@@ -7,6 +7,7 @@ using System.IO;
using System.Security;
using System.Text;
using System.Threading;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Providers.Savers
{
@@ -35,6 +36,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Savers/GameXmlSaver.cs b/MediaBrowser.Providers/Savers/GameXmlSaver.cs
index 6138195173..a2a96909f0 100644
--- a/MediaBrowser.Providers/Savers/GameXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/GameXmlSaver.cs
@@ -1,7 +1,6 @@
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using System.Collections.Generic;
using System.Globalization;
@@ -40,6 +39,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Savers/MovieXmlSaver.cs b/MediaBrowser.Providers/Savers/MovieXmlSaver.cs
index 15fdc67529..e62a86af02 100644
--- a/MediaBrowser.Providers/Savers/MovieXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/MovieXmlSaver.cs
@@ -1,5 +1,6 @@
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
@@ -11,6 +12,7 @@ using System.Security;
using System.Text;
using System.Threading;
using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Providers.Savers
{
@@ -44,6 +46,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Savers/PersonXmlSaver.cs b/MediaBrowser.Providers/Savers/PersonXmlSaver.cs
index 167e514a82..10f75d5915 100644
--- a/MediaBrowser.Providers/Savers/PersonXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/PersonXmlSaver.cs
@@ -6,6 +6,7 @@ using System.IO;
using System.Security;
using System.Text;
using System.Threading;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Providers.Savers
{
@@ -30,6 +31,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Savers/SeasonXmlSaver.cs b/MediaBrowser.Providers/Savers/SeasonXmlSaver.cs
index 6bb2855f0a..cc0bf8b36f 100644
--- a/MediaBrowser.Providers/Savers/SeasonXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/SeasonXmlSaver.cs
@@ -7,6 +7,7 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Providers.Savers
{
@@ -35,6 +36,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Savers/SeriesXmlSaver.cs b/MediaBrowser.Providers/Savers/SeriesXmlSaver.cs
index 946c497790..ffd90b5d18 100644
--- a/MediaBrowser.Providers/Savers/SeriesXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/SeriesXmlSaver.cs
@@ -2,7 +2,6 @@
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using System.Collections.Generic;
using System.IO;
@@ -37,6 +36,12 @@ namespace MediaBrowser.Providers.Savers
/// <returns><c>true</c> if [is enabled for] [the specified item]; otherwise, <c>false</c>.</returns>
public bool IsEnabledFor(IHasMetadata item, ItemUpdateType updateType)
{
+ var locationType = item.LocationType;
+ if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
+ {
+ return false;
+ }
+
var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit;
var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Studios/StudioMetadataService.cs b/MediaBrowser.Providers/Studios/StudioMetadataService.cs
index 5f39031b21..014ff33401 100644
--- a/MediaBrowser.Providers/Studios/StudioMetadataService.cs
+++ b/MediaBrowser.Providers/Studios/StudioMetadataService.cs
@@ -33,10 +33,5 @@ namespace MediaBrowser.Providers.Studios
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(Studio item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Providers/TV/EpisodeLocalImageProvider.cs b/MediaBrowser.Providers/TV/EpisodeLocalImageProvider.cs
index 03346d0d22..df3b8b48f7 100644
--- a/MediaBrowser.Providers/TV/EpisodeLocalImageProvider.cs
+++ b/MediaBrowser.Providers/TV/EpisodeLocalImageProvider.cs
@@ -2,14 +2,12 @@
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
-using System;
using System.Collections.Generic;
using System.IO;
-using System.Linq;
namespace MediaBrowser.Providers.TV
{
- public class EpisodeLocalImageProvider : IImageFileProvider
+ public class EpisodeLocalLocalImageProvider : ILocalImageFileProvider
{
public string Name
{
@@ -23,37 +21,46 @@ namespace MediaBrowser.Providers.TV
public List<LocalImageInfo> GetImages(IHasImages item)
{
+ var file = GetFile(item);
+
+ var list = new List<LocalImageInfo>();
+
+ if (file != null)
+ {
+ list.Add(new LocalImageInfo
+ {
+ FileInfo = file,
+ Type = ImageType.Primary
+ });
+ }
+
+ return list;
+ }
+
+ private FileInfo GetFile(IHasImages item)
+ {
var parentPath = Path.GetDirectoryName(item.Path);
var nameWithoutExtension = Path.GetFileNameWithoutExtension(item.Path);
var thumbName = nameWithoutExtension + "-thumb";
- return new DirectoryInfo(parentPath).EnumerateFiles("*", SearchOption.AllDirectories)
- .Where(i =>
- {
- if (BaseItem.SupportedImageExtensions.Contains(i.Extension))
- {
- var currentNameWithoutExtension = Path.GetFileNameWithoutExtension(i.Name);
-
- if (string.Equals(nameWithoutExtension, currentNameWithoutExtension, StringComparison.OrdinalIgnoreCase))
- {
- return true;
- }
-
- if (string.Equals(thumbName, currentNameWithoutExtension, StringComparison.OrdinalIgnoreCase))
- {
- return true;
- }
- }
-
- return false;
- })
- .Select(i => new LocalImageInfo
- {
- FileInfo = i,
- Type = ImageType.Primary
- })
- .ToList();
+ var path = Path.Combine(parentPath, thumbName + ".jpg");
+ var fileInfo = new FileInfo(path);
+
+ if (fileInfo.Exists)
+ {
+ return fileInfo;
+ }
+
+ path = Path.Combine(parentPath, "metadata", nameWithoutExtension + ".jpg");
+ fileInfo = new FileInfo(path);
+
+ if (fileInfo.Exists)
+ {
+ return fileInfo;
+ }
+
+ return null;
}
}
}
diff --git a/MediaBrowser.Providers/TV/EpisodeMetadataService.cs b/MediaBrowser.Providers/TV/EpisodeMetadataService.cs
index 039a4750d7..fa44af1554 100644
--- a/MediaBrowser.Providers/TV/EpisodeMetadataService.cs
+++ b/MediaBrowser.Providers/TV/EpisodeMetadataService.cs
@@ -71,11 +71,6 @@ namespace MediaBrowser.Providers.TV
}
}
- protected override Task SaveItem(Episode item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
-
protected override ItemUpdateType BeforeMetadataRefresh(Episode item)
{
var updateType = base.BeforeMetadataRefresh(item);
diff --git a/MediaBrowser.Providers/TV/SeasonMetadataService.cs b/MediaBrowser.Providers/TV/SeasonMetadataService.cs
index 5173e03e48..b0c80d5d67 100644
--- a/MediaBrowser.Providers/TV/SeasonMetadataService.cs
+++ b/MediaBrowser.Providers/TV/SeasonMetadataService.cs
@@ -35,11 +35,6 @@ namespace MediaBrowser.Providers.TV
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
- protected override Task SaveItem(Season item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
-
protected override ItemUpdateType BeforeMetadataRefresh(Season item)
{
var updateType = base.BeforeMetadataRefresh(item);
diff --git a/MediaBrowser.Providers/TV/SeriesMetadataService.cs b/MediaBrowser.Providers/TV/SeriesMetadataService.cs
index b858c3784e..76c66ea361 100644
--- a/MediaBrowser.Providers/TV/SeriesMetadataService.cs
+++ b/MediaBrowser.Providers/TV/SeriesMetadataService.cs
@@ -36,11 +36,6 @@ namespace MediaBrowser.Providers.TV
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
- protected override Task SaveItem(Series item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
-
protected override ItemUpdateType BeforeSave(Series item)
{
var updateType = base.BeforeSave(item);
diff --git a/MediaBrowser.Providers/TV/TvdbEpisodeImageProvider.cs b/MediaBrowser.Providers/TV/TvdbEpisodeImageProvider.cs
index 162eb45bc3..754f973bc8 100644
--- a/MediaBrowser.Providers/TV/TvdbEpisodeImageProvider.cs
+++ b/MediaBrowser.Providers/TV/TvdbEpisodeImageProvider.cs
@@ -194,6 +194,11 @@ namespace MediaBrowser.Providers.TV
public bool HasChanged(IHasMetadata item, DateTime date)
{
+ if (!_config.Configuration.EnableTvDbUpdates && item.LocationType != LocationType.Virtual)
+ {
+ return false;
+ }
+
if (!item.HasImage(ImageType.Primary))
{
var episode = (Episode)item;
@@ -211,6 +216,7 @@ namespace MediaBrowser.Providers.TV
return files.Any(i => _fileSystem.GetLastWriteTimeUtc(i) > date);
}
}
+
return false;
}
}
diff --git a/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs b/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs
index 41e375baca..1c9f565f3c 100644
--- a/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs
+++ b/MediaBrowser.Providers/TV/TvdbEpisodeProvider.cs
@@ -2,10 +2,8 @@
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
-using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Net;
using System;
using System.Collections.Generic;
using System.Globalization;
@@ -16,7 +14,6 @@ using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
-using PersonInfo = MediaBrowser.Controller.Entities.PersonInfo;
namespace MediaBrowser.Providers.TV
{
@@ -71,7 +68,7 @@ namespace MediaBrowser.Providers.TV
public bool HasChanged(IHasMetadata item, DateTime date)
{
- if (!_config.Configuration.EnableTvDbUpdates)
+ if (!_config.Configuration.EnableTvDbUpdates && item.LocationType != LocationType.Virtual)
{
return false;
}
@@ -423,28 +420,6 @@ namespace MediaBrowser.Providers.TV
break;
}
- case "filename":
- {
- if (string.IsNullOrEmpty(item.PrimaryImagePath))
- {
- var val = reader.ReadElementContentAsString();
- if (!string.IsNullOrWhiteSpace(val))
- {
- try
- {
- var url = TVUtils.BannerUrl + val;
-
- //await _providerManager.SaveImage(item, url, TvdbSeriesProvider.Current.TvDbResourcePool, ImageType.Primary, null, cancellationToken).ConfigureAwait(false);
- }
- catch (HttpException)
- {
- status = ProviderRefreshStatus.CompletedWithErrors;
- }
- }
- }
- break;
- }
-
case "Overview":
{
if (!item.LockedFields.Contains(MetadataFields.Overview))
diff --git a/MediaBrowser.Providers/TV/TvdbSeasonImageProvider.cs b/MediaBrowser.Providers/TV/TvdbSeasonImageProvider.cs
index a63f3ee241..a6276d0d75 100644
--- a/MediaBrowser.Providers/TV/TvdbSeasonImageProvider.cs
+++ b/MediaBrowser.Providers/TV/TvdbSeasonImageProvider.cs
@@ -342,6 +342,11 @@ namespace MediaBrowser.Providers.TV
public bool HasChanged(IHasMetadata item, DateTime date)
{
+ if (!_config.Configuration.EnableTvDbUpdates && item.LocationType != LocationType.Virtual)
+ {
+ return false;
+ }
+
var season = (Season)item;
var series = season.Series;
diff --git a/MediaBrowser.Providers/TV/TvdbSeriesImageProvider.cs b/MediaBrowser.Providers/TV/TvdbSeriesImageProvider.cs
index e568306442..3e1664f85b 100644
--- a/MediaBrowser.Providers/TV/TvdbSeriesImageProvider.cs
+++ b/MediaBrowser.Providers/TV/TvdbSeriesImageProvider.cs
@@ -339,6 +339,11 @@ namespace MediaBrowser.Providers.TV
public bool HasChanged(IHasMetadata item, DateTime date)
{
+ if (!_config.Configuration.EnableTvDbUpdates)
+ {
+ return false;
+ }
+
var tvdbId = item.GetProviderId(MetadataProviders.Tvdb);
if (!String.IsNullOrEmpty(tvdbId))
diff --git a/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs b/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs
index 57e518e853..ba8ac9fd6a 100644
--- a/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs
+++ b/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs
@@ -19,11 +19,10 @@ using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Xml;
-using PersonInfo = MediaBrowser.Controller.Entities.PersonInfo;
namespace MediaBrowser.Providers.TV
{
- public class TvdbSeriesProvider : IRemoteMetadataProvider<Series, SeriesInfo>, IHasChangeMonitor
+ public class TvdbSeriesProvider : IRemoteMetadataProvider<Series, SeriesInfo>
{
internal readonly SemaphoreSlim TvDbResourcePool = new SemaphoreSlim(2, 2);
internal static TvdbSeriesProvider Current { get; private set; }
diff --git a/MediaBrowser.Providers/Users/UserMetadataService.cs b/MediaBrowser.Providers/Users/UserMetadataService.cs
index dac0c262f1..5b49033a92 100644
--- a/MediaBrowser.Providers/Users/UserMetadataService.cs
+++ b/MediaBrowser.Providers/Users/UserMetadataService.cs
@@ -34,10 +34,5 @@ namespace MediaBrowser.Providers.Users
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(User item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _userManager.UpdateUser(item);
- }
}
}
diff --git a/MediaBrowser.Providers/Videos/VideoMetadataService.cs b/MediaBrowser.Providers/Videos/VideoMetadataService.cs
index cce9dc6f07..de8bd44e66 100644
--- a/MediaBrowser.Providers/Videos/VideoMetadataService.cs
+++ b/MediaBrowser.Providers/Videos/VideoMetadataService.cs
@@ -35,11 +35,6 @@ namespace MediaBrowser.Providers.Videos
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
- protected override Task SaveItem(Video item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
-
public override int Order
{
get
diff --git a/MediaBrowser.Providers/Years/YearMetadataService.cs b/MediaBrowser.Providers/Years/YearMetadataService.cs
index d40b8cb656..621ea96cec 100644
--- a/MediaBrowser.Providers/Years/YearMetadataService.cs
+++ b/MediaBrowser.Providers/Years/YearMetadataService.cs
@@ -34,10 +34,5 @@ namespace MediaBrowser.Providers.Years
{
ProviderUtils.MergeBaseItemData(source, target, lockedFields, replaceData, mergeMetadataSettings);
}
-
- protected override Task SaveItem(Year item, ItemUpdateType reason, CancellationToken cancellationToken)
- {
- return _libraryManager.UpdateItem(item, reason, cancellationToken);
- }
}
}
diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs
index 998895cbfd..f355f4bf6e 100644
--- a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs
+++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs
@@ -1,6 +1,7 @@
using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Resolvers;
diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
index fe4283368c..8489624fc7 100644
--- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
+++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
@@ -192,6 +192,7 @@
<Compile Include="Roku\RokuControllerFactory.cs" />
<Compile Include="ScheduledTasks\PeopleValidationTask.cs" />
<Compile Include="ScheduledTasks\ChapterImagesTask.cs" />
+ <Compile Include="ScheduledTasks\RefreshIntrosTask.cs" />
<Compile Include="ScheduledTasks\RefreshMediaLibraryTask.cs" />
<Compile Include="ServerApplicationPaths.cs" />
<Compile Include="ServerManager\ServerManager.cs" />
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs
index 8a82c062dd..eb6e142c13 100644
--- a/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs
+++ b/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs
@@ -1,10 +1,9 @@
-using System.IO;
-using MediaBrowser.Common.Configuration;
+using MediaBrowser.Common.Configuration;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Logging;
using System;
-using System.Collections.Generic;
using System.Data;
+using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
@@ -17,8 +16,6 @@ namespace MediaBrowser.Server.Implementations.Persistence
private readonly ILogger _logger;
- private IDbCommand _deleteInfosCommand;
- private IDbCommand _saveInfoCommand;
private IDbCommand _saveStatusCommand;
private readonly IApplicationPaths _appPaths;
@@ -48,16 +45,13 @@ namespace MediaBrowser.Server.Implementations.Persistence
/// <returns>Task.</returns>
public async Task Initialize()
{
- var dbFile = Path.Combine(_appPaths.DataPath, "providerinfo.db");
+ var dbFile = Path.Combine(_appPaths.DataPath, "refreshinfo.db");
_connection = await SqliteExtensions.ConnectToDb(dbFile, _logger).ConfigureAwait(false);
string[] queries = {
- "create table if not exists providerinfos (ItemId GUID, ProviderId GUID, ProviderVersion TEXT, FileStamp GUID, LastRefreshStatus TEXT, LastRefreshed datetime, PRIMARY KEY (ItemId, ProviderId))",
- "create index if not exists idx_providerinfos on providerinfos(ItemId, ProviderId)",
-
- "create table if not exists MetadataStatus (ItemId GUID PRIMARY KEY, DateLastMetadataRefresh datetime, DateLastImagesRefresh datetime, LastStatus TEXT, LastErrorMessage TEXT, MetadataProvidersRefreshed TEXT, ImageProvidersRefreshed TEXT)",
+ "create table if not exists MetadataStatus (ItemId GUID PRIMARY KEY, ItemName TEXT, SeriesName TEXT, DateLastMetadataRefresh datetime, DateLastImagesRefresh datetime, LastStatus TEXT, LastErrorMessage TEXT, MetadataProvidersRefreshed TEXT, ImageProvidersRefreshed TEXT)",
"create index if not exists idx_MetadataStatus on MetadataStatus(ItemId)",
//pragmas
@@ -73,21 +67,11 @@ namespace MediaBrowser.Server.Implementations.Persistence
_shrinkMemoryTimer = new SqliteShrinkMemoryTimer(_connection, _writeLock, _logger);
}
- private static readonly string[] SaveHistoryColumns =
- {
- "ItemId",
- "ProviderId",
- "ProviderVersion",
- "FileStamp",
- "LastRefreshStatus",
- "LastRefreshed"
- };
-
- private readonly string[] _historySelectColumns = SaveHistoryColumns.Skip(1).ToArray();
-
private static readonly string[] StatusColumns =
{
"ItemId",
+ "ItemName",
+ "SeriesName",
"DateLastMetadataRefresh",
"DateLastImagesRefresh",
"LastStatus",
@@ -106,21 +90,6 @@ namespace MediaBrowser.Server.Implementations.Persistence
/// </summary>
private void PrepareStatements()
{
- _deleteInfosCommand = _connection.CreateCommand();
- _deleteInfosCommand.CommandText = "delete from providerinfos where ItemId=@ItemId";
- _deleteInfosCommand.Parameters.Add(_deleteInfosCommand, "@ItemId");
-
- _saveInfoCommand = _connection.CreateCommand();
-
- _saveInfoCommand.CommandText = string.Format("replace into providerinfos ({0}) values ({1})",
- string.Join(",", SaveHistoryColumns),
- string.Join(",", SaveHistoryColumns.Select(i => "@" + i).ToArray()));
-
- foreach (var col in SaveHistoryColumns)
- {
- _saveInfoCommand.Parameters.Add(_saveInfoCommand, "@" + col);
- }
-
_saveStatusCommand = _connection.CreateCommand();
_saveStatusCommand.CommandText = string.Format("replace into MetadataStatus ({0}) values ({1})",
@@ -133,132 +102,6 @@ namespace MediaBrowser.Server.Implementations.Persistence
}
}
- public IEnumerable<BaseProviderInfo> GetProviderHistory(Guid itemId)
- {
- if (itemId == Guid.Empty)
- {
- throw new ArgumentNullException("itemId");
- }
-
- using (var cmd = _connection.CreateCommand())
- {
- var cmdText = "select " + string.Join(",", _historySelectColumns) + " from providerinfos where";
-
- cmdText += " ItemId=@ItemId";
- cmd.Parameters.Add(cmd, "@ItemId", DbType.Guid).Value = itemId;
-
- cmd.CommandText = cmdText;
-
- using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult))
- {
- while (reader.Read())
- {
- yield return GetBaseProviderInfo(reader);
- }
- }
- }
- }
-
- /// <summary>
- /// Gets the base provider information.
- /// </summary>
- /// <param name="reader">The reader.</param>
- /// <returns>BaseProviderInfo.</returns>
- private BaseProviderInfo GetBaseProviderInfo(IDataReader reader)
- {
- var item = new BaseProviderInfo
- {
- ProviderId = reader.GetGuid(0)
- };
-
- if (!reader.IsDBNull(1))
- {
- item.ProviderVersion = reader.GetString(1);
- }
-
- item.FileStamp = reader.GetGuid(2);
- item.LastRefreshStatus = (ProviderRefreshStatus)Enum.Parse(typeof(ProviderRefreshStatus), reader.GetString(3), true);
- item.LastRefreshed = reader.GetDateTime(4).ToUniversalTime();
-
- return item;
- }
-
- public async Task SaveProviderHistory(Guid id, IEnumerable<BaseProviderInfo> infos, CancellationToken cancellationToken)
- {
- if (id == Guid.Empty)
- {
- throw new ArgumentNullException("id");
- }
-
- if (infos == null)
- {
- throw new ArgumentNullException("infos");
- }
-
- cancellationToken.ThrowIfCancellationRequested();
-
- await _writeLock.WaitAsync(cancellationToken).ConfigureAwait(false);
-
- IDbTransaction transaction = null;
-
- try
- {
- transaction = _connection.BeginTransaction();
-
- _deleteInfosCommand.GetParameter(0).Value = id;
-
- _deleteInfosCommand.Transaction = transaction;
-
- _deleteInfosCommand.ExecuteNonQuery();
-
- foreach (var stream in infos)
- {
- cancellationToken.ThrowIfCancellationRequested();
-
- _saveInfoCommand.GetParameter(0).Value = id;
- _saveInfoCommand.GetParameter(1).Value = stream.ProviderId;
- _saveInfoCommand.GetParameter(2).Value = stream.ProviderVersion;
- _saveInfoCommand.GetParameter(3).Value = stream.FileStamp;
- _saveInfoCommand.GetParameter(4).Value = stream.LastRefreshStatus.ToString();
- _saveInfoCommand.GetParameter(5).Value = stream.LastRefreshed;
-
- _saveInfoCommand.Transaction = transaction;
- _saveInfoCommand.ExecuteNonQuery();
- }
-
- transaction.Commit();
- }
- catch (OperationCanceledException)
- {
- if (transaction != null)
- {
- transaction.Rollback();
- }
-
- throw;
- }
- catch (Exception e)
- {
- _logger.ErrorException("Failed to save provider info:", e);
-
- if (transaction != null)
- {
- transaction.Rollback();
- }
-
- throw;
- }
- finally
- {
- if (transaction != null)
- {
- transaction.Dispose();
- }
-
- _writeLock.Release();
- }
- }
-
public MetadataStatus GetMetadataStatus(Guid itemId)
{
if (itemId == Guid.Empty)
@@ -296,32 +139,42 @@ namespace MediaBrowser.Server.Implementations.Persistence
if (!reader.IsDBNull(1))
{
- result.DateLastMetadataRefresh = reader.GetDateTime(1).ToUniversalTime();
+ result.ItemName = reader.GetString(1);
}
if (!reader.IsDBNull(2))
{
- result.DateLastImagesRefresh = reader.GetDateTime(2).ToUniversalTime();
+ result.SeriesName = reader.GetString(2);
}
if (!reader.IsDBNull(3))
{
- result.LastStatus = (ProviderRefreshStatus)Enum.Parse(typeof(ProviderRefreshStatus), reader.GetString(3), true);
+ result.DateLastMetadataRefresh = reader.GetDateTime(3).ToUniversalTime();
}
if (!reader.IsDBNull(4))
{
- result.LastErrorMessage = reader.GetString(4);
+ result.DateLastImagesRefresh = reader.GetDateTime(4).ToUniversalTime();
}
if (!reader.IsDBNull(5))
{
- result.MetadataProvidersRefreshed = reader.GetString(5).Split('|').Where(i => !string.IsNullOrEmpty(i)).Select(i => new Guid(i)).ToList();
+ result.LastStatus = (ProviderRefreshStatus)Enum.Parse(typeof(ProviderRefreshStatus), reader.GetString(5), true);
}
if (!reader.IsDBNull(6))
{
- result.ImageProvidersRefreshed = reader.GetString(6).Split('|').Where(i => !string.IsNullOrEmpty(i)).Select(i => new Guid(i)).ToList();
+ result.LastErrorMessage = reader.GetString(6);
+ }
+
+ if (!reader.IsDBNull(7))
+ {
+ result.MetadataProvidersRefreshed = reader.GetString(7).Split('|').Where(i => !string.IsNullOrEmpty(i)).Select(i => new Guid(i)).ToList();
+ }
+
+ if (!reader.IsDBNull(8))
+ {
+ result.ImageProvidersRefreshed = reader.GetString(8).Split('|').Where(i => !string.IsNullOrEmpty(i)).Select(i => new Guid(i)).ToList();
}
return result;
@@ -345,12 +198,14 @@ namespace MediaBrowser.Server.Implementations.Persistence
transaction = _connection.BeginTransaction();
_saveStatusCommand.GetParameter(0).Value = status.ItemId;
- _saveStatusCommand.GetParameter(1).Value = status.DateLastMetadataRefresh;
- _saveStatusCommand.GetParameter(2).Value = status.DateLastImagesRefresh;
- _saveStatusCommand.GetParameter(3).Value = status.LastStatus.ToString();
- _saveStatusCommand.GetParameter(4).Value = status.LastErrorMessage;
- _saveStatusCommand.GetParameter(5).Value = string.Join("|", status.MetadataProvidersRefreshed.ToArray());
- _saveStatusCommand.GetParameter(6).Value = string.Join("|", status.ImageProvidersRefreshed.ToArray());
+ _saveStatusCommand.GetParameter(1).Value = status.ItemName;
+ _saveStatusCommand.GetParameter(2).Value = status.SeriesName;
+ _saveStatusCommand.GetParameter(3).Value = status.DateLastMetadataRefresh;
+ _saveStatusCommand.GetParameter(4).Value = status.DateLastImagesRefresh;
+ _saveStatusCommand.GetParameter(5).Value = status.LastStatus.ToString();
+ _saveStatusCommand.GetParameter(6).Value = status.LastErrorMessage;
+ _saveStatusCommand.GetParameter(7).Value = string.Join("|", status.MetadataProvidersRefreshed.ToArray());
+ _saveStatusCommand.GetParameter(8).Value = string.Join("|", status.ImageProvidersRefreshed.ToArray());
_saveStatusCommand.Transaction = transaction;
diff --git a/MediaBrowser.Providers/RefreshIntrosTask.cs b/MediaBrowser.Server.Implementations/ScheduledTasks/RefreshIntrosTask.cs
index bfe7e7609f..a65b46f640 100644
--- a/MediaBrowser.Providers/RefreshIntrosTask.cs
+++ b/MediaBrowser.Server.Implementations/ScheduledTasks/RefreshIntrosTask.cs
@@ -1,5 +1,4 @@
using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Logging;
using System;
@@ -7,7 +6,7 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-namespace MediaBrowser.Providers
+namespace MediaBrowser.Server.Implementations.ScheduledTasks
{
/// <summary>
/// Class RefreshIntrosTask
@@ -24,12 +23,13 @@ namespace MediaBrowser.Providers
private readonly ILogger _logger;
private readonly IFileSystem _fileSystem;
-
+
/// <summary>
- /// Initializes a new instance of the <see cref="RefreshIntrosTask"/> class.
+ /// Initializes a new instance of the <see cref="RefreshIntrosTask" /> class.
/// </summary>
/// <param name="libraryManager">The library manager.</param>
/// <param name="logger">The logger.</param>
+ /// <param name="fileSystem">The file system.</param>
public RefreshIntrosTask(ILibraryManager libraryManager, ILogger logger, IFileSystem fileSystem)
{
_libraryManager = libraryManager;
diff --git a/MediaBrowser.Server.Implementations/ServerApplicationPaths.cs b/MediaBrowser.Server.Implementations/ServerApplicationPaths.cs
index abb60a1d58..c36c49df0e 100644
--- a/MediaBrowser.Server.Implementations/ServerApplicationPaths.cs
+++ b/MediaBrowser.Server.Implementations/ServerApplicationPaths.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Common.Implementations;
+using System;
+using MediaBrowser.Common.Implementations;
using MediaBrowser.Controller;
using System.IO;
@@ -214,18 +215,6 @@ namespace MediaBrowser.Server.Implementations
}
/// <summary>
- /// Gets the images data path.
- /// </summary>
- /// <value>The images data path.</value>
- public string DownloadedImagesDataPath
- {
- get
- {
- return Path.Combine(DataPath, "remote-images");
- }
- }
-
- /// <summary>
/// Gets the artists path.
/// </summary>
/// <value>The artists path.</value>
@@ -249,5 +238,20 @@ namespace MediaBrowser.Server.Implementations
return Path.Combine(ItemsByNamePath, "GameGenre");
}
}
+
+ public string InternalMetadataPath
+ {
+ get
+ {
+ return Path.Combine(DataPath, "metadata");
+ }
+ }
+
+ public string GetInternalMetadataPath(Guid id)
+ {
+ var idString = id.ToString("N");
+
+ return Path.Combine(InternalMetadataPath, idString.Substring(0, 2), idString);
+ }
}
}