mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-09 03:04:20 -04:00
The identify now recursivly rescan seasons and episodes
This commit is contained in:
parent
40ea4a37af
commit
7015f33c22
@ -76,19 +76,14 @@ namespace Kyoo
|
||||
Type type = typeof(T);
|
||||
foreach (PropertyInfo property in type.GetProperties())
|
||||
{
|
||||
MethodInfo getter = property.GetGetMethod();
|
||||
MethodInfo setter = property.GetSetMethod();
|
||||
if (!property.CanRead || !property.CanWrite)
|
||||
continue;
|
||||
|
||||
object value = getter != null ? getter.Invoke(second, null) : property.GetValue(second);
|
||||
object value = property.GetValue(second);
|
||||
object defaultValue = property.PropertyType.IsValueType ? Activator.CreateInstance(property.PropertyType) : null;
|
||||
|
||||
if (value?.Equals(defaultValue) == false)
|
||||
{
|
||||
if (setter != null)
|
||||
setter.Invoke(first, new[] {value});
|
||||
else
|
||||
property.SetValue(second, value);
|
||||
}
|
||||
property.SetValue(first, value);
|
||||
}
|
||||
|
||||
return first;
|
||||
|
@ -455,7 +455,7 @@ namespace Kyoo.Controllers
|
||||
x.Provider = _database.Providers.FirstOrDefault(y => y.Name == x.Provider.Name) ?? x.Provider;
|
||||
x.ProviderID = x.Provider.ID;
|
||||
return x;
|
||||
}).ToList();
|
||||
}).GroupBy(x => x.Provider.Name).Select(x => x.First()).ToList();
|
||||
}
|
||||
|
||||
public long RegisterMovie(Episode movie)
|
||||
@ -551,10 +551,12 @@ namespace Kyoo.Controllers
|
||||
|
||||
Utility.Complete(episode, edited);
|
||||
|
||||
episode.Season = _database.Seasons
|
||||
.FirstOrDefault(x => x.ShowID == episode.ShowID
|
||||
&& x.SeasonNumber == edited.SeasonNumber) ?? episode.Season;
|
||||
episode.Season.ExternalIDs = ValidateExternalIDs(episode.Season.ExternalIDs);
|
||||
if (episode.SeasonNumber != -1)
|
||||
{
|
||||
episode.Season = _database.Seasons.FirstOrDefault(x => x.ShowID == episode.ShowID
|
||||
&& x.SeasonNumber == edited.SeasonNumber) ?? episode.Season;
|
||||
episode.Season.ExternalIDs = ValidateExternalIDs(episode.Season.ExternalIDs);
|
||||
}
|
||||
episode.ExternalIDs = ValidateExternalIDs(episode.ExternalIDs);
|
||||
|
||||
_database.ChangeTracker.DetectChanges();
|
||||
|
@ -82,7 +82,7 @@ namespace Kyoo.Controllers
|
||||
if (season?.Show?.Path == null)
|
||||
return default;
|
||||
|
||||
if (season.ImgPrimary == null)
|
||||
if (season.ImgPrimary != null)
|
||||
{
|
||||
string localPath = Path.Combine(season.Show.Path, $"season-{season.SeasonNumber}.jpg");
|
||||
if (alwaysDownload || !File.Exists(localPath))
|
||||
@ -96,7 +96,7 @@ namespace Kyoo.Controllers
|
||||
if (episode?.Path == null)
|
||||
return default;
|
||||
|
||||
if (episode.ImgPrimary == null)
|
||||
if (episode.ImgPrimary != null)
|
||||
{
|
||||
string localPath = Path.ChangeExtension(episode.Path, "jpg");
|
||||
if (alwaysDownload || !File.Exists(localPath))
|
||||
|
@ -5,12 +5,13 @@ namespace Kyoo.Tasks
|
||||
{
|
||||
public static class CoreTaskHolder
|
||||
{
|
||||
public static ITask[] Tasks =
|
||||
public static readonly ITask[] Tasks =
|
||||
{
|
||||
new CreateDatabase(),
|
||||
new PluginLoader(),
|
||||
new Crawler(),
|
||||
new MetadataLoader()
|
||||
new MetadataLoader(),
|
||||
new ReScan()
|
||||
};
|
||||
}
|
||||
}
|
@ -50,10 +50,9 @@ namespace Kyoo.Controllers
|
||||
try
|
||||
{
|
||||
IEnumerable<Episode> episodes = _libraryManager.GetAllEpisodes();
|
||||
IEnumerable<Library> libraries = _libraryManager.GetLibraries();
|
||||
|
||||
if (argument != null)
|
||||
libraries = libraries.Where(x => x.Slug == argument);
|
||||
IEnumerable<Library> libraries = argument == null
|
||||
? _libraryManager.GetLibraries()
|
||||
: new [] {_libraryManager.GetLibrary(argument)};
|
||||
|
||||
foreach (Episode episode in episodes)
|
||||
{
|
||||
|
@ -6,7 +6,6 @@ using System.Threading.Tasks;
|
||||
using Kyoo.Controllers;
|
||||
using Kyoo.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace Kyoo.Tasks
|
||||
@ -26,7 +25,7 @@ namespace Kyoo.Tasks
|
||||
private IProviderManager _providerManager;
|
||||
private DatabaseContext _database;
|
||||
|
||||
public Task Run(IServiceProvider serviceProvider, CancellationToken cancellationToken, string arguments = null)
|
||||
public async Task Run(IServiceProvider serviceProvider, CancellationToken cancellationToken, string arguments = null)
|
||||
{
|
||||
using IServiceScope serviceScope = serviceProvider.CreateScope();
|
||||
_libraryManager = serviceScope.ServiceProvider.GetService<ILibraryManager>();
|
||||
@ -35,20 +34,24 @@ namespace Kyoo.Tasks
|
||||
_database = serviceScope.ServiceProvider.GetService<DatabaseContext>();
|
||||
|
||||
if (arguments == null || !arguments.Contains('/'))
|
||||
return Task.CompletedTask;
|
||||
return;
|
||||
|
||||
string slug = arguments.Substring(arguments.IndexOf('/') + 1);
|
||||
return arguments.Substring(0, arguments.IndexOf('/')) switch
|
||||
switch (arguments.Substring(0, arguments.IndexOf('/')))
|
||||
{
|
||||
"show" => ReScanShow(slug),
|
||||
"season" => ReScanSeason(slug),
|
||||
_ => Task.CompletedTask
|
||||
};
|
||||
case "show":
|
||||
await ReScanShow(slug);
|
||||
break;
|
||||
//case "season":
|
||||
// await ReScanSeason(slug):
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ReScanShow(string slug)
|
||||
{
|
||||
Show old = _database.Shows.AsNoTracking().FirstOrDefault(x => x.Slug == slug);
|
||||
Show old = _database.Shows.FirstOrDefault(x => x.Slug == slug);
|
||||
if (old == null)
|
||||
return;
|
||||
Library library = _libraryManager.GetLibraryForShow(slug);
|
||||
@ -58,7 +61,11 @@ namespace Kyoo.Tasks
|
||||
edited.Path = old.Path;
|
||||
_libraryManager.EditShow(edited);
|
||||
await _thumbnailsManager.Validate(edited, true);
|
||||
await Task.WhenAll(edited.Seasons.Select(x => ReScanSeason(edited, x)));
|
||||
if (old.Seasons != null)
|
||||
await Task.WhenAll(old.Seasons.Select(x => ReScanSeason(old, x)));
|
||||
IEnumerable<Episode> orphans = old.Episodes.Where(x => x.Season == null).ToList();
|
||||
if (orphans.Any())
|
||||
await Task.WhenAll(orphans.Select(x => ReScanEpisode(old, x)));
|
||||
}
|
||||
|
||||
private async Task ReScanSeason(Show show, Season old)
|
||||
@ -68,13 +75,14 @@ namespace Kyoo.Tasks
|
||||
edited.ID = old.ID;
|
||||
_libraryManager.EditSeason(edited);
|
||||
await _thumbnailsManager.Validate(edited, true);
|
||||
await Task.WhenAll(edited.Episodes.Select(x => ReScanEpisode(show, x)));
|
||||
if (old.Episodes != null)
|
||||
await Task.WhenAll(old.Episodes.Select(x => ReScanEpisode(show, x)));
|
||||
}
|
||||
|
||||
private async Task ReScanSeason(string slug)
|
||||
{
|
||||
|
||||
}
|
||||
// private async Task ReScanSeason(string slug)
|
||||
// {
|
||||
//
|
||||
// }
|
||||
|
||||
private async Task ReScanEpisode(Show show, Episode old)
|
||||
{
|
||||
|
@ -13,10 +13,12 @@ namespace Kyoo.Api
|
||||
public class LibrariesAPI : ControllerBase
|
||||
{
|
||||
private readonly ILibraryManager _libraryManager;
|
||||
private readonly ITaskManager _taskManager;
|
||||
|
||||
public LibrariesAPI(ILibraryManager libraryManager)
|
||||
public LibrariesAPI(ILibraryManager libraryManager, ITaskManager taskManager)
|
||||
{
|
||||
_libraryManager = libraryManager;
|
||||
_taskManager = taskManager;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
@ -41,6 +43,7 @@ namespace Kyoo.Api
|
||||
if (_libraryManager.GetLibrary(library.Slug) != null)
|
||||
return BadRequest(new {error = "Duplicated library slug"});
|
||||
_libraryManager.RegisterLibrary(library);
|
||||
_taskManager.StartTask("scan", library.Slug);
|
||||
return Ok();
|
||||
}
|
||||
|
||||
|
@ -76,12 +76,12 @@ namespace Kyoo.Api
|
||||
{
|
||||
if (!ModelState.IsValid)
|
||||
return BadRequest(externalIDs);
|
||||
Show show = _database.Shows.FirstOrDefault(x => x.Slug == slug);
|
||||
Show show = _database.Shows.Include(x => x.ExternalIDs).FirstOrDefault(x => x.Slug == slug);
|
||||
if (show == null)
|
||||
return NotFound();
|
||||
show.ExternalIDs = externalIDs;
|
||||
_libraryManager.EditShow(show);
|
||||
_taskManager.StartTask("re-scan-show", $"show/{slug}");
|
||||
show.ExternalIDs = _libraryManager.ValidateExternalIDs(externalIDs);
|
||||
_database.SaveChanges();
|
||||
_taskManager.StartTask("re-scan", $"show/{slug}");
|
||||
return Ok();
|
||||
}
|
||||
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 4135c957573c13b4655fa858746ac0e7de97b3ea
|
||||
Subproject commit 5e088d54e20451e8c070f9e2f3797325a08ceb63
|
Loading…
x
Reference in New Issue
Block a user