From 706ee7bfbe891daad449fbc97df5a2934b339d6f Mon Sep 17 00:00:00 2001 From: pauliancu97 Date: Sun, 10 Oct 2021 21:57:56 +0300 Subject: [PATCH 1/2] added functions in dao and repository to check if anime is saved as favorite --- .../java/divyansh/tech/animeclassroom/database/AnimeDao.kt | 3 +++ .../tech/animeclassroom/favorites/FavoriteAnimeLocalRepo.kt | 2 ++ 2 files changed, 5 insertions(+) diff --git a/data/src/main/java/divyansh/tech/animeclassroom/database/AnimeDao.kt b/data/src/main/java/divyansh/tech/animeclassroom/database/AnimeDao.kt index 99818d8..42a750b 100644 --- a/data/src/main/java/divyansh/tech/animeclassroom/database/AnimeDao.kt +++ b/data/src/main/java/divyansh/tech/animeclassroom/database/AnimeDao.kt @@ -17,4 +17,7 @@ interface AnimeDao { @Delete suspend fun deleteAnime(anime: OfflineAnimeModel) + + @Query("SELECT EXISTS(SELECT 1 FROM animes WHERE animeUrl = :animeUrl LIMIT 1)") + suspend fun isAnimeWithUrlSaved(animeUrl: String): Boolean } \ No newline at end of file diff --git a/domain/src/main/java/divyansh/tech/animeclassroom/favorites/FavoriteAnimeLocalRepo.kt b/domain/src/main/java/divyansh/tech/animeclassroom/favorites/FavoriteAnimeLocalRepo.kt index ff09cc0..99d7461 100644 --- a/domain/src/main/java/divyansh/tech/animeclassroom/favorites/FavoriteAnimeLocalRepo.kt +++ b/domain/src/main/java/divyansh/tech/animeclassroom/favorites/FavoriteAnimeLocalRepo.kt @@ -25,4 +25,6 @@ class FavoriteAnimeLocalRepo @Inject constructor( Log.i("ROOM REPO -> ", list.toString()) return list } + + suspend fun isAnimeWithUrlSaved(animeUrl: String) = dao.isAnimeWithUrlSaved(animeUrl) } \ No newline at end of file From 445736fff505ea0330d31b0cdb33d3ad27e53f34 Mon Sep 17 00:00:00 2001 From: pauliancu97 Date: Sun, 10 Oct 2021 22:20:28 +0300 Subject: [PATCH 2/2] added new isSaved field to AnimeDetailsModel --- .../tech/animeclassroom/models/home/AnimeModel.kt | 3 ++- .../tech/animeclassroom/animeDetail/AnimeDetailRepo.kt | 8 ++++++-- .../java/divyansh/tech/animeclassroom/utils/Parser.kt | 5 +++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/data/src/main/java/divyansh/tech/animeclassroom/models/home/AnimeModel.kt b/data/src/main/java/divyansh/tech/animeclassroom/models/home/AnimeModel.kt index 4e28dd1..08b89e0 100644 --- a/data/src/main/java/divyansh/tech/animeclassroom/models/home/AnimeModel.kt +++ b/data/src/main/java/divyansh/tech/animeclassroom/models/home/AnimeModel.kt @@ -28,7 +28,8 @@ data class AnimeDetailModel( var genre: List, var plotSummary: String, var status: String, - var type: String + var type: String, + var isSaved: Boolean = false ) @Entity(tableName = "animes") diff --git a/domain/src/main/java/divyansh/tech/animeclassroom/animeDetail/AnimeDetailRepo.kt b/domain/src/main/java/divyansh/tech/animeclassroom/animeDetail/AnimeDetailRepo.kt index 174cd0b..5fab68a 100644 --- a/domain/src/main/java/divyansh/tech/animeclassroom/animeDetail/AnimeDetailRepo.kt +++ b/domain/src/main/java/divyansh/tech/animeclassroom/animeDetail/AnimeDetailRepo.kt @@ -3,12 +3,14 @@ package divyansh.tech.animeclassroom.animeDetail import android.util.Log import divyansh.tech.animeclassroom.ResultWrapper import divyansh.tech.animeclassroom.api.AnimeDetailScreenApi +import divyansh.tech.animeclassroom.favorites.FavoriteAnimeLocalRepo import divyansh.tech.animeclassroom.models.home.EpisodeModel import divyansh.tech.animeclassroom.utils.Parser import javax.inject.Inject class AnimeDetailRepo @Inject constructor( - private val animeDetailScreenApi: AnimeDetailScreenApi + private val animeDetailScreenApi: AnimeDetailScreenApi, + private val favoriteAnimeLocalRepo: FavoriteAnimeLocalRepo ) { /* @@ -17,8 +19,10 @@ class AnimeDetailRepo @Inject constructor( * */ suspend fun getAnimeDetails(url: String): ResultWrapper<*> { Log.i("HOME-ANIMEREPO", url) + val isAnimeSaved = favoriteAnimeLocalRepo.isAnimeWithUrlSaved(url) val response = Parser.parseAnimeDetails( - animeDetailScreenApi.getAnimeDetails(url).string() + animeDetailScreenApi.getAnimeDetails(url).string(), + isAnimeSaved ) return if (response is ResultWrapper.Success) ResultWrapper.Success(response.data) else ResultWrapper.Error(message = "No Body To parse", data = null) diff --git a/domain/src/main/java/divyansh/tech/animeclassroom/utils/Parser.kt b/domain/src/main/java/divyansh/tech/animeclassroom/utils/Parser.kt index c0329d1..8904d43 100644 --- a/domain/src/main/java/divyansh/tech/animeclassroom/utils/Parser.kt +++ b/domain/src/main/java/divyansh/tech/animeclassroom/utils/Parser.kt @@ -114,7 +114,7 @@ object Parser { * @param response: Response from the anime page * @returns ResultWrapper<*> * */ - suspend fun parseAnimeDetails(response: String): ResultWrapper<*> { + suspend fun parseAnimeDetails(response: String, isSaved: Boolean): ResultWrapper<*> { Log.i("Anime Details -> ", response) return try { val jsoup = Jsoup.parse(response) @@ -149,7 +149,8 @@ object Parser { status = formatInfoValues(status), genre = genre, plotSummary = plotSummary, - endEpisode = endEpisode.toInt() + endEpisode = endEpisode.toInt(), + isSaved = isSaved ) return ResultWrapper.Success(model)