aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/Manager/MetadataService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers/Manager/MetadataService.cs')
-rw-r--r--MediaBrowser.Providers/Manager/MetadataService.cs76
1 files changed, 75 insertions, 1 deletions
diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs
index 50bbf0974..c4d4e775a 100644
--- a/MediaBrowser.Providers/Manager/MetadataService.cs
+++ b/MediaBrowser.Providers/Manager/MetadataService.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
using System.Net.Http;
using System.Threading;
@@ -12,7 +13,9 @@ using Jellyfin.Extensions;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
+using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.MediaSegments;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Entities;
@@ -26,13 +29,24 @@ namespace MediaBrowser.Providers.Manager
where TItemType : BaseItem, IHasLookupInfo<TIdType>, new()
where TIdType : ItemLookupInfo, new()
{
- protected MetadataService(IServerConfigurationManager serverConfigurationManager, ILogger<MetadataService<TItemType, TIdType>> logger, IProviderManager providerManager, IFileSystem fileSystem, ILibraryManager libraryManager)
+ protected MetadataService(
+ IServerConfigurationManager serverConfigurationManager,
+ ILogger<MetadataService<TItemType, TIdType>> logger,
+ IProviderManager providerManager,
+ IFileSystem fileSystem,
+ ILibraryManager libraryManager,
+ IPathManager pathManager,
+ IKeyframeManager keyframeManager,
+ IMediaSegmentManager mediaSegmentManager)
{
ServerConfigurationManager = serverConfigurationManager;
Logger = logger;
ProviderManager = providerManager;
FileSystem = fileSystem;
LibraryManager = libraryManager;
+ PathManager = pathManager;
+ KeyframeManager = keyframeManager;
+ MediaSegmentManager = mediaSegmentManager;
ImageProvider = new ItemImageProvider(Logger, ProviderManager, FileSystem);
}
@@ -48,6 +62,12 @@ namespace MediaBrowser.Providers.Manager
protected ILibraryManager LibraryManager { get; }
+ protected IPathManager PathManager { get; }
+
+ protected IKeyframeManager KeyframeManager { get; }
+
+ protected IMediaSegmentManager MediaSegmentManager { get; }
+
protected virtual bool EnableUpdatingPremiereDateFromChildren => false;
protected virtual bool EnableUpdatingGenresFromChildren => false;
@@ -303,6 +323,55 @@ namespace MediaBrowser.Providers.Manager
updateType |= ItemUpdateType.MetadataImport;
}
+ // Cleanup extracted files if source file was modified
+ var itemPath = item.Path;
+ if (!string.IsNullOrEmpty(itemPath))
+ {
+ var info = FileSystem.GetFileSystemInfo(itemPath);
+ var modificationDate = info.LastWriteTimeUtc;
+ var itemLastModifiedFileSystem = item.DateModified;
+ if (info.Exists && itemLastModifiedFileSystem != modificationDate)
+ {
+ Logger.LogDebug("File modification time changed from {Then} to {Now}: {Path}", itemLastModifiedFileSystem, modificationDate, itemPath);
+
+ item.DateModified = modificationDate;
+ if (ServerConfigurationManager.GetMetadataConfiguration().UseFileCreationTimeForDateAdded)
+ {
+ item.DateCreated = info.CreationTimeUtc;
+ }
+
+ var size = info.Length;
+ if (item is Video video)
+ {
+ var videoType = video.VideoType;
+ var sizeChanged = size != (video.Size ?? 0);
+ if (videoType == VideoType.BluRay || video.VideoType == VideoType.Dvd || sizeChanged)
+ {
+ if (sizeChanged)
+ {
+ item.Size = size;
+ Logger.LogDebug("File size changed from {Then} to {Now}: {Path}", video.Size, size, itemPath);
+ }
+
+ var validPaths = PathManager.GetExtractedDataPaths(video).Where(Directory.Exists).ToList();
+ if (validPaths.Count > 0)
+ {
+ Logger.LogInformation("File changed, pruning extracted data: {Path}", itemPath);
+ foreach (var path in validPaths)
+ {
+ Directory.Delete(path, true);
+ }
+ }
+
+ KeyframeManager.DeleteKeyframeDataAsync(video.Id, CancellationToken.None).GetAwaiter().GetResult();
+ MediaSegmentManager.DeleteSegmentsAsync(item.Id).GetAwaiter().GetResult();
+ }
+ }
+
+ updateType |= ItemUpdateType.MetadataImport;
+ }
+ }
+
return updateType;
}
@@ -1132,6 +1201,11 @@ namespace MediaBrowser.Providers.Manager
target.DateCreated = source.DateCreated;
}
+ if (replaceData || source.DateModified != default)
+ {
+ target.DateModified = source.DateModified;
+ }
+
if (replaceData || string.IsNullOrEmpty(target.PreferredMetadataCountryCode))
{
target.PreferredMetadataCountryCode = source.PreferredMetadataCountryCode;