diff --git a/API/DTOs/Account/UpdateUserDto.cs b/API/DTOs/Account/UpdateUserDto.cs
index 71e2d6af4..0cb0eaf66 100644
--- a/API/DTOs/Account/UpdateUserDto.cs
+++ b/API/DTOs/Account/UpdateUserDto.cs
@@ -6,10 +6,14 @@ namespace API.DTOs.Account;
public sealed record UpdateUserDto
{
+ ///
public int UserId { get; set; }
+ ///
public string Username { get; set; } = default!;
+ ///
/// List of Roles to assign to user. If admin not present, Pleb will be applied.
/// If admin present, all libraries will be granted access and will ignore those from DTO.
+ ///
public IList Roles { get; init; } = default!;
///
/// A list of libraries to grant access to
@@ -19,8 +23,6 @@ public sealed record UpdateUserDto
/// An Age Rating which will limit the account to seeing everything equal to or below said rating.
///
public AgeRestrictionDto AgeRestriction { get; init; } = default!;
- ///
- /// Email of the user
- ///
+ ///
public string? Email { get; set; } = default!;
}
diff --git a/API/DTOs/ChapterDto.cs b/API/DTOs/ChapterDto.cs
index 70c77e92d..70fb12e85 100644
--- a/API/DTOs/ChapterDto.cs
+++ b/API/DTOs/ChapterDto.cs
@@ -13,37 +13,24 @@ namespace API.DTOs;
///
public class ChapterDto : IHasReadTimeEstimate, IHasCoverImage
{
+ ///
public int Id { get; init; }
- ///
- /// Range of chapters. Chapter 2-4 -> "2-4". Chapter 2 -> "2". If special, will be special name.
- ///
- /// This can be something like 19.HU or Alpha as some comics are like this
+ ///
public string Range { get; init; } = default!;
- ///
- /// Smallest number of the Range.
- ///
+ ///
[Obsolete("Use MinNumber and MaxNumber instead")]
public string Number { get; init; } = default!;
- ///
- /// This may be 0 under the circumstance that the Issue is "Alpha" or other non-standard numbers.
- ///
+ ///
public float MinNumber { get; init; }
+ ///
public float MaxNumber { get; init; }
- ///
- /// The sorting order of the Chapter. Inherits from MinNumber, but can be overridden.
- ///
+ ///
public float SortOrder { get; set; }
- ///
- /// Total number of pages in all MangaFiles
- ///
+ ///
public int Pages { get; init; }
- ///
- /// If this Chapter contains files that could only be identified as Series or has Special Identifier from filename
- ///
+ ///
public bool IsSpecial { get; init; }
- ///
- /// Used for books/specials to display custom title. For non-specials/books, will be set to
- ///
+ ///
public string Title { get; set; } = default!;
///
/// The files that represent this Chapter
@@ -61,46 +48,25 @@ public class ChapterDto : IHasReadTimeEstimate, IHasCoverImage
/// The last time a chapter was read by current authenticated user
///
public DateTime LastReadingProgress { get; set; }
- ///
- /// If the Cover Image is locked for this entity
- ///
+ ///
public bool CoverImageLocked { get; set; }
- ///
- /// Volume Id this Chapter belongs to
- ///
+ ///
public int VolumeId { get; init; }
- ///
- /// When chapter was created
- ///
+ ///
public DateTime CreatedUtc { get; set; }
+ ///
public DateTime LastModifiedUtc { get; set; }
- ///
- /// When chapter was created in local server time
- ///
- /// This is required for Tachiyomi Extension
+ ///
public DateTime Created { get; set; }
- ///
- /// When the chapter was released.
- ///
- /// Metadata field
+ ///
public DateTime ReleaseDate { get; init; }
- ///
- /// Title of the Chapter/Issue
- ///
- /// Metadata field
+ ///
public string TitleName { get; set; } = default!;
- ///
- /// Summary of the Chapter
- ///
- /// This is not set normally, only for Series Detail
+ ///
public string Summary { get; init; } = default!;
- ///
- /// Age Rating for the issue/chapter
- ///
+ ///
public AgeRating AgeRating { get; init; }
- ///
- /// Total words in a Chapter (books only)
- ///
+ ///
public long WordCount { get; set; } = 0L;
///
/// Formatted Volume title ie) Volume 2.
@@ -113,14 +79,9 @@ public class ChapterDto : IHasReadTimeEstimate, IHasCoverImage
public int MaxHoursToRead { get; set; }
///
public float AvgHoursToRead { get; set; }
- ///
- /// Comma-separated link of urls to external services that have some relation to the Chapter
- ///
+ ///
public string WebLinks { get; set; }
- ///
- /// ISBN-13 (usually) of the Chapter
- ///
- /// This is guaranteed to be Valid
+ ///
public string ISBN { get; set; }
#region Metadata
@@ -146,51 +107,60 @@ public class ChapterDto : IHasReadTimeEstimate, IHasCoverImage
///
public ICollection Tags { get; set; } = new List();
public PublicationStatus PublicationStatus { get; set; }
- ///
- /// Language for the Chapter/Issue
- ///
+ ///
public string? Language { get; set; }
- ///
- /// Number in the TotalCount of issues
- ///
+ ///
public int Count { get; set; }
- ///
- /// Total number of issues for the series
- ///
+ ///
public int TotalCount { get; set; }
+ ///
public bool LanguageLocked { get; set; }
+ ///
public bool SummaryLocked { get; set; }
- ///
- /// Locked by user so metadata updates from scan loop will not override AgeRating
- ///
+ ///
public bool AgeRatingLocked { get; set; }
- ///
- /// Locked by user so metadata updates from scan loop will not override PublicationStatus
- ///
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 ImprintLocked { get; set; }
+ ///
public bool LettererLocked { get; set; }
+ ///
public bool PencillerLocked { get; set; }
+ ///
public bool PublisherLocked { get; set; }
+ ///
public bool TranslatorLocked { get; set; }
+ ///
public bool TeamLocked { get; set; }
+ ///
public bool LocationLocked { get; set; }
+ ///
public bool CoverArtistLocked { get; set; }
public bool ReleaseYearLocked { get; set; }
#endregion
- public string CoverImage { get; set; }
- public string PrimaryColor { get; set; } = string.Empty;
- public string SecondaryColor { get; set; } = string.Empty;
+ ///
+ public string? CoverImage { get; set; }
+ ///
+ public string? PrimaryColor { get; set; } = string.Empty;
+ ///
+ public string? SecondaryColor { get; set; } = string.Empty;
public void ResetColorScape()
{
diff --git a/API/DTOs/CollectionTags/CollectionTagDto.cs b/API/DTOs/CollectionTags/CollectionTagDto.cs
index dccaebdb7..911622051 100644
--- a/API/DTOs/CollectionTags/CollectionTagDto.cs
+++ b/API/DTOs/CollectionTags/CollectionTagDto.cs
@@ -5,13 +5,19 @@ namespace API.DTOs.CollectionTags;
[Obsolete("Use AppUserCollectionDto")]
public sealed record CollectionTagDto
{
+ ///
public int Id { get; set; }
+ ///
public string Title { get; set; } = default!;
+ ///
public string Summary { get; set; } = default!;
+ ///
public bool Promoted { get; set; }
///
/// The cover image string. This is used on Frontend to show or hide the Cover Image
///
+ ///
public string CoverImage { get; set; } = default!;
+ ///
public bool CoverImageLocked { get; set; }
}
diff --git a/API/DTOs/ReadingLists/ReadingListDto.cs b/API/DTOs/ReadingLists/ReadingListDto.cs
index d61e2d615..cbc16275d 100644
--- a/API/DTOs/ReadingLists/ReadingListDto.cs
+++ b/API/DTOs/ReadingLists/ReadingListDto.cs
@@ -20,8 +20,8 @@ public sealed record ReadingListDto : IHasCoverImage
///
public string? CoverImage { get; set; } = string.Empty;
- public string PrimaryColor { get; set; } = string.Empty;
- public string SecondaryColor { get; set; } = string.Empty;
+ public string? PrimaryColor { get; set; } = string.Empty;
+ public string? SecondaryColor { get; set; } = string.Empty;
///
/// Number of Items in the Reading List
diff --git a/API/DTOs/SeriesDto.cs b/API/DTOs/SeriesDto.cs
index b5365a5f8..8a49d4c05 100644
--- a/API/DTOs/SeriesDto.cs
+++ b/API/DTOs/SeriesDto.cs
@@ -7,12 +7,19 @@ namespace API.DTOs;
public sealed record SeriesDto : IHasReadTimeEstimate, IHasCoverImage
{
+ ///
public int Id { get; init; }
+ ///
public string? Name { get; init; }
+ ///
public string? OriginalName { get; init; }
+ ///
public string? LocalizedName { get; init; }
+ ///
public string? SortName { get; init; }
+ ///
public int Pages { get; init; }
+ ///
public bool CoverImageLocked { get; set; }
///
/// Sum of pages read from linked Volumes. Calculated at API-time.
@@ -22,9 +29,7 @@ public sealed record SeriesDto : IHasReadTimeEstimate, IHasCoverImage
/// DateTime representing last time the series was Read. Calculated at API-time.
///
public DateTime LatestReadDate { get; set; }
- ///
- /// DateTime representing last time a chapter was added to the Series
- ///
+ ///
public DateTime LastChapterAdded { get; set; }
///
/// Rating from logged in user. Calculated at API-time.
@@ -35,17 +40,19 @@ public sealed record SeriesDto : IHasReadTimeEstimate, IHasCoverImage
///
public bool HasUserRated { get; set; }
+ ///
public MangaFormat Format { get; set; }
+ ///
public DateTime Created { get; set; }
- public bool NameLocked { get; set; }
+ ///
public bool SortNameLocked { get; set; }
+ ///
public bool LocalizedNameLocked { get; set; }
- ///
- /// Total number of words for the series. Only applies to epubs.
- ///
+ ///
public long WordCount { get; set; }
+ ///
public int LibraryId { get; set; }
public string LibraryName { get; set; } = default!;
///
@@ -54,33 +61,25 @@ public sealed record SeriesDto : IHasReadTimeEstimate, IHasCoverImage
public int MaxHoursToRead { get; set; }
///
public float AvgHoursToRead { get; set; }
- ///
- /// The highest level folder for this Series
- ///
+ ///
public string FolderPath { get; set; } = default!;
- ///
- /// Lowest path (that is under library root) that contains all files for the series.
- ///
- /// must be used before setting
+ ///
public string? LowestFolderPath { get; set; }
- ///
- /// The last time the folder for this series was scanned
- ///
+ ///
public DateTime LastFolderScanned { get; set; }
#region KavitaPlus
- ///
- /// Do not match the series with any external Metadata service. This will automatically opt it out of scrobbling.
- ///
+ ///
public bool DontMatch { get; set; }
- ///
- /// If the series was unable to match, it will be blacklisted until a manual metadata match overrides it
- ///
+ ///
public bool IsBlacklisted { get; set; }
#endregion
+ ///
public string? CoverImage { get; set; }
- public string PrimaryColor { get; set; } = string.Empty;
- public string SecondaryColor { get; set; } = string.Empty;
+ ///
+ public string? PrimaryColor { get; set; } = string.Empty;
+ ///
+ public string? SecondaryColor { get; set; } = string.Empty;
public void ResetColorScape()
{
diff --git a/API/DTOs/UserPreferencesDto.cs b/API/DTOs/UserPreferencesDto.cs
index b550c829c..6645a8f39 100644
--- a/API/DTOs/UserPreferencesDto.cs
+++ b/API/DTOs/UserPreferencesDto.cs
@@ -9,102 +9,59 @@ namespace API.DTOs;
public sealed record UserPreferencesDto
{
- ///
- /// Manga Reader Option: What direction should the next/prev page buttons go
- ///
+ ///
[Required]
public ReadingDirection ReadingDirection { get; set; }
- ///
- /// Manga Reader Option: How should the image be scaled to screen
- ///
+ ///
[Required]
public ScalingOption ScalingOption { get; set; }
- ///
- /// Manga Reader Option: Which side of a split image should we show first
- ///
+ ///
[Required]
public PageSplitOption PageSplitOption { get; set; }
- ///
- /// Manga Reader Option: How the manga reader should perform paging or reading of the file
- ///
- /// Webtoon uses scrolling to page, LeftRight uses paging by clicking left/right side of reader, UpDown uses paging
- /// by clicking top/bottom sides of reader.
- ///
- ///
+ ///
[Required]
public ReaderMode ReaderMode { get; set; }
- ///
- /// Manga Reader Option: How many pages to display in the reader at once
- ///
+ ///
[Required]
public LayoutMode LayoutMode { get; set; }
- ///
- /// Manga Reader Option: Emulate a book by applying a shadow effect on the pages
- ///
+ ///
[Required]
public bool EmulateBook { get; set; }
- ///
- /// Manga Reader Option: Background color of the reader
- ///
+ ///
[Required]
public string BackgroundColor { get; set; } = "#000000";
- ///
- /// Manga Reader Option: Should swiping trigger pagination
- ///
+ ///
[Required]
public bool SwipeToPaginate { get; set; }
- ///
- /// Manga Reader Option: Allow the menu to close after 6 seconds without interaction
- ///
+ ///
[Required]
public bool AutoCloseMenu { get; set; }
- ///
- /// Manga Reader Option: Show screen hints to the user on some actions, ie) pagination direction change
- ///
+ ///
[Required]
public bool ShowScreenHints { get; set; } = true;
- ///
- /// Manga Reader Option: Allow Automatic Webtoon detection
- ///
+ ///
[Required]
public bool AllowAutomaticWebtoonReaderDetection { get; set; }
-
- ///
- /// Book Reader Option: Override extra Margin
- ///
+ ///
[Required]
public int BookReaderMargin { get; set; }
- ///
- /// Book Reader Option: Override line-height
- ///
+ ///
[Required]
public int BookReaderLineSpacing { get; set; }
- ///
- /// Book Reader Option: Override font size
- ///
+ ///
[Required]
public int BookReaderFontSize { get; set; }
- ///
- /// Book Reader Option: Maps to the default Kavita font-family (inherit) or an override
- ///
+ ///
[Required]
public string BookReaderFontFamily { get; set; } = null!;
-
- ///
- /// Book Reader Option: Allows tapping on side of screens to paginate
- ///
+ ///
[Required]
public bool BookReaderTapToPaginate { get; set; }
- ///
- /// Book Reader Option: What direction should the next/prev page buttons go
- ///
+ ///
[Required]
public ReadingDirection BookReaderReadingDirection { get; set; }
-
- ///
- /// Book Reader Option: What writing style should be used, horizontal or vertical.
- ///
+ ///
[Required]
public WritingStyle BookReaderWritingStyle { get; set; }
@@ -116,79 +73,46 @@ public sealed record UserPreferencesDto
public SiteThemeDto? Theme { get; set; }
[Required] public string BookReaderThemeName { get; set; } = null!;
+ ///
[Required]
public BookPageLayoutMode BookReaderLayoutMode { get; set; }
- ///
- /// Book Reader Option: A flag that hides the menu-ing system behind a click on the screen. This should be used with tap to paginate, but the app doesn't enforce this.
- ///
- /// Defaults to false
+ ///
[Required]
public bool BookReaderImmersiveMode { get; set; } = false;
- ///
- /// Global Site Option: If the UI should layout items as Cards or List items
- ///
- /// Defaults to Cards
+ ///
[Required]
public PageLayoutMode GlobalPageLayoutMode { get; set; } = PageLayoutMode.Cards;
- ///
- /// UI Site Global Setting: If unread summaries should be blurred until expanded or unless user has read it already
- ///
- /// Defaults to false
+ ///
[Required]
public bool BlurUnreadSummaries { get; set; } = false;
- ///
- /// UI Site Global Setting: Should Kavita prompt user to confirm downloads that are greater than 100 MB.
- ///
+ ///
[Required]
public bool PromptForDownloadSize { get; set; } = true;
- ///
- /// UI Site Global Setting: Should Kavita disable CSS transitions
- ///
+ ///
[Required]
public bool NoTransitions { get; set; } = false;
- ///
- /// When showing series, only parent series or series with no relationships will be returned
- ///
+ ///
[Required]
public bool CollapseSeriesRelationships { get; set; } = false;
- ///
- /// UI Site Global Setting: Should series reviews be shared with all users in the server
- ///
+ ///
[Required]
public bool ShareReviews { get; set; } = false;
- ///
- /// UI Site Global Setting: The language locale that should be used for the user
- ///
+ ///
[Required]
public string Locale { get; set; }
- ///
- /// PDF Reader: Theme of the Reader
- ///
+ ///
[Required]
public PdfTheme PdfTheme { get; set; } = PdfTheme.Dark;
- ///
- /// PDF Reader: Scroll mode of the reader
- ///
+ ///
[Required]
public PdfScrollMode PdfScrollMode { get; set; } = PdfScrollMode.Vertical;
- ///
- /// PDF Reader: Layout Mode of the reader
- ///
- [Required]
- public PdfLayoutMode PdfLayoutMode { get; set; } = PdfLayoutMode.Multiple;
- ///
- /// PDF Reader: Spread Mode of the reader
- ///
+ ///
[Required]
public PdfSpreadMode PdfSpreadMode { get; set; } = PdfSpreadMode.None;
- ///
- /// Kavita+: Should this account have Scrobbling enabled for AniList
- ///
+ ///
public bool AniListScrobblingEnabled { get; set; }
- ///
- /// Kavita+: Should this account have Want to Read Sync enabled
- ///
+ ///
public bool WantToReadSync { get; set; }
}
diff --git a/API/DTOs/VolumeDto.cs b/API/DTOs/VolumeDto.cs
index acb552f0f..fffccea59 100644
--- a/API/DTOs/VolumeDto.cs
+++ b/API/DTOs/VolumeDto.cs
@@ -1,5 +1,4 @@
-
-using System;
+using System;
using System.Collections.Generic;
using API.Entities;
using API.Entities.Interfaces;
@@ -10,12 +9,13 @@ namespace API.DTOs;
public sealed record VolumeDto : IHasReadTimeEstimate, IHasCoverImage
{
+ ///
public int Id { get; set; }
- ///
+ ///
public float MinNumber { get; set; }
- ///
+ ///
public float MaxNumber { get; set; }
- ///
+ ///
public string Name { get; set; } = default!;
///
/// This will map to MinNumber. Number was removed in v0.7.13.8/v0.7.14
@@ -24,17 +24,21 @@ public sealed record VolumeDto : IHasReadTimeEstimate, IHasCoverImage
public int Number { get; set; }
public int Pages { get; set; }
public int PagesRead { get; set; }
+ ///
public DateTime LastModifiedUtc { get; set; }
+ ///
public DateTime CreatedUtc { get; set; }
///
/// When chapter was created in local server time
///
/// This is required for Tachiyomi Extension
+ ///
public DateTime Created { get; set; }
///
/// When chapter was last modified in local server time
///
/// This is required for Tachiyomi Extension
+ ///
public DateTime LastModified { get; set; }
public int SeriesId { get; set; }
public ICollection Chapters { get; set; } = new List();
@@ -64,10 +68,14 @@ public sealed record VolumeDto : IHasReadTimeEstimate, IHasCoverImage
return MinNumber.Is(Parser.SpecialVolumeNumber);
}
+ ///
public string CoverImage { get; set; }
+ ///
private bool CoverImageLocked { get; set; }
- public string PrimaryColor { get; set; } = string.Empty;
- public string SecondaryColor { get; set; } = string.Empty;
+ ///
+ public string? PrimaryColor { get; set; } = string.Empty;
+ ///
+ public string? SecondaryColor { get; set; } = string.Empty;
public void ResetColorScape()
{