diff --git a/app/src/main/java/ua/acclorite/book_story/data/local/data_store/DataStore.kt b/app/src/main/java/ua/acclorite/book_story/data/local/data_store/DataStore.kt index 83153c59..a40e2513 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/local/data_store/DataStore.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/local/data_store/DataStore.kt @@ -1,10 +1,8 @@ package ua.acclorite.book_story.data.local.data_store import androidx.datastore.preferences.core.Preferences -import kotlinx.coroutines.flow.Flow interface DataStore { - suspend fun getData(key: Preferences.Key, defaultValue: T): Flow suspend fun getNullableData(key: Preferences.Key): T? suspend fun getAllData(): Set>? suspend fun putData(key: Preferences.Key, value: T) diff --git a/app/src/main/java/ua/acclorite/book_story/data/local/data_store/DataStoreImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/local/data_store/DataStoreImpl.kt index 53599a1f..09eaaf2d 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/local/data_store/DataStoreImpl.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/local/data_store/DataStoreImpl.kt @@ -6,7 +6,6 @@ import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.emptyPreferences import androidx.datastore.preferences.preferencesDataStore -import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.map @@ -18,38 +17,30 @@ private val Context.dataStore by preferencesDataStore("data_store") class DataStoreImpl @Inject constructor(context: Application) : DataStore { private val dataStore = context.dataStore - override suspend fun getData(key: Preferences.Key, defaultValue: T): Flow = - dataStore.data.catch { exception -> - if (exception is IOException) { - emit(emptyPreferences()) - } else { - throw exception - } - }.map { preferences -> - val result = preferences[key] ?: defaultValue - result - } - + /** + * Gets data from DataStore by given [key]. If no such [key] exists, returns null. + */ override suspend fun getNullableData(key: Preferences.Key): T? = dataStore.data.catch { exception -> - if (exception is IOException) { - emit(emptyPreferences()) - } else { - throw exception - } + if (exception is IOException) emit(emptyPreferences()) + else throw exception }.map { preferences -> - val result = preferences[key] - result + preferences[key] }.firstOrNull() + /** + * Gets all keys from DataStore. + */ override suspend fun getAllData(): Set>? { - val keys = dataStore.data + return dataStore.data .map { it.asMap().keys - } - return keys.firstOrNull() + }.firstOrNull() } + /** + * Puts data in DataStore by given [key]. + */ override suspend fun putData(key: Preferences.Key, value: T) { dataStore.edit { preferences -> preferences[key] = value diff --git a/app/src/main/java/ua/acclorite/book_story/data/local/notification/UpdatesNotificationServiceImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/local/notification/UpdatesNotificationServiceImpl.kt index 764c969b..40420722 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/local/notification/UpdatesNotificationServiceImpl.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/local/notification/UpdatesNotificationServiceImpl.kt @@ -20,6 +20,11 @@ class UpdatesNotificationServiceImpl @Inject constructor( private val notificationManager = application.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager + /** + * Sends notification about new update. + * + * @param releaseInfo [LatestReleaseInfo]. + */ override fun postNotification(releaseInfo: LatestReleaseInfo) { val downloadLatestVersionIntent = Intent( Intent.ACTION_VIEW, diff --git a/app/src/main/java/ua/acclorite/book_story/data/local/room/BookDao.kt b/app/src/main/java/ua/acclorite/book_story/data/local/room/BookDao.kt index 8506210a..5ef972fc 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/local/room/BookDao.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/local/room/BookDao.kt @@ -12,9 +12,13 @@ import ua.acclorite.book_story.data.local.dto.ColorPresetEntity import ua.acclorite.book_story.data.local.dto.FavoriteDirectoryEntity import ua.acclorite.book_story.data.local.dto.HistoryEntity +/** + * Class to manipulate Room database. + */ @Dao interface BookDao { + /* ------ BookEntity ------------------------ */ @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insertBooks( books: List @@ -39,8 +43,10 @@ interface BookDao { @Update suspend fun updateBooks(books: List) + /* - - - - - - - - - - - - - - - - - - - - - - */ + /* ------ HistoryEntity --------------------- */ @Query("SELECT * FROM historyentity") suspend fun getHistory(): List @@ -60,8 +66,10 @@ interface BookDao { @Delete suspend fun deleteHistory(history: List) + /* - - - - - - - - - - - - - - - - - - - - - - */ + /* ------ ColorPresetEntity ----------------- */ @Upsert suspend fun updateColorPreset(colorPreset: ColorPresetEntity) @@ -79,8 +87,10 @@ interface BookDao { @Query("DELETE FROM colorpresetentity") suspend fun deleteColorPresets() + /* - - - - - - - - - - - - - - - - - - - - - - */ + /* ------ FavoriteDirectoryEntity ----------- */ @Upsert suspend fun insertFavoriteDirectory(favoriteDirectoryEntity: FavoriteDirectoryEntity) @@ -89,4 +99,5 @@ interface BookDao { @Delete suspend fun deleteFavoriteDirectory(favoriteDirectoryEntity: FavoriteDirectoryEntity) + /* - - - - - - - - - - - - - - - - - - - - - - */ } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/data/mapper/color_preset/ColorPresetMapperImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/mapper/color_preset/ColorPresetMapperImpl.kt index d11cbded..86a6e12a 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/mapper/color_preset/ColorPresetMapperImpl.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/mapper/color_preset/ColorPresetMapperImpl.kt @@ -6,7 +6,6 @@ import ua.acclorite.book_story.domain.model.ColorPreset import javax.inject.Inject class ColorPresetMapperImpl @Inject constructor() : ColorPresetMapper { - override suspend fun toColorPresetEntity( colorPreset: ColorPreset, order: Int diff --git a/app/src/main/java/ua/acclorite/book_story/data/repository/BookRepositoryImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/repository/BookRepositoryImpl.kt index b958ca04..78a33bc8 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/repository/BookRepositoryImpl.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/repository/BookRepositoryImpl.kt @@ -429,13 +429,6 @@ class BookRepositoryImpl @Inject constructor( return true } - override suspend fun retrieveDataFromDataStore( - key: Preferences.Key, - defaultValue: T - ): Flow { - return dataStore.getData(key, defaultValue) - } - override suspend fun putDataToDataStore(key: Preferences.Key, value: T) { dataStore.putData(key, value) } diff --git a/app/src/main/java/ua/acclorite/book_story/domain/repository/BookRepository.kt b/app/src/main/java/ua/acclorite/book_story/domain/repository/BookRepository.kt index a0c6669e..b4d99b1b 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/repository/BookRepository.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/repository/BookRepository.kt @@ -58,12 +58,6 @@ interface BookRepository { suspend fun resetCoverImage(bookId: Int): Boolean - - suspend fun retrieveDataFromDataStore( - key: Preferences.Key, - defaultValue: T - ): Flow - suspend fun putDataToDataStore( key: Preferences.Key, value: T diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/GetDatastore.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/GetDatastore.kt deleted file mode 100644 index f6581105..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/GetDatastore.kt +++ /dev/null @@ -1,13 +0,0 @@ -package ua.acclorite.book_story.domain.use_case - -import androidx.datastore.preferences.core.Preferences -import kotlinx.coroutines.flow.Flow -import ua.acclorite.book_story.domain.repository.BookRepository -import javax.inject.Inject - -class GetDatastore @Inject constructor(private val repository: BookRepository) { - - suspend fun execute(key: Preferences.Key, defaultValue: T): Flow { - return repository.retrieveDataFromDataStore(key, defaultValue) - } -} \ No newline at end of file