Skip to content

Commit bc00760

Browse files
committed
Fix Some Errors in Filtering
1 parent 795d8a6 commit bc00760

File tree

3 files changed

+39
-44
lines changed

3 files changed

+39
-44
lines changed

Shoko.Server/API/v2/Models/common/Filter.cs

+34-39
Original file line numberDiff line numberDiff line change
@@ -47,58 +47,53 @@ internal static Filter GenerateFromGroupFilter(HttpContext ctx, FilterPreset gf,
4747
evaluatedResults = evaluator.EvaluateFilter(gf, uid).ToList();
4848
}
4949

50-
if (evaluatedResults.Count != 0)
50+
if (evaluatedResults.Count == 0)
5151
{
52-
filter.size = evaluatedResults.Count;
52+
filter.viewed = 0;
53+
filter.url = APIV2Helper.ConstructFilterIdUrl(ctx, filter.id);
5354

54-
// Populate Random Art
55+
return filter;
56+
}
5557

56-
List<SVR_AnimeSeries>? arts = null;
57-
var seriesList = evaluatedResults.SelectMany(a => a).Select(RepoFactory.AnimeSeries.GetByID).WhereNotNull().ToList();
58-
var groupsList = evaluatedResults.Select(r => RepoFactory.AnimeGroup.GetByID(r.Key)).WhereNotNull().ToList();
59-
if (pic == 1)
60-
{
61-
arts = seriesList.Where(SeriesHasArt).ToList();
58+
filter.size = evaluatedResults.Count;
6259

63-
if (arts.Count == 0)
64-
{
65-
arts = seriesList;
66-
}
67-
}
60+
// Populate Random Art
61+
List<SVR_AnimeSeries>? arts = null;
62+
var seriesList = evaluatedResults.SelectMany(a => a).Select(RepoFactory.AnimeSeries.GetByID).WhereNotNull().ToList();
63+
var groupsList = evaluatedResults.Select(r => RepoFactory.AnimeGroup.GetByID(r.Key)).Where(a => a is { AnimeGroupParentID: null }).ToList();
64+
if (pic == 1)
65+
{
66+
arts = seriesList.Where(SeriesHasArt).ToList();
67+
68+
if (arts.Count == 0) arts = seriesList;
69+
}
6870

69-
if (arts?.Count > 0)
71+
if (arts?.Count > 0)
72+
{
73+
var rand = new Random();
74+
var anime = arts[rand.Next(arts.Count)];
75+
var backdrops = anime.GetImages(ImageEntityType.Backdrop);
76+
if (backdrops.Count > 0)
7077
{
71-
var rand = new Random();
72-
var anime = arts[rand.Next(arts.Count)];
73-
var backdrops = anime.GetImages(ImageEntityType.Backdrop);
74-
if (backdrops.Count > 0)
78+
var backdrop = backdrops[rand.Next(backdrops.Count)];
79+
filter.art.fanart.Add(new Art
7580
{
76-
var backdrop = backdrops[rand.Next(backdrops.Count)];
77-
filter.art.fanart.Add(new Art
78-
{
79-
index = 0,
80-
url = APIHelper.ConstructImageLinkFromTypeAndId(ctx, backdrop.ImageType, backdrop.Source, backdrop.ID),
81-
});
82-
}
83-
84-
filter.art.thumb.Add(new Art
85-
{
86-
index = 0,
87-
url = APIHelper.ConstructImageLinkFromTypeAndId(ctx, ImageEntityType.Poster, DataSourceEnum.AniDB, anime.AniDB_ID),
81+
index = 0, url = APIHelper.ConstructImageLinkFromTypeAndId(ctx, backdrop.ImageType, backdrop.Source, backdrop.ID),
8882
});
8983
}
9084

91-
if (level > 0)
92-
{
93-
groups.AddRange(groupsList.Select(ag => Group.GenerateFromAnimeGroup(ctx, ag, uid, noCast, noTag, level - 1, all, filter.id, allPic, pic, tagFilter, evaluatedResults?.FirstOrDefault(a => a.Key == ag.AnimeGroupID)?.ToList())));
94-
}
95-
96-
if (groups.Count > 0)
85+
filter.art.thumb.Add(new Art
9786
{
98-
filter.groups = groups;
99-
}
87+
index = 0, url = APIHelper.ConstructImageLinkFromTypeAndId(ctx, ImageEntityType.Poster, DataSourceEnum.AniDB, anime.AniDB_ID),
88+
});
10089
}
10190

91+
if (level > 0)
92+
groups.AddRange(groupsList.Select(ag => Group.GenerateFromAnimeGroup(ctx, ag, uid, noCast, noTag, level - 1, all, filter.id, allPic, pic, tagFilter,
93+
evaluatedResults?.FirstOrDefault(a => a.Key == ag.AnimeGroupID)?.ToList())));
94+
95+
if (groups.Count > 0) filter.groups = groups;
96+
10297
filter.viewed = 0;
10398
filter.url = APIV2Helper.ConstructFilterIdUrl(ctx, filter.id);
10499

Shoko.Server/API/v3/Controllers/TreeController.cs

+3-4
Original file line numberDiff line numberDiff line change
@@ -175,10 +175,9 @@ public ActionResult<ListResult<Group>> GetFilteredGroups([FromRoute, Range(0, in
175175
if (!results.Any()) return new ListResult<Group>();
176176

177177
groups = results
178-
.Select(group => RepoFactory.AnimeGroup.GetByID(group.Key)?.TopLevelAnimeGroup)
179-
.WhereNotNull()
180-
.DistinctBy(group => group.AnimeGroupID)
181-
.Where(group => includeEmpty || group.AllSeries.Any(s => s.AnimeEpisodes.Any(e => e.VideoLocals.Count > 0)));
178+
.Select(group => RepoFactory.AnimeGroup.GetByID(group.Key))
179+
.Where(group => group is { AnimeGroupParentID: null } &&
180+
(includeEmpty || group.AllSeries.Any(s => s.AnimeEpisodes.Any(e => e.VideoLocals.Count > 0))));
182181
}
183182

184183
if (orderByName)

Shoko.Server/API/v3/Helpers/FilterFactory.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ public Filter GetFilter(FilterPreset groupFilter, bool fullModel = false)
5959

6060
filter.Size = filter.IsDirectory
6161
? RepoFactory.FilterPreset.GetByParentID(groupFilter.FilterPresetID).Count
62-
: _evaluator.EvaluateFilter(groupFilter, user?.JMMUserID).Count();
62+
// Only count top level groups
63+
: _evaluator.EvaluateFilter(groupFilter, user?.JMMUserID).Count(a => RepoFactory.AnimeGroup.GetByID(a.Key)?.AnimeGroupParentID == null);
6364
return filter;
6465
}
6566

0 commit comments

Comments
 (0)