From f158b74be6d5b41c8bc2dd5255765fe2b8e7fcec Mon Sep 17 00:00:00 2001 From: Simon Ding Date: Tue, 30 Jul 2024 11:11:07 +0800 Subject: [PATCH] fix: movie suggested naming --- server/server.go | 3 +- server/storage.go | 46 +++++++++++++++++++++--------- ui/lib/providers/APIs.dart | 3 +- ui/lib/providers/welcome_data.dart | 19 ++++++++---- ui/lib/search.dart | 2 +- 5 files changed, 50 insertions(+), 23 deletions(-) diff --git a/server/server.go b/server/server.go index d5c50bd..607bcb6 100644 --- a/server/server.go +++ b/server/server.go @@ -93,7 +93,8 @@ func (s *Server) Serve() error { tv.GET("/record/:id", HttpHandler(s.GetMediaDetails)) tv.DELETE("/record/:id", HttpHandler(s.DeleteFromWatchlist)) tv.GET("/resolutions", HttpHandler(s.GetAvailableResolutions)) - tv.GET("/suggest/:tmdb_id", HttpHandler(s.SuggestedSeriesFolderName)) + tv.GET("/suggest/tv/:tmdb_id", HttpHandler(s.SuggestedSeriesFolderName)) + tv.GET("/suggest/movie/:tmdb_id", HttpHandler(s.SuggestedMovieFolderName)) } indexer := api.Group("/indexer") { diff --git a/server/storage.go b/server/storage.go index 66a7394..7b7c55a 100644 --- a/server/storage.go +++ b/server/storage.go @@ -60,22 +60,40 @@ func (s *Server) SuggestedSeriesFolderName(c *gin.Context) (interface{}, error) if err != nil { return nil, fmt.Errorf("id is not int: %v", ids) } - var name, originalName, year string d, err := s.MustTMDB().GetTvDetails(id, s.language) if err != nil { - d1, err := s.MustTMDB().GetMovieDetails(id, s.language) - if err != nil { - return nil, errors.Wrap(err, "get movie details") - } - name = d1.Title - originalName = d1.OriginalTitle - year = strings.Split(d1.ReleaseDate, "-")[0] - - } else { - name = d.Name - originalName = d.OriginalName - year = strings.Split(d.FirstAirDate, "-")[0] - } + return nil, errors.Wrap(err, "get tv details") + } + name := d.Name + originalName := d.OriginalName + year := strings.Split(d.FirstAirDate, "-")[0] + + name = fmt.Sprintf("%s %s", name, originalName) + + if !utils.ContainsChineseChar(name) { + name = originalName + } + if year != "" { + name = fmt.Sprintf("%s (%s)", name, year) + } + log.Infof("tv series of tmdb id %v suggestting name is %v", id, name) + return gin.H{"name": name}, nil +} + +func (s *Server) SuggestedMovieFolderName(c *gin.Context) (interface{}, error) { + ids := c.Param("tmdb_id") + id, err := strconv.Atoi(ids) + if err != nil { + return nil, fmt.Errorf("id is not int: %v", ids) + } + d1, err := s.MustTMDB().GetMovieDetails(id, s.language) + if err != nil { + return nil, errors.Wrap(err, "get movie details") + } + name := d1.Title + originalName := d1.OriginalTitle + year := strings.Split(d1.ReleaseDate, "-")[0] + name = fmt.Sprintf("%s %s", name, originalName) if !utils.ContainsChineseChar(name) { diff --git a/ui/lib/providers/APIs.dart b/ui/lib/providers/APIs.dart index da0c0cd..60644bf 100644 --- a/ui/lib/providers/APIs.dart +++ b/ui/lib/providers/APIs.dart @@ -14,7 +14,8 @@ class APIs { static final availableTorrentsUrl = "$_baseUrl/api/v1/media/torrents/"; static final downloadTorrentUrl = "$_baseUrl/api/v1/media/torrents/download"; static final seriesDetailUrl = "$_baseUrl/api/v1/media/record/"; - static final suggestedTvName = "$_baseUrl/api/v1/media/suggest/"; + static final suggestedTvName = "$_baseUrl/api/v1/media/suggest/tv/"; + static final suggestedMovieName = "$_baseUrl/api/v1/media/suggest/movie/"; static final searchAndDownloadUrl = "$_baseUrl/api/v1/indexer/download"; static final allIndexersUrl = "$_baseUrl/api/v1/indexer/"; static final addIndexerUrl = "$_baseUrl/api/v1/indexer/add"; diff --git a/ui/lib/providers/welcome_data.dart b/ui/lib/providers/welcome_data.dart index 7a94581..5157022 100644 --- a/ui/lib/providers/welcome_data.dart +++ b/ui/lib/providers/welcome_data.dart @@ -1,12 +1,13 @@ import 'dart:async'; +import 'package:dio/dio.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:quiver/strings.dart'; import 'package:ui/providers/APIs.dart'; import 'package:ui/providers/server_response.dart'; final tvWatchlistDataProvider = FutureProvider.autoDispose((ref) async { - final dio = await APIs.getDio(); + final dio = APIs.getDio(); var resp = await dio.get(APIs.watchlistTvUrl); var sp = ServerResponse.fromJson(resp.data); List favList = List.empty(growable: true); @@ -17,10 +18,17 @@ final tvWatchlistDataProvider = FutureProvider.autoDispose((ref) async { return favList; }); +typedef NamingType = ({int id, String mediaType}); + final suggestNameDataProvider = FutureProvider.autoDispose.family( - (ref, int arg) async { - final dio = await APIs.getDio(); - var resp = await dio.get(APIs.suggestedTvName + arg.toString()); + (ref, NamingType arg) async { + final dio = APIs.getDio(); + Response resp; + if (arg.mediaType == "tv") { + resp = await dio.get(APIs.suggestedTvName + arg.id.toString()); + } else { + resp = await dio.get(APIs.suggestedMovieName + arg.id.toString()); + } var sp = ServerResponse.fromJson(resp.data); if (sp.code != 0) { throw sp.message; @@ -92,7 +100,7 @@ class SearchPageData "storage_id": storageId, "resolution": resolution, "folder": folder, - "download_history_episodes":downloadHistoryEpisodes + "download_history_episodes": downloadHistoryEpisodes }); var sp = ServerResponse.fromJson(resp.data); if (sp.code != 0) { @@ -241,4 +249,3 @@ class SearchResult { ); } } - diff --git a/ui/lib/search.dart b/ui/lib/search.dart index 331807c..4460b32 100644 --- a/ui/lib/search.dart +++ b/ui/lib/search.dart @@ -155,7 +155,7 @@ class _SearchPageState extends ConsumerState { String resSelected = "1080p"; int storageSelected = 0; var storage = ref.watch(storageSettingProvider); - var name = ref.watch(suggestNameDataProvider(item.id!)); + var name = ref.watch(suggestNameDataProvider((id: item.id!, mediaType: item.mediaType!))); bool downloadHistoryEpisodes = false; bool buttonTapped = false;