diff --git a/Kyoo.CommonAPI/JsonSerializer.cs b/Kyoo.CommonAPI/JsonSerializer.cs index 420ab9b8..57eb45d9 100644 --- a/Kyoo.CommonAPI/JsonSerializer.cs +++ b/Kyoo.CommonAPI/JsonSerializer.cs @@ -1,5 +1,6 @@ using System; using System.Collections; +using System.Collections.Generic; using System.Reflection; using Kyoo.Models; using Kyoo.Models.Attributes; @@ -58,10 +59,22 @@ namespace Kyoo.Controllers { public override void WriteJson(JsonWriter writer, PeopleRole value, JsonSerializer serializer) { - // TODO this seems to not use the property.ShouldSerialize and cause an recursive inclusion error. - JToken t = JToken.FromObject(value, serializer); - JObject obj = t as JObject; - writer.WriteValue(obj); + ICollection oldPeople = value.Show?.People; + ICollection oldRoles = value.People?.Roles; + if (value.Show != null) + value.Show.People = null; + if (value.People != null) + value.People.Roles = null; + + JObject obj = JObject.FromObject(value.ForPeople ? value.People : value.Show, serializer); + obj.Add("role", value.Role); + obj.Add("type", value.Type); + obj.WriteTo(writer); + + if (value.Show != null) + value.Show.People = oldPeople; + if (value.People != null) + value.People.Roles = oldRoles; } public override PeopleRole ReadJson(JsonReader reader, diff --git a/Kyoo/Controllers/Repositories/CollectionRepository.cs b/Kyoo/Controllers/Repositories/CollectionRepository.cs index 44623818..ccebc298 100644 --- a/Kyoo/Controllers/Repositories/CollectionRepository.cs +++ b/Kyoo/Controllers/Repositories/CollectionRepository.cs @@ -40,6 +40,7 @@ namespace Kyoo.Controllers { return await _database.Collections .Where(x => EF.Functions.ILike(x.Name, $"%{query}%")) + .OrderBy(DefaultSort) .Take(20) .ToListAsync(); } diff --git a/Kyoo/Controllers/Repositories/EpisodeRepository.cs b/Kyoo/Controllers/Repositories/EpisodeRepository.cs index ab1c1df3..222e18de 100644 --- a/Kyoo/Controllers/Repositories/EpisodeRepository.cs +++ b/Kyoo/Controllers/Repositories/EpisodeRepository.cs @@ -125,7 +125,8 @@ namespace Kyoo.Controllers public override async Task> Search(string query) { List episodes = await _database.Episodes - .Where(x => EF.Functions.ILike(x.Title, $"%{query}%")) + .Where(x => EF.Functions.ILike(x.Title, $"%{query}%") && x.EpisodeNumber != -1) + .OrderBy(DefaultSort) .Take(20) .ToListAsync(); foreach (Episode episode in episodes) diff --git a/Kyoo/Controllers/Repositories/GenreRepository.cs b/Kyoo/Controllers/Repositories/GenreRepository.cs index d6e8363b..bfbc1e3c 100644 --- a/Kyoo/Controllers/Repositories/GenreRepository.cs +++ b/Kyoo/Controllers/Repositories/GenreRepository.cs @@ -41,6 +41,7 @@ namespace Kyoo.Controllers { return await _database.Genres .Where(genre => EF.Functions.ILike(genre.Name, $"%{query}%")) + .OrderBy(DefaultSort) .Take(20) .ToListAsync(); } diff --git a/Kyoo/Controllers/Repositories/LibraryItemRepository.cs b/Kyoo/Controllers/Repositories/LibraryItemRepository.cs index 8d32d19b..20f7139f 100644 --- a/Kyoo/Controllers/Repositories/LibraryItemRepository.cs +++ b/Kyoo/Controllers/Repositories/LibraryItemRepository.cs @@ -96,6 +96,7 @@ namespace Kyoo.Controllers { return await ItemsQuery .Where(x => EF.Functions.ILike(x.Title, $"%{query}%")) + .OrderBy(DefaultSort) .Take(20) .ToListAsync(); } diff --git a/Kyoo/Controllers/Repositories/LibraryRepository.cs b/Kyoo/Controllers/Repositories/LibraryRepository.cs index 96a09ac7..9278c563 100644 --- a/Kyoo/Controllers/Repositories/LibraryRepository.cs +++ b/Kyoo/Controllers/Repositories/LibraryRepository.cs @@ -46,6 +46,7 @@ namespace Kyoo.Controllers { return await _database.Libraries .Where(x => EF.Functions.ILike(x.Name, $"%{query}%")) + .OrderBy(DefaultSort) .Take(20) .ToListAsync(); } diff --git a/Kyoo/Controllers/Repositories/PeopleRepository.cs b/Kyoo/Controllers/Repositories/PeopleRepository.cs index c9521209..d5b15fea 100644 --- a/Kyoo/Controllers/Repositories/PeopleRepository.cs +++ b/Kyoo/Controllers/Repositories/PeopleRepository.cs @@ -54,6 +54,7 @@ namespace Kyoo.Controllers { return await _database.People .Where(people => EF.Functions.ILike(people.Name, $"%{query}%")) + .OrderBy(DefaultSort) .Take(20) .ToListAsync(); } @@ -97,7 +98,9 @@ namespace Kyoo.Controllers Sort sort = default, Pagination limit = default) { - ICollection people = await ApplyFilters(_database.PeopleRoles.Where(x => x.ShowID == showID), + ICollection people = await ApplyFilters(_database.PeopleRoles + .Where(x => x.ShowID == showID) + .Include(x => x.People), id => _database.PeopleRoles.FirstOrDefaultAsync(x => x.ID == id), x => x.People.Name, where, @@ -105,6 +108,8 @@ namespace Kyoo.Controllers limit); if (!people.Any() && await _shows.Value.Get(showID) == null) throw new ItemNotFound(); + foreach (PeopleRole role in people) + role.ForPeople = true; return people; } @@ -113,7 +118,10 @@ namespace Kyoo.Controllers Sort sort = default, Pagination limit = default) { - ICollection people = await ApplyFilters(_database.PeopleRoles.Where(x => x.Show.Slug == showSlug), + ICollection people = await ApplyFilters(_database.PeopleRoles + .Where(x => x.Show.Slug == showSlug) + .Include(x => x.People) + .Include(x => x.Show), id => _database.PeopleRoles.FirstOrDefaultAsync(x => x.ID == id), x => x.People.Name, where, @@ -121,6 +129,8 @@ namespace Kyoo.Controllers limit); if (!people.Any() && await _shows.Value.Get(showSlug) == null) throw new ItemNotFound(); + foreach (PeopleRole role in people) + role.ForPeople = true; return people; } @@ -129,7 +139,9 @@ namespace Kyoo.Controllers Sort sort = default, Pagination limit = default) { - ICollection roles = await ApplyFilters(_database.PeopleRoles.Where(x => x.PeopleID == peopleID), + ICollection roles = await ApplyFilters(_database.PeopleRoles + .Where(x => x.PeopleID == peopleID) + .Include(x => x.Show), id => _database.PeopleRoles.FirstOrDefaultAsync(x => x.ID == id), x => x.Show.Title, where, @@ -137,8 +149,6 @@ namespace Kyoo.Controllers limit); if (!roles.Any() && await Get(peopleID) == null) throw new ItemNotFound(); - foreach (PeopleRole role in roles) - role.ForPeople = true; return roles; } @@ -147,7 +157,9 @@ namespace Kyoo.Controllers Sort sort = default, Pagination limit = default) { - ICollection roles = await ApplyFilters(_database.PeopleRoles.Where(x => x.People.Slug == slug), + ICollection roles = await ApplyFilters(_database.PeopleRoles + .Where(x => x.People.Slug == slug) + .Include(x => x.Show), id => _database.PeopleRoles.FirstOrDefaultAsync(x => x.ID == id), x => x.Show.Title, where, @@ -155,8 +167,6 @@ namespace Kyoo.Controllers limit); if (!roles.Any() && await Get(slug) == null) throw new ItemNotFound(); - foreach (PeopleRole role in roles) - role.ForPeople = true; return roles; } } diff --git a/Kyoo/Controllers/Repositories/ProviderRepository.cs b/Kyoo/Controllers/Repositories/ProviderRepository.cs index 1d229921..72f4d354 100644 --- a/Kyoo/Controllers/Repositories/ProviderRepository.cs +++ b/Kyoo/Controllers/Repositories/ProviderRepository.cs @@ -23,6 +23,7 @@ namespace Kyoo.Controllers { return await _database.Providers .Where(x => EF.Functions.ILike(x.Name, $"%{query}%")) + .OrderBy(DefaultSort) .Take(20) .ToListAsync(); } diff --git a/Kyoo/Controllers/Repositories/SeasonRepository.cs b/Kyoo/Controllers/Repositories/SeasonRepository.cs index 6fa7a298..c1344ed6 100644 --- a/Kyoo/Controllers/Repositories/SeasonRepository.cs +++ b/Kyoo/Controllers/Repositories/SeasonRepository.cs @@ -105,6 +105,7 @@ namespace Kyoo.Controllers { List seasons = await _database.Seasons .Where(x => EF.Functions.ILike(x.Title, $"%{query}%")) + .OrderBy(DefaultSort) .Take(20) .ToListAsync(); foreach (Season season in seasons) diff --git a/Kyoo/Controllers/Repositories/ShowRepository.cs b/Kyoo/Controllers/Repositories/ShowRepository.cs index cc0b2749..545dd880 100644 --- a/Kyoo/Controllers/Repositories/ShowRepository.cs +++ b/Kyoo/Controllers/Repositories/ShowRepository.cs @@ -79,6 +79,7 @@ namespace Kyoo.Controllers .Where(x => EF.Functions.ILike(x.Title, query) || EF.Functions.ILike(x.Slug, query) /*|| x.Aliases.Any(y => EF.Functions.ILike(y, query))*/) // NOT TRANSLATABLE. + .OrderBy(DefaultSort) .Take(20) .ToListAsync(); } diff --git a/Kyoo/Controllers/Repositories/StudioRepository.cs b/Kyoo/Controllers/Repositories/StudioRepository.cs index d020de24..623e5090 100644 --- a/Kyoo/Controllers/Repositories/StudioRepository.cs +++ b/Kyoo/Controllers/Repositories/StudioRepository.cs @@ -23,6 +23,7 @@ namespace Kyoo.Controllers { return await _database.Studios .Where(x => EF.Functions.ILike(x.Name, $"%{query}%")) + .OrderBy(DefaultSort) .Take(20) .ToListAsync(); }