diff options
| author | Bobby <[email protected]> | 2025-05-09 06:58:25 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2025-05-09 06:58:25 +0530 |
| commit | 31dddf48dbb5d227e571ed9459aa437af3b0d1d3 (patch) | |
| tree | df271a958f35abd0cd46550078053e0d3585b195 /services | |
| parent | 596ef846c97d9373ddda711dabfde9720b6931d7 (diff) | |
| download | metachan-31dddf48dbb5d227e571ed9459aa437af3b0d1d3.tar.xz metachan-31dddf48dbb5d227e571ed9459aa437af3b0d1d3.zip | |
fixed anime updater
Diffstat (limited to 'services')
| -rw-r--r-- | services/anime/helpers.go | 64 | ||||
| -rw-r--r-- | services/anime/service.go | 20 |
2 files changed, 48 insertions, 36 deletions
diff --git a/services/anime/helpers.go b/services/anime/helpers.go index e8d5f75..3982ba0 100644 --- a/services/anime/helpers.go +++ b/services/anime/helpers.go @@ -202,54 +202,53 @@ func getAnimeCharacters(characterResponse *jikan.JikanAnimeCharacterResponse) [] // getNextAiringEpisode extracts next airing episode data from AniList func getNextAiringEpisode(anilistAnime *anilist.AnilistAnimeResponse) types.AnimeAiringEpisode { if anilistAnime == nil || anilistAnime.Data.Media.ID == 0 { - logger.Log("No valid AniList data for next airing episode", logger.LogOptions{ - Level: logger.Debug, - Prefix: "AnimeAPI", - }) return types.AnimeAiringEpisode{} } - // NextAiringEpisode can be nil for completed anime + // Get the current time to determine the next episode + currentTime := time.Now().Unix() nextEpisode := anilistAnime.Data.Media.NextAiringEpisode - // Check if there is valid data - if nextEpisode.AiringAt == 0 && nextEpisode.Episode == 0 { - logger.Log(fmt.Sprintf("Anime ID %d has no next airing episode", anilistAnime.Data.Media.ID), logger.LogOptions{ - Level: logger.Debug, - Prefix: "AnimeAPI", - }) - return types.AnimeAiringEpisode{} + // If AniList provides a valid next airing episode directly, use it + if nextEpisode.AiringAt > 0 && nextEpisode.Episode > 0 { + return types.AnimeAiringEpisode{ + AiringAt: nextEpisode.AiringAt, + Episode: nextEpisode.Episode, + } } - logger.Log(fmt.Sprintf("Found next airing episode %d at timestamp %d", - nextEpisode.Episode, nextEpisode.AiringAt), logger.LogOptions{ - Level: logger.Debug, - Prefix: "AnimeAPI", - }) + // If AniList doesn't provide a direct next episode, but we have airing schedule nodes + // Find the next episode that hasn't aired yet + if anilistAnime.Data.Media.AiringSchedule.Nodes != nil && len(anilistAnime.Data.Media.AiringSchedule.Nodes) > 0 { + var nextAiringEpisode types.AnimeAiringEpisode + + for _, node := range anilistAnime.Data.Media.AiringSchedule.Nodes { + if int64(node.AiringAt) > currentTime { + // If this is the first future episode we've found, or it airs sooner than our current "next" + if nextAiringEpisode.AiringAt == 0 || node.AiringAt < nextAiringEpisode.AiringAt { + nextAiringEpisode.AiringAt = node.AiringAt + nextAiringEpisode.Episode = node.Episode + } + } + } - return types.AnimeAiringEpisode{ - AiringAt: nextEpisode.AiringAt, - Episode: nextEpisode.Episode, + // If we found a next episode + if nextAiringEpisode.AiringAt > 0 { + return nextAiringEpisode + } } + + return types.AnimeAiringEpisode{} } // getAnimeSchedule extracts airing schedule data from AniList func getAnimeSchedule(anilistAnime *anilist.AnilistAnimeResponse) []types.AnimeAiringEpisode { - if anilistAnime == nil { + if anilistAnime == nil || anilistAnime.Data.Media.AiringSchedule.Nodes == nil { return []types.AnimeAiringEpisode{} } var schedule []types.AnimeAiringEpisode - // The nodes might be nil if there's no schedule - if anilistAnime.Data.Media.AiringSchedule.Nodes == nil { - logger.Log("No airing schedule found in AniList data", logger.LogOptions{ - Level: logger.Debug, - Prefix: "AnimeAPI", - }) - return []types.AnimeAiringEpisode{} - } - for _, node := range anilistAnime.Data.Media.AiringSchedule.Nodes { schedule = append(schedule, types.AnimeAiringEpisode{ AiringAt: node.AiringAt, @@ -257,11 +256,6 @@ func getAnimeSchedule(anilistAnime *anilist.AnilistAnimeResponse) []types.AnimeA }) } - logger.Log(fmt.Sprintf("Found %d episodes in airing schedule", len(schedule)), logger.LogOptions{ - Level: logger.Debug, - Prefix: "AnimeAPI", - }) - return schedule } diff --git a/services/anime/service.go b/services/anime/service.go index c019fb0..17336d8 100644 --- a/services/anime/service.go +++ b/services/anime/service.go @@ -57,7 +57,25 @@ func (s *Service) GetAnimeDetailsWithSource(mapping *entities.AnimeMapping, sour }) // Convert the cached anime to the types.Anime format - return database.ConvertToTypesAnime(cachedAnime), nil + anime := database.ConvertToTypesAnime(cachedAnime) + + // Ensure mappings are attached properly (this is the fix for the issue) + anime.Mappings = types.AnimeMappings{ + AniDB: mapping.AniDB, + Anilist: mapping.Anilist, + AnimeCountdown: mapping.AnimeCountdown, + AnimePlanet: mapping.AnimePlanet, + AniSearch: mapping.AniSearch, + IMDB: mapping.IMDB, + Kitsu: mapping.Kitsu, + LiveChart: mapping.LiveChart, + NotifyMoe: mapping.NotifyMoe, + Simkl: mapping.Simkl, + TMDB: mapping.TMDB, + TVDB: mapping.TVDB, + } + + return anime, nil } } else { logger.Log(fmt.Sprintf("Bypassing cache for anime (MAL ID: %d) - source: %s", malID, source), logger.LogOptions{ |
