Kavita/Kavita.Database/Converters/FilterFieldValueConverter.cs
Fesaa c62b20f54b
BE Tech Debt (#4497)
Co-authored-by: Joseph Milazzo <joseph.v.milazzo@gmail.com>
Co-authored-by: Joe Milazzo <josephmajora@gmail.com>
2026-03-07 10:04:08 -08:00

113 lines
4.8 KiB
C#

using System;
using System.Globalization;
using System.Linq;
using Kavita.Common.Extensions;
using Kavita.Models.DTOs.Filtering.v2;
using Kavita.Models.Entities.Enums;
namespace Kavita.Database.Converters;
public static class FilterFieldValueConverter
{
public static object ConvertValue(FilterField field, string value)
{
return field switch
{
FilterField.SeriesName => value,
FilterField.Path => value,
FilterField.FilePath => value,
FilterField.ReleaseYear => string.IsNullOrEmpty(value) ? 0 : int.Parse(value),
FilterField.Languages => value.Split(',').ToList(),
FilterField.PublicationStatus => value.Split(',')
.Where(s => !string.IsNullOrEmpty(s))
.Select(x => (PublicationStatus) Enum.Parse(typeof(PublicationStatus), x))
.ToList(),
FilterField.Summary => value,
FilterField.AgeRating => value.Split(',')
.Where(s => !string.IsNullOrEmpty(s))
.Select(x => (AgeRating) Enum.Parse(typeof(AgeRating), x))
.ToList(),
FilterField.UserRating => string.IsNullOrEmpty(value) ? 0 : float.Parse(value),
FilterField.Tags => value.Split(',')
.Where(s => !string.IsNullOrEmpty(s))
.Select(int.Parse)
.ToList(),
FilterField.CollectionTags => value.Split(',')
.Where(s => !string.IsNullOrEmpty(s))
.Select(int.Parse)
.ToList(),
FilterField.Translators => value.Split(',')
.Where(s => !string.IsNullOrEmpty(s))
.Select(int.Parse)
.ToList(),
FilterField.Characters => value.Split(',')
.Where(s => !string.IsNullOrEmpty(s))
.Select(int.Parse)
.ToList(),
FilterField.Publisher => value.Split(',')
.Where(s => !string.IsNullOrEmpty(s))
.Select(int.Parse)
.ToList(),
FilterField.Editor => value.Split(',')
.Where(s => !string.IsNullOrEmpty(s))
.Select(int.Parse)
.ToList(),
FilterField.CoverArtist => value.Split(',')
.Where(s => !string.IsNullOrEmpty(s))
.Select(int.Parse)
.ToList(),
FilterField.Letterer => value.Split(',')
.Where(s => !string.IsNullOrEmpty(s))
.Select(int.Parse)
.ToList(),
FilterField.Colorist => value.Split(',')
.Where(s => !string.IsNullOrEmpty(s))
.Select(int.Parse)
.ToList(),
FilterField.Inker => value.Split(',')
.Where(s => !string.IsNullOrEmpty(s))
.Select(int.Parse)
.ToList(),
FilterField.Imprint => value.Split(',')
.Where(s => !string.IsNullOrEmpty(s))
.Select(int.Parse)
.ToList(),
FilterField.Team => value.Split(',')
.Where(s => !string.IsNullOrEmpty(s))
.Select(int.Parse)
.ToList(),
FilterField.Location => value.Split(',')
.Where(s => !string.IsNullOrEmpty(s))
.Select(int.Parse)
.ToList(),
FilterField.Penciller => value.Split(',')
.Where(s => !string.IsNullOrEmpty(s))
.Select(int.Parse)
.ToList(),
FilterField.Writers => value.Split(',')
.Where(s => !string.IsNullOrEmpty(s))
.Select(int.Parse)
.ToList(),
FilterField.Genres => value.Split(',')
.Where(s => !string.IsNullOrEmpty(s))
.Select(int.Parse)
.ToList(),
FilterField.Libraries => value.Split(',')
.Where(s => !string.IsNullOrEmpty(s))
.Select(int.Parse)
.ToList(),
FilterField.WantToRead => bool.Parse(value),
FilterField.ReadProgress => string.IsNullOrEmpty(value) ? 0f : value.AsFloat(),
FilterField.ReadingDate => DateTime.Parse(value, CultureInfo.InvariantCulture),
FilterField.ReadLast => int.Parse(value),
FilterField.Formats => value.Split(',')
.Select(x => (MangaFormat) Enum.Parse(typeof(MangaFormat), x))
.ToList(),
FilterField.ReadTime => string.IsNullOrEmpty(value) ? 0 : int.Parse(value),
FilterField.AverageRating => string.IsNullOrEmpty(value) ? 0f : value.AsFloat(),
FilterField.FileSize => value.ParseHumanReadableBytes(),
_ => throw new ArgumentException("Invalid field type")
};
}
}