Skip to content

Commit

Permalink
Improve Speed of retrieving multiple files
Browse files Browse the repository at this point in the history
  • Loading branch information
da3dsoul committed Apr 16, 2017
1 parent 012b2dc commit 9863796
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 15 deletions.
7 changes: 5 additions & 2 deletions Shoko.Server/API/v2/Modules/Common.cs
Expand Up @@ -881,14 +881,17 @@ private object GetMultipleFiles()
Dictionary<int,Serie> results = new Dictionary<int, Serie>();
try
{
foreach (SVR_AnimeEpisode ep in RepoFactory.AnimeEpisode.GetEpisodesWithMultipleFiles(true))
List<SVR_AnimeEpisode> list = RepoFactory.AnimeEpisode.GetEpisodesWithMultipleFiles(true);
foreach(SVR_AnimeEpisode ep in list)
{
Serie serie = null;
SVR_AnimeSeries series = ep.GetAnimeSeries();
if (results.ContainsKey(series.AnimeSeriesID)) serie = results[series.AnimeSeriesID];
if (serie == null)
serie =
Serie.GenerateFromAnimeSeries(Context, series, userID, para.nocast == 1, para.notag == 1, 0, false);
Serie.GenerateFromAnimeSeries(Context, series, userID, para.nocast == 1,
para.notag == 1, 0,
false);
if (serie.eps == null) serie.eps = new List<Episode>();
Episode episode = Episode.GenerateFromAnimeEpisode(Context, ep, userID, 0);
List<SVR_VideoLocal> vls = ep.GetVideoLocals();
Expand Down
25 changes: 12 additions & 13 deletions Shoko.Server/Repositories/Cached/AnimeEpisodeRepository.cs
Expand Up @@ -5,6 +5,7 @@
using Shoko.Models.Server;
using NHibernate;
using NutzCode.InMemoryIndex;
using Shoko.Server.Databases;
using Shoko.Server.Models;
using Shoko.Server.PlexAndKodi;

Expand Down Expand Up @@ -151,19 +152,17 @@ public List<SVR_AnimeEpisode> GetByHash(string hash)

public List<SVR_AnimeEpisode> GetEpisodesWithMultipleFiles(bool ignoreVariations)
{
List<string> hashes = ignoreVariations
? RepoFactory.VideoLocal.GetAll()
.Where(a => a.IsVariation == 0)
.Select(a => a.Hash)
.Where(a => a != string.Empty)
.ToList()
: RepoFactory.VideoLocal.GetAll().Select(a => a.Hash).Where(a => a != string.Empty).ToList();
return RepoFactory.CrossRef_File_Episode.GetAll()
.Where(a => hashes.Contains(a.Hash))
.GroupBy(a => a.EpisodeID)
.Where(a => a.Count() > 1)
.Select(a => GetByAniDBEpisodeID(a.Key))
.ToList();
string ignoreVariationsQuery =
@"SELECT ani.EpisodeID FROM VideoLocal AS vl JOIN CrossRef_File_Episode ani ON vl.Hash = ani.Hash WHERE vl.IsVariation = 0 AND vl.Hash != '' GROUP BY ani.EpisodeID HAVING COUNT(ani.EpisodeID) > 1";
string countVariationsQuery =
@"SELECT ani.EpisodeID FROM VideoLocal AS vl JOIN CrossRef_File_Episode ani ON vl.Hash = ani.Hash WHERE vl.Hash != '' GROUP BY ani.EpisodeID HAVING COUNT(ani.EpisodeID) > 1";
using (var session = DatabaseFactory.SessionFactory.OpenSession())
{
IList<int> ids = ignoreVariations
? session.CreateSQLQuery(ignoreVariationsQuery).List<int>()
: session.CreateSQLQuery(countVariationsQuery).List<int>();
return ids.Select(GetByAniDBEpisodeID).ToList();
}
/*
using (var session = JMMService.SessionFactory.OpenSession())
Expand Down

0 comments on commit 9863796

Please sign in to comment.