mirror of
https://github.com/Kareadita/Kavita.git
synced 2025-06-23 15:30:34 -04:00
* Fixed an issue where when falling back to folder parsing, sometimes the folder name wouldn't parse well, like "Foo 50" which parses as "Foo". Now the fallback will check if we have a solid series parsed from filename before we attempt to parse a folder. * Ensure SortName is set during a scan loop even if locked and it's empty string. * Added some null checks for metadata update * Fixed a bug where Updating a series name with a name of an existing series wouldn't properly check for existing series. * Tweaked the logic of OnDeck to consider LastChapterCreated from all chapters in a series, not just those with progress. * Fixed a bug where the hamburger menu was still visible on login/registration page despite not functioning * Tweaked the logic of OnDeck to consider LastChapterCreated from all chapters in a series, not just those with progress. * Removed 2 unused packages from ui * Fixed some bugs around determining what the current installed version is in Announcements * Use AnyAsync for a query to improve performance * Fixed up some fallback code * Tests are finally fixed
84 lines
2.8 KiB
C#
84 lines
2.8 KiB
C#
using System.Collections.Generic;
|
|
using System.ComponentModel.DataAnnotations;
|
|
using API.Entities.Enums;
|
|
using API.Entities.Interfaces;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace API.Entities.Metadata
|
|
{
|
|
[Index(nameof(Id), nameof(SeriesId), IsUnique = true)]
|
|
public class SeriesMetadata : IHasConcurrencyToken
|
|
{
|
|
public int Id { get; set; }
|
|
|
|
public string Summary { get; set; } = string.Empty;
|
|
|
|
public ICollection<CollectionTag> CollectionTags { get; set; }
|
|
|
|
public ICollection<Genre> Genres { get; set; } = new List<Genre>();
|
|
public ICollection<Tag> Tags { get; set; } = new List<Tag>();
|
|
/// <summary>
|
|
/// All people attached at a Series level.
|
|
/// </summary>
|
|
public ICollection<Person> People { get; set; } = new List<Person>();
|
|
|
|
/// <summary>
|
|
/// Highest Age Rating from all Chapters
|
|
/// </summary>
|
|
public AgeRating AgeRating { get; set; }
|
|
/// <summary>
|
|
/// Earliest Year from all chapters
|
|
/// </summary>
|
|
public int ReleaseYear { get; set; }
|
|
/// <summary>
|
|
/// Language of the content (BCP-47 code)
|
|
/// </summary>
|
|
public string Language { get; set; } = string.Empty;
|
|
/// <summary>
|
|
/// Total number of issues in the series
|
|
/// </summary>
|
|
public int Count { get; set; } = 0;
|
|
public PublicationStatus PublicationStatus { get; set; }
|
|
|
|
// Locks
|
|
public bool LanguageLocked { get; set; }
|
|
public bool SummaryLocked { get; set; }
|
|
/// <summary>
|
|
/// Locked by user so metadata updates from scan loop will not override AgeRating
|
|
/// </summary>
|
|
public bool AgeRatingLocked { get; set; }
|
|
/// <summary>
|
|
/// Locked by user so metadata updates from scan loop will not override PublicationStatus
|
|
/// </summary>
|
|
public bool PublicationStatusLocked { get; set; }
|
|
public bool GenresLocked { get; set; }
|
|
public bool TagsLocked { get; set; }
|
|
public bool WriterLocked { get; set; }
|
|
public bool CharacterLocked { get; set; }
|
|
public bool ColoristLocked { get; set; }
|
|
public bool EditorLocked { get; set; }
|
|
public bool InkerLocked { get; set; }
|
|
public bool LettererLocked { get; set; }
|
|
public bool PencillerLocked { get; set; }
|
|
public bool PublisherLocked { get; set; }
|
|
public bool TranslatorLocked { get; set; }
|
|
public bool CoverArtistLocked { get; set; }
|
|
|
|
|
|
// Relationship
|
|
public Series Series { get; set; }
|
|
public int SeriesId { get; set; }
|
|
|
|
/// <inheritdoc />
|
|
[ConcurrencyCheck]
|
|
public uint RowVersion { get; private set; }
|
|
|
|
|
|
/// <inheritdoc />
|
|
public void OnSavingChanges()
|
|
{
|
|
RowVersion++;
|
|
}
|
|
}
|
|
}
|