added item type to refresh info

This commit is contained in:
Luke Pulverenti
2014-02-08 17:38:02 -05:00
parent 3ffd95a637
commit 7f5a4c2d4e
37 changed files with 278 additions and 188 deletions

View File

@@ -54,13 +54,13 @@ namespace MediaBrowser.Providers.All
}
}
public List<LocalImageInfo> GetImages(IHasImages item)
public List<LocalImageInfo> GetImages(IHasImages item, DirectoryService directoryService)
{
var path = _config.ApplicationPaths.GetInternalMetadataPath(item.Id);
try
{
return new LocalImageProvider().GetImages(item, path);
return new LocalImageProvider().GetImages(item, path, directoryService);
}
catch (DirectoryNotFoundException)
{

View File

@@ -57,7 +57,7 @@ namespace MediaBrowser.Providers.All
return false;
}
private IEnumerable<FileSystemInfo> GetFiles(IHasImages item, bool includeDirectories)
private IEnumerable<FileSystemInfo> GetFiles(IHasImages item, bool includeDirectories, DirectoryService directoryService)
{
if (item.LocationType != LocationType.FileSystem)
{
@@ -68,34 +68,34 @@ namespace MediaBrowser.Providers.All
if (includeDirectories)
{
return new DirectoryInfo(path).EnumerateFileSystemInfos("*", SearchOption.TopDirectoryOnly)
return directoryService.GetFileSystemEntries(path)
.Where(i => BaseItem.SupportedImageExtensions.Contains(i.Extension, StringComparer.OrdinalIgnoreCase) ||
(i.Attributes & FileAttributes.Directory) == FileAttributes.Directory);
}
return new DirectoryInfo(path).EnumerateFiles("*", SearchOption.TopDirectoryOnly)
return directoryService.GetFiles(path)
.Where(i => BaseItem.SupportedImageExtensions.Contains(i.Extension, StringComparer.OrdinalIgnoreCase));
}
public List<LocalImageInfo> GetImages(IHasImages item)
public List<LocalImageInfo> GetImages(IHasImages item, DirectoryService directoryService)
{
var files = GetFiles(item, true).ToList();
var files = GetFiles(item, true, directoryService).ToList();
var list = new List<LocalImageInfo>();
PopulateImages(item, list, files, true);
PopulateImages(item, list, files, true, directoryService);
return list;
}
public List<LocalImageInfo> GetImages(IHasImages item, string path)
public List<LocalImageInfo> GetImages(IHasImages item, string path, DirectoryService directoryService)
{
return GetImages(item, new[] { path });
return GetImages(item, new[] { path }, directoryService);
}
public List<LocalImageInfo> GetImages(IHasImages item, IEnumerable<string> paths)
public List<LocalImageInfo> GetImages(IHasImages item, IEnumerable<string> paths, DirectoryService directoryService)
{
var files = paths.SelectMany(i => new DirectoryInfo(i).EnumerateFiles("*", SearchOption.TopDirectoryOnly))
var files = paths.SelectMany(directoryService.GetFiles)
.Where(i =>
{
var ext = i.Extension;
@@ -108,12 +108,12 @@ namespace MediaBrowser.Providers.All
var list = new List<LocalImageInfo>();
PopulateImages(item, list, files, false);
PopulateImages(item, list, files, false, directoryService);
return list;
}
private void PopulateImages(IHasImages item, List<LocalImageInfo> images, List<FileSystemInfo> files, bool supportParentSeriesFiles)
private void PopulateImages(IHasImages item, List<LocalImageInfo> images, List<FileSystemInfo> files, bool supportParentSeriesFiles, DirectoryService directoryService)
{
var imagePrefix = string.Empty;
@@ -124,7 +124,7 @@ namespace MediaBrowser.Providers.All
}
PopulatePrimaryImages(item, images, files, imagePrefix);
PopulateBackdrops(item, images, files, imagePrefix);
PopulateBackdrops(item, images, files, imagePrefix, directoryService);
PopulateScreenshots(images, files, imagePrefix);
AddImage(files, images, imagePrefix + "logo", ImageType.Logo);
@@ -149,7 +149,7 @@ namespace MediaBrowser.Providers.All
if (season != null)
{
PopulateSeasonImagesFromSeriesFolder(season, images);
PopulateSeasonImagesFromSeriesFolder(season, images, directoryService);
}
}
}
@@ -185,7 +185,7 @@ namespace MediaBrowser.Providers.All
}
}
private void PopulateBackdrops(IHasImages item, List<LocalImageInfo> images, List<FileSystemInfo> files, string imagePrefix)
private void PopulateBackdrops(IHasImages item, List<LocalImageInfo> images, List<FileSystemInfo> files, string imagePrefix, DirectoryService directoryService)
{
PopulateBackdrops(images, files, imagePrefix, "backdrop", "backdrop", ImageType.Backdrop);
@@ -208,13 +208,13 @@ namespace MediaBrowser.Providers.All
if (extraFanartFolder != null)
{
PopulateBackdropsFromExtraFanart(extraFanartFolder.FullName, images);
PopulateBackdropsFromExtraFanart(extraFanartFolder.FullName, images, directoryService);
}
}
private void PopulateBackdropsFromExtraFanart(string path, List<LocalImageInfo> images)
private void PopulateBackdropsFromExtraFanart(string path, List<LocalImageInfo> images, DirectoryService directoryService)
{
var imageFiles = new DirectoryInfo(path).EnumerateFiles("*", SearchOption.TopDirectoryOnly)
var imageFiles = directoryService.GetFiles(path)
.Where(i =>
{
var extension = i.Extension;
@@ -262,7 +262,7 @@ namespace MediaBrowser.Providers.All
}
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
private void PopulateSeasonImagesFromSeriesFolder(Season season, List<LocalImageInfo> images)
private void PopulateSeasonImagesFromSeriesFolder(Season season, List<LocalImageInfo> images, DirectoryService directoryService)
{
var seasonNumber = season.IndexNumber;
@@ -272,7 +272,7 @@ namespace MediaBrowser.Providers.All
return;
}
var seriesFiles = GetFiles(series, false).ToList();
var seriesFiles = GetFiles(series, false, directoryService).ToList();
// Try using the season name
var prefix = season.Name.ToLower().Replace(" ", string.Empty);

View File

@@ -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.Books
{

View File

@@ -11,12 +11,10 @@ using MediaBrowser.Providers.Manager;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace MediaBrowser.Providers.BoxSets
{
public class BoxSetMetadataService : MetadataService<BoxSet, ItemLookupInfo>
public class BoxSetMetadataService : MetadataService<BoxSet, BoxSetInfo>
{
private readonly ILibraryManager _libraryManager;
private readonly ILocalizationManager _iLocalizationManager;

View File

@@ -27,11 +27,11 @@ namespace MediaBrowser.Providers.Folders
}
}
public List<LocalImageInfo> GetImages(IHasImages item)
public List<LocalImageInfo> GetImages(IHasImages item, DirectoryService directoryService)
{
var collectionFolder = (CollectionFolder)item;
return new LocalImageProvider().GetImages(item, collectionFolder.PhysicalLocations);
return new LocalImageProvider().GetImages(item, collectionFolder.PhysicalLocations, directoryService);
}
}
}

View File

@@ -38,7 +38,7 @@ namespace MediaBrowser.Providers.Folders
}
}
public List<LocalImageInfo> GetImages(IHasImages item)
public List<LocalImageInfo> GetImages(IHasImages item, DirectoryService directoryService)
{
var name = _fileSystem.GetValidFilename(item.Name);
@@ -46,7 +46,7 @@ namespace MediaBrowser.Providers.Folders
try
{
return new LocalImageProvider().GetImages(item, path);
return new LocalImageProvider().GetImages(item, path, directoryService);
}
catch (DirectoryNotFoundException)
{

View File

@@ -34,13 +34,13 @@ namespace MediaBrowser.Providers.Manager
_fileSystem = fileSystem;
}
public bool ValidateImages(IHasImages item, IEnumerable<IImageProvider> providers)
public bool ValidateImages(IHasImages item, IEnumerable<IImageProvider> providers, DirectoryService directoryService)
{
var hasChanges = item.ValidateImages();
var hasChanges = item.ValidateImages(directoryService);
foreach (var provider in providers.OfType<ILocalImageFileProvider>())
{
var images = provider.GetImages(item);
var images = provider.GetImages(item, directoryService);
if (MergeImages(item, images))
{

View File

@@ -44,6 +44,7 @@ namespace MediaBrowser.Providers.Manager
{
result.ItemId = item.Id;
result.ItemName = item.Name;
result.ItemType = item.GetType().Name;
var series = item as IHasSeries;
@@ -64,6 +65,11 @@ namespace MediaBrowser.Providers.Manager
public async Task RefreshMetadata(IHasMetadata item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken)
{
if (refreshOptions.DirectoryService == null)
{
refreshOptions.DirectoryService = new DirectoryService(Logger);
}
var itemOfType = (TItemType)item;
var config = GetMetadataOptions(itemOfType);
@@ -81,7 +87,7 @@ namespace MediaBrowser.Providers.Manager
try
{
// Always validate images and check for new locally stored ones.
if (itemImageProvider.ValidateImages(item, allImageProviders.OfType<ILocalImageProvider>()))
if (itemImageProvider.ValidateImages(item, allImageProviders.OfType<ILocalImageProvider>(), refreshOptions.DirectoryService))
{
updateType = updateType | ItemUpdateType.ImageUpdate;
}

View File

@@ -12,7 +12,7 @@ using System.Threading.Tasks;
namespace MediaBrowser.Providers.Movies
{
public class MovieMetadataService : MetadataService<Movie, ItemLookupInfo>
public class MovieMetadataService : MetadataService<Movie, MovieInfo>
{
private readonly ILibraryManager _libraryManager;

View File

@@ -12,7 +12,7 @@ using System.Threading.Tasks;
namespace MediaBrowser.Providers.Movies
{
public class TrailerMetadataService : MetadataService<Trailer, ItemLookupInfo>
public class TrailerMetadataService : MetadataService<Trailer, TrailerInfo>
{
private readonly ILibraryManager _libraryManager;

View File

@@ -7,12 +7,10 @@ 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.Music
{
public class AudioMetadataService : MetadataService<Audio, ItemLookupInfo>
public class AudioMetadataService : MetadataService<Audio, SongInfo>
{
private readonly ILibraryManager _libraryManager;

View File

@@ -12,7 +12,7 @@ using System.Threading.Tasks;
namespace MediaBrowser.Providers.People
{
public class PersonMetadataService : MetadataService<Person, ItemLookupInfo>
public class PersonMetadataService : MetadataService<Person, PersonLookupInfo>
{
private readonly ILibraryManager _libraryManager;

View File

@@ -2,8 +2,10 @@
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
{
@@ -19,48 +21,84 @@ namespace MediaBrowser.Providers.TV
return item is Episode && item.LocationType == LocationType.FileSystem;
}
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)
public List<LocalImageInfo> GetImages(IHasImages item, DirectoryService directoryService)
{
var parentPath = Path.GetDirectoryName(item.Path);
var parentPathFiles = directoryService.GetFileSystemEntries(parentPath);
var nameWithoutExtension = Path.GetFileNameWithoutExtension(item.Path);
var thumbName = nameWithoutExtension + "-thumb";
var path = Path.Combine(parentPath, thumbName + ".jpg");
var fileInfo = new FileInfo(path);
var files = GetFilesFromParentFolder(nameWithoutExtension, parentPathFiles);
if (fileInfo.Exists)
if (files.Count > 0)
{
return fileInfo;
return files;
}
path = Path.Combine(parentPath, "metadata", nameWithoutExtension + ".jpg");
fileInfo = new FileInfo(path);
var metadataPath = Path.Combine(parentPath, "metadata");
if (fileInfo.Exists)
if (parentPathFiles.Any(i => string.Equals(i.FullName, metadataPath, StringComparison.OrdinalIgnoreCase)))
{
return fileInfo;
return GetFilesFromParentFolder(nameWithoutExtension, directoryService.GetFiles(metadataPath));
}
return null;
return new List<LocalImageInfo>();
}
private List<LocalImageInfo> GetFilesFromParentFolder(string filenameWithoutExtension, IEnumerable<FileSystemInfo> parentPathFiles)
{
var thumbName = filenameWithoutExtension + "-thumb";
return parentPathFiles
.Where(i =>
{
if (BaseItem.SupportedImageExtensions.Contains(i.Extension))
{
var currentNameWithoutExtension = Path.GetFileNameWithoutExtension(i.Name);
if (string.Equals(filenameWithoutExtension, currentNameWithoutExtension, StringComparison.OrdinalIgnoreCase))
{
return true;
}
if (string.Equals(thumbName, currentNameWithoutExtension, StringComparison.OrdinalIgnoreCase))
{
return true;
}
}
return false;
})
.Select(i => new LocalImageInfo
{
FileInfo = (FileInfo)i,
Type = ImageType.Primary
})
.ToList();
}
private List<LocalImageInfo> GetFilesFromMetadataFolder(string filenameWithoutExtension, IEnumerable<FileInfo> metadataFiles)
{
return metadataFiles
.Where(i =>
{
if (BaseItem.SupportedImageExtensions.Contains(i.Extension))
{
if (string.Equals(filenameWithoutExtension, Path.GetFileNameWithoutExtension(i.Name), StringComparison.OrdinalIgnoreCase))
{
return true;
}
}
return false;
})
.Select(i => new LocalImageInfo
{
FileInfo = i,
Type = ImageType.Primary
})
.ToList();
}
}
}

View File

@@ -12,7 +12,7 @@ using System.Threading.Tasks;
namespace MediaBrowser.Providers.TV
{
public class SeasonMetadataService : MetadataService<Season, ItemLookupInfo>
public class SeasonMetadataService : MetadataService<Season, SeasonInfo>
{
private readonly ILibraryManager _libraryManager;

View File

@@ -174,8 +174,7 @@ namespace MediaBrowser.Providers.TV
{
await series.RefreshMetadata(new MetadataRefreshOptions
{
}, cancellationToken)
.ConfigureAwait(false);
}, cancellationToken).ConfigureAwait(false);
await series.ValidateChildren(new Progress<double>(), cancellationToken, true)
.ConfigureAwait(false);
@@ -469,6 +468,7 @@ namespace MediaBrowser.Providers.TV
};
await series.AddChild(season, cancellationToken).ConfigureAwait(false);
await season.RefreshMetadata(new MetadataRefreshOptions
{
}, cancellationToken).ConfigureAwait(false);

View File

@@ -194,9 +194,13 @@ namespace MediaBrowser.Providers.TV
public bool HasChanged(IHasMetadata item, DateTime date)
{
if (!_config.Configuration.EnableTvDbUpdates && item.LocationType != LocationType.Virtual)
if (item.LocationType != LocationType.Virtual)
{
return false;
// For non-virtual items, only enable if configured
if (!_config.Configuration.EnableTvDbUpdates)
{
return false;
}
}
if (!item.HasImage(ImageType.Primary))

View File

@@ -68,7 +68,8 @@ namespace MediaBrowser.Providers.TV
public bool HasChanged(IHasMetadata item, DateTime date)
{
if (!_config.Configuration.EnableTvDbUpdates && item.LocationType != LocationType.Virtual)
// Only enable for virtual items
if (item.LocationType != LocationType.Virtual)
{
return false;
}

View File

@@ -342,9 +342,13 @@ namespace MediaBrowser.Providers.TV
public bool HasChanged(IHasMetadata item, DateTime date)
{
if (!_config.Configuration.EnableTvDbUpdates && item.LocationType != LocationType.Virtual)
if (item.LocationType != LocationType.Virtual)
{
return false;
// For non-virtual items, only enable if configured
if (!_config.Configuration.EnableTvDbUpdates)
{
return false;
}
}
var season = (Season)item;

View File

@@ -1079,33 +1079,5 @@ namespace MediaBrowser.Providers.TV
{
get { return "TheTVDB"; }
}
public bool HasChanged(IHasMetadata item, DateTime date)
{
if (!_config.Configuration.EnableTvDbUpdates)
{
return false;
}
var seriesId = item.GetProviderId(MetadataProviders.Tvdb);
if (!string.IsNullOrEmpty(seriesId))
{
var seriesDataPath = GetSeriesDataPath(_config.ApplicationPaths, seriesId);
var seriesXmlFilename = item.GetPreferredMetadataLanguage() + ".xml";
var filePath = Path.Combine(seriesDataPath, seriesXmlFilename);
var seriesFile = new FileInfo(filePath);
if (!seriesFile.Exists || _fileSystem.GetLastWriteTimeUtc(seriesFile) > date)
{
return true;
}
}
return false;
}
}
}