mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-30 19:32:57 +01:00
added item type to refresh info
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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))
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user