aboutsummaryrefslogtreecommitdiff
path: root/services
diff options
context:
space:
mode:
authorBobby <[email protected]>2025-05-09 06:58:25 +0530
committerBobby <[email protected]>2025-05-09 06:58:25 +0530
commit31dddf48dbb5d227e571ed9459aa437af3b0d1d3 (patch)
treedf271a958f35abd0cd46550078053e0d3585b195 /services
parent596ef846c97d9373ddda711dabfde9720b6931d7 (diff)
downloadmetachan-31dddf48dbb5d227e571ed9459aa437af3b0d1d3.tar.xz
metachan-31dddf48dbb5d227e571ed9459aa437af3b0d1d3.zip
fixed anime updater
Diffstat (limited to 'services')
-rw-r--r--services/anime/helpers.go64
-rw-r--r--services/anime/service.go20
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{