Skip to content

Commit b19ff21

Browse files
committed
Redid the migration and added the ability to turn off Kavita+ writing age ratings altogether
1 parent 061d57c commit b19ff21

11 files changed

Lines changed: 50 additions & 8 deletions

File tree

Kavita.Database/Migrations/20260810202246_KPlusTagAndAgeRatingFilters.Designer.cs renamed to Kavita.Database/Migrations/20260812183651_KPlusTagAndAgeRatingFilters.Designer.cs

Lines changed: 4 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Kavita.Database/Migrations/20260810202246_KPlusTagAndAgeRatingFilters.cs renamed to Kavita.Database/Migrations/20260812183651_KPlusTagAndAgeRatingFilters.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@ public partial class KPlusTagAndAgeRatingFilters : Migration
1010
/// <inheritdoc />
1111
protected override void Up(MigrationBuilder migrationBuilder)
1212
{
13+
migrationBuilder.AddColumn<bool>(
14+
name: "EnableAgeRating",
15+
table: "MetadataSettings",
16+
type: "INTEGER",
17+
nullable: false,
18+
defaultValue: false);
19+
1320
migrationBuilder.AddColumn<string>(
1421
name: "ExternalAgeRatingMappings",
1522
table: "MetadataSettings",
@@ -26,6 +33,10 @@ protected override void Up(MigrationBuilder migrationBuilder)
2633
/// <inheritdoc />
2734
protected override void Down(MigrationBuilder migrationBuilder)
2835
{
36+
migrationBuilder.DropColumn(
37+
name: "EnableAgeRating",
38+
table: "MetadataSettings");
39+
2940
migrationBuilder.DropColumn(
3041
name: "ExternalAgeRatingMappings",
3142
table: "MetadataSettings");

Kavita.Database/Migrations/DataContextModelSnapshot.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1359,6 +1359,9 @@ protected override void BuildModel(ModelBuilder modelBuilder)
13591359
b.Property<string>("Blacklist")
13601360
.HasColumnType("TEXT");
13611361

1362+
b.Property<bool>("EnableAgeRating")
1363+
.HasColumnType("INTEGER");
1364+
13621365
b.Property<bool>("EnableChapterCoverImage")
13631366
.HasColumnType("INTEGER");
13641367

Kavita.Models/DTOs/KavitaPlus/Metadata/MetadataSettingsDto.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ public sealed record MetadataSettingsDto: FieldMappingsDto
3030
/// </summary>
3131
public bool EnablePublicationStatus { get; set; }
3232
/// <summary>
33+
/// Allow Age Rating status to be derived and updated
34+
/// </summary>
35+
public bool EnableAgeRating { get; set; }
36+
/// <summary>
3337
/// Allow Relationships between series to be set
3438
/// </summary>
3539
public bool EnableRelationships { get; set; }

Kavita.Models/Entities/MetadataMatching/MetadataSettings.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ public class MetadataSettings
3232
/// </summary>
3333
public bool EnablePublicationStatus { get; set; }
3434
/// <summary>
35+
/// Allow Age Rating status to be derived and updated
36+
/// </summary>
37+
public bool EnableAgeRating { get; set; }
38+
/// <summary>
3539
/// Allow Relationships between series to be set
3640
/// </summary>
3741
public bool EnableRelationships { get; set; }

Kavita.Services/Plus/ExternalMetadataService.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -970,14 +970,12 @@ private static HashSet<string> GetTagsToRemove(ExternalSeriesDetailDto externalM
970970
? settings.Whitelist.Select(s => s.ToNormalized()).ToHashSet()
971971
: null;
972972

973+
if (settings.FilterAboveWeight == null) return [];
973974

974-
var tagsToRemove = settings.FilterAboveWeight == null
975-
? []
976-
: externalMetadata.Tags
977-
.Where(t => t.TagWeight != null && t.TagWeight > settings.FilterAboveWeight && whitelist?.Contains(t.Name.ToNormalized()) != true)
978-
.Select(t => t.Name)
979-
.ToHashSet(StringComparer.OrdinalIgnoreCase);
980-
return tagsToRemove;
975+
return externalMetadata.Tags
976+
.Where(t => t.TagWeight != null && t.TagWeight > settings.FilterAboveWeight && whitelist?.Contains(t.Name.ToNormalized()) != true)
977+
.Select(t => t.Name)
978+
.ToHashSet(StringComparer.OrdinalIgnoreCase);;
981979
}
982980

983981

@@ -1707,6 +1705,8 @@ private static List<string> ApplyBlackWhiteList(MetadataSettingsDto settings, Me
17071705

17081706
private (bool, MetadataFieldChangeDto?) UpdateAgeRating(Series series, MetadataSettingsDto settings, ExternalSeriesDetailDto externalMetadata, IEnumerable<string> allExternalTags)
17091707
{
1708+
if (!settings.EnableAgeRating) return (false, null);
1709+
17101710
if (series.Metadata.AgeRatingLocked && !HasForceOverride(settings, series.Metadata, MetadataSettingField.AgeRating))
17111711
{
17121712
return (false, null);

Kavita.Services/SettingsService.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public async Task<MetadataSettingsDto> UpdateMetadataSettings(MetadataSettingsDt
5656
existingMetadataSetting.EnableLocalizedName = dto.EnableLocalizedName;
5757
existingMetadataSetting.EnableName = dto.EnableName;
5858
existingMetadataSetting.EnablePublicationStatus = dto.EnablePublicationStatus;
59+
existingMetadataSetting.EnableAgeRating = dto.EnableAgeRating;
5960
existingMetadataSetting.EnableRelationships = dto.EnableRelationships;
6061
existingMetadataSetting.EnablePeople = dto.EnablePeople;
6162
existingMetadataSetting.EnableStartDate = dto.EnableStartDate;

UI/Web/src/app/admin/_models/metadata-settings.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export interface MetadataSettings {
2323
enableExtendedMetadataProcessing: boolean;
2424
enableSummary: boolean;
2525
enablePublicationStatus: boolean;
26+
enableAgeRating: boolean;
2627
enableRelationships: boolean;
2728
enablePeople: boolean;
2829
enableStartDate: boolean;

UI/Web/src/app/admin/manage-metadata-settings/manage-metadata-settings.component.html

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,18 @@ <h2 class="accordion-header" ngbAccordionHeader>
233233
}
234234
</div>
235235

236+
<div class="row g-0 mt-4 mb-4">
237+
@if(settingsForm.get('enableAgeRating'); as formControl) {
238+
<app-setting-switch [title]="t('enable-age-rating-label')" [subtitle]="t('enable-age-rating-tooltip')">
239+
<ng-template #switch>
240+
<div class="form-check form-switch float-end">
241+
<input id="enable-age-rating" type="checkbox" class="form-check-input" formControlName="enableAgeRating">
242+
</div>
243+
</ng-template>
244+
</app-setting-switch>
245+
}
246+
</div>
247+
236248
<div class="row g-0 mt-4 mb-4">
237249
@if(settingsForm.get('enablePublicationStatus'); as formControl) {
238250
<app-setting-switch [title]="t('derive-publication-status-label')" [subtitle]="t('derive-publication-status-tooltip')">

UI/Web/src/app/admin/manage-metadata-settings/manage-metadata-settings.component.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ export class ManageMetadataSettingsComponent implements OnInit {
187187
this.settingsForm.addControl('enableLocalizedName', new FormControl(settings.enableLocalizedName, []));
188188
this.settingsForm.addControl('enableName', new FormControl(settings.enableName, []));
189189
this.settingsForm.addControl('enablePublicationStatus', new FormControl(settings.enablePublicationStatus, []));
190+
this.settingsForm.addControl('enableAgeRating', new FormControl(settings.enableAgeRating, []));
190191
this.settingsForm.addControl('enableRelations', new FormControl(settings.enableRelationships, []));
191192
this.settingsForm.addControl('enableGenres', new FormControl(settings.enableGenres, []));
192193
this.settingsForm.addControl('enableTags', new FormControl(settings.enableTags, []));

0 commit comments

Comments
 (0)