diff --git a/Ruddarr/Dependencies/API/API+Error.swift b/Ruddarr/Dependencies/API/API+Error.swift index 24ddfbf1..33448870 100644 --- a/Ruddarr/Dependencies/API/API+Error.swift +++ b/Ruddarr/Dependencies/API/API+Error.swift @@ -107,6 +107,17 @@ extension API.Error: LocalizedError { } } +extension API.Error { + var isNotFound: Bool { + switch self { + case .badStatusCode(code: 404), .errorResponse(code: 404, _): + true + default: + false + } + } +} + extension DecodingError { var context: DecodingError.Context { switch self { diff --git a/Ruddarr/Models/Movies/Movies.swift b/Ruddarr/Models/Movies/Movies.swift index a74e4a8c..4c7172ee 100644 --- a/Ruddarr/Models/Movies/Movies.swift +++ b/Ruddarr/Models/Movies/Movies.swift @@ -136,10 +136,15 @@ class Movies { case .get(let movie): if let index = items.firstIndex(where: { $0.id == movie.id }) { - let item = try await dependencies.api.getMovie(movie.id, instance) - - if items[index] != item { - items[index] = item + do { + let item = try await dependencies.api.getMovie(movie.id, instance) + + if items[index] != item { + items[index] = item + } + } catch let apiError as API.Error where apiError.isNotFound { + items.remove(at: index) + throw apiError } } diff --git a/Ruddarr/Models/Series/SeriesModel.swift b/Ruddarr/Models/Series/SeriesModel.swift index 0ecd5cc3..31c388b4 100644 --- a/Ruddarr/Models/Series/SeriesModel.swift +++ b/Ruddarr/Models/Series/SeriesModel.swift @@ -153,10 +153,15 @@ class SeriesModel { case .get(let series): if let index = items.firstIndex(where: { $0.id == series.id }) { - let item = try await dependencies.api.getSeries(series.id, instance) - - if items[index] != item { - items[index] = item + do { + let item = try await dependencies.api.getSeries(series.id, instance) + + if items[index] != item { + items[index] = item + } + } catch let apiError as API.Error where apiError.isNotFound { + items.remove(at: index) + throw apiError } } diff --git a/Ruddarr/Views/Movies/MovieView.swift b/Ruddarr/Views/Movies/MovieView.swift index 200cd051..6d6c90c8 100644 --- a/Ruddarr/Views/Movies/MovieView.swift +++ b/Ruddarr/Views/Movies/MovieView.swift @@ -149,7 +149,13 @@ extension MovieView { } func reload() async { - _ = await instance.movies.get(movie) + guard await instance.movies.get(movie) else { + if instance.movies.error?.isNotFound == true { + instance.movies.error = nil + dependencies.router.moviesPath = .init() + } + return + } } func refresh() async { diff --git a/Ruddarr/Views/Series/SeasonView.swift b/Ruddarr/Views/Series/SeasonView.swift index 0da57d1d..074d9688 100644 --- a/Ruddarr/Views/Series/SeasonView.swift +++ b/Ruddarr/Views/Series/SeasonView.swift @@ -265,7 +265,13 @@ extension SeasonView { } func reload() async { - _ = await instance.series.get(series) + guard await instance.series.get(series) else { + if instance.series.error?.isNotFound == true { + instance.series.error = nil + dependencies.router.seriesPath = .init() + } + return + } await instance.episodes.fetch(series) await instance.files.fetch(series) } diff --git a/Ruddarr/Views/Series/SeriesItemView.swift b/Ruddarr/Views/Series/SeriesItemView.swift index e7d0393e..d6a48c74 100644 --- a/Ruddarr/Views/Series/SeriesItemView.swift +++ b/Ruddarr/Views/Series/SeriesItemView.swift @@ -154,7 +154,13 @@ extension SeriesDetailView { } func reload() async { - _ = await instance.series.get(series) + guard await instance.series.get(series) else { + if instance.series.error?.isNotFound == true { + instance.series.error = nil + dependencies.router.seriesPath = .init() + } + return + } await instance.episodes.fetch(series) await instance.files.fetch(series) }