Refresh favorite recipes on change
This commit is contained in:
@@ -17,4 +17,6 @@ interface RecipeStorage {
|
|||||||
suspend fun saveRecipeInfo(recipe: FullRecipeInfo)
|
suspend fun saveRecipeInfo(recipe: FullRecipeInfo)
|
||||||
|
|
||||||
suspend fun queryRecipeInfo(recipeId: String): FullRecipeEntity?
|
suspend fun queryRecipeInfo(recipeId: String): FullRecipeEntity?
|
||||||
|
|
||||||
|
suspend fun updateFavoriteRecipes(favorites: List<String>)
|
||||||
}
|
}
|
||||||
@@ -72,4 +72,12 @@ class RecipeStorageImpl @Inject constructor(
|
|||||||
logger.v { "queryRecipeInfo() returned: $fullRecipeInfo" }
|
logger.v { "queryRecipeInfo() returned: $fullRecipeInfo" }
|
||||||
return fullRecipeInfo
|
return fullRecipeInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override suspend fun updateFavoriteRecipes(favorites: List<String>) {
|
||||||
|
logger.v { "updateFavoriteRecipes() called with: favorites = $favorites" }
|
||||||
|
db.withTransaction {
|
||||||
|
recipeDao.setFavorite(favorites)
|
||||||
|
recipeDao.setNonFavorite(favorites)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -76,6 +76,7 @@ class RecipeRepoImpl @Inject constructor(
|
|||||||
logger.v { "updateIsRecipeFavorite() called with: recipeSlug = $recipeSlug, isFavorite = $isFavorite" }
|
logger.v { "updateIsRecipeFavorite() called with: recipeSlug = $recipeSlug, isFavorite = $isFavorite" }
|
||||||
runCatchingExceptCancel {
|
runCatchingExceptCancel {
|
||||||
dataSource.updateIsRecipeFavorite(recipeSlug, isFavorite)
|
dataSource.updateIsRecipeFavorite(recipeSlug, isFavorite)
|
||||||
|
mediator.onFavoritesChange()
|
||||||
}.onFailure {
|
}.onFailure {
|
||||||
logger.e(it) { "Can't update recipe's is favorite status" }
|
logger.e(it) { "Can't update recipe's is favorite status" }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,4 +79,10 @@ class RecipesRemoteMediator @Inject constructor(
|
|||||||
else storage.saveRecipes(entities)
|
else storage.saveRecipes(entities)
|
||||||
recipes.size
|
recipes.size
|
||||||
}
|
}
|
||||||
|
|
||||||
|
suspend fun onFavoritesChange() {
|
||||||
|
val favorites = network.getFavoriteRecipes()
|
||||||
|
storage.updateFavoriteRecipes(favorites)
|
||||||
|
pagingSourceFactory.invalidate()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -40,4 +40,10 @@ interface RecipeDao {
|
|||||||
|
|
||||||
@Query("DELETE FROM recipe_instruction WHERE recipe_id = :recipeId")
|
@Query("DELETE FROM recipe_instruction WHERE recipe_id = :recipeId")
|
||||||
suspend fun deleteRecipeInstructions(recipeId: String)
|
suspend fun deleteRecipeInstructions(recipeId: String)
|
||||||
|
|
||||||
|
@Query("UPDATE recipe_summaries SET is_favorite = 1 WHERE slug IN (:favorites)")
|
||||||
|
suspend fun setFavorite(favorites: List<String>)
|
||||||
|
|
||||||
|
@Query("UPDATE recipe_summaries SET is_favorite = 0 WHERE slug NOT IN (:favorites)")
|
||||||
|
suspend fun setNonFavorite(favorites: List<String>)
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user