diff --git a/back/src/Kyoo.Core/Controllers/Repositories/MovieRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/MovieRepository.cs index 25d5792c..4ab8b73a 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/MovieRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/MovieRepository.cs @@ -21,6 +21,7 @@ using System.Linq; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; +using Kyoo.Abstractions.Models.Exceptions; using Kyoo.Abstractions.Models.Utils; using Kyoo.Postgresql; using Microsoft.EntityFrameworkCore; @@ -45,6 +46,25 @@ public class MovieRepository( .ToListAsync(); } + /// + public override Task Create(Movie obj) + { + try + { + return base.Create(obj); + } + catch (DuplicatedItemException ex) + when (ex.Existing is Movie existing + && existing.Slug == obj.Slug + && obj.AirDate is not null + && existing.AirDate?.Year != obj.AirDate?.Year + ) + { + obj.Slug = $"{obj.Slug}-{obj.AirDate!.Value.Year}"; + return base.Create(obj); + } + } + /// protected override async Task Validate(Movie resource) { diff --git a/back/src/Kyoo.Core/Controllers/Repositories/ShowRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/ShowRepository.cs index 53a3b6d5..ed67e2df 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/ShowRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/ShowRepository.cs @@ -21,6 +21,7 @@ using System.Linq; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; +using Kyoo.Abstractions.Models.Exceptions; using Kyoo.Abstractions.Models.Utils; using Kyoo.Postgresql; using Microsoft.EntityFrameworkCore; @@ -45,6 +46,25 @@ public class ShowRepository( .ToListAsync(); } + /// + public override Task Create(Show obj) + { + try + { + return base.Create(obj); + } + catch (DuplicatedItemException ex) + when (ex.Existing is Show existing + && existing.Slug == obj.Slug + && obj.StartAir is not null + && existing.StartAir?.Year != obj.StartAir?.Year + ) + { + obj.Slug = $"{obj.Slug}-{obj.StartAir!.Value.Year}"; + return base.Create(obj); + } + } + /// protected override async Task Validate(Show resource) { diff --git a/scanner/providers/kyoo_client.py b/scanner/providers/kyoo_client.py index b804b740..47a16c93 100644 --- a/scanner/providers/kyoo_client.py +++ b/scanner/providers/kyoo_client.py @@ -112,20 +112,6 @@ class KyooClient: logger.error(f"Request error: {await r.text()}") r.raise_for_status() ret = await r.json() - - if r.status == 409 and ( - (path == "shows" and ret["startAir"][:4] != str(data["start_air"].year)) - or ( - path == "movies" - and ret["airDate"][:4] != str(data["air_date"].year) - ) - ): - logger.info( - f"Found a {path} with the same slug ({ret['slug']}) and a different date, using the date as part of the slug" - ) - year = (data["start_air"] if path == "movie" else data["air_date"]).year - data["slug"] = f"{ret['slug']}-{year}" - return await self.post(path, data=data) return ret["id"] async def delete(