Fixed a great catch by Amelia on age rating restriction for Genre/Tag. Clean up some dead extension methods too.

This commit is contained in:
Joseph Milazzo 2025-06-14 08:40:05 -05:00
parent 0d4825ae14
commit fc55b7f1b8
3 changed files with 26 additions and 39 deletions

View file

@ -27,18 +27,6 @@ public static class RestrictByAgeExtensions
return q;
}
public static IQueryable<SeriesMetadata> RestrictAgainstAgeRestriction(this IQueryable<SeriesMetadata> queryable, AgeRestriction restriction)
{
if (restriction.AgeRating == AgeRating.NotApplicable) return queryable;
var q = queryable.Where(s => s.AgeRating <= restriction.AgeRating);
if (!restriction.IncludeUnknowns)
{
return q.Where(s => s.AgeRating != AgeRating.Unknown);
}
return q;
}
public static IQueryable<Chapter> RestrictAgainstAgeRestriction(this IQueryable<Chapter> queryable, AgeRestriction restriction)
{
@ -53,20 +41,6 @@ public static class RestrictByAgeExtensions
return q;
}
[Obsolete]
public static IQueryable<CollectionTag> RestrictAgainstAgeRestriction(this IQueryable<CollectionTag> queryable, AgeRestriction restriction)
{
if (restriction.AgeRating == AgeRating.NotApplicable) return queryable;
if (restriction.IncludeUnknowns)
{
return queryable.Where(c => c.SeriesMetadatas.All(sm =>
sm.AgeRating <= restriction.AgeRating));
}
return queryable.Where(c => c.SeriesMetadatas.All(sm =>
sm.AgeRating <= restriction.AgeRating && sm.AgeRating > AgeRating.Unknown));
}
public static IQueryable<AppUserCollection> RestrictAgainstAgeRestriction(this IQueryable<AppUserCollection> queryable, AgeRestriction restriction)
{
@ -88,12 +62,15 @@ public static class RestrictByAgeExtensions
if (restriction.IncludeUnknowns)
{
return queryable.Where(c => c.SeriesMetadatas.All(sm =>
sm.AgeRating <= restriction.AgeRating));
return queryable.Where(c =>
c.SeriesMetadatas.Any(sm => sm.AgeRating <= restriction.AgeRating) ||
c.Chapters.Any(cp => cp.AgeRating <= restriction.AgeRating));
}
return queryable.Where(c => c.SeriesMetadatas.All(sm =>
sm.AgeRating <= restriction.AgeRating && sm.AgeRating > AgeRating.Unknown));
return queryable.Where(c =>
c.SeriesMetadatas.Any(sm => sm.AgeRating <= restriction.AgeRating && sm.AgeRating != AgeRating.Unknown) ||
c.Chapters.Any(cp => cp.AgeRating <= restriction.AgeRating && cp.AgeRating != AgeRating.Unknown)
);
}
public static IQueryable<Tag> RestrictAgainstAgeRestriction(this IQueryable<Tag> queryable, AgeRestriction restriction)
@ -102,12 +79,15 @@ public static class RestrictByAgeExtensions
if (restriction.IncludeUnknowns)
{
return queryable.Where(c => c.SeriesMetadatas.All(sm =>
sm.AgeRating <= restriction.AgeRating));
return queryable.Where(c =>
c.SeriesMetadatas.Any(sm => sm.AgeRating <= restriction.AgeRating) ||
c.Chapters.Any(cp => cp.AgeRating <= restriction.AgeRating));
}
return queryable.Where(c => c.SeriesMetadatas.All(sm =>
sm.AgeRating <= restriction.AgeRating && sm.AgeRating > AgeRating.Unknown));
return queryable.Where(c =>
c.SeriesMetadatas.Any(sm => sm.AgeRating <= restriction.AgeRating && sm.AgeRating != AgeRating.Unknown) ||
c.Chapters.Any(cp => cp.AgeRating <= restriction.AgeRating && cp.AgeRating != AgeRating.Unknown)
);
}
public static IQueryable<Person> RestrictAgainstAgeRestriction(this IQueryable<Person> queryable, AgeRestriction restriction)

View file

@ -4,7 +4,7 @@ import {DecimalPipe} from "@angular/common";
import {
SideNavCompanionBarComponent
} from "../../sidenav/_components/side-nav-companion-bar/side-nav-companion-bar.component";
import {TranslocoDirective} from "@jsverse/transloco";
import {translate, TranslocoDirective} from "@jsverse/transloco";
import {JumpbarService} from "../../_services/jumpbar.service";
import {BrowsePerson} from "../../_models/metadata/browse/browse-person";
import {Pagination} from "../../_models/pagination";
@ -15,6 +15,7 @@ import {FilterField} from "../../_models/metadata/v2/filter-field";
import {FilterComparison} from "../../_models/metadata/v2/filter-comparison";
import {FilterUtilitiesService} from "../../shared/_services/filter-utilities.service";
import {CompactNumberPipe} from "../../_pipes/compact-number.pipe";
import {Title} from "@angular/platform-browser";
@Component({
selector: 'app-browse-genres',
@ -36,7 +37,8 @@ export class BrowseGenresComponent implements OnInit {
private readonly cdRef = inject(ChangeDetectorRef);
private readonly metadataService = inject(MetadataService);
private readonly jumpbarService = inject(JumpbarService);
protected readonly filterUtilityService = inject(FilterUtilitiesService);
private readonly filterUtilityService = inject(FilterUtilitiesService);
private readonly titleService = inject(Title);
isLoading = false;
genres: Array<BrowseGenre> = [];
@ -48,6 +50,9 @@ export class BrowseGenresComponent implements OnInit {
ngOnInit() {
this.isLoading = true;
this.cdRef.markForCheck();
this.titleService.setTitle('Kavita - ' + translate('browse-genres.title'));
this.metadataService.getGenreWithCounts(undefined, undefined).subscribe(d => {
this.genres = d.result;
this.pagination = d.pagination;
@ -60,6 +65,4 @@ export class BrowseGenresComponent implements OnInit {
openFilter(field: FilterField, value: string | number) {
this.filterUtilityService.applyFilter(['all-series'], field, FilterComparison.Equal, `${value}`).subscribe();
}
}

View file

@ -4,7 +4,7 @@ import {DecimalPipe} from "@angular/common";
import {
SideNavCompanionBarComponent
} from "../../sidenav/_components/side-nav-companion-bar/side-nav-companion-bar.component";
import {TranslocoDirective} from "@jsverse/transloco";
import {translate, TranslocoDirective} from "@jsverse/transloco";
import {MetadataService} from "../../_services/metadata.service";
import {JumpbarService} from "../../_services/jumpbar.service";
import {FilterUtilitiesService} from "../../shared/_services/filter-utilities.service";
@ -16,6 +16,7 @@ import {FilterField} from "../../_models/metadata/v2/filter-field";
import {FilterComparison} from "../../_models/metadata/v2/filter-comparison";
import {BrowseTag} from "../../_models/metadata/browse/browse-tag";
import {CompactNumberPipe} from "../../_pipes/compact-number.pipe";
import {Title} from "@angular/platform-browser";
@Component({
selector: 'app-browse-tags',
@ -37,6 +38,7 @@ export class BrowseTagsComponent implements OnInit {
private readonly metadataService = inject(MetadataService);
private readonly jumpbarService = inject(JumpbarService);
protected readonly filterUtilityService = inject(FilterUtilitiesService);
private readonly titleService = inject(Title);
isLoading = false;
tags: Array<BrowseTag> = [];
@ -48,6 +50,8 @@ export class BrowseTagsComponent implements OnInit {
ngOnInit() {
this.isLoading = true;
this.cdRef.markForCheck();
this.titleService.setTitle('Kavita - ' + translate('browse-tags.title'));
this.metadataService.getTagWithCounts(undefined, undefined).subscribe(d => {
this.tags = d.result;
this.pagination = d.pagination;