mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-06-04 22:24:14 -04:00
Using scopes for the rescan task
This commit is contained in:
parent
90a7d6654e
commit
7f0302f832
@ -41,20 +41,20 @@ namespace Kyoo.Controllers
|
|||||||
IEnumerable<Episode> GetEpisodes(string showSlug, long seasonNumber);
|
IEnumerable<Episode> GetEpisodes(string showSlug, long seasonNumber);
|
||||||
|
|
||||||
//Register values
|
//Register values
|
||||||
void Register(object obj);
|
Task Register(object obj);
|
||||||
void RegisterShowLinks(Library library, Collection collection, Show show);
|
Task RegisterShowLinks(Library library, Collection collection, Show show);
|
||||||
Task SaveChanges();
|
Task SaveChanges();
|
||||||
|
|
||||||
// Edit values
|
// Edit values
|
||||||
void Edit(Library library, bool resetOld);
|
Task Edit(Library library, bool resetOld);
|
||||||
void Edit(Collection collection, bool resetOld);
|
Task Edit(Collection collection, bool resetOld);
|
||||||
void Edit(Show show, bool resetOld);
|
Task Edit(Show show, bool resetOld);
|
||||||
void Edit(Season season, bool resetOld);
|
Task Edit(Season season, bool resetOld);
|
||||||
void Edit(Episode episode, bool resetOld);
|
Task Edit(Episode episode, bool resetOld);
|
||||||
void Edit(Track track, bool resetOld);
|
Task Edit(Track track, bool resetOld);
|
||||||
void Edit(People people, bool resetOld);
|
Task Edit(People people, bool resetOld);
|
||||||
void Edit(Studio studio, bool resetOld);
|
Task Edit(Studio studio, bool resetOld);
|
||||||
void Edit(Genre genre, bool resetOld);
|
Task Edit(Genre genre, bool resetOld);
|
||||||
|
|
||||||
// Validate values
|
// Validate values
|
||||||
Library Validate(Library library);
|
Library Validate(Library library);
|
||||||
|
@ -168,14 +168,15 @@ namespace Kyoo.Controllers
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Register
|
#region Register
|
||||||
public void Register(object obj)
|
public Task Register(object obj)
|
||||||
{
|
{
|
||||||
if (obj == null)
|
if (obj == null)
|
||||||
return;
|
return Task.CompletedTask;
|
||||||
_database.Entry(obj).State = EntityState.Added;
|
_database.Entry(obj).State = EntityState.Added;
|
||||||
|
return _database.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RegisterShowLinks(Library library, Collection collection, Show show)
|
public Task RegisterShowLinks(Library library, Collection collection, Show show)
|
||||||
{
|
{
|
||||||
if (collection != null)
|
if (collection != null)
|
||||||
{
|
{
|
||||||
@ -187,6 +188,8 @@ namespace Kyoo.Controllers
|
|||||||
else
|
else
|
||||||
_database.LibraryLinks.AddIfNotExist(new LibraryLink {Library = library, Show = show},
|
_database.LibraryLinks.AddIfNotExist(new LibraryLink {Library = library, Show = show},
|
||||||
x => x.Library == library && x.Collection == null && x.Show == show);
|
x => x.Library == library && x.Collection == null && x.Show == show);
|
||||||
|
|
||||||
|
return _database.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task SaveChanges()
|
public Task SaveChanges()
|
||||||
@ -196,9 +199,9 @@ namespace Kyoo.Controllers
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Edit
|
#region Edit
|
||||||
public void Edit(Library edited, bool resetOld)
|
public Task Edit(Library edited, bool resetOld)
|
||||||
{
|
{
|
||||||
Edit(() =>
|
return Edit(() =>
|
||||||
{
|
{
|
||||||
var query = _database.Libraries
|
var query = _database.Libraries
|
||||||
.Include(x => x.Providers);
|
.Include(x => x.Providers);
|
||||||
@ -216,9 +219,9 @@ namespace Kyoo.Controllers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Edit(Collection edited, bool resetOld)
|
public Task Edit(Collection edited, bool resetOld)
|
||||||
{
|
{
|
||||||
Edit(() =>
|
return Edit(() =>
|
||||||
{
|
{
|
||||||
var query = _database.Collections;
|
var query = _database.Collections;
|
||||||
Collection old = _database.Entry(edited).IsKeySet
|
Collection old = _database.Entry(edited).IsKeySet
|
||||||
@ -234,9 +237,9 @@ namespace Kyoo.Controllers
|
|||||||
Validate(old);
|
Validate(old);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
public void Edit(Show edited, bool resetOld)
|
public Task Edit(Show edited, bool resetOld)
|
||||||
{
|
{
|
||||||
Edit(() =>
|
return Edit(() =>
|
||||||
{
|
{
|
||||||
var query = _database.Shows
|
var query = _database.Shows
|
||||||
.Include(x => x.GenreLinks)
|
.Include(x => x.GenreLinks)
|
||||||
@ -256,9 +259,9 @@ namespace Kyoo.Controllers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Edit(Season edited, bool resetOld)
|
public Task Edit(Season edited, bool resetOld)
|
||||||
{
|
{
|
||||||
Edit(() =>
|
return Edit(() =>
|
||||||
{
|
{
|
||||||
var query = _database.Seasons
|
var query = _database.Seasons
|
||||||
.Include(x => x.ExternalIDs)
|
.Include(x => x.ExternalIDs)
|
||||||
@ -277,9 +280,9 @@ namespace Kyoo.Controllers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Edit(Episode edited, bool resetOld)
|
public Task Edit(Episode edited, bool resetOld)
|
||||||
{
|
{
|
||||||
Edit(() =>
|
return Edit(() =>
|
||||||
{
|
{
|
||||||
var query = _database.Episodes
|
var query = _database.Episodes
|
||||||
.Include(x => x.ExternalIDs)
|
.Include(x => x.ExternalIDs)
|
||||||
@ -299,9 +302,9 @@ namespace Kyoo.Controllers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Edit(Track edited, bool resetOld)
|
public Task Edit(Track edited, bool resetOld)
|
||||||
{
|
{
|
||||||
Edit(() =>
|
return Edit(() =>
|
||||||
{
|
{
|
||||||
Track old = _database.Tracks.FirstOrDefault(x => x.ID == edited.ID);
|
Track old = _database.Tracks.FirstOrDefault(x => x.ID == edited.ID);
|
||||||
|
|
||||||
@ -314,9 +317,9 @@ namespace Kyoo.Controllers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Edit(People edited, bool resetOld)
|
public Task Edit(People edited, bool resetOld)
|
||||||
{
|
{
|
||||||
Edit(() =>
|
return Edit(() =>
|
||||||
{
|
{
|
||||||
var query = _database.Peoples
|
var query = _database.Peoples
|
||||||
.Include(x => x.ExternalIDs);
|
.Include(x => x.ExternalIDs);
|
||||||
@ -334,9 +337,9 @@ namespace Kyoo.Controllers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Edit(Studio edited, bool resetOld)
|
public Task Edit(Studio edited, bool resetOld)
|
||||||
{
|
{
|
||||||
Edit(() =>
|
return Edit(() =>
|
||||||
{
|
{
|
||||||
var query = _database.Studios;
|
var query = _database.Studios;
|
||||||
Studio old = _database.Entry(edited).IsKeySet
|
Studio old = _database.Entry(edited).IsKeySet
|
||||||
@ -353,9 +356,9 @@ namespace Kyoo.Controllers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Edit(Genre edited, bool resetOld)
|
public Task Edit(Genre edited, bool resetOld)
|
||||||
{
|
{
|
||||||
Edit(() =>
|
return Edit(() =>
|
||||||
{
|
{
|
||||||
var query = _database.Genres;
|
var query = _database.Genres;
|
||||||
Genre old = _database.Entry(edited).IsKeySet
|
Genre old = _database.Entry(edited).IsKeySet
|
||||||
@ -372,7 +375,7 @@ namespace Kyoo.Controllers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Edit(Action applyFunction)
|
private async Task Edit(Action applyFunction)
|
||||||
{
|
{
|
||||||
_database.ChangeTracker.LazyLoadingEnabled = false;
|
_database.ChangeTracker.LazyLoadingEnabled = false;
|
||||||
_database.ChangeTracker.AutoDetectChangesEnabled = false;
|
_database.ChangeTracker.AutoDetectChangesEnabled = false;
|
||||||
@ -382,7 +385,7 @@ namespace Kyoo.Controllers
|
|||||||
applyFunction.Invoke();
|
applyFunction.Invoke();
|
||||||
|
|
||||||
_database.ChangeTracker.DetectChanges();
|
_database.ChangeTracker.DetectChanges();
|
||||||
_database.SaveChanges();
|
await _database.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
@ -142,17 +142,16 @@ namespace Kyoo.Controllers
|
|||||||
bool isMovie = seasonNumber == -1 && episodeNumber == -1 && absoluteNumber == -1;
|
bool isMovie = seasonNumber == -1 && episodeNumber == -1 && absoluteNumber == -1;
|
||||||
Show show = await GetShow(libraryManager, showName, showPath, isMovie, library);
|
Show show = await GetShow(libraryManager, showName, showPath, isMovie, library);
|
||||||
if (isMovie)
|
if (isMovie)
|
||||||
libraryManager.Register(await GetMovie(show, path));
|
await libraryManager.Register(await GetMovie(show, path));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Season season = await GetSeason(libraryManager, show, seasonNumber, library);
|
Season season = await GetSeason(libraryManager, show, seasonNumber, library);
|
||||||
Episode episode = await GetEpisode(libraryManager, show, season, episodeNumber, absoluteNumber, path, library);
|
Episode episode = await GetEpisode(libraryManager, show, season, episodeNumber, absoluteNumber, path, library);
|
||||||
libraryManager.Register(episode);
|
await libraryManager.Register(episode);
|
||||||
}
|
}
|
||||||
if (collection != null)
|
if (collection != null)
|
||||||
libraryManager.Register(collection);
|
await libraryManager.Register(collection);
|
||||||
libraryManager.RegisterShowLinks(library, collection, show);
|
await libraryManager.RegisterShowLinks(library, collection, show);
|
||||||
await libraryManager.SaveChanges();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<Collection> GetCollection(ILibraryManager libraryManager, string collectionName, Library library)
|
private async Task<Collection> GetCollection(ILibraryManager libraryManager, string collectionName, Library library)
|
||||||
|
@ -19,7 +19,7 @@ namespace Kyoo.Tasks
|
|||||||
public int Priority => 0;
|
public int Priority => 0;
|
||||||
|
|
||||||
|
|
||||||
private ILibraryManager _libraryManager;
|
private IServiceProvider _serviceProvider;
|
||||||
private IThumbnailsManager _thumbnailsManager;
|
private IThumbnailsManager _thumbnailsManager;
|
||||||
private IProviderManager _providerManager;
|
private IProviderManager _providerManager;
|
||||||
private DatabaseContext _database;
|
private DatabaseContext _database;
|
||||||
@ -27,9 +27,9 @@ namespace Kyoo.Tasks
|
|||||||
public async 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();
|
using IServiceScope serviceScope = serviceProvider.CreateScope();
|
||||||
_libraryManager = serviceScope.ServiceProvider.GetService<ILibraryManager>();
|
_serviceProvider = serviceProvider;
|
||||||
_thumbnailsManager = serviceScope.ServiceProvider.GetService<IThumbnailsManager>();
|
_thumbnailsManager = serviceProvider.GetService<IThumbnailsManager>();
|
||||||
_providerManager = serviceScope.ServiceProvider.GetService<IProviderManager>();
|
_providerManager = serviceProvider.GetService<IProviderManager>();
|
||||||
_database = serviceScope.ServiceProvider.GetService<DatabaseContext>();
|
_database = serviceScope.ServiceProvider.GetService<DatabaseContext>();
|
||||||
|
|
||||||
if (arguments == null || !arguments.Contains('/'))
|
if (arguments == null || !arguments.Contains('/'))
|
||||||
@ -49,7 +49,12 @@ namespace Kyoo.Tasks
|
|||||||
|
|
||||||
private async Task ReScanShow(string slug)
|
private async Task ReScanShow(string slug)
|
||||||
{
|
{
|
||||||
Show old = _database.Shows.FirstOrDefault(x => x.Slug == slug);
|
Show old;
|
||||||
|
|
||||||
|
using (IServiceScope serviceScope = _serviceProvider.CreateScope())
|
||||||
|
{
|
||||||
|
ILibraryManager libraryManager = serviceScope.ServiceProvider.GetService<ILibraryManager>();
|
||||||
|
old = _database.Shows.FirstOrDefault(x => x.Slug == slug);
|
||||||
if (old == null)
|
if (old == null)
|
||||||
return;
|
return;
|
||||||
Library library = _database.LibraryLinks.First(x => x.Show == old && x.Library != null).Library;
|
Library library = _database.LibraryLinks.First(x => x.Show == old && x.Library != null).Library;
|
||||||
@ -57,8 +62,9 @@ namespace Kyoo.Tasks
|
|||||||
edited.ID = old.ID;
|
edited.ID = old.ID;
|
||||||
edited.Slug = old.Slug;
|
edited.Slug = old.Slug;
|
||||||
edited.Path = old.Path;
|
edited.Path = old.Path;
|
||||||
_libraryManager.Edit(edited, true);
|
await libraryManager.Edit(edited, true);
|
||||||
await _thumbnailsManager.Validate(edited, true);
|
await _thumbnailsManager.Validate(edited, true);
|
||||||
|
}
|
||||||
if (old.Seasons != null)
|
if (old.Seasons != null)
|
||||||
await Task.WhenAll(old.Seasons.Select(x => ReScanSeason(old, x)));
|
await Task.WhenAll(old.Seasons.Select(x => ReScanSeason(old, x)));
|
||||||
IEnumerable<Episode> orphans = old.Episodes.Where(x => x.Season == null).ToList();
|
IEnumerable<Episode> orphans = old.Episodes.Where(x => x.Season == null).ToList();
|
||||||
@ -83,21 +89,28 @@ namespace Kyoo.Tasks
|
|||||||
|
|
||||||
private async Task ReScanSeason(Show show, Season old)
|
private async Task ReScanSeason(Show show, Season old)
|
||||||
{
|
{
|
||||||
|
using (IServiceScope serviceScope = _serviceProvider.CreateScope())
|
||||||
|
{
|
||||||
|
ILibraryManager libraryManager = serviceScope.ServiceProvider.GetService<ILibraryManager>();
|
||||||
Library library = _database.LibraryLinks.First(x => x.Show == show && x.Library != null).Library;
|
Library library = _database.LibraryLinks.First(x => x.Show == show && x.Library != null).Library;
|
||||||
Season edited = await _providerManager.GetSeason(show, old.SeasonNumber, library);
|
Season edited = await _providerManager.GetSeason(show, old.SeasonNumber, library);
|
||||||
edited.ID = old.ID;
|
edited.ID = old.ID;
|
||||||
_libraryManager.Edit(edited, true);
|
await libraryManager.Edit(edited, true);
|
||||||
await _thumbnailsManager.Validate(edited, true);
|
await _thumbnailsManager.Validate(edited, true);
|
||||||
|
}
|
||||||
if (old.Episodes != null)
|
if (old.Episodes != null)
|
||||||
await Task.WhenAll(old.Episodes.Select(x => ReScanEpisode(show, x)));
|
await Task.WhenAll(old.Episodes.Select(x => ReScanEpisode(show, x)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task ReScanEpisode(Show show, Episode old)
|
private async Task ReScanEpisode(Show show, Episode old)
|
||||||
{
|
{
|
||||||
|
using IServiceScope serviceScope = _serviceProvider.CreateScope();
|
||||||
|
ILibraryManager libraryManager = serviceScope.ServiceProvider.GetService<ILibraryManager>();
|
||||||
|
|
||||||
Library library = _database.LibraryLinks.First(x => x.Show == show && x.Library != null).Library;
|
Library library = _database.LibraryLinks.First(x => x.Show == show && x.Library != null).Library;
|
||||||
Episode edited = await _providerManager.GetEpisode(show, old.Path, old.SeasonNumber, old.EpisodeNumber, old.AbsoluteNumber, library);
|
Episode edited = await _providerManager.GetEpisode(show, old.Path, old.SeasonNumber, old.EpisodeNumber, old.AbsoluteNumber, library);
|
||||||
edited.ID = old.ID;
|
edited.ID = old.ID;
|
||||||
_libraryManager.Edit(edited, true);
|
await libraryManager.Edit(edited, true);
|
||||||
await _thumbnailsManager.Validate(edited, true);
|
await _thumbnailsManager.Validate(edited, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user