aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Controller/Entities/BaseItem.cs69
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs4
-rw-r--r--MediaBrowser.Controller/Library/IMetadataSaver.cs7
-rw-r--r--MediaBrowser.Controller/Providers/BaseMetadataProvider.cs88
-rw-r--r--MediaBrowser.Controller/Providers/BaseProviderInfo.cs4
-rw-r--r--MediaBrowser.Providers/ImageFromMediaLocationProvider.cs12
-rw-r--r--MediaBrowser.Providers/ImagesByNameProvider.cs4
-rw-r--r--MediaBrowser.Providers/MediaInfo/FFProbeVideoInfoProvider.cs14
-rw-r--r--MediaBrowser.Providers/Music/LastfmAlbumProvider.cs4
-rw-r--r--MediaBrowser.Providers/Savers/MovieXmlSaver.cs18
-rw-r--r--MediaBrowser.Providers/TV/EpisodeImageFromMediaLocationProvider.cs12
11 files changed, 146 insertions, 90 deletions
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs
index 384db5ed2..00ab867b2 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -220,29 +220,6 @@ namespace MediaBrowser.Controller.Entities
}
/// <summary>
- /// The _file system stamp
- /// </summary>
- private Guid? _fileSystemStamp;
- /// <summary>
- /// Gets a directory stamp, in the form of a string, that can be used for
- /// comparison purposes to determine if the file system entries for this item have changed.
- /// </summary>
- /// <value>The file system stamp.</value>
- [IgnoreDataMember]
- public Guid FileSystemStamp
- {
- get
- {
- if (!_fileSystemStamp.HasValue)
- {
- _fileSystemStamp = GetFileSystemStamp();
- }
-
- return _fileSystemStamp.Value;
- }
- }
-
- /// <summary>
/// Gets the type of the media.
/// </summary>
/// <value>The type of the media.</value>
@@ -256,49 +233,6 @@ namespace MediaBrowser.Controller.Entities
}
/// <summary>
- /// Gets a directory stamp, in the form of a string, that can be used for
- /// comparison purposes to determine if the file system entries for this item have changed.
- /// </summary>
- /// <returns>Guid.</returns>
- private Guid GetFileSystemStamp()
- {
- // If there's no path or the item is a file, there's nothing to do
- if (LocationType != LocationType.FileSystem)
- {
- return Guid.Empty;
- }
-
- try
- {
- if (!ResolveArgs.IsDirectory)
- {
- return Guid.Empty;
- }
- }
- catch (IOException ex)
- {
- Logger.ErrorException("Error determining if path is directory: {0}", ex, ResolveArgs.Path);
- throw;
- }
-
- var sb = new StringBuilder();
-
- // Record the name of each file
- // Need to sort these because accoring to msdn docs, our i/o methods are not guaranteed in any order
- foreach (var file in ResolveArgs.FileSystemChildren
- .OrderBy(f => f.Name))
- {
- sb.Append(file.Name);
- }
- foreach (var file in ResolveArgs.MetadataFiles.OrderBy(f => f.Name))
- {
- sb.Append(file.Name);
- }
-
- return sb.ToString().GetMD5();
- }
-
- /// <summary>
/// The _resolve args
/// </summary>
private ItemResolveArgs _resolveArgs;
@@ -338,9 +272,6 @@ namespace MediaBrowser.Controller.Entities
{
_resolveArgs = value;
_resolveArgsInitialized = value != null;
-
- // Null this out so that it can be lazy loaded again
- _fileSystemStamp = null;
}
}
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index 8dc41661e..e7c4a293b 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -22,7 +22,7 @@ namespace MediaBrowser.Controller.Entities
/// </summary>
public class Folder : BaseItem
{
- private static readonly TypeMapper _typeMapper = new TypeMapper();
+ private static readonly TypeMapper TypeMapper = new TypeMapper();
/// <summary>
/// Gets a value indicating whether this instance is folder.
@@ -883,7 +883,7 @@ namespace MediaBrowser.Controller.Entities
{
var type = child.Type;
- var itemType = _typeMapper.GetType(type);
+ var itemType = TypeMapper.GetType(type);
if (itemType == null)
{
diff --git a/MediaBrowser.Controller/Library/IMetadataSaver.cs b/MediaBrowser.Controller/Library/IMetadataSaver.cs
index fbb8af626..419b65f6f 100644
--- a/MediaBrowser.Controller/Library/IMetadataSaver.cs
+++ b/MediaBrowser.Controller/Library/IMetadataSaver.cs
@@ -17,6 +17,13 @@ namespace MediaBrowser.Controller.Library
bool Supports(BaseItem item);
/// <summary>
+ /// Gets the save path.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <returns>System.String.</returns>
+ string GetSavePath(BaseItem item);
+
+ /// <summary>
/// Saves the specified item.
/// </summary>
/// <param name="item">The item.</param>
diff --git a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs
index 8a73e7ea9..625910c0b 100644
--- a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs
+++ b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs
@@ -1,6 +1,10 @@
-using MediaBrowser.Common.Extensions;
+using System.IO;
+using System.Linq;
+using System.Text;
+using MediaBrowser.Common.Extensions;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using System;
@@ -39,7 +43,7 @@ namespace MediaBrowser.Controller.Providers
protected static readonly Task<bool> FalseTaskResult = Task.FromResult(false);
protected static readonly SemaphoreSlim XmlParsingResourcePool = new SemaphoreSlim(5, 5);
-
+
/// <summary>
/// Supportses the specified item.
/// </summary>
@@ -228,7 +232,7 @@ namespace MediaBrowser.Controller.Providers
{
return true;
}
-
+
return false;
}
@@ -282,6 +286,11 @@ namespace MediaBrowser.Controller.Providers
}
}
+ protected virtual string[] FilestampExtensions
+ {
+ get { return new string[] { }; }
+ }
+
/// <summary>
/// Determines if the parent's file system stamp should be used for comparison
/// </summary>
@@ -302,10 +311,79 @@ namespace MediaBrowser.Controller.Providers
{
if (UseParentFileSystemStamp(item) && item.Parent != null)
{
- return item.Parent.FileSystemStamp;
+ return GetFileSystemStamp(item.Parent);
+ }
+
+ return GetFileSystemStamp(item);
+ }
+
+ /// <summary>
+ /// Gets the file system stamp.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <returns>Guid.</returns>
+ private Guid GetFileSystemStamp(BaseItem item)
+ {
+ // If there's no path or the item is a file, there's nothing to do
+ if (item.LocationType != LocationType.FileSystem)
+ {
+ return Guid.Empty;
+ }
+
+ ItemResolveArgs resolveArgs;
+
+ try
+ {
+ resolveArgs = item.ResolveArgs;
+ }
+ catch (IOException ex)
+ {
+ Logger.ErrorException("Error determining if path is directory: {0}", ex, item.Path);
+ throw;
+ }
+
+ if (!resolveArgs.IsDirectory)
+ {
+ return Guid.Empty;
+ }
+
+ var sb = new StringBuilder();
+
+ var extensions = FilestampExtensions;
+
+ // Record the name of each file
+ // Need to sort these because accoring to msdn docs, our i/o methods are not guaranteed in any order
+ foreach (var file in resolveArgs.FileSystemChildren
+ .Where(i => IncludeInFileStamp(i, extensions))
+ .OrderBy(f => f.Name))
+ {
+ sb.Append(file.Name);
+ }
+
+ foreach (var file in resolveArgs.MetadataFiles
+ .Where(i => IncludeInFileStamp(i, extensions))
+ .OrderBy(f => f.Name))
+ {
+ sb.Append(file.Name);
+ }
+
+ return sb.ToString().GetMD5();
+ }
+
+ /// <summary>
+ /// Includes the in file stamp.
+ /// </summary>
+ /// <param name="file">The file.</param>
+ /// <param name="extensions">The extensions.</param>
+ /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
+ private bool IncludeInFileStamp(FileSystemInfo file, string[] extensions)
+ {
+ if ((file.Attributes & FileAttributes.Directory) == FileAttributes.Directory)
+ {
+ return false;
}
- return item.FileSystemStamp;
+ return extensions.Length == 0 || extensions.Contains(file.Extension, StringComparer.OrdinalIgnoreCase);
}
}
}
diff --git a/MediaBrowser.Controller/Providers/BaseProviderInfo.cs b/MediaBrowser.Controller/Providers/BaseProviderInfo.cs
index 72fddfd93..243ce32af 100644
--- a/MediaBrowser.Controller/Providers/BaseProviderInfo.cs
+++ b/MediaBrowser.Controller/Providers/BaseProviderInfo.cs
@@ -27,10 +27,6 @@ namespace MediaBrowser.Controller.Providers
/// </summary>
/// <value>The provider version.</value>
public string ProviderVersion { get; set; }
- /// <summary>
- /// Contains a has of data that can be used to determine if the provider should refresh again
- /// </summary>
- public Guid Data { get; set; }
}
/// <summary>
diff --git a/MediaBrowser.Providers/ImageFromMediaLocationProvider.cs b/MediaBrowser.Providers/ImageFromMediaLocationProvider.cs
index cd9289fa1..87c450d55 100644
--- a/MediaBrowser.Providers/ImageFromMediaLocationProvider.cs
+++ b/MediaBrowser.Providers/ImageFromMediaLocationProvider.cs
@@ -54,6 +54,18 @@ namespace MediaBrowser.Providers
}
/// <summary>
+ /// Gets the filestamp extensions.
+ /// </summary>
+ /// <value>The filestamp extensions.</value>
+ protected override string[] FilestampExtensions
+ {
+ get
+ {
+ return BaseItem.SupportedImageExtensions;
+ }
+ }
+
+ /// <summary>
/// Fetches metadata and returns true or false indicating if any work that requires persistence was done
/// </summary>
/// <param name="item">The item.</param>
diff --git a/MediaBrowser.Providers/ImagesByNameProvider.cs b/MediaBrowser.Providers/ImagesByNameProvider.cs
index a81363471..dad3a25f3 100644
--- a/MediaBrowser.Providers/ImagesByNameProvider.cs
+++ b/MediaBrowser.Providers/ImagesByNameProvider.cs
@@ -54,7 +54,7 @@ namespace MediaBrowser.Providers
protected override bool NeedsRefreshInternal(BaseItem item, BaseProviderInfo providerInfo)
{
// Force a refresh if the IBN path changed
- if (providerInfo.Data != ConfigurationManager.ApplicationPaths.ItemsByNamePath.GetMD5())
+ if (providerInfo.FileStamp != ConfigurationManager.ApplicationPaths.ItemsByNamePath.GetMD5())
{
return true;
}
@@ -128,7 +128,7 @@ namespace MediaBrowser.Providers
item.ProviderData[Id] = data;
}
- data.Data = ConfigurationManager.ApplicationPaths.ItemsByNamePath.GetMD5();
+ data.FileStamp = ConfigurationManager.ApplicationPaths.ItemsByNamePath.GetMD5();
SetLastRefreshed(item, DateTime.UtcNow);
return result;
diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfoProvider.cs b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfoProvider.cs
index cfb33d757..8ee2bcd8b 100644
--- a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfoProvider.cs
+++ b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfoProvider.cs
@@ -68,6 +68,18 @@ namespace MediaBrowser.Providers.MediaInfo
}
/// <summary>
+ /// Gets the filestamp extensions.
+ /// </summary>
+ /// <value>The filestamp extensions.</value>
+ protected override string[] FilestampExtensions
+ {
+ get
+ {
+ return new[] { ".srt" };
+ }
+ }
+
+ /// <summary>
/// Supports video files and dvd structures
/// </summary>
/// <param name="item">The item.</param>
@@ -251,7 +263,7 @@ namespace MediaBrowser.Providers.MediaInfo
}
var chapters = data.Chapters ?? new List<ChapterInfo>();
-
+
if (video.VideoType == VideoType.BluRay || (video.IsoType.HasValue && video.IsoType.Value == IsoType.BluRay))
{
var inputPath = isoMount != null ? isoMount.MountedPath : video.Path;
diff --git a/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs b/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs
index af277b5fc..10775c689 100644
--- a/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs
+++ b/MediaBrowser.Providers/Music/LastfmAlbumProvider.cs
@@ -50,7 +50,7 @@ namespace MediaBrowser.Providers.Music
{
// If song metadata has changed and we don't have an mbid, refresh
if (string.IsNullOrEmpty(item.GetProviderId(MetadataProviders.Musicbrainz)) &&
- GetComparisonData(item as MusicAlbum) != providerInfo.Data)
+ GetComparisonData(item as MusicAlbum) != providerInfo.FileStamp)
{
return true;
}
@@ -85,7 +85,7 @@ namespace MediaBrowser.Providers.Music
item.ProviderData[Id] = data;
}
- data.Data = GetComparisonData(item as MusicAlbum);
+ data.FileStamp = GetComparisonData(item as MusicAlbum);
}
private async Task<LastfmGetAlbumResult> GetAlbumResult(BaseItem item, CancellationToken cancellationToken)
diff --git a/MediaBrowser.Providers/Savers/MovieXmlSaver.cs b/MediaBrowser.Providers/Savers/MovieXmlSaver.cs
index 35dba678e..7a618c74f 100644
--- a/MediaBrowser.Providers/Savers/MovieXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/MovieXmlSaver.cs
@@ -1,8 +1,8 @@
-using System.IO;
-using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Entities;
+using System.IO;
using System.Threading;
using System.Threading.Tasks;
@@ -46,11 +46,19 @@ namespace MediaBrowser.Providers.Savers
{
var video = (Video)item;
- var directory = video.VideoType == VideoType.Iso || video.VideoType == VideoType.VideoFile ? Path.GetDirectoryName(video.Path) : video.Path;
-
- var xmlFilePath = Path.Combine(directory, "movie.xml");
+ var xmlFilePath = GetSavePath(item);
return Task.Run(() => { });
}
+
+
+ public string GetSavePath(BaseItem item)
+ {
+ var video = (Video)item;
+
+ var directory = video.VideoType == VideoType.Iso || video.VideoType == VideoType.VideoFile ? Path.GetDirectoryName(video.Path) : video.Path;
+
+ return Path.Combine(directory, "movie.xml");
+ }
}
}
diff --git a/MediaBrowser.Providers/TV/EpisodeImageFromMediaLocationProvider.cs b/MediaBrowser.Providers/TV/EpisodeImageFromMediaLocationProvider.cs
index 3c146f027..5b1490750 100644
--- a/MediaBrowser.Providers/TV/EpisodeImageFromMediaLocationProvider.cs
+++ b/MediaBrowser.Providers/TV/EpisodeImageFromMediaLocationProvider.cs
@@ -53,6 +53,18 @@ namespace MediaBrowser.Providers.TV
}
/// <summary>
+ /// Gets the filestamp extensions.
+ /// </summary>
+ /// <value>The filestamp extensions.</value>
+ protected override string[] FilestampExtensions
+ {
+ get
+ {
+ return BaseItem.SupportedImageExtensions;
+ }
+ }
+
+ /// <summary>
/// Fetches metadata and returns true or false indicating if any work that requires persistence was done
/// </summary>
/// <param name="item">The item.</param>