Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

created new db for cache and moved cache functionality to cache db to fix #74 #79

Merged
merged 1 commit into from
Oct 13, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions data/src/main/java/divyansh/tech/animeclassroom/DatabaseModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,13 @@ package divyansh.tech.animeclassroom

import android.content.Context
import androidx.room.Room
import androidx.room.RoomDatabase
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.components.ActivityComponent
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import divyansh.tech.animeclassroom.database.AnimeDatabase
import divyansh.tech.animeclassroom.database.CacheDatabase
import javax.inject.Singleton

@Module
Expand Down Expand Up @@ -43,4 +42,17 @@ class DatabaseModule {
@Provides
@Singleton
fun providesAnimeDao(db: AnimeDatabase) = db.animeDao()

@Provides
@Singleton
fun provideCacheDatabase(@ApplicationContext context: Context)=
Room
.databaseBuilder(context,CacheDatabase::class.java,"cache-db")
.fallbackToDestructiveMigration()
.build()

@Provides
@Singleton
fun providesCacheDao(db:CacheDatabase) = db.cacheDao()

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,9 @@ interface AnimeDao {
@Query("SELECT * FROM animes")
suspend fun getAllAnimes(): List<OfflineAnimeModel>

@Query("SELECT * FROM animes WHERE category=:category")
fun getAnimeOfCategory(category:String): List<OfflineAnimeModel>

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertAnime(anime: OfflineAnimeModel)

@Delete
suspend fun deleteAnime(anime: OfflineAnimeModel)

@Query("SELECT EXISTS(SELECT 1 FROM animes WHERE animeUrl = :animeUrl LIMIT 1)")
suspend fun isAnimeWithUrlSaved(animeUrl: String): Boolean
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package divyansh.tech.animeclassroom.database

import androidx.room.*
import divyansh.tech.animeclassroom.models.home.OfflineAnimeModel

@Dao
interface CacheDao {

@Query("SELECT * FROM animes WHERE category=:category")
fun getAnimeOfCategory(category:String): List<OfflineAnimeModel>

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertAnime(anime: OfflineAnimeModel)

@Delete
suspend fun deleteAnime(anime: OfflineAnimeModel)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package divyansh.tech.animeclassroom.database

import androidx.room.Database
import androidx.room.RoomDatabase
import divyansh.tech.animeclassroom.models.home.OfflineAnimeModel

@Database(entities = arrayOf(OfflineAnimeModel::class), version = 2)
abstract class CacheDatabase :RoomDatabase(){
abstract fun cacheDao():CacheDao
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class HomeDefaultRepo @Inject constructor(
if(localData.isNotEmpty()){
val response= arrayListOf<AnimeModel>()
for (data in localData)
response.add(convertOfflineAnimeModel(data))
response.add(convertToAnimeModel(data))
emit(ResultWrapper.Success(response))
} else {
val response = remoteRepo.getPopularAnimes()
Expand All @@ -54,7 +54,7 @@ class HomeDefaultRepo @Inject constructor(
if(localData.isNotEmpty()){
val response= arrayListOf<AnimeModel>()
for (data in localData)
response.add(convertOfflineAnimeModel(data))
response.add(convertToAnimeModel(data))
emit(ResultWrapper.Success(response))
} else {
val response = remoteRepo.getRecentReleases()
Expand All @@ -79,7 +79,7 @@ class HomeDefaultRepo @Inject constructor(
if(localData.isNotEmpty()){
val response= arrayListOf<AnimeModel>()
for (data in localData)
response.add(convertOfflineAnimeModel(data))
response.add(convertToAnimeModel(data))
emit(ResultWrapper.Success(response))
} else {
val response = remoteRepo.getPopularMovies()
Expand All @@ -104,7 +104,7 @@ class HomeDefaultRepo @Inject constructor(
if(localData.isNotEmpty()){
val response= arrayListOf<AnimeModel>()
for (data in localData)
response.add(convertOfflineAnimeModel(data))
response.add(convertToAnimeModel(data))
emit(ResultWrapper.Success(response))
} else {
val response = remoteRepo.getNewSeasons()
Expand All @@ -129,7 +129,7 @@ class HomeDefaultRepo @Inject constructor(
}
}

fun convertOfflineAnimeModel(offlineAnimeModel: OfflineAnimeModel):AnimeModel{
fun convertToAnimeModel(offlineAnimeModel: OfflineAnimeModel):AnimeModel{
return AnimeModel(
name = offlineAnimeModel.name,
imageUrl = offlineAnimeModel.imageUrl,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@ package divyansh.tech.animeclassroom.home

import divyansh.tech.animeclassroom.api.HomeScreenApi
import divyansh.tech.animeclassroom.database.AnimeDao
import divyansh.tech.animeclassroom.database.CacheDao
import divyansh.tech.animeclassroom.utils.HomeTypes
import divyansh.tech.animeclassroom.models.home.AnimeModel
import divyansh.tech.animeclassroom.models.home.OfflineAnimeModel
import javax.inject.Inject

class HomeLocalRepo @Inject constructor(
private val homeScreenApi: HomeScreenApi,
private val dao: AnimeDao
private val dao: CacheDao
) {

suspend fun saveAnimeDataOffline(anime: AnimeModel,category:String) {
Expand Down