2019-01-13 19:54:44 +00:00
using System ;
2019-02-28 22:22:57 +00:00
using System.Globalization ;
2013-09-10 18:56:00 +00:00
using System.Threading ;
using System.Threading.Tasks ;
2016-08-06 04:38:01 +00:00
using MediaBrowser.Controller.Entities ;
2019-01-13 19:21:32 +00:00
using MediaBrowser.Controller.Library ;
2016-08-18 15:13:18 +00:00
using MediaBrowser.Controller.Persistence ;
2019-01-13 19:21:32 +00:00
using Microsoft.Extensions.Logging ;
2013-09-10 18:56:00 +00:00
2016-11-03 06:37:52 +00:00
namespace Emby.Server.Implementations.Library.Validators
2013-09-10 18:56:00 +00:00
{
2019-11-01 17:38:54 +00:00
/// <summary>
/// Class StudiosValidator.
/// </summary>
public class StudiosValidator
2013-09-10 18:56:00 +00:00
{
/// <summary>
2019-12-10 15:22:03 +00:00
/// The library manager.
2013-09-10 18:56:00 +00:00
/// </summary>
2013-09-17 02:08:18 +00:00
private readonly ILibraryManager _libraryManager ;
2013-09-10 18:56:00 +00:00
2016-08-18 15:13:18 +00:00
private readonly IItemRepository _itemRepo ;
2019-11-01 17:38:54 +00:00
2013-09-10 18:56:00 +00:00
/// <summary>
2019-12-10 15:22:03 +00:00
/// The logger.
2013-09-10 18:56:00 +00:00
/// </summary>
2020-06-06 00:15:56 +00:00
private readonly ILogger < StudiosValidator > _logger ;
2013-09-10 18:56:00 +00:00
2019-11-01 17:38:54 +00:00
/// <summary>
/// Initializes a new instance of the <see cref="StudiosValidator" /> class.
/// </summary>
/// <param name="libraryManager">The library manager.</param>
/// <param name="logger">The logger.</param>
/// <param name="itemRepo">The item repository.</param>
2020-06-06 00:15:56 +00:00
public StudiosValidator ( ILibraryManager libraryManager , ILogger < StudiosValidator > logger , IItemRepository itemRepo )
2013-09-10 18:56:00 +00:00
{
_libraryManager = libraryManager ;
_logger = logger ;
2016-08-18 15:13:18 +00:00
_itemRepo = itemRepo ;
2013-09-10 18:56:00 +00:00
}
/// <summary>
/// Runs the specified progress.
/// </summary>
/// <param name="progress">The progress.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task.</returns>
public async Task Run ( IProgress < double > progress , CancellationToken cancellationToken )
{
2016-08-18 15:13:18 +00:00
var names = _itemRepo . GetStudioNames ( ) ;
2013-09-10 18:56:00 +00:00
var numComplete = 0 ;
2016-08-18 15:13:18 +00:00
var count = names . Count ;
2013-09-10 18:56:00 +00:00
2016-08-18 15:13:18 +00:00
foreach ( var name in names )
2013-09-10 18:56:00 +00:00
{
try
{
2016-08-18 15:13:18 +00:00
var item = _libraryManager . GetStudio ( name ) ;
2016-08-06 04:38:01 +00:00
await item . RefreshMetadata ( cancellationToken ) . ConfigureAwait ( false ) ;
2013-09-10 18:56:00 +00:00
}
2013-09-24 21:06:21 +00:00
catch ( OperationCanceledException )
{
// Don't clutter the log
2017-05-10 19:12:03 +00:00
throw ;
2013-09-24 21:06:21 +00:00
}
2013-09-10 18:56:00 +00:00
catch ( Exception ex )
{
2018-12-20 12:11:26 +00:00
_logger . LogError ( ex , "Error refreshing {StudioName}" , name ) ;
2013-09-10 18:56:00 +00:00
}
numComplete + + ;
double percent = numComplete ;
2013-09-11 17:54:59 +00:00
percent / = count ;
2015-01-17 18:15:09 +00:00
percent * = 100 ;
2013-09-10 18:56:00 +00:00
2015-01-17 18:15:09 +00:00
progress . Report ( percent ) ;
2013-09-10 18:56:00 +00:00
}
2018-09-12 17:26:21 +00:00
var deadEntities = _libraryManager . GetItemList ( new InternalItemsQuery
{
2020-10-17 14:19:57 +00:00
IncludeItemTypes = new [ ] { nameof ( Studio ) } ,
2018-09-12 17:26:21 +00:00
IsDeadStudio = true ,
IsLocked = false
} ) ;
foreach ( var item in deadEntities )
{
2021-08-30 13:11:34 +00:00
_logger . LogInformation ( "Deleting dead {ItemType} {ItemId} {ItemName}" , item . GetType ( ) . Name , item . Id . ToString ( "N" , CultureInfo . InvariantCulture ) , item . Name ) ;
2018-09-12 17:26:21 +00:00
2021-08-28 22:32:50 +00:00
_libraryManager . DeleteItem (
item ,
new DeleteOptions
2018-09-12 17:26:21 +00:00
{
DeleteFileLocation = false
2021-08-28 22:32:50 +00:00
} ,
false ) ;
2018-09-12 17:26:21 +00:00
}
2013-09-10 18:56:00 +00:00
progress . Report ( 100 ) ;
}
}
}