Skip to content

Commit

Permalink
Implement getImages() for movie & tv show, season, episode
Browse files Browse the repository at this point in the history
* Remove all explicit initialization of default query parameters
  values, and keep them null if not passed by user. And remove the
  null values while building URI.
  tmdb API is smart enough to decide the default value for the
  unspecified parameters.

Signed-off-by: Akash Mondal <a98mondal@gmail.com>
  • Loading branch information
Akash98Sky committed Mar 25, 2020
1 parent b83901d commit 593599b
Show file tree
Hide file tree
Showing 8 changed files with 141 additions and 54 deletions.
12 changes: 6 additions & 6 deletions lib/src/services/common-service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@ abstract class _CommonService with ResilientService {
String url,
SearchSettings settings,
T fromJson(Map<String, dynamic> map, AssetResolver assetResolver), [
int page = 1,
int page,
]) async {
var queryParams = settings.toJson()
..addAll({"page": page.toString(), "api_key": _apiKey});
..addAll({"page": page?.toString(), "api_key": _apiKey});

Uri uri = _buildUri(url, queryParams);

Expand All @@ -45,16 +45,16 @@ abstract class _CommonService with ResilientService {
throw ClientException("request status not successful", uri);
}

return _decodeToPagedResult<T>(response, settings, fromJson);
return _decodeToPagedResult<T>(response, settings.quality, fromJson);
}

PagedResult<T> _decodeToPagedResult<T>(
Response response,
SearchSettings settings,
QualitySettings quality,
T fromJson(Map<String, dynamic> map, AssetResolver assetResolver),
) {
var map = json.decode(response.body);
var assetResolver = AssetResolver(_configuration, settings.quality);
var assetResolver = AssetResolver(_configuration, quality);

var baseFactory = (json) => fromJson(json, assetResolver);

Expand All @@ -69,6 +69,6 @@ abstract class _CommonService with ResilientService {
scheme: "https",
host: "api.themoviedb.org",
path: path,
queryParameters: queryParams,
queryParameters: queryParams..removeWhere((_, value) => value == null),
);
}
6 changes: 3 additions & 3 deletions lib/src/services/configuration-service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,10 @@ abstract class ConfigurationService with ResilientService {
}

Future<List<Genre>> getAllMovieGenres({String language}) =>
_getAllGenres("movie", language ?? "en-US");
_getAllGenres("movie", language);

Future<List<Genre>> getAllTvGenres({String language}) =>
_getAllGenres("tv", language ?? "en-US");
_getAllGenres("tv", language);

Future<List<Genre>> _getAllGenres(String type, String language) async {
Uri uri = _buildUri(
Expand All @@ -67,6 +67,6 @@ abstract class ConfigurationService with ResilientService {
scheme: "https",
host: "api.themoviedb.org",
path: path,
queryParameters: queryParams,
queryParameters: queryParams..removeWhere((_, value) => value == null),
);
}
44 changes: 32 additions & 12 deletions lib/src/services/movie-service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class MovieService extends _CommonService {
"3/search/movie",
settings ?? const MovieSearchSettings(),
(map, assetResolver) => MovieBase.fromJson(map, assetResolver),
page ?? 1,
page,
);
}

Expand All @@ -25,7 +25,7 @@ class MovieService extends _CommonService {
"3/discover/movie",
settings ?? const MovieDiscoverSettings(),
(map, assetResolver) => MovieBase.fromJson(map, assetResolver),
page ?? 1,
page,
);

Future<PagedResult<MovieBase>> getTopRated(
Expand All @@ -34,7 +34,7 @@ class MovieService extends _CommonService {
"3/movie/top_rated",
settings ?? const MovieSearchSettings(),
(map, assetResolver) => MovieBase.fromJson(map, assetResolver),
page ?? 1,
page,
);

Future<PagedResult<MovieBase>> getPopular(
Expand All @@ -43,7 +43,7 @@ class MovieService extends _CommonService {
"3/movie/popular",
settings ?? const MovieSearchSettings(),
(map, assetResolver) => MovieBase.fromJson(map, assetResolver),
page ?? 1,
page,
);

Future<PagedResult<MovieBase>> getUpComing(
Expand All @@ -52,7 +52,7 @@ class MovieService extends _CommonService {
"3/movie/upcoming",
settings ?? const MovieSearchSettings(),
(map, assetResolver) => MovieBase.fromJson(map, assetResolver),
page ?? 1,
page,
);

Future<PagedResult<MovieBase>> getNowPlaying(
Expand All @@ -61,13 +61,13 @@ class MovieService extends _CommonService {
"3/movie/now_playing",
settings ?? const MovieSearchSettings(),
(map, assetResolver) => MovieBase.fromJson(map, assetResolver),
page ?? 1,
page,
);

Future<Movie> getLatest({String language, QualitySettings qualitySettings}) {
var queryParams = {
"api_key": _apiKey,
"language": language ?? "en-US",
"language": language,
};

return _get<Movie>(
Expand All @@ -85,7 +85,7 @@ class MovieService extends _CommonService {
assert(id != null, "ID can't be null");
var queryParams = {
"api_key": _apiKey,
"language": language ?? "en-US",
"language": language,
};

return _get<List<Video>>(
Expand All @@ -96,6 +96,27 @@ class MovieService extends _CommonService {
);
}

Future<ImageCollection> getImages(
int id, {
String language,
List<String> includeImageLanguage,
QualitySettings qualitySettings,
}) {
assert(id != null, "ID can't be null");
var queryParams = {
"api_key": _apiKey,
"language": language,
"include_image_language": includeImageLanguage?.join(',')
};

return _get<ImageCollection>(
"3/movie/$id/images",
queryParams,
qualitySettings ?? const QualitySettings(),
(map, assetResolver) => ImageCollection.fromJson(map, assetResolver),
);
}

Future<Movie> getDetails(
int id, {
String language,
Expand All @@ -106,10 +127,9 @@ class MovieService extends _CommonService {
assert(id != null, "ID can't be null");
var queryParams = {
"api_key": _apiKey,
"language": language ?? "en-US",
"include_image_language": (imageLanguages ?? const ["en"]).join(","),
"append_to_response":
(appendSettings ?? const AppendSettings()).toString()
"language": language,
"include_image_language": imageLanguages?.join(","),
"append_to_response": appendSettings?.toString()
};

return _get<Movie>(
Expand Down
2 changes: 2 additions & 0 deletions lib/src/services/tmdb-service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import 'package:http/http.dart';
import '../models/content-base.dart';
import '../models/country.dart';
import '../models/genre.dart';
import '../models/image-collection.dart';
import '../models/image-info.dart';
import '../models/movie.dart';
import '../models/paged-result.dart';
import '../models/tv-show.dart';
Expand Down
Loading

0 comments on commit 593599b

Please sign in to comment.