From cf2067c9fc284f7f72fcc9735c05e15c00b1c419 Mon Sep 17 00:00:00 2001 From: Simon Ding Date: Sat, 20 Jul 2024 19:33:58 +0800 Subject: [PATCH] tmdb api optimize --- pkg/tmdb/tmdb.go | 33 +++++++++++++++++++++++++++++---- ui/lib/tv_details.dart | 2 +- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/pkg/tmdb/tmdb.go b/pkg/tmdb/tmdb.go index 9641b9e..bd2880d 100644 --- a/pkg/tmdb/tmdb.go +++ b/pkg/tmdb/tmdb.go @@ -27,8 +27,28 @@ func NewClient(apiKey string) (*Client, error) { } func (c *Client) GetTvDetails(id int, language string) (*tmdb.TVDetails, error) { - log.Infof("tv id %d, language %s", id, language) d, err := c.tmdbClient.GetTVDetails(id, withLangOption(language)) + + log.Infof("tv id %d, language %s", id, language) + if !episodeNameUseful(d.LastEpisodeToAir.Name) { + log.Debug("should fetch english version") + var detailEN *tmdb.TVDetails + if language == "zh-CN" { + detailEN, err = c.tmdbClient.GetTVDetails(id, withLangOption("en-US")) + if err != nil { + return d, nil + } + + } + if episodeNameUseful(detailEN.LastEpisodeToAir.Name) { + d.LastEpisodeToAir.Name = detailEN.LastEpisodeToAir.Name + d.LastEpisodeToAir.Overview = detailEN.LastEpisodeToAir.Overview + d.NextEpisodeToAir.Name = detailEN.NextEpisodeToAir.Name + d.NextEpisodeToAir.Overview = detailEN.NextEpisodeToAir.Overview + } + } + + return d, err } @@ -118,7 +138,7 @@ func (c *Client) GetEposideDetail(id, seasonNumber, eposideNumber int, language if err != nil { return nil, err } - if strings.HasSuffix(d.Name, "集") { + if !episodeNameUseful(d.Name) { var detailEN *tmdb.TVEpisodeDetails if language == "zh-CN" { detailEN, err = c.tmdbClient.GetTVEpisodeDetails(id, seasonNumber, eposideNumber, withLangOption("en-US")) @@ -126,7 +146,7 @@ func (c *Client) GetEposideDetail(id, seasonNumber, eposideNumber int, language return d, nil } } - if strings.HasPrefix(strings.ToLower(detailEN.Name), "episode") { + if episodeNameUseful(detailEN.Name) { return d, err } d.Name = detailEN.Name @@ -150,7 +170,7 @@ func (c *Client) GetSeasonDetails(id, seasonNumber int, language string) (*tmdb. } for i, ep := range detailCN.Episodes { - if strings.HasSuffix(ep.Name, "集") && !strings.HasPrefix(strings.ToLower(detailEN.Episodes[i].Name), "episode"){ + if episodeNameUseful(ep.Name){ detailCN.Episodes[i].Name = detailEN.Episodes[i].Name detailCN.Episodes[i].Overview = detailEN.Episodes[i].Overview } @@ -175,3 +195,8 @@ func withLangOption(language string) map[string]string { "language": language, } } + + +func episodeNameUseful(name string) bool { + return !strings.HasSuffix(name, "集") && !strings.HasPrefix(strings.ToLower(name), "episode") +} \ No newline at end of file diff --git a/ui/lib/tv_details.dart b/ui/lib/tv_details.dart index d2781f8..364720d 100644 --- a/ui/lib/tv_details.dart +++ b/ui/lib/tv_details.dart @@ -194,7 +194,7 @@ class _TvDetailsPageState extends ConsumerState { error: (error, stackTrace) => Text("$error"), loading: () => - const MyProgressIndicator()), + const Text("")), ], ), const Divider(thickness: 1, height: 1),