Skip to content

Commit

Permalink
Made Changes to Paging Source and Paginated Use Cases
Browse files Browse the repository at this point in the history
  • Loading branch information
umidjonkhasimov committed Mar 24, 2024
1 parent b986af7 commit 73c4199
Show file tree
Hide file tree
Showing 43 changed files with 369 additions and 512 deletions.
7 changes: 0 additions & 7 deletions core/data/src/main/java/uz/john/data/di/NetworkModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import uz.john.data.BuildConfig
import uz.john.data.remote.api.AuthenticationApi
import uz.john.data.remote.api.MoviesApi
import uz.john.data.remote.api.PersonApi
import uz.john.data.remote.api.SearchApi
import uz.john.data.remote.api.TvShowsApi
import uz.john.data.remote.interceptors.ApiKeyInterceptor
import uz.john.data.remote.interceptors.InternetConnectionInterceptor
Expand All @@ -41,12 +40,6 @@ object NetworkModule {
return retrofit.create(PersonApi::class.java)
}

@Provides
@Singleton
fun provideSearchApiService(retrofit: Retrofit): SearchApi {
return retrofit.create(SearchApi::class.java)
}

@Provides
@Singleton
fun provideTvShowsApiService(retrofit: Retrofit): TvShowsApi {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,21 @@ package uz.john.data.pagination.movies

import androidx.paging.PagingSource
import androidx.paging.PagingState
import uz.john.data.remote.WITH_GENRES
import uz.john.data.remote.api.MoviesApi
import uz.john.data.remote.model.movie.MovieData
import uz.john.data.repository.MoviesRepository
import uz.john.util.ResultModel
import uz.john.util.invokeRequest

class MoviesByGenrePagingSource(
private val moviesApi: MoviesApi,
private val language: String,
private val region: String,
private val moviesRepository: MoviesRepository,
private val genreId: Int,
) : PagingSource<Int, MovieData>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, MovieData> {
val page = params.key ?: 1
val queryParams = mutableMapOf<String, String>()
queryParams[WITH_GENRES] = genreId.toString()

val response = invokeRequest {
moviesApi.discoverMovies(
page = page,
language = language,
region = region,
queryParams = queryParams
)
}
val response = moviesRepository.discoverMovies(
page = page,
withGenres = genreId.toString()
)

return when (response) {
is ResultModel.Error -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,23 @@ package uz.john.data.pagination.movies

import androidx.paging.PagingSource
import androidx.paging.PagingState
import uz.john.data.remote.PRIMARY_RELEASE_DATE_GTE
import uz.john.data.remote.PRIMARY_RELEASE_DATE_LTE
import uz.john.data.remote.api.MoviesApi
import uz.john.data.remote.model.movie.MovieData
import uz.john.data.repository.MoviesRepository
import uz.john.util.ResultModel
import uz.john.util.calculateDateXMonthsAgo
import uz.john.util.invokeRequest

class NowPlayingMoviesPagingSource(
private val moviesApi: MoviesApi,
private val language: String,
private val region: String,
private val moviesRepository: MoviesRepository,
) : PagingSource<Int, MovieData>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, MovieData> {
val page = params.key ?: 1
val queryParams = mutableMapOf<String, String>()
queryParams[PRIMARY_RELEASE_DATE_GTE] = calculateDateXMonthsAgo(2)
queryParams[PRIMARY_RELEASE_DATE_LTE] = calculateDateXMonthsAgo(0)

val response = invokeRequest {
moviesApi.discoverMovies(
val response =
moviesRepository.discoverMovies(
page = page,
language = language,
region = region,
queryParams = queryParams
primaryReleaseDateGte = calculateDateXMonthsAgo(2),
primaryReleaseDateLte = calculateDateXMonthsAgo(0)
)
}

return when (response) {
is ResultModel.Error -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,21 @@ package uz.john.data.pagination.movies

import androidx.paging.PagingSource
import androidx.paging.PagingState
import uz.john.data.remote.VOTE_COUNT_GTE
import uz.john.data.remote.api.MoviesApi
import uz.john.data.remote.model.movie.MovieData
import uz.john.data.repository.MoviesRepository
import uz.john.util.ResultModel
import uz.john.util.invokeRequest

class PopularMoviesPagingSource(
private val moviesApi: MoviesApi,
private val language: String,
private val region: String
private val moviesRepository: MoviesRepository
) : PagingSource<Int, MovieData>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, MovieData> {
val page = params.key ?: 1
val queryParams = mutableMapOf<String, String>()
queryParams[VOTE_COUNT_GTE] = 5000f.toString()

val response = invokeRequest {
moviesApi.discoverMovies(
val response =
moviesRepository.discoverMovies(
page = page,
language = language,
region = region,
queryParams = queryParams
voteCountGte = 5000f,
)
}

return when (response) {
is ResultModel.Error -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,20 @@ package uz.john.data.pagination.movies

import androidx.paging.PagingSource
import androidx.paging.PagingState
import uz.john.data.remote.api.MoviesApi
import uz.john.data.remote.model.movie.MovieData
import uz.john.data.repository.MoviesRepository
import uz.john.util.ResultModel
import uz.john.util.invokeRequest

class RecommendedMoviesPagingSource(
private val moviesApi: MoviesApi,
private val language: String,
private val moviesRepository: MoviesRepository,
private val movieId: Int
) : PagingSource<Int, MovieData>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, MovieData> {
val page = params.key ?: 1
val response = invokeRequest {
moviesApi.getRecommendedMovies(
movieId = movieId,
page = page,
language = language
)
}
val response = moviesRepository.getRecommendedMovies(
movieId = movieId,
page = page
)

return when (response) {
is ResultModel.Error -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,20 @@ package uz.john.data.pagination.movies

import androidx.paging.PagingSource
import androidx.paging.PagingState
import uz.john.data.remote.api.MoviesApi
import uz.john.data.remote.model.movie.MovieData
import uz.john.data.repository.MoviesRepository
import uz.john.util.ResultModel
import uz.john.util.invokeRequest

class SimilarMoviesPagingSource(
private val moviesApi: MoviesApi,
private val movieId: Int,
private val language: String,
private val moviesRepository: MoviesRepository,
private val movieId: Int
) : PagingSource<Int, MovieData>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, MovieData> {
val page = params.key ?: 1
val response = invokeRequest {
moviesApi.getSimilarMovies(
movieId = movieId,
page = page,
language = language,
)
}
val response = moviesRepository.getSimilarMovies(
movieId = movieId,
page = page
)

return when (response) {
is ResultModel.Error -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,18 @@ package uz.john.data.pagination.movies

import androidx.paging.PagingSource
import androidx.paging.PagingState
import uz.john.data.remote.api.MoviesApi
import uz.john.data.remote.model.movie.MovieData
import uz.john.data.repository.MoviesRepository
import uz.john.util.ResultModel
import uz.john.util.invokeRequest

class TopRatedMoviesPagingSource(
private val moviesApi: MoviesApi,
private val language: String,
private val region: String
private val moviesRepository: MoviesRepository
) : PagingSource<Int, MovieData>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, MovieData> {
val page = params.key ?: 1
val response = invokeRequest {
moviesApi.getTopRatedMovies(
page = page,
language = language,
region = region
)
}
val response = moviesRepository.getTopRatedMovies(
page = page
)

return when (response) {
is ResultModel.Error -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,17 @@ package uz.john.data.pagination.people
import androidx.paging.PagingSource
import androidx.paging.PagingState
import uz.john.data.remote.model.person.PersonData
import uz.john.data.repository.SearchRepository
import uz.john.data.repository.PersonRepository
import uz.john.util.ResultModel

class PeopleBySearchQueryPagingSource(
private val searchRepository: SearchRepository,
private val personRepository: PersonRepository,
private val query: String
) : PagingSource<Int, PersonData>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, PersonData> {
val page = params.key ?: 1

val result = searchRepository.searchPeople(query = query, page = page)
val result = personRepository.searchPeople(query = query, page = page)
return when (result) {
is ResultModel.Error -> {
LoadResult.Error(result.error)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,21 @@ package uz.john.data.pagination.tv_shows

import androidx.paging.PagingSource
import androidx.paging.PagingState
import uz.john.data.remote.api.TvShowsApi
import uz.john.data.remote.model.tv_show.TvShowData
import uz.john.data.repository.TvShowsRepository
import uz.john.util.ResultModel
import uz.john.util.invokeRequest

class RecommendedTvShowsPagingSource(
private val tvShowsApi: TvShowsApi,
private val seriesId: Int,
private val language: String
private val tvShowsRepository: TvShowsRepository,
private val seriesId: Int
) : PagingSource<Int, TvShowData>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, TvShowData> {
val page = params.key ?: 1

val response = invokeRequest {
tvShowsApi.getRecommendedTvShows(
seriesId = seriesId,
language = language,
page = page
)
}
val response = tvShowsRepository.getRecommendedTvShows(
seriesId = seriesId,
page = page
)

return when (response) {
is ResultModel.Error -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,21 @@ package uz.john.data.pagination.tv_shows

import androidx.paging.PagingSource
import androidx.paging.PagingState
import uz.john.data.remote.api.TvShowsApi
import uz.john.data.remote.model.tv_show.TvShowData
import uz.john.data.repository.TvShowsRepository
import uz.john.util.ResultModel
import uz.john.util.invokeRequest

class SimilarTvShowsPagingSource(
private val tvShowsApi: TvShowsApi,
private val tvShowsRepository: TvShowsRepository,
private val seriesId: Int,
private val language: String
) : PagingSource<Int, TvShowData>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, TvShowData> {
val page = params.key ?: 1

val response = invokeRequest {
tvShowsApi.getSimilarTvShows(
seriesId = seriesId,
language = language,
page = page
)
}
val response = tvShowsRepository.getSimilarTvShows(
seriesId = seriesId,
page = page
)

return when (response) {
is ResultModel.Error -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,21 @@ package uz.john.data.pagination.tv_shows

import androidx.paging.PagingSource
import androidx.paging.PagingState
import uz.john.data.remote.api.SearchApi
import uz.john.data.remote.model.tv_show.TvShowData
import uz.john.data.repository.TvShowsRepository
import uz.john.util.ResultModel
import uz.john.util.invokeRequest

class TvShowsBySearchQueryPagingSource(
private val searchApi: SearchApi,
private val query: String,
private val includeAdult: Boolean,
private val language: String,
private val tvShowsRepository: TvShowsRepository,
private val query: String
) : PagingSource<Int, TvShowData>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, TvShowData> {
val page = params.key ?: 1

val response = invokeRequest {
searchApi.searchTvShows(
query = query,
language = language,
includeAdult = includeAdult,
page = page,
additionalParams = mapOf()
)
}
val response = tvShowsRepository.searchTvShows(
query = query,
page = page
)

return when (response) {
is ResultModel.Error -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,19 @@ package uz.john.data.pagination.tv_shows

import androidx.paging.PagingSource
import androidx.paging.PagingState
import uz.john.data.remote.api.TvShowsApi
import uz.john.data.remote.model.tv_show.TvShowData
import uz.john.data.repository.TvShowsRepository
import uz.john.util.ResultModel
import uz.john.util.invokeRequest

class TvShowsTrendingThisWeekPagingSource(
private val tvShowsApi: TvShowsApi,
private val language: String
private val tvShowsRepository: TvShowsRepository
) : PagingSource<Int, TvShowData>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, TvShowData> {
val page = params.key ?: 1

val result = invokeRequest {
tvShowsApi.getTrendingThisWeekTvShows(
page = page,
language = language
)
}
val result = tvShowsRepository.getTrendingThisWeekTvShows(
page = page
)

return when (result) {
is ResultModel.Error -> {
Expand Down
Loading

0 comments on commit 73c4199

Please sign in to comment.