|
| 1 | +import 'package:miru_app/models/tmdb.dart' as tmdb_model; |
| 2 | +import 'package:miru_app/utils/miru_storage.dart'; |
| 3 | +import 'package:tmdb_api/tmdb_api.dart'; |
| 4 | + |
| 5 | +class TmdbApi { |
| 6 | + static TMDB tmdb = TMDB( |
| 7 | + ApiKeys(MiruStorage.getSetting(SettingKey.tmdbKay), ''), |
| 8 | + defaultLanguage: MiruStorage.getSetting(SettingKey.language), |
| 9 | + ); |
| 10 | + |
| 11 | + static Future<tmdb_model.TMDBDetail> getDetail(String keyword, |
| 12 | + {int page = 1}) async { |
| 13 | + final result = await tmdb.v3.search.queryMulti( |
| 14 | + keyword, |
| 15 | + page: page, |
| 16 | + ); |
| 17 | + // print(result); |
| 18 | + final results = result["results"] as List; |
| 19 | + if (results.isEmpty) { |
| 20 | + throw Exception("No results"); |
| 21 | + } |
| 22 | + late Map data; |
| 23 | + final mediaType = results[0]["media_type"]; |
| 24 | + if (mediaType == "movie") { |
| 25 | + data = await tmdb.v3.movies.getDetails( |
| 26 | + results[0]["id"], |
| 27 | + appendToResponse: "credits,images", |
| 28 | + ); |
| 29 | + } else { |
| 30 | + data = await tmdb.v3.tv.getDetails( |
| 31 | + results[0]["id"], |
| 32 | + appendToResponse: "credits,images", |
| 33 | + ); |
| 34 | + } |
| 35 | + |
| 36 | + return tmdb_model.TMDBDetail( |
| 37 | + id: data["id"], |
| 38 | + mediaType: mediaType, |
| 39 | + title: data["title"] ?? data["name"], |
| 40 | + cover: data["poster_path"] ?? data["profile_path"], |
| 41 | + backdrop: data["backdrop_path"], |
| 42 | + genres: List<String>.from(data["genres"].map((e) => e["name"])), |
| 43 | + languages: |
| 44 | + List<String>.from(data["spoken_languages"].map((e) => e["name"])), |
| 45 | + images: List<String>.from( |
| 46 | + data["images"]["backdrops"].map((e) => e["file_path"]), |
| 47 | + ), |
| 48 | + overview: data["overview"], |
| 49 | + status: data["status"], |
| 50 | + casts: List<tmdb_model.TMDBCast>.from( |
| 51 | + data["credits"]["cast"].map((e) => tmdb_model.TMDBCast( |
| 52 | + id: e["id"], |
| 53 | + name: e["name"], |
| 54 | + profilePath: e["profile_path"], |
| 55 | + character: e["character"], |
| 56 | + ))), |
| 57 | + releaseDate: data["release_date"] ?? data["first_air_date"], |
| 58 | + runtime: data["runtime"] ?? data["episode_run_time"][0], |
| 59 | + originalTitle: data["original_title"] ?? data["original_name"], |
| 60 | + ); |
| 61 | + } |
| 62 | + |
| 63 | + static Future<Map> search(String keyword, {int page = 1}) { |
| 64 | + return tmdb.v3.search.queryMulti( |
| 65 | + keyword, |
| 66 | + page: page, |
| 67 | + ); |
| 68 | + } |
| 69 | + |
| 70 | + static String? getImageUrl(String path) { |
| 71 | + return tmdb.images.getUrl(path); |
| 72 | + } |
| 73 | +} |
0 commit comments