reduce file checks during library scan

This commit is contained in:
Luke Pulverenti 2017-10-13 15:22:24 -04:00
parent 0bc3cdfab7
commit 0351c968c3
11 changed files with 10 additions and 120 deletions

View File

@ -17,7 +17,7 @@ using TagLib.IFD.Tags;
namespace Emby.Photos namespace Emby.Photos
{ {
public class PhotoProvider : ICustomMetadataProvider<Photo>, IHasItemChangeMonitor, IForcedProvider public class PhotoProvider : ICustomMetadataProvider<Photo>, IForcedProvider
{ {
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly IFileSystem _fileSystem; private readonly IFileSystem _fileSystem;
@ -177,19 +177,5 @@ namespace Emby.Photos
{ {
get { return "Embedded Information"; } get { return "Embedded Information"; }
} }
public bool HasChanged(IHasMetadata item, IDirectoryService directoryService)
{
if (item.EnableRefreshOnDateModifiedChange && !string.IsNullOrWhiteSpace(item.Path) && item.LocationType == LocationType.FileSystem)
{
var file = directoryService.GetFile(item.Path);
if (file != null && file.LastWriteTimeUtc != item.DateModified)
{
return true;
}
}
return false;
}
} }
} }

View File

@ -96,23 +96,17 @@ namespace Emby.Server.Implementations.Library
return GetMediaStreamsForItem(list); return GetMediaStreamsForItem(list);
} }
private List<MediaStream> GetMediaStreamsForItem(IEnumerable<MediaStream> streams) private List<MediaStream> GetMediaStreamsForItem(List<MediaStream> streams)
{ {
var list = streams.ToList(); foreach (var stream in streams)
var subtitleStreams = list
.Where(i => i.Type == MediaStreamType.Subtitle)
.ToList();
if (subtitleStreams.Count > 0)
{ {
foreach (var subStream in subtitleStreams) if (stream.Type == MediaStreamType.Subtitle)
{ {
subStream.SupportsExternalStream = StreamSupportsExternalStream(subStream); stream.SupportsExternalStream = StreamSupportsExternalStream(stream);
} }
} }
return list; return streams;
} }
public async Task<IEnumerable<MediaSourceInfo>> GetPlayackMediaSources(string id, string userId, bool enablePathSubstitution, string[] supportedLiveMediaTypes, CancellationToken cancellationToken) public async Task<IEnumerable<MediaSourceInfo>> GetPlayackMediaSources(string id, string userId, bool enablePathSubstitution, string[] supportedLiveMediaTypes, CancellationToken cancellationToken)

View File

@ -51,12 +51,6 @@ namespace MediaBrowser.Controller.Entities
return null; return null;
} }
[IgnoreDataMember]
public override bool EnableRefreshOnDateModifiedChange
{
get { return true; }
}
public Guid? FindSeriesId() public Guid? FindSeriesId()
{ {
return SeriesId; return SeriesId;

View File

@ -38,12 +38,6 @@ namespace MediaBrowser.Controller.Entities
return SeriesPresentationUniqueKey; return SeriesPresentationUniqueKey;
} }
[IgnoreDataMember]
public override bool EnableRefreshOnDateModifiedChange
{
get { return true; }
}
public Guid? FindSeriesId() public Guid? FindSeriesId()
{ {
return SeriesId; return SeriesId;

View File

@ -28,12 +28,6 @@ namespace MediaBrowser.Controller.Entities
locationType != LocationType.Virtual; locationType != LocationType.Virtual;
} }
[IgnoreDataMember]
public override bool EnableRefreshOnDateModifiedChange
{
get { return true; }
}
[IgnoreDataMember] [IgnoreDataMember]
public override bool SupportsThemeMedia public override bool SupportsThemeMedia
{ {

View File

@ -136,7 +136,8 @@ namespace MediaBrowser.Controller.LiveTv
Name = Name, Name = Name,
Path = Path, Path = Path,
RunTimeTicks = RunTimeTicks, RunTimeTicks = RunTimeTicks,
Type = MediaSourceType.Placeholder Type = MediaSourceType.Placeholder,
IsInfiniteStream = RunTimeTicks == null
}; };
list.Add(info); list.Add(info);

View File

@ -220,7 +220,6 @@
<Compile Include="Providers\IExternalId.cs" /> <Compile Include="Providers\IExternalId.cs" />
<Compile Include="Providers\IExtrasProvider.cs" /> <Compile Include="Providers\IExtrasProvider.cs" />
<Compile Include="Providers\IForcedProvider.cs" /> <Compile Include="Providers\IForcedProvider.cs" />
<Compile Include="Providers\IHasChangeMonitor.cs" />
<Compile Include="Entities\IHasMetadata.cs" /> <Compile Include="Entities\IHasMetadata.cs" />
<Compile Include="Providers\IHasItemChangeMonitor.cs" /> <Compile Include="Providers\IHasItemChangeMonitor.cs" />
<Compile Include="Providers\IHasLookupInfo.cs" /> <Compile Include="Providers\IHasLookupInfo.cs" />

View File

@ -1,17 +0,0 @@
using MediaBrowser.Controller.Entities;
using System;
namespace MediaBrowser.Controller.Providers
{
public interface IHasChangeMonitor
{
/// <summary>
/// Determines whether the specified item has changed.
/// </summary>
/// <param name="item">The item.</param>
/// <param name="directoryService">The directory service.</param>
/// <param name="date">The date.</param>
/// <returns><c>true</c> if the specified item has changed; otherwise, <c>false</c>.</returns>
bool HasChanged(IHasMetadata item, IDirectoryService directoryService, DateTime date);
}
}

View File

@ -19,7 +19,7 @@ namespace MediaBrowser.Providers.MediaInfo
/// <summary> /// <summary>
/// Uses ffmpeg to create video images /// Uses ffmpeg to create video images
/// </summary> /// </summary>
public class AudioImageProvider : IDynamicImageProvider, IHasItemChangeMonitor public class AudioImageProvider : IDynamicImageProvider
{ {
private readonly IMediaEncoder _mediaEncoder; private readonly IMediaEncoder _mediaEncoder;
private readonly IServerConfigurationManager _config; private readonly IServerConfigurationManager _config;
@ -134,19 +134,5 @@ namespace MediaBrowser.Providers.MediaInfo
return item.LocationType == LocationType.FileSystem && audio != null; return item.LocationType == LocationType.FileSystem && audio != null;
} }
public bool HasChanged(IHasMetadata item, IDirectoryService directoryService)
{
if (item.EnableRefreshOnDateModifiedChange && !string.IsNullOrWhiteSpace(item.Path) && item.LocationType == LocationType.FileSystem)
{
var file = directoryService.GetFile(item.Path);
if (file != null && file.LastWriteTimeUtc != item.DateModified)
{
return true;
}
}
return false;
}
} }
} }

View File

@ -34,7 +34,6 @@ namespace MediaBrowser.Providers.MediaInfo
ICustomMetadataProvider<Audio>, ICustomMetadataProvider<Audio>,
ICustomMetadataProvider<AudioPodcast>, ICustomMetadataProvider<AudioPodcast>,
ICustomMetadataProvider<AudioBook>, ICustomMetadataProvider<AudioBook>,
IHasItemChangeMonitor,
IHasOrder, IHasOrder,
IForcedProvider, IForcedProvider,
IPreRefreshProvider IPreRefreshProvider
@ -180,32 +179,6 @@ namespace MediaBrowser.Providers.MediaInfo
return prober.Probe(item, cancellationToken); return prober.Probe(item, cancellationToken);
} }
public bool HasChanged(IHasMetadata item, IDirectoryService directoryService)
{
if (item.EnableRefreshOnDateModifiedChange && !string.IsNullOrWhiteSpace(item.Path) && item.LocationType == LocationType.FileSystem)
{
var file = directoryService.GetFile(item.Path);
if (file != null && file.LastWriteTimeUtc != item.DateModified)
{
return true;
}
}
if (item.SupportsLocalMetadata)
{
var video = item as Video;
if (video != null && !video.IsPlaceHolder)
{
return !video.SubtitleFiles
.SequenceEqual(SubtitleResolver.GetSubtitleFiles(video, directoryService, _fileSystem, false)
.OrderBy(i => i), StringComparer.OrdinalIgnoreCase);
}
}
return false;
}
public int Order public int Order
{ {
get get

View File

@ -16,7 +16,7 @@ using System.Threading.Tasks;
namespace MediaBrowser.Providers.MediaInfo namespace MediaBrowser.Providers.MediaInfo
{ {
public class VideoImageProvider : IDynamicImageProvider, IHasItemChangeMonitor, IHasOrder public class VideoImageProvider : IDynamicImageProvider, IHasOrder
{ {
private readonly IMediaEncoder _mediaEncoder; private readonly IMediaEncoder _mediaEncoder;
private readonly ILogger _logger; private readonly ILogger _logger;
@ -149,19 +149,5 @@ namespace MediaBrowser.Providers.MediaInfo
return 100; return 100;
} }
} }
public bool HasChanged(IHasMetadata item, IDirectoryService directoryService)
{
if (item.EnableRefreshOnDateModifiedChange && !string.IsNullOrWhiteSpace(item.Path) && item.LocationType == LocationType.FileSystem)
{
var file = directoryService.GetFile(item.Path);
if (file != null && file.LastWriteTimeUtc != item.DateModified)
{
return true;
}
}
return false;
}
} }
} }