2019-01-13 21:03:10 +01:00
using System.Collections.Generic ;
2019-01-13 20:26:31 +01:00
using System.Linq ;
using MediaBrowser.Controller.Configuration ;
2014-03-07 13:48:55 -05:00
using MediaBrowser.Controller.Entities ;
2014-01-30 16:23:54 -05:00
using MediaBrowser.Controller.Entities.Movies ;
2025-05-05 05:21:44 +02:00
using MediaBrowser.Controller.IO ;
2014-01-30 16:23:54 -05:00
using MediaBrowser.Controller.Library ;
2025-06-16 00:19:57 +03:00
using MediaBrowser.Controller.Persistence ;
2014-01-30 16:23:54 -05:00
using MediaBrowser.Controller.Providers ;
using MediaBrowser.Model.Entities ;
2016-10-25 15:02:04 -04:00
using MediaBrowser.Model.IO ;
2019-01-13 20:26:31 +01:00
using MediaBrowser.Providers.Manager ;
using Microsoft.Extensions.Logging ;
2014-01-30 16:23:54 -05:00
2025-05-05 05:21:44 +02:00
namespace MediaBrowser.Providers.BoxSets ;
/// <summary>
/// Service to manage boxset metadata.
/// </summary>
public class BoxSetMetadataService : MetadataService < BoxSet , BoxSetInfo >
2014-01-30 16:23:54 -05:00
{
2025-05-05 05:21:44 +02:00
/// <summary>
/// Initializes a new instance of the <see cref="BoxSetMetadataService"/> class.
/// </summary>
/// <param name="serverConfigurationManager">Instance of the <see cref="IServerConfigurationManager"/>.</param>
/// <param name="logger">Instance of the <see cref="ILogger"/> interface.</param>
/// <param name="providerManager">Instance of the <see cref="IProviderManager"/> interface.</param>
/// <param name="fileSystem">Instance of the <see cref="IFileSystem"/> interface.</param>
/// <param name="libraryManager">Instance of the <see cref="ILibraryManager"/> interface.</param>
2025-05-09 16:35:29 +02:00
/// <param name="externalDataManager">Instance of the <see cref="IExternalDataManager"/> interface.</param>
2025-06-16 00:19:57 +03:00
/// <param name="itemRepository">Instance of the <see cref="IItemRepository"/> interface.</param>
2025-05-05 05:21:44 +02:00
public BoxSetMetadataService (
IServerConfigurationManager serverConfigurationManager ,
ILogger < BoxSetMetadataService > logger ,
IProviderManager providerManager ,
IFileSystem fileSystem ,
ILibraryManager libraryManager ,
2025-06-16 00:19:57 +03:00
IExternalDataManager externalDataManager ,
IItemRepository itemRepository )
: base ( serverConfigurationManager , logger , providerManager , fileSystem , libraryManager , externalDataManager , itemRepository )
2014-01-30 16:23:54 -05:00
{
2025-05-05 05:21:44 +02:00
}
2019-09-10 22:37:53 +02:00
2025-05-05 05:21:44 +02:00
/// <inheritdoc />
protected override bool EnableUpdatingGenresFromChildren = > true ;
2019-09-10 22:37:53 +02:00
2025-05-05 05:21:44 +02:00
/// <inheritdoc />
protected override bool EnableUpdatingOfficialRatingFromChildren = > true ;
2019-09-10 22:37:53 +02:00
2025-05-05 05:21:44 +02:00
/// <inheritdoc />
protected override bool EnableUpdatingStudiosFromChildren = > true ;
2019-09-10 22:37:53 +02:00
2025-05-05 05:21:44 +02:00
/// <inheritdoc />
protected override bool EnableUpdatingPremiereDateFromChildren = > true ;
2019-09-10 22:37:53 +02:00
2025-05-05 05:21:44 +02:00
/// <inheritdoc />
protected override IReadOnlyList < BaseItem > GetChildrenForMetadataUpdates ( BoxSet item )
{
return item . GetLinkedChildren ( ) ;
}
2015-06-28 21:10:45 -04:00
2025-05-05 05:21:44 +02:00
/// <inheritdoc />
protected override void MergeData ( MetadataResult < BoxSet > source , MetadataResult < BoxSet > target , MetadataField [ ] lockedFields , bool replaceData , bool mergeMetadataSettings )
{
base . MergeData ( source , target , lockedFields , replaceData , mergeMetadataSettings ) ;
2015-06-28 21:10:45 -04:00
2025-05-05 05:21:44 +02:00
var sourceItem = source . Item ;
var targetItem = target . Item ;
2015-06-28 21:10:45 -04:00
2025-05-05 05:21:44 +02:00
if ( mergeMetadataSettings )
{
2025-09-12 21:57:55 +02:00
// TODO: Change to only replace when currently empty or requested. This is currently not done because the metadata service is not handling attaching collection items based on the provider responses
targetItem . LinkedChildren = sourceItem . LinkedChildren . Concat ( targetItem . LinkedChildren ) . DistinctBy ( i = > i . Path ) . ToArray ( ) ;
2015-06-28 21:10:45 -04:00
}
2025-05-05 05:21:44 +02:00
}
2016-05-21 02:12:00 -04:00
2025-05-05 05:21:44 +02:00
/// <inheritdoc />
protected override ItemUpdateType BeforeSaveInternal ( BoxSet item , bool isFullRefresh , ItemUpdateType updateType )
{
var updatedType = base . BeforeSaveInternal ( item , isFullRefresh , updateType ) ;
2018-09-12 19:26:21 +02:00
2025-05-05 05:21:44 +02:00
var libraryFolderIds = item . GetLibraryFolderIds ( ) ;
2018-09-12 19:26:21 +02:00
2025-05-05 05:21:44 +02:00
var itemLibraryFolderIds = item . LibraryFolderIds ;
if ( itemLibraryFolderIds is null | | ! libraryFolderIds . SequenceEqual ( itemLibraryFolderIds ) )
{
item . LibraryFolderIds = libraryFolderIds ;
updatedType | = ItemUpdateType . MetadataImport ;
2018-09-12 19:26:21 +02:00
}
2025-05-05 05:21:44 +02:00
return updatedType ;
2014-01-30 16:23:54 -05:00
}
}