diff --git a/app/src/main/java/com/michaldrabik/showly2/ui/main/MainActivity.kt b/app/src/main/java/com/michaldrabik/showly2/ui/main/MainActivity.kt index 6d7e45deef..9b59e4f822 100644 --- a/app/src/main/java/com/michaldrabik/showly2/ui/main/MainActivity.kt +++ b/app/src/main/java/com/michaldrabik/showly2/ui/main/MainActivity.kt @@ -50,7 +50,7 @@ import com.michaldrabik.ui_base.utilities.extensions.openWebUrl import com.michaldrabik.ui_base.utilities.extensions.showErrorSnackbar import com.michaldrabik.ui_base.utilities.extensions.showInfoSnackbar import com.michaldrabik.ui_base.utilities.extensions.visibleIf -import com.michaldrabik.ui_settings.helpers.AppLanguage +import com.michaldrabik.ui_model.locale.AppLanguage import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.flow.debounce diff --git a/app/src/main/java/com/michaldrabik/showly2/ui/main/MainUiState.kt b/app/src/main/java/com/michaldrabik/showly2/ui/main/MainUiState.kt index c2a33c6c8f..f05ee2a2a8 100644 --- a/app/src/main/java/com/michaldrabik/showly2/ui/main/MainUiState.kt +++ b/app/src/main/java/com/michaldrabik/showly2/ui/main/MainUiState.kt @@ -2,7 +2,7 @@ package com.michaldrabik.showly2.ui.main import com.michaldrabik.showly2.utilities.deeplink.DeepLinkBundle import com.michaldrabik.ui_base.utilities.events.Event -import com.michaldrabik.ui_settings.helpers.AppLanguage +import com.michaldrabik.ui_model.locale.AppLanguage // TODO Split events into their Channel data class MainUiState( diff --git a/app/src/main/java/com/michaldrabik/showly2/ui/main/MainViewModel.kt b/app/src/main/java/com/michaldrabik/showly2/ui/main/MainViewModel.kt index c5c428ae24..8f276e774d 100644 --- a/app/src/main/java/com/michaldrabik/showly2/ui/main/MainViewModel.kt +++ b/app/src/main/java/com/michaldrabik/showly2/ui/main/MainViewModel.kt @@ -23,7 +23,7 @@ import com.michaldrabik.ui_base.utilities.extensions.combine import com.michaldrabik.ui_base.utilities.extensions.launchDelayed import com.michaldrabik.ui_base.utilities.extensions.rethrowCancellation import com.michaldrabik.ui_model.Tip -import com.michaldrabik.ui_settings.helpers.AppLanguage +import com.michaldrabik.ui_model.locale.AppLanguage import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.cancelAndJoin import kotlinx.coroutines.flow.MutableStateFlow @@ -92,7 +92,7 @@ class MainViewModel @Inject constructor( private fun checkApi13Locale(isInitialRun: Boolean) { if (!isInitialRun && !settingsRepository.isLocaleInitialised) { settingsRepository.isLocaleInitialised = true - val locale = LocaleListCompat.forLanguageTags(settingsRepository.language) + val locale = LocaleListCompat.forLanguageTags(settingsRepository.locale.language.code) AppCompatDelegate.setApplicationLocales(locale) } } diff --git a/app/src/main/java/com/michaldrabik/showly2/ui/main/cases/MainInitialsCase.kt b/app/src/main/java/com/michaldrabik/showly2/ui/main/cases/MainInitialsCase.kt index 2b8acd274c..6272b28694 100644 --- a/app/src/main/java/com/michaldrabik/showly2/ui/main/cases/MainInitialsCase.kt +++ b/app/src/main/java/com/michaldrabik/showly2/ui/main/cases/MainInitialsCase.kt @@ -13,9 +13,10 @@ import com.michaldrabik.repository.RatingsRepository import com.michaldrabik.repository.UserTraktManager import com.michaldrabik.repository.settings.SettingsRepository import com.michaldrabik.showly2.BuildConfig -import com.michaldrabik.ui_base.common.AppCountry +import com.michaldrabik.ui_model.locale.AppCountry import com.michaldrabik.ui_base.utilities.extensions.withApiAtLeast -import com.michaldrabik.ui_settings.helpers.AppLanguage +import com.michaldrabik.ui_model.locale.AppLanguage +import com.michaldrabik.ui_model.locale.AppLocale import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.CoroutineExceptionHandler @@ -60,7 +61,7 @@ class MainInitialsCase @Inject constructor( if (!country.isNullOrBlank()) { AppCountry.values().forEach { appCountry -> if (appCountry.code.equals(country, ignoreCase = true)) { - settingsRepository.country = appCountry.code + settingsRepository.locale = AppLocale(settingsRepository.locale.language, appCountry) return } } @@ -77,7 +78,7 @@ class MainInitialsCase @Inject constructor( } fun setLanguage(appLanguage: AppLanguage) { - settingsRepository.language = appLanguage.code + settingsRepository.locale = AppLocale(appLanguage, settingsRepository.locale.country) val locales = LocaleListCompat.forLanguageTags(appLanguage.code) AppCompatDelegate.setApplicationLocales(locales) } diff --git a/app/src/main/java/com/michaldrabik/showly2/ui/views/WelcomeLanguageView.kt b/app/src/main/java/com/michaldrabik/showly2/ui/views/WelcomeLanguageView.kt index 0fef3ce410..29ef25c92b 100644 --- a/app/src/main/java/com/michaldrabik/showly2/ui/views/WelcomeLanguageView.kt +++ b/app/src/main/java/com/michaldrabik/showly2/ui/views/WelcomeLanguageView.kt @@ -9,7 +9,7 @@ import android.view.ViewGroup.LayoutParams.WRAP_CONTENT import android.widget.FrameLayout import com.michaldrabik.showly2.databinding.ViewWelcomeLanguageBinding import com.michaldrabik.ui_base.utilities.extensions.onClick -import com.michaldrabik.ui_settings.helpers.AppLanguage +import com.michaldrabik.ui_model.locale.AppLanguage class WelcomeLanguageView : FrameLayout { diff --git a/app/src/main/java/com/michaldrabik/showly2/ui/views/WelcomeNoteView.kt b/app/src/main/java/com/michaldrabik/showly2/ui/views/WelcomeNoteView.kt index 9a8327ac06..45994697a9 100644 --- a/app/src/main/java/com/michaldrabik/showly2/ui/views/WelcomeNoteView.kt +++ b/app/src/main/java/com/michaldrabik/showly2/ui/views/WelcomeNoteView.kt @@ -10,7 +10,7 @@ import com.michaldrabik.showly2.R import com.michaldrabik.showly2.databinding.ViewWelcomeNoteBinding import com.michaldrabik.ui_base.utilities.extensions.getLocaleStringResource import com.michaldrabik.ui_base.utilities.extensions.onClick -import com.michaldrabik.ui_settings.helpers.AppLanguage +import com.michaldrabik.ui_model.locale.AppLanguage import java.util.Locale class WelcomeNoteView : FrameLayout { diff --git a/data-local/src/main/java/com/michaldrabik/data_local/database/dao/EpisodeTranslationsDao.kt b/data-local/src/main/java/com/michaldrabik/data_local/database/dao/EpisodeTranslationsDao.kt index 11ae2c163e..2a8d4b3648 100644 --- a/data-local/src/main/java/com/michaldrabik/data_local/database/dao/EpisodeTranslationsDao.kt +++ b/data-local/src/main/java/com/michaldrabik/data_local/database/dao/EpisodeTranslationsDao.kt @@ -10,15 +10,18 @@ import com.michaldrabik.data_local.sources.EpisodeTranslationsLocalDataSource @Dao interface EpisodeTranslationsDao : BaseDao, EpisodeTranslationsLocalDataSource { - @Query("SELECT * FROM episodes_translations WHERE id_trakt == :traktEpisodeId AND id_trakt_show == :traktShowId AND language == :language") - override suspend fun getById(traktEpisodeId: Long, traktShowId: Long, language: String): EpisodeTranslation? + @Query("SELECT * FROM episodes_translations WHERE id_trakt == :traktEpisodeId AND id_trakt_show == :traktShowId AND language == :language AND country == :country") + override suspend fun getById(traktEpisodeId: Long, traktShowId: Long, language: String, country: String): EpisodeTranslation? - @Query("SELECT * FROM episodes_translations WHERE id_trakt IN (:traktEpisodeIds) AND id_trakt_show == :traktShowId AND language == :language") - override suspend fun getByIds(traktEpisodeIds: List, traktShowId: Long, language: String): List + @Query("SELECT * FROM episodes_translations WHERE id_trakt IN (:traktEpisodeIds) AND id_trakt_show == :traktShowId AND language == :language AND country == :country") + override suspend fun getByIds(traktEpisodeIds: List, traktShowId: Long, language: String, country: String): List @Insert(onConflict = OnConflictStrategy.REPLACE) override suspend fun insertSingle(translation: EpisodeTranslation) @Query("DELETE FROM episodes_translations WHERE language IN (:languages)") override suspend fun deleteByLanguage(languages: List) + + @Query("DELETE FROM episodes_translations WHERE country IN (:countries)") + override suspend fun deleteByCountry(countries: List) } diff --git a/data-local/src/main/java/com/michaldrabik/data_local/database/dao/MovieTranslationsDao.kt b/data-local/src/main/java/com/michaldrabik/data_local/database/dao/MovieTranslationsDao.kt index e683accea3..393c883202 100644 --- a/data-local/src/main/java/com/michaldrabik/data_local/database/dao/MovieTranslationsDao.kt +++ b/data-local/src/main/java/com/michaldrabik/data_local/database/dao/MovieTranslationsDao.kt @@ -10,15 +10,18 @@ import com.michaldrabik.data_local.sources.MovieTranslationsLocalDataSource @Dao interface MovieTranslationsDao : BaseDao, MovieTranslationsLocalDataSource { - @Query("SELECT * FROM movies_translations WHERE id_trakt == :traktId AND language == :language") - override suspend fun getById(traktId: Long, language: String): MovieTranslation? + @Query("SELECT * FROM movies_translations WHERE id_trakt == :traktId AND language == :language AND country == :country") + override suspend fun getById(traktId: Long, language: String, country: String): MovieTranslation? - @Query("SELECT * FROM movies_translations WHERE language == :language") - override suspend fun getAll(language: String): List + @Query("SELECT * FROM movies_translations WHERE language == :language AND country == :country") + override suspend fun getAll(language: String, country: String): List @Insert(onConflict = OnConflictStrategy.REPLACE) override suspend fun insertSingle(translation: MovieTranslation) @Query("DELETE FROM movies_translations WHERE language IN (:languages)") override suspend fun deleteByLanguage(languages: List) + + @Query("DELETE FROM movies_translations WHERE country IN (:countries)") + override suspend fun deleteByCountry(countries: List) } diff --git a/data-local/src/main/java/com/michaldrabik/data_local/database/dao/ShowTranslationsDao.kt b/data-local/src/main/java/com/michaldrabik/data_local/database/dao/ShowTranslationsDao.kt index 89b0867e62..bb79694260 100644 --- a/data-local/src/main/java/com/michaldrabik/data_local/database/dao/ShowTranslationsDao.kt +++ b/data-local/src/main/java/com/michaldrabik/data_local/database/dao/ShowTranslationsDao.kt @@ -10,15 +10,18 @@ import com.michaldrabik.data_local.sources.ShowTranslationsLocalDataSource @Dao interface ShowTranslationsDao : BaseDao, ShowTranslationsLocalDataSource { - @Query("SELECT * FROM shows_translations WHERE id_trakt == :traktId AND language == :language") - override suspend fun getById(traktId: Long, language: String): ShowTranslation? + @Query("SELECT * FROM shows_translations WHERE id_trakt == :traktId AND language == :language AND country == :country") + override suspend fun getById(traktId: Long, language: String, country: String): ShowTranslation? - @Query("SELECT * FROM shows_translations WHERE language == :language") - override suspend fun getAll(language: String): List + @Query("SELECT * FROM shows_translations WHERE language == :language AND country == :country") + override suspend fun getAll(language: String, country: String): List @Insert(onConflict = REPLACE) override suspend fun insertSingle(translation: ShowTranslation) @Query("DELETE FROM shows_translations WHERE language IN (:languages)") override suspend fun deleteByLanguage(languages: List) + + @Query("DELETE FROM shows_translations WHERE country IN (:countries)") + override suspend fun deleteByCountry(countries: List) } diff --git a/data-local/src/main/java/com/michaldrabik/data_local/database/migrations/Migrations.kt b/data-local/src/main/java/com/michaldrabik/data_local/database/migrations/Migrations.kt index b45fda3543..86d96ebb9b 100644 --- a/data-local/src/main/java/com/michaldrabik/data_local/database/migrations/Migrations.kt +++ b/data-local/src/main/java/com/michaldrabik/data_local/database/migrations/Migrations.kt @@ -5,7 +5,7 @@ import android.content.Context.MODE_PRIVATE import androidx.room.migration.Migration import androidx.sqlite.db.SupportSQLiteDatabase -const val DATABASE_VERSION = 41 +const val DATABASE_VERSION = 42 const val DATABASE_NAME = "SHOWLY2_DB_2" class Migrations(context: Context) { @@ -770,6 +770,16 @@ class Migrations(context: Context) { } } + private val migration42 = object : Migration(41, 42) { + override fun migrate(database: SupportSQLiteDatabase) { + with(database) { + execSQL("ALTER TABLE movies_translations ADD COLUMN country TEXT") + execSQL("ALTER TABLE shows_translations ADD COLUMN country TEXT") + execSQL("ALTER TABLE episodes_translations ADD COLUMN country TEXT") + } + } + } + fun getAll() = listOf( migration2, migration3, @@ -810,6 +820,7 @@ class Migrations(context: Context) { migration38, migration39, migration40, - migration41 + migration41, + migration42 ) } diff --git a/data-local/src/main/java/com/michaldrabik/data_local/database/model/EpisodeTranslation.kt b/data-local/src/main/java/com/michaldrabik/data_local/database/model/EpisodeTranslation.kt index fbd650e708..425832a3b0 100644 --- a/data-local/src/main/java/com/michaldrabik/data_local/database/model/EpisodeTranslation.kt +++ b/data-local/src/main/java/com/michaldrabik/data_local/database/model/EpisodeTranslation.kt @@ -27,6 +27,7 @@ data class EpisodeTranslation( @ColumnInfo(name = "id_trakt_show") val idTraktShow: Long, @ColumnInfo(name = "title") val title: String, @ColumnInfo(name = "language") val language: String, + @ColumnInfo(name = "country") val country: String, @ColumnInfo(name = "overview") val overview: String, @ColumnInfo(name = "created_at") val createdAt: Long, @ColumnInfo(name = "updated_at") val updatedAt: Long @@ -38,6 +39,7 @@ data class EpisodeTranslation( traktShowId: Long, title: String, language: String, + country: String, overview: String, createdAt: Long ) = @@ -46,6 +48,7 @@ data class EpisodeTranslation( idTraktShow = traktShowId, title = title, language = language, + country = country, overview = overview, createdAt = createdAt, updatedAt = createdAt diff --git a/data-local/src/main/java/com/michaldrabik/data_local/database/model/MovieTranslation.kt b/data-local/src/main/java/com/michaldrabik/data_local/database/model/MovieTranslation.kt index ee0302f874..59e4eb603f 100644 --- a/data-local/src/main/java/com/michaldrabik/data_local/database/model/MovieTranslation.kt +++ b/data-local/src/main/java/com/michaldrabik/data_local/database/model/MovieTranslation.kt @@ -23,6 +23,7 @@ data class MovieTranslation( @ColumnInfo(name = "id_trakt") val idTrakt: Long, @ColumnInfo(name = "title") val title: String, @ColumnInfo(name = "language") val language: String, + @ColumnInfo(name = "country") val country: String, @ColumnInfo(name = "overview") val overview: String, @ColumnInfo(name = "created_at") val createdAt: Long, @ColumnInfo(name = "updated_at") val updatedAt: Long @@ -33,6 +34,7 @@ data class MovieTranslation( traktId: Long, title: String, language: String, + country: String, overview: String, createdAt: Long ) = @@ -40,6 +42,7 @@ data class MovieTranslation( idTrakt = traktId, title = title, language = language, + country = country, overview = overview, createdAt = createdAt, updatedAt = createdAt diff --git a/data-local/src/main/java/com/michaldrabik/data_local/database/model/ShowTranslation.kt b/data-local/src/main/java/com/michaldrabik/data_local/database/model/ShowTranslation.kt index aff6a3984e..9a8f5a6874 100644 --- a/data-local/src/main/java/com/michaldrabik/data_local/database/model/ShowTranslation.kt +++ b/data-local/src/main/java/com/michaldrabik/data_local/database/model/ShowTranslation.kt @@ -23,6 +23,7 @@ data class ShowTranslation( @ColumnInfo(name = "id_trakt") val idTrakt: Long, @ColumnInfo(name = "title") val title: String, @ColumnInfo(name = "language") val language: String, + @ColumnInfo(name = "country") val country: String, @ColumnInfo(name = "overview") val overview: String, @ColumnInfo(name = "created_at") val createdAt: Long, @ColumnInfo(name = "updated_at") val updatedAt: Long @@ -33,6 +34,7 @@ data class ShowTranslation( traktId: Long, title: String, language: String, + country: String, overview: String, createdAt: Long ) = @@ -40,6 +42,7 @@ data class ShowTranslation( idTrakt = traktId, title = title, language = language, + country = country, overview = overview, createdAt = createdAt, updatedAt = createdAt diff --git a/data-local/src/main/java/com/michaldrabik/data_local/sources/EpisodeTranslationsLocalDataSource.kt b/data-local/src/main/java/com/michaldrabik/data_local/sources/EpisodeTranslationsLocalDataSource.kt index 55e5bcd2c2..fc44d83c91 100644 --- a/data-local/src/main/java/com/michaldrabik/data_local/sources/EpisodeTranslationsLocalDataSource.kt +++ b/data-local/src/main/java/com/michaldrabik/data_local/sources/EpisodeTranslationsLocalDataSource.kt @@ -4,11 +4,13 @@ import com.michaldrabik.data_local.database.model.EpisodeTranslation interface EpisodeTranslationsLocalDataSource { - suspend fun getById(traktEpisodeId: Long, traktShowId: Long, language: String): EpisodeTranslation? + suspend fun getById(traktEpisodeId: Long, traktShowId: Long, language: String, country: String): EpisodeTranslation? - suspend fun getByIds(traktEpisodeIds: List, traktShowId: Long, language: String): List + suspend fun getByIds(traktEpisodeIds: List, traktShowId: Long, language: String, country: String): List suspend fun insertSingle(translation: EpisodeTranslation) suspend fun deleteByLanguage(languages: List) + + suspend fun deleteByCountry(countries: List) } diff --git a/data-local/src/main/java/com/michaldrabik/data_local/sources/MovieTranslationsLocalDataSource.kt b/data-local/src/main/java/com/michaldrabik/data_local/sources/MovieTranslationsLocalDataSource.kt index fbdf636cfb..ea59648671 100644 --- a/data-local/src/main/java/com/michaldrabik/data_local/sources/MovieTranslationsLocalDataSource.kt +++ b/data-local/src/main/java/com/michaldrabik/data_local/sources/MovieTranslationsLocalDataSource.kt @@ -4,11 +4,13 @@ import com.michaldrabik.data_local.database.model.MovieTranslation interface MovieTranslationsLocalDataSource { - suspend fun getById(traktId: Long, language: String): MovieTranslation? + suspend fun getById(traktId: Long, language: String, country: String): MovieTranslation? - suspend fun getAll(language: String): List + suspend fun getAll(language: String, country: String): List suspend fun insertSingle(translation: MovieTranslation) suspend fun deleteByLanguage(languages: List) + + suspend fun deleteByCountry(countries: List) } diff --git a/data-local/src/main/java/com/michaldrabik/data_local/sources/ShowTranslationsLocalDataSource.kt b/data-local/src/main/java/com/michaldrabik/data_local/sources/ShowTranslationsLocalDataSource.kt index f16ccf4ffc..b3f902e10b 100644 --- a/data-local/src/main/java/com/michaldrabik/data_local/sources/ShowTranslationsLocalDataSource.kt +++ b/data-local/src/main/java/com/michaldrabik/data_local/sources/ShowTranslationsLocalDataSource.kt @@ -4,11 +4,13 @@ import com.michaldrabik.data_local.database.model.ShowTranslation interface ShowTranslationsLocalDataSource { - suspend fun getById(traktId: Long, language: String): ShowTranslation? + suspend fun getById(traktId: Long, language: String, country: String): ShowTranslation? - suspend fun getAll(language: String): List + suspend fun getAll(language: String, country: String): List suspend fun insertSingle(translation: ShowTranslation) suspend fun deleteByLanguage(languages: List) + + suspend fun deleteByCountry(countries: List) } diff --git a/repository/src/main/java/com/michaldrabik/repository/PeopleRepository.kt b/repository/src/main/java/com/michaldrabik/repository/PeopleRepository.kt index a51ce878f6..366532f1c0 100644 --- a/repository/src/main/java/com/michaldrabik/repository/PeopleRepository.kt +++ b/repository/src/main/java/com/michaldrabik/repository/PeopleRepository.kt @@ -44,7 +44,7 @@ class PeopleRepository @Inject constructor( return mappers.person.fromDatabase(local, person.characters) } - val language = settingsRepository.language + val language = settingsRepository.locale.language.code val remotePerson = remoteSource.tmdb.fetchPersonDetails(person.ids.tmdb.id) var bioTranslation: String? = null if (language != Config.DEFAULT_LANGUAGE) { diff --git a/repository/src/main/java/com/michaldrabik/repository/TranslationsRepository.kt b/repository/src/main/java/com/michaldrabik/repository/TranslationsRepository.kt index b7b491598e..5af46dfb95 100644 --- a/repository/src/main/java/com/michaldrabik/repository/TranslationsRepository.kt +++ b/repository/src/main/java/com/michaldrabik/repository/TranslationsRepository.kt @@ -1,7 +1,6 @@ package com.michaldrabik.repository import android.content.SharedPreferences -import com.michaldrabik.common.Config.DEFAULT_LANGUAGE import com.michaldrabik.common.ConfigVariant import com.michaldrabik.common.extensions.nowUtcMillis import com.michaldrabik.data_local.LocalDataSource @@ -11,8 +10,9 @@ import com.michaldrabik.data_local.database.model.ShowTranslation import com.michaldrabik.data_local.database.model.TranslationsMoviesSyncLog import com.michaldrabik.data_local.database.model.TranslationsSyncLog import com.michaldrabik.data_remote.RemoteDataSource +import com.michaldrabik.data_remote.trakt.model.Translation as TraktTranslation import com.michaldrabik.repository.mappers.Mappers -import com.michaldrabik.repository.settings.SettingsRepository.Key.LANGUAGE +import com.michaldrabik.repository.settings.SettingsRepository.Key.LOCALE import com.michaldrabik.ui_model.Episode import com.michaldrabik.ui_model.IdTrakt import com.michaldrabik.ui_model.Movie @@ -20,10 +20,10 @@ import com.michaldrabik.ui_model.Season import com.michaldrabik.ui_model.SeasonTranslation import com.michaldrabik.ui_model.Show import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import javax.inject.Inject import javax.inject.Named import javax.inject.Singleton -import com.michaldrabik.data_remote.trakt.model.Translation as TranslationRemote @Singleton class TranslationsRepository @Inject constructor( @@ -33,17 +33,17 @@ class TranslationsRepository @Inject constructor( private val mappers: Mappers, ) { - fun getLanguage() = miscPreferences.getString(LANGUAGE, DEFAULT_LANGUAGE) ?: DEFAULT_LANGUAGE + fun getLocale() = miscPreferences.getString(LOCALE, null)?.let { AppLocale.fromCode(it) } ?: AppLocale.default() - suspend fun loadAllShowsLocal(language: String = DEFAULT_LANGUAGE): Map { - val local = localSource.showTranslations.getAll(language) + suspend fun loadAllShowsLocal(locale: AppLocale = AppLocale.default()): Map { + val local = localSource.showTranslations.getAll(locale.language.code, locale.country.code) return local.associate { Pair(it.idTrakt, mappers.translation.fromDatabase(it)) } } - suspend fun loadAllMoviesLocal(language: String = DEFAULT_LANGUAGE): Map { - val local = localSource.movieTranslations.getAll(language) + suspend fun loadAllMoviesLocal(locale: AppLocale = AppLocale.default()): Map { + val local = localSource.movieTranslations.getAll(locale.language.code, locale.country.code) return local.associate { Pair(it.idTrakt, mappers.translation.fromDatabase(it)) } @@ -51,10 +51,13 @@ class TranslationsRepository @Inject constructor( suspend fun loadTranslation( show: Show, - language: String = DEFAULT_LANGUAGE, + locale: AppLocale = AppLocale.default(), onlyLocal: Boolean = false, ): Translation? { - val local = localSource.showTranslations.getById(show.traktId, language) + val language = locale.language.code + val country = locale.country.code + + val local = localSource.showTranslations.getById(show.traktId, language, country) local?.let { return mappers.translation.fromDatabase(it) } @@ -66,9 +69,8 @@ class TranslationsRepository @Inject constructor( } val remoteTranslation = try { - remoteSource.trakt.fetchShowTranslations(show.traktId, language) - .firstOrNull { chineseLanguagePredicate(it) && frenchLanguagePredicate(it) } - } catch (error: Throwable) { + findTranslation(remoteSource.trakt.fetchShowTranslations(show.traktId, language), language, country) + } catch (_: Throwable) { null } @@ -77,6 +79,7 @@ class TranslationsRepository @Inject constructor( show.traktId, translation.title, language, + country, translation.overview, nowUtcMillis() ) @@ -91,10 +94,13 @@ class TranslationsRepository @Inject constructor( suspend fun loadTranslation( movie: Movie, - language: String = DEFAULT_LANGUAGE, + locale: AppLocale = AppLocale.default(), onlyLocal: Boolean = false, ): Translation? { - val local = localSource.movieTranslations.getById(movie.traktId, language) + val language = locale.language.code + val country = locale.country.code + + val local = localSource.movieTranslations.getById(movie.traktId, language, country) local?.let { return mappers.translation.fromDatabase(it) } @@ -106,8 +112,7 @@ class TranslationsRepository @Inject constructor( } val remoteTranslation = try { - remoteSource.trakt.fetchMovieTranslations(movie.traktId, language) - .firstOrNull { chineseLanguagePredicate(it) && frenchLanguagePredicate(it) } + findTranslation(remoteSource.trakt.fetchMovieTranslations(movie.traktId, language), language, country) } catch (error: Throwable) { null } @@ -117,6 +122,7 @@ class TranslationsRepository @Inject constructor( movie.traktId, translation.title, language, + country, translation.overview, nowUtcMillis() ) @@ -132,11 +138,14 @@ class TranslationsRepository @Inject constructor( suspend fun loadTranslation( episode: Episode, showId: IdTrakt, - language: String = DEFAULT_LANGUAGE, + locale: AppLocale = AppLocale.default(), onlyLocal: Boolean = false, ): Translation? { + val language = locale.language.code + val country = locale.country.code + val nowMillis = nowUtcMillis() - val local = localSource.episodesTranslations.getById(episode.ids.trakt.id, showId.id, language) + val local = localSource.episodesTranslations.getById(episode.ids.trakt.id, showId.id, language, country) local?.let { val isCacheValid = nowMillis - it.updatedAt < ConfigVariant.TRANSLATION_SYNC_EPISODE_COOLDOWN if (it.title.isNotBlank() && it.overview.isNotBlank()) { @@ -160,15 +169,15 @@ class TranslationsRepository @Inject constructor( title = item.title, overview = item.overview, language = language, + country = country, createdAt = nowMillis ) localSource.episodesTranslations.insertSingle(dbItem) } - remoteTranslations - .find { it.ids.trakt == episode.ids.trakt } + findTranslation(episode.ids.trakt.id, remoteTranslations, language, country) ?.let { - return Translation(it.title, it.overview, it.language) + return Translation(it.title, it.overview, it.language, it.country) } return null @@ -177,16 +186,19 @@ class TranslationsRepository @Inject constructor( suspend fun loadTranslations( season: Season, showId: IdTrakt, - language: String = DEFAULT_LANGUAGE + locale: AppLocale = AppLocale.default(), ): List { + val language = locale.language.code + val country = locale.country.code + val episodes = season.episodes.toList() val episodesIds = season.episodes.map { it.ids.trakt.id } - val local = localSource.episodesTranslations.getByIds(episodesIds, showId.id, language) + val local = localSource.episodesTranslations.getByIds(episodesIds, showId.id, language, country) val hasAllTranslated = local.isNotEmpty() && local.all { it.title.isNotBlank() && it.overview.isNotBlank() } val isCacheValid = local.isNotEmpty() && nowUtcMillis() - local.first().updatedAt < ConfigVariant.TRANSLATION_SYNC_EPISODE_COOLDOWN - if (hasAllTranslated || (!hasAllTranslated && isCacheValid)) { + if (hasAllTranslated || isCacheValid) { return episodes.map { episode -> val translation = local.find { it.idTrakt == episode.ids.trakt.id } SeasonTranslation( @@ -196,6 +208,7 @@ class TranslationsRepository @Inject constructor( seasonNumber = season.number, episodeNumber = episode.number, language = language, + country = country, isLocal = true ) } @@ -211,6 +224,7 @@ class TranslationsRepository @Inject constructor( showId.id, item.title, language, + country, item.overview, nowUtcMillis() ) @@ -218,7 +232,7 @@ class TranslationsRepository @Inject constructor( } return episodes.map { episode -> - val translation = remoteTranslation.find { it.ids.trakt.id == episode.ids.trakt.id } + val translation = findTranslation(episode.ids.trakt.id, remoteTranslation, language, country) SeasonTranslation( ids = episode.ids.copy(), title = translation?.title ?: "", @@ -226,22 +240,28 @@ class TranslationsRepository @Inject constructor( seasonNumber = season.number, episodeNumber = episode.number, language = language, + country = country, isLocal = true ) } } - private fun chineseLanguagePredicate(translation: TranslationRemote) = - if (translation.language?.lowercase() != "zh") { - true - } else { - translation.country?.equals("cn", ignoreCase = true) == true + private fun findTranslation(translations: List, language: String, country: String): TraktTranslation? { + var fallback: TraktTranslation? = null + for (t in translations) { + if (t.country.equals(country, true)) return t + if (fallback == null && t.language.equals(language, true)) fallback = t } + return fallback + } - private fun frenchLanguagePredicate(translation: TranslationRemote) = - if (translation.language?.lowercase() != "fr") { - true - } else { - translation.country?.equals("fr", ignoreCase = true) == true + private fun findTranslation(episodeId: Long, translations: List, language: String, country: String): SeasonTranslation? { + var fallback: SeasonTranslation? = null + for (t in translations) { + if (t.ids.trakt.id != episodeId) continue + if (t.country.equals(country, true)) return t + if (fallback == null && t.language.equals(language, true)) fallback = t } + return fallback + } } diff --git a/repository/src/main/java/com/michaldrabik/repository/images/MovieImagesProvider.kt b/repository/src/main/java/com/michaldrabik/repository/images/MovieImagesProvider.kt index 33559549b7..76df3e9e2f 100644 --- a/repository/src/main/java/com/michaldrabik/repository/images/MovieImagesProvider.kt +++ b/repository/src/main/java/com/michaldrabik/repository/images/MovieImagesProvider.kt @@ -121,7 +121,7 @@ class MovieImagesProvider @Inject constructor( } private fun findBestImage(images: List, type: ImageType): TmdbImage? { - val language = translationsRepository.getLanguage() + val language = translationsRepository.getLocale().language.code val comparator = when (type) { POSTER -> compareBy { it.isLanguage(language) } .thenBy { it.isEnglish() } diff --git a/repository/src/main/java/com/michaldrabik/repository/images/ShowImagesProvider.kt b/repository/src/main/java/com/michaldrabik/repository/images/ShowImagesProvider.kt index f76a6b3b3c..8485bff37c 100644 --- a/repository/src/main/java/com/michaldrabik/repository/images/ShowImagesProvider.kt +++ b/repository/src/main/java/com/michaldrabik/repository/images/ShowImagesProvider.kt @@ -173,7 +173,7 @@ class ShowImagesProvider @Inject constructor( } private fun findBestImage(images: List, type: ImageType): TmdbImage? { - val language = translationsRepository.getLanguage() + val language = translationsRepository.getLocale().language.code val comparator = when (type) { POSTER -> compareBy { it.isLanguage(language) } .thenBy { it.isEnglish() } diff --git a/repository/src/main/java/com/michaldrabik/repository/mappers/TranslationMapper.kt b/repository/src/main/java/com/michaldrabik/repository/mappers/TranslationMapper.kt index 8aa0b7af8c..243cada587 100644 --- a/repository/src/main/java/com/michaldrabik/repository/mappers/TranslationMapper.kt +++ b/repository/src/main/java/com/michaldrabik/repository/mappers/TranslationMapper.kt @@ -17,7 +17,8 @@ class TranslationMapper @Inject constructor( Translation( title = value?.title ?: "", overview = value?.overview ?: "", - language = value?.language ?: "" + language = value?.language ?: "", + country = value?.country ?: "", ) fun fromNetwork(value: SeasonTranslationNetwork?) = @@ -27,27 +28,31 @@ class TranslationMapper @Inject constructor( episodeNumber = value?.number ?: -1, title = value?.translations?.firstOrNull()?.title ?: "", overview = value?.translations?.firstOrNull()?.overview ?: "", - language = value?.translations?.firstOrNull()?.language ?: "" + language = value?.translations?.firstOrNull()?.language ?: "", + country = value?.translations?.firstOrNull()?.country ?: "" ) fun fromDatabase(value: ShowTranslation?) = Translation( title = value?.title ?: "", overview = value?.overview ?: "", - language = value?.language ?: "" + language = value?.language ?: "", + country = value?.country ?: "" ) fun fromDatabase(value: MovieTranslation?) = Translation( title = value?.title ?: "", overview = value?.overview ?: "", - language = value?.language ?: "" + language = value?.language ?: "", + country = value?.country ?: "" ) fun fromDatabase(value: EpisodeTranslation?) = Translation( title = value?.title ?: "", overview = value?.overview ?: "", - language = value?.language ?: "" + language = value?.language ?: "", + country = value?.country ?: "" ) } diff --git a/repository/src/main/java/com/michaldrabik/repository/settings/SettingsRepository.kt b/repository/src/main/java/com/michaldrabik/repository/settings/SettingsRepository.kt index e03c10e8e4..f526d0f304 100644 --- a/repository/src/main/java/com/michaldrabik/repository/settings/SettingsRepository.kt +++ b/repository/src/main/java/com/michaldrabik/repository/settings/SettingsRepository.kt @@ -2,9 +2,7 @@ package com.michaldrabik.repository.settings import android.content.SharedPreferences import androidx.core.content.edit -import com.michaldrabik.common.Config.DEFAULT_COUNTRY import com.michaldrabik.common.Config.DEFAULT_DATE_FORMAT -import com.michaldrabik.common.Config.DEFAULT_LANGUAGE import com.michaldrabik.common.Mode import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.data_local.LocalDataSource @@ -20,6 +18,7 @@ import com.michaldrabik.ui_model.ProgressNextEpisodeType import com.michaldrabik.ui_model.ProgressNextEpisodeType.LAST_WATCHED import com.michaldrabik.ui_model.ProgressType import com.michaldrabik.ui_model.Settings +import com.michaldrabik.ui_model.locale.AppLocale import kotlinx.coroutines.withContext import java.util.UUID import javax.inject.Inject @@ -42,8 +41,7 @@ class SettingsRepository @Inject constructor( ) { companion object Key { - const val LANGUAGE = "KEY_LANGUAGE" - private const val COUNTRY = "KEY_COUNTRY" + const val LOCALE = "KEY_LOCALE" private const val DATE_FORMAT = "KEY_DATE_FORMAT" private const val MODE = "KEY_MOVIES_MODE" private const val MOVIES_ENABLED = "KEY_MOVIES_ENABLED" @@ -85,8 +83,6 @@ class SettingsRepository @Inject constructor( var streamingsEnabled by BooleanPreference(preferences, STREAMINGS_ENABLED, true) var isMoviesEnabled by BooleanPreference(preferences, MOVIES_ENABLED, true) var isTwitterAdEnabled by BooleanPreference(preferences, TWITTER_AD_ENABLED, true) - var language by StringPreference(preferences, LANGUAGE, DEFAULT_LANGUAGE) - var country by StringPreference(preferences, COUNTRY, DEFAULT_COUNTRY) var dateFormat by StringPreference(preferences, DATE_FORMAT, DEFAULT_DATE_FORMAT) var progressUpcomingDays by LongPreference(preferences, PROGRESS_UPCOMING_DAYS, 90) @@ -120,6 +116,12 @@ class SettingsRepository @Inject constructor( else -> id } + var locale: AppLocale + get() = preferences.getString(LOCALE, null)?.let { AppLocale.fromCode(it) } ?: AppLocale.default() + set(value) = preferences.edit(true) { + putString(LOCALE, value.code()) + } + suspend fun clearLanguageLogs() { with(localSource) { transactions.withTransaction { @@ -129,7 +131,7 @@ class SettingsRepository @Inject constructor( } } - suspend fun clearUnusedTranslations(input: List) { + suspend fun clearUnusedTranslationsByLanguage(input: List) { with(localSource) { transactions.withTransaction { showTranslations.deleteByLanguage(input) @@ -141,4 +143,15 @@ class SettingsRepository @Inject constructor( } } } + + suspend fun clearUnusedTranslationsByCountry(input: List) { + with(localSource) { + transactions.withTransaction { + showTranslations.deleteByCountry(input) + movieTranslations.deleteByCountry(input) + episodesTranslations.deleteByCountry(input) + people.deleteTranslations() + } + } + } } diff --git a/ui-base/src/main/java/com/michaldrabik/ui_base/common/sheets/context_menu/movie/cases/MovieContextMenuLoadItemCase.kt b/ui-base/src/main/java/com/michaldrabik/ui_base/common/sheets/context_menu/movie/cases/MovieContextMenuLoadItemCase.kt index 4ef3264912..8d1f40ab60 100644 --- a/ui-base/src/main/java/com/michaldrabik/ui_base/common/sheets/context_menu/movie/cases/MovieContextMenuLoadItemCase.kt +++ b/ui-base/src/main/java/com/michaldrabik/ui_base/common/sheets/context_menu/movie/cases/MovieContextMenuLoadItemCase.kt @@ -31,11 +31,11 @@ class MovieContextMenuLoadItemCase @Inject constructor( suspend fun loadItem(traktId: IdTrakt) = withContext(dispatchers.IO) { val movie = moviesRepository.movieDetails.load(traktId) val dateFormat = dateFormatProvider.loadShortDayFormat() - val language = translationsRepository.getLanguage() + val locale = translationsRepository.getLocale() val spoilers = settingsSpoilersRepository.getAll() val imageAsync = async { imagesProvider.loadRemoteImage(movie, ImageType.POSTER) } - val translationAsync = async { translationsRepository.loadTranslation(movie, language = language, onlyLocal = true) } + val translationAsync = async { translationsRepository.loadTranslation(movie, locale = locale, onlyLocal = true) } val ratingAsync = async { ratingsRepository.movies.loadRatings(listOf(movie)) } val isMyMovieAsync = async { moviesRepository.myMovies.exists(traktId) } diff --git a/ui-base/src/main/java/com/michaldrabik/ui_base/common/sheets/context_menu/show/cases/ShowContextMenuLoadItemCase.kt b/ui-base/src/main/java/com/michaldrabik/ui_base/common/sheets/context_menu/show/cases/ShowContextMenuLoadItemCase.kt index 0571343e66..2b0805fc2c 100644 --- a/ui-base/src/main/java/com/michaldrabik/ui_base/common/sheets/context_menu/show/cases/ShowContextMenuLoadItemCase.kt +++ b/ui-base/src/main/java/com/michaldrabik/ui_base/common/sheets/context_menu/show/cases/ShowContextMenuLoadItemCase.kt @@ -30,11 +30,11 @@ class ShowContextMenuLoadItemCase @Inject constructor( suspend fun loadItem(traktId: IdTrakt) = withContext(dispatchers.IO) { val show = showsRepository.detailsShow.load(traktId) - val language = translationsRepository.getLanguage() + val locale = translationsRepository.getLocale() val spoilers = settingsRepository.spoilers.getAll() val imageAsync = async { imagesProvider.loadRemoteImage(show, ImageType.POSTER) } - val translationAsync = async { translationsRepository.loadTranslation(show, language = language, onlyLocal = true) } + val translationAsync = async { translationsRepository.loadTranslation(show, locale = locale, onlyLocal = true) } val ratingAsync = async { ratingsRepository.shows.loadRatings(listOf(show)) } val isMyShowAsync = async { showsRepository.myShows.exists(traktId) } diff --git a/ui-base/src/main/java/com/michaldrabik/ui_base/common/sheets/links/LinksViewModel.kt b/ui-base/src/main/java/com/michaldrabik/ui_base/common/sheets/links/LinksViewModel.kt index 05fa9a041b..2ffd242fb1 100644 --- a/ui-base/src/main/java/com/michaldrabik/ui_base/common/sheets/links/LinksViewModel.kt +++ b/ui-base/src/main/java/com/michaldrabik/ui_base/common/sheets/links/LinksViewModel.kt @@ -2,7 +2,7 @@ package com.michaldrabik.ui_base.common.sheets.links import androidx.lifecycle.ViewModel import com.michaldrabik.repository.settings.SettingsRepository -import com.michaldrabik.ui_base.common.AppCountry +import com.michaldrabik.ui_model.locale.AppCountry import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @@ -11,5 +11,5 @@ class LinksViewModel @Inject constructor( private val settingsRepository: SettingsRepository ) : ViewModel() { - fun loadCountry() = AppCountry.fromCode(settingsRepository.country) + fun loadCountry() = AppCountry.fromCode(settingsRepository.locale.country.code) } diff --git a/ui-base/src/main/java/com/michaldrabik/ui_base/dates/DateFormatProvider.kt b/ui-base/src/main/java/com/michaldrabik/ui_base/dates/DateFormatProvider.kt index f9df22be25..9f24052788 100644 --- a/ui-base/src/main/java/com/michaldrabik/ui_base/dates/DateFormatProvider.kt +++ b/ui-base/src/main/java/com/michaldrabik/ui_base/dates/DateFormatProvider.kt @@ -87,7 +87,7 @@ class DateFormatProvider @Inject constructor( } private fun createDateFormat(pattern: String): DateTimeFormatter { - val language = settingsRepository.language + val language = settingsRepository.locale.language.code if (language == "zh") { return DateTimeFormatter.ofPattern(pattern.appendChineseDay()) } diff --git a/ui-base/src/main/java/com/michaldrabik/ui_base/notifications/AnnouncementManager.kt b/ui-base/src/main/java/com/michaldrabik/ui_base/notifications/AnnouncementManager.kt index 377040ffc1..6b7510b4ea 100644 --- a/ui-base/src/main/java/com/michaldrabik/ui_base/notifications/AnnouncementManager.kt +++ b/ui-base/src/main/java/com/michaldrabik/ui_base/notifications/AnnouncementManager.kt @@ -63,7 +63,7 @@ class AnnouncementManager @Inject constructor( return } - val language = translationsRepository.getLanguage() + val locale = translationsRepository.getLocale() val delay = settings.episodesNotificationsDelay val onHoldIds = onHoldItemsRepository.getAll().map { it.id } @@ -88,7 +88,7 @@ class AnnouncementManager @Inject constructor( episodeSeasonNumber = episode.seasonNumber, episodeDate = episode.firstAired!!, delay = delay, - language = language + locale = locale ) } else { Timber.d("Time with delay included has already passed.") @@ -101,7 +101,7 @@ class AnnouncementManager @Inject constructor( episodeSeasonNumber = episode.seasonNumber, episodeDate = episode.firstAired!!, delay = delay, - language = language + locale = locale ) } } @@ -126,7 +126,7 @@ class AnnouncementManager @Inject constructor( episodeSeasonNumber = 1, episodeDate = airDate, delay = delay, - language = language + locale = locale ) } else { Timber.d("Time with delay included has already passed.") @@ -138,7 +138,7 @@ class AnnouncementManager @Inject constructor( episodeSeasonNumber = 1, episodeDate = airDate, delay = delay, - language = language + locale = locale ) } } @@ -165,7 +165,7 @@ class AnnouncementManager @Inject constructor( return } - val language = translationsRepository.getLanguage() + val locale = translationsRepository.getLocale() movies .filter { Timber.d("Processing ${it.title} (${it.traktId})") @@ -175,7 +175,7 @@ class AnnouncementManager @Inject constructor( ZonedDateTime.now().hour < MOVIE_THRESHOLD_HOUR // We want movies notifications to come out the release day at 12:00 local time } .forEach { - movieAnnouncementScheduler.scheduleAnnouncement(context, it, language) + movieAnnouncementScheduler.scheduleAnnouncement(context, it, locale) } } } diff --git a/ui-base/src/main/java/com/michaldrabik/ui_base/notifications/schedulers/MovieAnnouncementScheduler.kt b/ui-base/src/main/java/com/michaldrabik/ui_base/notifications/schedulers/MovieAnnouncementScheduler.kt index caa60c77fb..e8eac23d9c 100644 --- a/ui-base/src/main/java/com/michaldrabik/ui_base/notifications/schedulers/MovieAnnouncementScheduler.kt +++ b/ui-base/src/main/java/com/michaldrabik/ui_base/notifications/schedulers/MovieAnnouncementScheduler.kt @@ -4,7 +4,6 @@ import android.content.Context import androidx.work.Data import androidx.work.OneTimeWorkRequestBuilder import androidx.work.WorkManager -import com.michaldrabik.common.Config import com.michaldrabik.common.extensions.dateFromMillis import com.michaldrabik.common.extensions.nowUtcDay import com.michaldrabik.common.extensions.nowUtcMillis @@ -19,6 +18,7 @@ import com.michaldrabik.ui_model.ImageStatus import com.michaldrabik.ui_model.ImageType import com.michaldrabik.ui_model.Movie import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import dagger.hilt.android.qualifiers.ApplicationContext import timber.log.Timber import java.time.ZonedDateTime @@ -43,11 +43,11 @@ class MovieAnnouncementScheduler @Inject constructor( suspend fun scheduleAnnouncement( context: Context, movie: Movie, - language: String, + locale: AppLocale ) { var translation: Translation? = null - if (language != Config.DEFAULT_LANGUAGE) { - translation = translationsRepository.loadTranslation(movie, language, onlyLocal = true) + if (locale != AppLocale.default()) { + translation = translationsRepository.loadTranslation(movie, locale, onlyLocal = true) } val data = Data.Builder().apply { diff --git a/ui-base/src/main/java/com/michaldrabik/ui_base/notifications/schedulers/ShowAnnouncementScheduler.kt b/ui-base/src/main/java/com/michaldrabik/ui_base/notifications/schedulers/ShowAnnouncementScheduler.kt index 0b11ceaf10..48a9dbf9ac 100644 --- a/ui-base/src/main/java/com/michaldrabik/ui_base/notifications/schedulers/ShowAnnouncementScheduler.kt +++ b/ui-base/src/main/java/com/michaldrabik/ui_base/notifications/schedulers/ShowAnnouncementScheduler.kt @@ -4,7 +4,6 @@ import android.content.Context import androidx.work.Data import androidx.work.OneTimeWorkRequestBuilder import androidx.work.WorkManager -import com.michaldrabik.common.Config import com.michaldrabik.common.extensions.dateFromMillis import com.michaldrabik.common.extensions.nowUtcMillis import com.michaldrabik.common.extensions.toMillis @@ -19,6 +18,7 @@ import com.michaldrabik.ui_model.ImageStatus import com.michaldrabik.ui_model.ImageType import com.michaldrabik.ui_model.NotificationDelay import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import dagger.hilt.android.qualifiers.ApplicationContext import timber.log.Timber import java.time.ZonedDateTime @@ -46,13 +46,13 @@ class ShowAnnouncementScheduler @Inject constructor( episodeSeasonNumber: Int, episodeDate: ZonedDateTime, delay: NotificationDelay, - language: String, + locale: AppLocale ) { val show = mappers.show.fromDatabase(showDb) var translation: Translation? = null - if (language != Config.DEFAULT_LANGUAGE) { - translation = translationsRepository.loadTranslation(show, language, onlyLocal = true) + if (locale != AppLocale.default()) { + translation = translationsRepository.loadTranslation(show, locale, onlyLocal = true) } val data = Data.Builder().apply { diff --git a/ui-discover-movies/src/main/java/com/michaldrabik/ui_discover_movies/cases/DiscoverMoviesCase.kt b/ui-discover-movies/src/main/java/com/michaldrabik/ui_discover_movies/cases/DiscoverMoviesCase.kt index c483694e42..de5f0e4821 100644 --- a/ui-discover-movies/src/main/java/com/michaldrabik/ui_discover_movies/cases/DiscoverMoviesCase.kt +++ b/ui-discover-movies/src/main/java/com/michaldrabik/ui_discover_movies/cases/DiscoverMoviesCase.kt @@ -1,6 +1,5 @@ package com.michaldrabik.ui_discover_movies.cases -import com.michaldrabik.common.Config import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.repository.images.MovieImagesProvider @@ -15,6 +14,7 @@ import com.michaldrabik.ui_model.DiscoverSortOrder.RATING import com.michaldrabik.ui_model.ImageType import com.michaldrabik.ui_model.ImageType.POSTER import com.michaldrabik.ui_model.Movie +import com.michaldrabik.ui_model.locale.AppLocale import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll @@ -40,7 +40,7 @@ internal class DiscoverMoviesCase @Inject constructor( val watchlistIds = async { moviesRepository.watchlistMovies.loadAllIds() } val hiddenIds = async { moviesRepository.hiddenMovies.loadAllIds() } val cachedMovies = async { moviesRepository.discoverMovies.loadAllCached() } - val language = translationsRepository.getLanguage() + val locale = translationsRepository.getLocale() prepareItems( cachedMovies.await(), @@ -48,7 +48,7 @@ internal class DiscoverMoviesCase @Inject constructor( watchlistIds.await(), hiddenIds.await(), filters, - language + locale ) } @@ -64,10 +64,10 @@ internal class DiscoverMoviesCase @Inject constructor( val collectionSize = myIds.size + watchlistIds.size + hiddenIds.size val remoteMovies = moviesRepository.discoverMovies.loadAllRemote(showAnticipated, showCollection, collectionSize, genres) - val language = translationsRepository.getLanguage() + val locale = translationsRepository.getLocale() moviesRepository.discoverMovies.cacheDiscoverMovies(remoteMovies) - prepareItems(remoteMovies, myIds, watchlistIds, hiddenIds, filters, language) + prepareItems(remoteMovies, myIds, watchlistIds, hiddenIds, filters, locale) } private suspend fun prepareItems( @@ -76,7 +76,7 @@ internal class DiscoverMoviesCase @Inject constructor( watchlistMoviesIds: List, hiddenMoviesIds: List, filters: DiscoverFilters?, - language: String + locale: AppLocale ) = coroutineScope { val collectionIds = myMoviesIds + watchlistMoviesIds movies @@ -90,7 +90,7 @@ internal class DiscoverMoviesCase @Inject constructor( async { val itemType = imageTypeProvider.getImageType(index) val image = imagesProvider.findCachedImage(movie, itemType) - val translation = loadTranslation(language, itemType, movie) + val translation = loadTranslation(locale, itemType, movie) DiscoverMovieListItem( movie, image, @@ -104,9 +104,9 @@ internal class DiscoverMoviesCase @Inject constructor( .toList() } - private suspend fun loadTranslation(language: String, itemType: ImageType, movie: Movie) = - if (language == Config.DEFAULT_LANGUAGE || itemType == POSTER) null - else translationsRepository.loadTranslation(movie, language, true) + private suspend fun loadTranslation(locale: AppLocale, itemType: ImageType, movie: Movie) = + if (locale == AppLocale.default() || itemType == POSTER) null + else translationsRepository.loadTranslation(movie, locale, true) private fun List.sortedBy(order: DiscoverSortOrder) = when (order) { HOT -> this diff --git a/ui-discover/src/main/java/com/michaldrabik/ui_discover/cases/DiscoverShowsCase.kt b/ui-discover/src/main/java/com/michaldrabik/ui_discover/cases/DiscoverShowsCase.kt index fefb4440fb..f82fbd295e 100644 --- a/ui-discover/src/main/java/com/michaldrabik/ui_discover/cases/DiscoverShowsCase.kt +++ b/ui-discover/src/main/java/com/michaldrabik/ui_discover/cases/DiscoverShowsCase.kt @@ -1,6 +1,5 @@ package com.michaldrabik.ui_discover.cases -import com.michaldrabik.common.Config import com.michaldrabik.common.ConfigVariant import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.common.extensions.nowUtcMillis @@ -18,6 +17,7 @@ import com.michaldrabik.ui_model.DiscoverSortOrder.RATING import com.michaldrabik.ui_model.Image import com.michaldrabik.ui_model.ImageType import com.michaldrabik.ui_model.Show +import com.michaldrabik.ui_model.locale.AppLocale import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll @@ -94,7 +94,7 @@ internal class DiscoverShowsCase @Inject constructor( hiddenShowsIds: List, filters: DiscoverFilters?, ) = coroutineScope { - val language = translationsRepository.getLanguage() + val locale = translationsRepository.getLocale() val collectionIds = myShowsIds + watchlistShowsIds + hiddenShowsIds shows .filter { it.traktId !in hiddenShowsIds } @@ -107,7 +107,7 @@ internal class DiscoverShowsCase @Inject constructor( async { val itemType = imageTypeProvider.getImageType(index) val image = imagesProvider.findCachedImage(show, itemType) - val translation = loadTranslation(language, itemType, show) + val translation = loadTranslation(locale, itemType, show) DiscoverListItem( show = show, image = image, @@ -135,9 +135,9 @@ internal class DiscoverShowsCase @Inject constructor( } } - private suspend fun loadTranslation(language: String, itemType: ImageType, show: Show) = - if (language == Config.DEFAULT_LANGUAGE || itemType == ImageType.POSTER) null - else translationsRepository.loadTranslation(show, language, true) + private suspend fun loadTranslation(locale: AppLocale, itemType: ImageType, show: Show) = + if (locale == AppLocale.default() || itemType == ImageType.POSTER) null + else translationsRepository.loadTranslation(show, locale, true) private fun List.sortedBy(order: DiscoverSortOrder) = when (order) { HOT -> this diff --git a/ui-episodes/src/main/java/com/michaldrabik/ui_episodes/details/EpisodeDetailsViewModel.kt b/ui-episodes/src/main/java/com/michaldrabik/ui_episodes/details/EpisodeDetailsViewModel.kt index 06fcd69920..0558678b15 100644 --- a/ui-episodes/src/main/java/com/michaldrabik/ui_episodes/details/EpisodeDetailsViewModel.kt +++ b/ui-episodes/src/main/java/com/michaldrabik/ui_episodes/details/EpisodeDetailsViewModel.kt @@ -2,7 +2,6 @@ package com.michaldrabik.ui_episodes.details import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.michaldrabik.common.Config import com.michaldrabik.common.errors.ErrorHelper import com.michaldrabik.common.errors.ShowlyError.CoroutineCancellation import com.michaldrabik.common.errors.ShowlyError.ResourceConflictError @@ -31,6 +30,7 @@ import com.michaldrabik.ui_model.Image import com.michaldrabik.ui_model.RatingState import com.michaldrabik.ui_model.SpoilersSettings import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow @@ -107,11 +107,11 @@ class EpisodeDetailsViewModel @Inject constructor( fun loadTranslation(showTraktId: IdTrakt, episode: Episode) { viewModelScope.launch { try { - val language = translationsRepository.getLanguage() - if (language == Config.DEFAULT_LANGUAGE) { + val locale = translationsRepository.getLocale() + if (locale == AppLocale.default()) { return@launch } - val translation = translationsRepository.loadTranslation(episode, showTraktId, language) + val translation = translationsRepository.loadTranslation(episode, showTraktId, locale) translation?.let { translationState.value = it } diff --git a/ui-lists/src/main/java/com/michaldrabik/ui_lists/details/ListDetailsViewModel.kt b/ui-lists/src/main/java/com/michaldrabik/ui_lists/details/ListDetailsViewModel.kt index fe6e95f56a..de43b14bb8 100644 --- a/ui-lists/src/main/java/com/michaldrabik/ui_lists/details/ListDetailsViewModel.kt +++ b/ui-lists/src/main/java/com/michaldrabik/ui_lists/details/ListDetailsViewModel.kt @@ -28,6 +28,7 @@ import com.michaldrabik.ui_model.Image import com.michaldrabik.ui_model.SortOrder import com.michaldrabik.ui_model.SortType import com.michaldrabik.ui_model.Tip +import com.michaldrabik.ui_model.locale.AppLocale import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted @@ -94,7 +95,7 @@ class ListDetailsViewModel @Inject constructor( } fun loadMissingTranslation(item: ListDetailsItem) { - if (item.translation != null || translationsCase.getLanguage() == Config.DEFAULT_LANGUAGE) return + if (item.translation != null || translationsCase.getLocale() == AppLocale.default()) return viewModelScope.launch { try { val translation = translationsCase.loadTranslation(item, false) diff --git a/ui-lists/src/main/java/com/michaldrabik/ui_lists/details/cases/ListDetailsItemsCase.kt b/ui-lists/src/main/java/com/michaldrabik/ui_lists/details/cases/ListDetailsItemsCase.kt index dc51559af8..6162063af6 100644 --- a/ui-lists/src/main/java/com/michaldrabik/ui_lists/details/cases/ListDetailsItemsCase.kt +++ b/ui-lists/src/main/java/com/michaldrabik/ui_lists/details/cases/ListDetailsItemsCase.kt @@ -1,6 +1,5 @@ package com.michaldrabik.ui_lists.details.cases -import com.michaldrabik.common.Config import com.michaldrabik.common.Mode import com.michaldrabik.common.Mode.MOVIES import com.michaldrabik.common.Mode.SHOWS @@ -29,6 +28,7 @@ import com.michaldrabik.ui_model.SortType import com.michaldrabik.ui_model.SpoilersSettings import com.michaldrabik.ui_model.TraktRating import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll @@ -59,7 +59,7 @@ class ListDetailsItemsCase @Inject constructor( suspend fun loadItems(list: CustomList): Pair, Int> = withContext(dispatchers.IO) { val moviesEnabled = settingsRepository.isMoviesEnabled - val language = translationsRepository.getLanguage() + val locale = translationsRepository.getLocale() val listItems = listsRepository.loadItemsById(list.id) val spoilers = settingsRepository.spoilers.getAll() @@ -73,12 +73,12 @@ class ListDetailsItemsCase @Inject constructor( } val showsTranslationsAsync = async { - if (language == Config.DEFAULT_LANGUAGE) emptyMap() - else translationsRepository.loadAllShowsLocal(language) + if (locale == AppLocale.default()) emptyMap() + else translationsRepository.loadAllShowsLocal(locale) } val moviesTranslationsAsync = async { - if (language == Config.DEFAULT_LANGUAGE) emptyMap() - else translationsRepository.loadAllMoviesLocal(language) + if (locale == AppLocale.default()) emptyMap() + else translationsRepository.loadAllMoviesLocal(locale) } val showsRatingsAsync = async { diff --git a/ui-lists/src/main/java/com/michaldrabik/ui_lists/details/cases/ListDetailsTranslationsCase.kt b/ui-lists/src/main/java/com/michaldrabik/ui_lists/details/cases/ListDetailsTranslationsCase.kt index 5204e714c7..a65b17a043 100644 --- a/ui-lists/src/main/java/com/michaldrabik/ui_lists/details/cases/ListDetailsTranslationsCase.kt +++ b/ui-lists/src/main/java/com/michaldrabik/ui_lists/details/cases/ListDetailsTranslationsCase.kt @@ -1,10 +1,10 @@ package com.michaldrabik.ui_lists.details.cases -import com.michaldrabik.common.Config import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.ui_lists.details.recycler.ListDetailsItem import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.withContext import javax.inject.Inject @@ -15,25 +15,25 @@ class ListDetailsTranslationsCase @Inject constructor( private val translationsRepository: TranslationsRepository, ) { - fun getLanguage() = translationsRepository.getLanguage() + fun getLocale() = translationsRepository.getLocale() suspend fun loadTranslation(item: ListDetailsItem, onlyLocal: Boolean): Translation? = withContext(dispatchers.IO) { - val language = getLanguage() - if (language == Config.DEFAULT_LANGUAGE) { + val locale = getLocale() + if (locale == AppLocale.default()) { return@withContext Translation.EMPTY } when { item.isShow() -> translationsRepository.loadTranslation( show = item.requireShow(), - language = language, + locale = locale, onlyLocal = onlyLocal ) item.isMovie() -> translationsRepository.loadTranslation( movie = item.requireMovie(), - language = language, + locale = locale, onlyLocal = onlyLocal ) else -> throw IllegalStateException() diff --git a/ui-model/src/main/java/com/michaldrabik/ui_model/SeasonTranslation.kt b/ui-model/src/main/java/com/michaldrabik/ui_model/SeasonTranslation.kt index 8cd7f8f6ea..6b967b4c0b 100644 --- a/ui-model/src/main/java/com/michaldrabik/ui_model/SeasonTranslation.kt +++ b/ui-model/src/main/java/com/michaldrabik/ui_model/SeasonTranslation.kt @@ -7,5 +7,6 @@ data class SeasonTranslation( val episodeNumber: Int, val overview: String, val language: String, + val country: String, val isLocal: Boolean = false ) diff --git a/ui-model/src/main/java/com/michaldrabik/ui_model/Translation.kt b/ui-model/src/main/java/com/michaldrabik/ui_model/Translation.kt index c231d243f2..53df9711e9 100644 --- a/ui-model/src/main/java/com/michaldrabik/ui_model/Translation.kt +++ b/ui-model/src/main/java/com/michaldrabik/ui_model/Translation.kt @@ -3,11 +3,12 @@ package com.michaldrabik.ui_model data class Translation( val title: String, val overview: String, - val language: String + val language: String, + val country: String ) { companion object { - val EMPTY = Translation("", "", "") + val EMPTY = Translation("", "", "", "") } val hasTitle = title.isNotBlank() diff --git a/ui-base/src/main/java/com/michaldrabik/ui_base/common/AppCountry.kt b/ui-model/src/main/java/com/michaldrabik/ui_model/locale/AppCountry.kt similarity index 88% rename from ui-base/src/main/java/com/michaldrabik/ui_base/common/AppCountry.kt rename to ui-model/src/main/java/com/michaldrabik/ui_model/locale/AppCountry.kt index 052f43aaa8..8fb8890fd5 100644 --- a/ui-base/src/main/java/com/michaldrabik/ui_base/common/AppCountry.kt +++ b/ui-model/src/main/java/com/michaldrabik/ui_model/locale/AppCountry.kt @@ -1,4 +1,6 @@ -package com.michaldrabik.ui_base.common +package com.michaldrabik.ui_model.locale + +import com.michaldrabik.common.Config enum class AppCountry( val code: String, @@ -55,6 +57,7 @@ enum class AppCountry( VENEZUELA("ve", "Venezuela", "buscar"); companion object { - fun fromCode(code: String) = values().first { it.code == code } + fun default() = AppCountry.fromCode(Config.DEFAULT_COUNTRY) + fun fromCode(code: String) = entries.first { it.code.equals(code, ignoreCase = true)} } } diff --git a/ui-settings/src/main/java/com/michaldrabik/ui_settings/helpers/AppLanguage.kt b/ui-model/src/main/java/com/michaldrabik/ui_model/locale/AppLanguage.kt similarity index 78% rename from ui-settings/src/main/java/com/michaldrabik/ui_settings/helpers/AppLanguage.kt rename to ui-model/src/main/java/com/michaldrabik/ui_model/locale/AppLanguage.kt index 56d3b678e1..fc4af491a4 100644 --- a/ui-settings/src/main/java/com/michaldrabik/ui_settings/helpers/AppLanguage.kt +++ b/ui-model/src/main/java/com/michaldrabik/ui_model/locale/AppLanguage.kt @@ -1,7 +1,8 @@ -package com.michaldrabik.ui_settings.helpers +package com.michaldrabik.ui_model.locale import androidx.annotation.StringRes -import com.michaldrabik.ui_settings.R +import com.michaldrabik.common.Config +import com.michaldrabik.ui_model.R enum class AppLanguage( val code: String, @@ -24,6 +25,7 @@ enum class AppLanguage( CHINESE("zh", "Chinese Simplified", R.string.textLanguageChinese); companion object { - fun fromCode(code: String) = values().first { it.code == code } + fun default() = AppLanguage.fromCode(Config.DEFAULT_LANGUAGE) + fun fromCode(code: String) = entries.first { it.code.equals(code, ignoreCase = true)} } } diff --git a/ui-model/src/main/java/com/michaldrabik/ui_model/locale/AppLocale.kt b/ui-model/src/main/java/com/michaldrabik/ui_model/locale/AppLocale.kt new file mode 100644 index 0000000000..611d4e1df4 --- /dev/null +++ b/ui-model/src/main/java/com/michaldrabik/ui_model/locale/AppLocale.kt @@ -0,0 +1,21 @@ +package com.michaldrabik.ui_model.locale + +data class AppLocale( + val language: AppLanguage, + val country: AppCountry, +) { + + companion object { + const val DELIMITER = "_" + fun default() = AppLocale( + language = AppLanguage.default(), + country = AppCountry.default(), + ) + fun fromCode(code: String) = AppLocale( + language = AppLanguage.fromCode(code.substringBefore(DELIMITER)), + country = AppCountry.fromCode(code.substringAfter(DELIMITER)), + ) + } + + fun code() = "${language.code}${DELIMITER}${country.code}".lowercase() +} diff --git a/ui-model/src/main/res/values/strings.xml b/ui-model/src/main/res/values/strings.xml index 649e10870e..e54f1af50f 100644 --- a/ui-model/src/main/res/values/strings.xml +++ b/ui-model/src/main/res/values/strings.xml @@ -109,4 +109,19 @@ Widget Transparency News List View Types + + English + Polski + العربية + 中文简体 + Español + Italiano + Français + Dansk + Português brasileiro + Türkçe + Українська + Deutsch + Pусский + Suomi \ No newline at end of file diff --git a/ui-movie/src/main/java/com/michaldrabik/ui_movie/cases/MovieDetailsTranslationCase.kt b/ui-movie/src/main/java/com/michaldrabik/ui_movie/cases/MovieDetailsTranslationCase.kt index d9f166e9bd..54191902b7 100644 --- a/ui-movie/src/main/java/com/michaldrabik/ui_movie/cases/MovieDetailsTranslationCase.kt +++ b/ui-movie/src/main/java/com/michaldrabik/ui_movie/cases/MovieDetailsTranslationCase.kt @@ -1,10 +1,10 @@ package com.michaldrabik.ui_movie.cases -import com.michaldrabik.common.Config.DEFAULT_LANGUAGE import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.ui_model.Movie import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.withContext import javax.inject.Inject @@ -16,10 +16,10 @@ class MovieDetailsTranslationCase @Inject constructor( ) { suspend fun loadTranslation(movie: Movie): Translation? = withContext(dispatchers.IO) { - val language = translationsRepository.getLanguage() - if (language == DEFAULT_LANGUAGE) { + val locale = translationsRepository.getLocale() + if (locale == AppLocale.default()) { return@withContext null } - translationsRepository.loadTranslation(movie, language) + translationsRepository.loadTranslation(movie, locale) } } diff --git a/ui-movie/src/main/java/com/michaldrabik/ui_movie/helpers/MovieLink.kt b/ui-movie/src/main/java/com/michaldrabik/ui_movie/helpers/MovieLink.kt index 8ad4e2599d..89dc7b78d7 100644 --- a/ui-movie/src/main/java/com/michaldrabik/ui_movie/helpers/MovieLink.kt +++ b/ui-movie/src/main/java/com/michaldrabik/ui_movie/helpers/MovieLink.kt @@ -1,7 +1,7 @@ package com.michaldrabik.ui_movie.helpers import android.net.Uri -import com.michaldrabik.ui_base.common.AppCountry +import com.michaldrabik.ui_model.locale.AppCountry enum class MovieLink { IMDB, @@ -12,8 +12,8 @@ enum class MovieLink { JUST_WATCH; fun getUri( - id: String, - country: AppCountry, + id: String, + country: AppCountry, ) = when (this) { IMDB -> "https://www.imdb.com/title/$id" TRAKT -> "https://trakt.tv/search/trakt/$id?id_type=movie" diff --git a/ui-movie/src/main/java/com/michaldrabik/ui_movie/sections/collections/details/MovieDetailsCollectionViewModel.kt b/ui-movie/src/main/java/com/michaldrabik/ui_movie/sections/collections/details/MovieDetailsCollectionViewModel.kt index 452f74c319..8bf60e6190 100644 --- a/ui-movie/src/main/java/com/michaldrabik/ui_movie/sections/collections/details/MovieDetailsCollectionViewModel.kt +++ b/ui-movie/src/main/java/com/michaldrabik/ui_movie/sections/collections/details/MovieDetailsCollectionViewModel.kt @@ -2,7 +2,6 @@ package com.michaldrabik.ui_movie.sections.collections.details import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.michaldrabik.common.Config import com.michaldrabik.repository.settings.SettingsRepository import com.michaldrabik.ui_base.utilities.extensions.SUBSCRIBE_STOP_TIMEOUT import com.michaldrabik.ui_base.utilities.extensions.findReplace @@ -10,6 +9,7 @@ import com.michaldrabik.ui_base.utilities.extensions.rethrowCancellation import com.michaldrabik.ui_base.viewmodel.ChannelsDelegate import com.michaldrabik.ui_base.viewmodel.DefaultChannelsDelegate import com.michaldrabik.ui_model.IdTrakt +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_movie.sections.collections.details.cases.MovieDetailsCollectionDetailsCase import com.michaldrabik.ui_movie.sections.collections.details.cases.MovieDetailsCollectionImagesCase import com.michaldrabik.ui_movie.sections.collections.details.cases.MovieDetailsCollectionMoviesCase @@ -65,7 +65,7 @@ class MovieDetailsCollectionViewModel @Inject constructor( try { val moviesItems = collectionMoviesCase.loadCollectionMovies( collectionId = collectionId, - language = settingsRepository.language + locale = settingsRepository.locale ) itemsState.update { it?.toMutableList()?.apply { @@ -98,14 +98,14 @@ class MovieDetailsCollectionViewModel @Inject constructor( } fun loadMissingTranslation(item: MovieDetailsCollectionItem) { - val language = settingsRepository.language - if (item.id in translationsJobs.keys || language == Config.DEFAULT_LANGUAGE) { + val locale = settingsRepository.locale + if (item.id in translationsJobs.keys || locale == AppLocale.default()) { return } translationsJobs[item.id] = true viewModelScope.launch { (item as? MovieItem)?.let { - val updatedItem = collectionMoviesTranslationsCase.loadMissingTranslation(it, language) + val updatedItem = collectionMoviesTranslationsCase.loadMissingTranslation(it, locale) updateItem(updatedItem.copy(isLoading = false)) } translationsJobs.remove(item.id) diff --git a/ui-movie/src/main/java/com/michaldrabik/ui_movie/sections/collections/details/cases/MovieDetailsCollectionMoviesCase.kt b/ui-movie/src/main/java/com/michaldrabik/ui_movie/sections/collections/details/cases/MovieDetailsCollectionMoviesCase.kt index 5b8f66c00b..acdce8146e 100644 --- a/ui-movie/src/main/java/com/michaldrabik/ui_movie/sections/collections/details/cases/MovieDetailsCollectionMoviesCase.kt +++ b/ui-movie/src/main/java/com/michaldrabik/ui_movie/sections/collections/details/cases/MovieDetailsCollectionMoviesCase.kt @@ -1,6 +1,5 @@ package com.michaldrabik.ui_movie.sections.collections.details.cases -import com.michaldrabik.common.Config.DEFAULT_LANGUAGE import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.repository.images.MovieImagesProvider @@ -12,6 +11,7 @@ import com.michaldrabik.ui_model.IdTrakt import com.michaldrabik.ui_model.ImageType.POSTER import com.michaldrabik.ui_model.Movie import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_movie.sections.collections.details.recycler.MovieDetailsCollectionItem import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.async @@ -32,7 +32,7 @@ class MovieDetailsCollectionMoviesCase @Inject constructor( suspend fun loadCollectionMovies( collectionId: IdTrakt, - language: String + locale: AppLocale ): List = withContext(dispatchers.IO) { val movies = collectionsRepository.loadCollectionItems(collectionId) movies.mapIndexed { index, movie -> @@ -43,7 +43,7 @@ class MovieDetailsCollectionMoviesCase @Inject constructor( image = imagesProvider.findCachedImage(movie, POSTER), isMyMovie = myMoviesRepository.exists(movie.ids.trakt), isWatchlist = watchlistMoviesRepository.exists(movie.ids.trakt), - translation = loadTranslation(movie, language), + translation = loadTranslation(movie, locale), spoilers = settingsSpoilersRepository.getAll(), isLoading = false ) @@ -51,11 +51,11 @@ class MovieDetailsCollectionMoviesCase @Inject constructor( }.awaitAll() } - private suspend fun loadTranslation(movie: Movie, language: String): Translation? { - if (language == DEFAULT_LANGUAGE) return null + private suspend fun loadTranslation(movie: Movie, locale: AppLocale): Translation? { + if (locale == AppLocale.default()) return null return translationsRepository.loadTranslation( movie = movie, - language = language, + locale = locale, onlyLocal = true ) } diff --git a/ui-movie/src/main/java/com/michaldrabik/ui_movie/sections/collections/details/cases/MovieDetailsCollectionTranslationsCase.kt b/ui-movie/src/main/java/com/michaldrabik/ui_movie/sections/collections/details/cases/MovieDetailsCollectionTranslationsCase.kt index a8bcb9b64c..ed267d240d 100644 --- a/ui-movie/src/main/java/com/michaldrabik/ui_movie/sections/collections/details/cases/MovieDetailsCollectionTranslationsCase.kt +++ b/ui-movie/src/main/java/com/michaldrabik/ui_movie/sections/collections/details/cases/MovieDetailsCollectionTranslationsCase.kt @@ -3,6 +3,7 @@ package com.michaldrabik.ui_movie.sections.collections.details.cases import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_movie.sections.collections.details.recycler.MovieDetailsCollectionItem import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.withContext @@ -17,10 +18,10 @@ class MovieDetailsCollectionTranslationsCase @Inject constructor( suspend fun loadMissingTranslation( item: MovieDetailsCollectionItem.MovieItem, - language: String + locale: AppLocale ) = withContext(dispatchers.IO) { try { - val translation = translationsRepository.loadTranslation(item.movie, language) ?: Translation.EMPTY + val translation = translationsRepository.loadTranslation(item.movie, locale) ?: Translation.EMPTY return@withContext item.copy(translation = translation) } catch (error: Throwable) { Timber.w(error) diff --git a/ui-movie/src/main/java/com/michaldrabik/ui_movie/sections/ratings/MovieDetailsRatingsFragment.kt b/ui-movie/src/main/java/com/michaldrabik/ui_movie/sections/ratings/MovieDetailsRatingsFragment.kt index 46c5ab7363..42ec31dc1b 100644 --- a/ui-movie/src/main/java/com/michaldrabik/ui_movie/sections/ratings/MovieDetailsRatingsFragment.kt +++ b/ui-movie/src/main/java/com/michaldrabik/ui_movie/sections/ratings/MovieDetailsRatingsFragment.kt @@ -4,7 +4,7 @@ import android.os.Bundle import android.view.View import androidx.fragment.app.viewModels import com.michaldrabik.ui_base.BaseFragment -import com.michaldrabik.ui_base.common.AppCountry +import com.michaldrabik.ui_model.locale.AppCountry import com.michaldrabik.ui_base.utilities.events.MessageEvent import com.michaldrabik.ui_base.utilities.extensions.launchAndRepeatStarted import com.michaldrabik.ui_base.utilities.extensions.openImdbUrl diff --git a/ui-movie/src/main/java/com/michaldrabik/ui_movie/sections/streamings/cases/MovieDetailsStreamingCase.kt b/ui-movie/src/main/java/com/michaldrabik/ui_movie/sections/streamings/cases/MovieDetailsStreamingCase.kt index 0f3e2040ab..6fac9207c6 100644 --- a/ui-movie/src/main/java/com/michaldrabik/ui_movie/sections/streamings/cases/MovieDetailsStreamingCase.kt +++ b/ui-movie/src/main/java/com/michaldrabik/ui_movie/sections/streamings/cases/MovieDetailsStreamingCase.kt @@ -5,7 +5,7 @@ import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.common.extensions.nowUtc import com.michaldrabik.repository.movies.MovieStreamingsRepository import com.michaldrabik.repository.settings.SettingsRepository -import com.michaldrabik.ui_base.common.AppCountry +import com.michaldrabik.ui_model.locale.AppCountry import com.michaldrabik.ui_model.Movie import com.michaldrabik.ui_model.StreamingService import dagger.hilt.android.scopes.ViewModelScoped @@ -24,7 +24,7 @@ class MovieDetailsStreamingCase @Inject constructor( if (!settingsRepository.streamingsEnabled) { return@withContext emptyList() } - val country = AppCountry.fromCode(settingsRepository.country) + val country = AppCountry.fromCode(settingsRepository.locale.country.code) val localData = streamingsRepository.getLocalStreamings(movie, country.code) localData.first } @@ -34,7 +34,7 @@ class MovieDetailsStreamingCase @Inject constructor( if (!settingsRepository.streamingsEnabled) { return@withContext emptyList() } - val country = AppCountry.fromCode(settingsRepository.country) + val country = AppCountry.fromCode(settingsRepository.locale.country.code) val (localItems, timestamp) = streamingsRepository.getLocalStreamings(movie, country.code) if (timestamp != null && timestamp.plusSeconds(ConfigVariant.STREAMINGS_CACHE_DURATION / 1000).isAfter(nowUtc())) { return@withContext localItems diff --git a/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/hidden/HiddenViewModel.kt b/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/hidden/HiddenViewModel.kt index 9da90e1d94..8f1ee1c52a 100644 --- a/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/hidden/HiddenViewModel.kt +++ b/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/hidden/HiddenViewModel.kt @@ -2,7 +2,6 @@ package com.michaldrabik.ui_my_movies.hidden import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.michaldrabik.common.Config import com.michaldrabik.repository.images.MovieImagesProvider import com.michaldrabik.repository.settings.SettingsRepository import com.michaldrabik.ui_base.common.ListViewMode @@ -19,6 +18,7 @@ import com.michaldrabik.ui_base.viewmodel.DefaultChannelsDelegate import com.michaldrabik.ui_model.Image import com.michaldrabik.ui_model.SortOrder import com.michaldrabik.ui_model.SortType +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_my_movies.common.recycler.CollectionListItem import com.michaldrabik.ui_my_movies.hidden.cases.HiddenLoadMoviesCase import com.michaldrabik.ui_my_movies.hidden.cases.HiddenSortOrderCase @@ -97,7 +97,7 @@ class HiddenViewModel @Inject constructor( fun loadMissingTranslation(item: CollectionListItem) { check(item is CollectionListItem.MovieItem) - if (item.translation != null || settingsRepository.language == Config.DEFAULT_LANGUAGE) return + if (item.translation != null || settingsRepository.locale == AppLocale.default()) return viewModelScope.launch { try { val translation = loadMoviesCase.loadTranslation(item.movie, false) diff --git a/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/hidden/cases/HiddenLoadMoviesCase.kt b/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/hidden/cases/HiddenLoadMoviesCase.kt index d8fa8c1108..3d07eda1df 100644 --- a/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/hidden/cases/HiddenLoadMoviesCase.kt +++ b/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/hidden/cases/HiddenLoadMoviesCase.kt @@ -1,6 +1,5 @@ package com.michaldrabik.ui_my_movies.hidden.cases -import com.michaldrabik.common.Config import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.repository.images.MovieImagesProvider @@ -16,6 +15,7 @@ import com.michaldrabik.ui_model.SpoilersSettings import com.michaldrabik.ui_model.TraktRating import com.michaldrabik.ui_model.Translation import com.michaldrabik.ui_model.UpcomingFilter +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_my_movies.common.helpers.CollectionItemSorter import com.michaldrabik.ui_my_movies.common.recycler.CollectionListItem import dagger.hilt.android.scopes.ViewModelScoped @@ -40,13 +40,13 @@ class HiddenLoadMoviesCase @Inject constructor( suspend fun loadMovies(searchQuery: String): List = withContext(dispatchers.IO) { - val language = translationsRepository.getLanguage() + val locale = translationsRepository.getLocale() val ratings = ratingsCase.loadRatings() val dateFormat = dateFormatProvider.loadShortDayFormat() val fullDateFormat = dateFormatProvider.loadFullDayFormat() val translations = - if (language == Config.DEFAULT_LANGUAGE) emptyMap() - else translationsRepository.loadAllMoviesLocal(language) + if (locale == AppLocale.default()) emptyMap() + else translationsRepository.loadAllMoviesLocal(locale) val spoilersSettings = settingsRepository.spoilers.getAll() val sortOrder = settingsRepository.sorting.hiddenMoviesSortOrder @@ -102,11 +102,11 @@ class HiddenLoadMoviesCase @Inject constructor( suspend fun loadTranslation(movie: Movie, onlyLocal: Boolean): Translation? = withContext(dispatchers.IO) { - val language = translationsRepository.getLanguage() - if (language == Config.DEFAULT_LANGUAGE) { + val locale = translationsRepository.getLocale() + if (locale == AppLocale.default()) { return@withContext Translation.EMPTY } - translationsRepository.loadTranslation(movie, language, onlyLocal) + translationsRepository.loadTranslation(movie, locale, onlyLocal) } private fun CoroutineScope.toListItemAsync( diff --git a/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/mymovies/MyMoviesViewModel.kt b/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/mymovies/MyMoviesViewModel.kt index d965dd898d..226945e0c4 100644 --- a/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/mymovies/MyMoviesViewModel.kt +++ b/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/mymovies/MyMoviesViewModel.kt @@ -2,7 +2,6 @@ package com.michaldrabik.ui_my_movies.mymovies import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.michaldrabik.common.Config.DEFAULT_LANGUAGE import com.michaldrabik.repository.settings.SettingsRepository import com.michaldrabik.ui_base.common.ListViewMode import com.michaldrabik.ui_base.events.EventsManager @@ -25,6 +24,7 @@ import com.michaldrabik.ui_model.SortOrder import com.michaldrabik.ui_model.SortType import com.michaldrabik.ui_model.SpoilersSettings import com.michaldrabik.ui_model.TraktRating +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_my_movies.main.FollowedMoviesUiState import com.michaldrabik.ui_my_movies.mymovies.cases.MyMoviesLoadCase import com.michaldrabik.ui_my_movies.mymovies.cases.MyMoviesRatingsCase @@ -170,7 +170,7 @@ class MyMoviesViewModel @Inject constructor( } fun loadMissingTranslation(item: MyMoviesItem) { - if (item.translation != null || settingsRepository.language == DEFAULT_LANGUAGE) return + if (item.translation != null || settingsRepository.locale == AppLocale.default()) return viewModelScope.launch { try { val translation = loadMoviesCase.loadTranslation(item.movie, false) diff --git a/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/mymovies/cases/MyMoviesLoadCase.kt b/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/mymovies/cases/MyMoviesLoadCase.kt index 6de5515b85..a970798866 100644 --- a/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/mymovies/cases/MyMoviesLoadCase.kt +++ b/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/mymovies/cases/MyMoviesLoadCase.kt @@ -1,6 +1,5 @@ package com.michaldrabik.ui_my_movies.mymovies.cases -import com.michaldrabik.common.Config import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.repository.images.MovieImagesProvider @@ -12,6 +11,7 @@ import com.michaldrabik.ui_model.Movie import com.michaldrabik.ui_model.SortOrder import com.michaldrabik.ui_model.SortType import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_my_movies.mymovies.helpers.MyMoviesSorter import com.michaldrabik.ui_my_movies.mymovies.recycler.MyMoviesItem import dagger.hilt.android.scopes.ViewModelScoped @@ -65,11 +65,11 @@ class MyMoviesLoadCase @Inject constructor( suspend fun loadTranslation(movie: Movie, onlyLocal: Boolean): Translation? = withContext(dispatchers.IO) { - val language = translationsRepository.getLanguage() - if (language == Config.DEFAULT_LANGUAGE) { + val locale = translationsRepository.getLocale() + if (locale == AppLocale.default()) { return@withContext Translation.EMPTY } - translationsRepository.loadTranslation(movie, language, onlyLocal) + translationsRepository.loadTranslation(movie, locale, onlyLocal) } fun loadDateFormat() = dateFormatProvider.loadShortDayFormat() diff --git a/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/watchlist/WatchlistViewModel.kt b/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/watchlist/WatchlistViewModel.kt index 23135b7918..957214801a 100644 --- a/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/watchlist/WatchlistViewModel.kt +++ b/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/watchlist/WatchlistViewModel.kt @@ -2,7 +2,6 @@ package com.michaldrabik.ui_my_movies.watchlist import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.michaldrabik.common.Config.DEFAULT_LANGUAGE import com.michaldrabik.repository.images.MovieImagesProvider import com.michaldrabik.repository.settings.SettingsRepository import com.michaldrabik.ui_base.common.ListViewMode @@ -19,6 +18,7 @@ import com.michaldrabik.ui_base.viewmodel.DefaultChannelsDelegate import com.michaldrabik.ui_model.Image import com.michaldrabik.ui_model.SortOrder import com.michaldrabik.ui_model.SortType +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_my_movies.common.recycler.CollectionListItem import com.michaldrabik.ui_my_movies.common.recycler.CollectionListItem.MovieItem import com.michaldrabik.ui_my_movies.main.FollowedMoviesUiState @@ -105,7 +105,7 @@ class WatchlistViewModel @Inject constructor( fun loadMissingTranslation(item: CollectionListItem) { check(item is MovieItem) - if (item.translation != null || settingsRepository.language == DEFAULT_LANGUAGE) return + if (item.translation != null || settingsRepository.locale == AppLocale.default()) return viewModelScope.launch { try { val translation = loadMoviesCase.loadTranslation(item.movie, false) diff --git a/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/watchlist/cases/WatchlistLoadMoviesCase.kt b/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/watchlist/cases/WatchlistLoadMoviesCase.kt index c9ef3282b4..048ced6fd8 100644 --- a/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/watchlist/cases/WatchlistLoadMoviesCase.kt +++ b/ui-my-movies/src/main/java/com/michaldrabik/ui_my_movies/watchlist/cases/WatchlistLoadMoviesCase.kt @@ -1,6 +1,5 @@ package com.michaldrabik.ui_my_movies.watchlist.cases -import com.michaldrabik.common.Config import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.repository.images.MovieImagesProvider @@ -13,6 +12,7 @@ import com.michaldrabik.ui_model.SortOrder import com.michaldrabik.ui_model.SpoilersSettings import com.michaldrabik.ui_model.TraktRating import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_my_movies.common.helpers.CollectionItemFilter import com.michaldrabik.ui_my_movies.common.helpers.CollectionItemSorter import com.michaldrabik.ui_my_movies.common.recycler.CollectionListItem @@ -42,12 +42,12 @@ class WatchlistLoadMoviesCase @Inject constructor( val ratings = ratingsCase.loadRatings() val dateFormat = dateFormatProvider.loadShortDayFormat() val fullDateFormat = dateFormatProvider.loadFullDayFormat() - val language = translationsRepository.getLanguage() + val locale = translationsRepository.getLocale() val spoilers = settingsRepository.spoilers.getAll() - val translations = if (language == Config.DEFAULT_LANGUAGE) { + val translations = if (locale == AppLocale.default()) { emptyMap() } else { - translationsRepository.loadAllMoviesLocal(language) + translationsRepository.loadAllMoviesLocal(locale) } val filtersItem = loadFiltersItem() @@ -91,11 +91,11 @@ class WatchlistLoadMoviesCase @Inject constructor( suspend fun loadTranslation(movie: Movie, onlyLocal: Boolean): Translation? = withContext(dispatchers.IO) { - val language = translationsRepository.getLanguage() - if (language == Config.DEFAULT_LANGUAGE) { + val locale = translationsRepository.getLocale() + if (locale == AppLocale.default()) { return@withContext Translation.EMPTY } - translationsRepository.loadTranslation(movie, language, onlyLocal) + translationsRepository.loadTranslation(movie, locale, onlyLocal) } private fun CoroutineScope.toListItemAsync( diff --git a/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/hidden/HiddenViewModel.kt b/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/hidden/HiddenViewModel.kt index 5428ab53d5..3d04c14b87 100644 --- a/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/hidden/HiddenViewModel.kt +++ b/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/hidden/HiddenViewModel.kt @@ -2,7 +2,6 @@ package com.michaldrabik.ui_my_shows.hidden import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.michaldrabik.common.Config import com.michaldrabik.repository.images.ShowImagesProvider import com.michaldrabik.ui_base.common.ListViewMode import com.michaldrabik.ui_base.events.EventsManager @@ -18,6 +17,7 @@ import com.michaldrabik.ui_base.viewmodel.DefaultChannelsDelegate import com.michaldrabik.ui_model.Image import com.michaldrabik.ui_model.SortOrder import com.michaldrabik.ui_model.SortType +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_my_shows.common.recycler.CollectionListItem import com.michaldrabik.ui_my_shows.common.recycler.CollectionListItem.ShowItem import com.michaldrabik.ui_my_shows.hidden.cases.HiddenLoadShowsCase @@ -96,7 +96,7 @@ class HiddenViewModel @Inject constructor( fun loadMissingTranslation(item: CollectionListItem) { check(item is ShowItem) - if (item.translation != null || translationsCase.getLanguage() == Config.DEFAULT_LANGUAGE) return + if (item.translation != null || translationsCase.getLocale() == AppLocale.default()) return viewModelScope.launch { try { val translation = translationsCase.loadTranslation(item.show, false) diff --git a/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/hidden/cases/HiddenLoadShowsCase.kt b/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/hidden/cases/HiddenLoadShowsCase.kt index 41964f74a5..09c9017ef8 100644 --- a/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/hidden/cases/HiddenLoadShowsCase.kt +++ b/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/hidden/cases/HiddenLoadShowsCase.kt @@ -1,6 +1,5 @@ package com.michaldrabik.ui_my_shows.hidden.cases -import com.michaldrabik.common.Config import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.repository.images.ShowImagesProvider @@ -15,6 +14,7 @@ import com.michaldrabik.ui_model.SpoilersSettings import com.michaldrabik.ui_model.TraktRating import com.michaldrabik.ui_model.Translation import com.michaldrabik.ui_model.UpcomingFilter +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_my_shows.common.recycler.CollectionListItem import com.michaldrabik.ui_my_shows.hidden.helpers.HiddenItemSorter import dagger.hilt.android.scopes.ViewModelScoped @@ -39,12 +39,12 @@ class HiddenLoadShowsCase @Inject constructor( suspend fun loadShows(searchQuery: String): List = withContext(dispatchers.IO) { - val language = translationsRepository.getLanguage() + val locale = translationsRepository.getLocale() val ratings = ratingsCase.loadRatings() val dateFormat = dateFormatProvider.loadFullDayFormat() val translations = - if (language == Config.DEFAULT_LANGUAGE) emptyMap() - else translationsRepository.loadAllShowsLocal(language) + if (locale == AppLocale.default()) emptyMap() + else translationsRepository.loadAllShowsLocal(locale) val spoilers = settingsRepository.spoilers.getAll() val sortOrder = settingsRepository.sorting.hiddenShowsSortOrder diff --git a/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/hidden/cases/HiddenTranslationsCase.kt b/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/hidden/cases/HiddenTranslationsCase.kt index 66a9d9cfcf..ad1f6d840b 100644 --- a/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/hidden/cases/HiddenTranslationsCase.kt +++ b/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/hidden/cases/HiddenTranslationsCase.kt @@ -1,10 +1,10 @@ package com.michaldrabik.ui_my_shows.hidden.cases -import com.michaldrabik.common.Config import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.ui_model.Show import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.withContext import javax.inject.Inject @@ -15,14 +15,14 @@ class HiddenTranslationsCase @Inject constructor( private val translationsRepository: TranslationsRepository, ) { - fun getLanguage() = translationsRepository.getLanguage() + fun getLocale() = translationsRepository.getLocale() suspend fun loadTranslation(show: Show, onlyLocal: Boolean): Translation? = withContext(dispatchers.IO) { - val language = getLanguage() - if (language == Config.DEFAULT_LANGUAGE) { + val locale = getLocale() + if (locale == AppLocale.default()) { return@withContext Translation.EMPTY } - translationsRepository.loadTranslation(show, language, onlyLocal) + translationsRepository.loadTranslation(show, locale, onlyLocal) } } diff --git a/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/myshows/MyShowsViewModel.kt b/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/myshows/MyShowsViewModel.kt index 61dfe278fb..e2df6d32dc 100644 --- a/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/myshows/MyShowsViewModel.kt +++ b/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/myshows/MyShowsViewModel.kt @@ -2,7 +2,6 @@ package com.michaldrabik.ui_my_shows.myshows import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.michaldrabik.common.Config import com.michaldrabik.repository.images.ShowImagesProvider import com.michaldrabik.repository.settings.SettingsRepository import com.michaldrabik.ui_base.common.ListViewMode @@ -26,6 +25,7 @@ import com.michaldrabik.ui_model.SortOrder import com.michaldrabik.ui_model.SortType import com.michaldrabik.ui_model.SpoilersSettings import com.michaldrabik.ui_model.TraktRating +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_my_shows.main.FollowedShowsUiState import com.michaldrabik.ui_my_shows.myshows.cases.MyShowsLoadShowsCase import com.michaldrabik.ui_my_shows.myshows.cases.MyShowsRatingsCase @@ -170,7 +170,7 @@ class MyShowsViewModel @Inject constructor( } fun loadMissingTranslation(item: MyShowsItem) { - if (item.translation != null || translationsCase.getLanguage() == Config.DEFAULT_LANGUAGE) return + if (item.translation != null || translationsCase.getLocale() == AppLocale.default()) return viewModelScope.launch { try { val translation = translationsCase.loadTranslation(item.show, false) diff --git a/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/myshows/cases/MyShowsTranslationsCase.kt b/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/myshows/cases/MyShowsTranslationsCase.kt index 1a32cc3be7..cd0de7c290 100644 --- a/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/myshows/cases/MyShowsTranslationsCase.kt +++ b/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/myshows/cases/MyShowsTranslationsCase.kt @@ -1,10 +1,10 @@ package com.michaldrabik.ui_my_shows.myshows.cases -import com.michaldrabik.common.Config import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.ui_model.Show import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.withContext import javax.inject.Inject @@ -15,14 +15,14 @@ class MyShowsTranslationsCase @Inject constructor( private val translationsRepository: TranslationsRepository, ) { - fun getLanguage() = translationsRepository.getLanguage() + fun getLocale() = translationsRepository.getLocale() suspend fun loadTranslation(show: Show, onlyLocal: Boolean): Translation? = withContext(dispatchers.IO) { - val language = getLanguage() - if (language == Config.DEFAULT_LANGUAGE) { + val locale = getLocale() + if (locale == AppLocale.default()) { return@withContext Translation.EMPTY } - translationsRepository.loadTranslation(show, language, onlyLocal) + translationsRepository.loadTranslation(show, locale, onlyLocal) } } diff --git a/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/watchlist/WatchlistViewModel.kt b/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/watchlist/WatchlistViewModel.kt index fba70c9297..00c5ac417f 100644 --- a/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/watchlist/WatchlistViewModel.kt +++ b/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/watchlist/WatchlistViewModel.kt @@ -2,7 +2,6 @@ package com.michaldrabik.ui_my_shows.watchlist import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.michaldrabik.common.Config import com.michaldrabik.repository.images.ShowImagesProvider import com.michaldrabik.ui_base.common.ListViewMode import com.michaldrabik.ui_base.events.EventsManager @@ -18,6 +17,7 @@ import com.michaldrabik.ui_base.viewmodel.DefaultChannelsDelegate import com.michaldrabik.ui_model.Image import com.michaldrabik.ui_model.SortOrder import com.michaldrabik.ui_model.SortType +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_my_shows.common.recycler.CollectionListItem import com.michaldrabik.ui_my_shows.common.recycler.CollectionListItem.ShowItem import com.michaldrabik.ui_my_shows.main.FollowedShowsUiState @@ -105,7 +105,7 @@ class WatchlistViewModel @Inject constructor( fun loadMissingTranslation(item: CollectionListItem) { check(item is ShowItem) - if (item.translation != null || translationsCase.getLanguage() == Config.DEFAULT_LANGUAGE) return + if (item.translation != null || translationsCase.getLocale() == AppLocale.default()) return viewModelScope.launch { try { val translation = translationsCase.loadTranslation(item.show, false) diff --git a/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/watchlist/cases/WatchlistLoadShowsCase.kt b/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/watchlist/cases/WatchlistLoadShowsCase.kt index c72782eaea..a3f1c5f8a2 100644 --- a/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/watchlist/cases/WatchlistLoadShowsCase.kt +++ b/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/watchlist/cases/WatchlistLoadShowsCase.kt @@ -1,6 +1,5 @@ package com.michaldrabik.ui_my_shows.watchlist.cases -import com.michaldrabik.common.Config import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.repository.images.ShowImagesProvider @@ -13,6 +12,7 @@ import com.michaldrabik.ui_model.SortOrder import com.michaldrabik.ui_model.SpoilersSettings import com.michaldrabik.ui_model.TraktRating import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_my_shows.common.recycler.CollectionListItem import com.michaldrabik.ui_my_shows.watchlist.helpers.WatchlistItemFilter import com.michaldrabik.ui_my_shows.watchlist.helpers.WatchlistItemSorter @@ -39,12 +39,12 @@ class WatchlistLoadShowsCase @Inject constructor( suspend fun loadShows(searchQuery: String): List = withContext(dispatchers.IO) { - val language = translationsRepository.getLanguage() + val locale = translationsRepository.getLocale() val ratings = ratingsCase.loadRatings() val dateFormat = dateFormatProvider.loadFullDayFormat() val translations = - if (language == Config.DEFAULT_LANGUAGE) emptyMap() - else translationsRepository.loadAllShowsLocal(language) + if (locale == AppLocale.default()) emptyMap() + else translationsRepository.loadAllShowsLocal(locale) val spoilers = settingsRepository.spoilers.getAll() val filtersItem = loadFiltersItem() diff --git a/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/watchlist/cases/WatchlistTranslationsCase.kt b/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/watchlist/cases/WatchlistTranslationsCase.kt index 36287b4788..472a17ea6b 100644 --- a/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/watchlist/cases/WatchlistTranslationsCase.kt +++ b/ui-my-shows/src/main/java/com/michaldrabik/ui_my_shows/watchlist/cases/WatchlistTranslationsCase.kt @@ -1,10 +1,10 @@ package com.michaldrabik.ui_my_shows.watchlist.cases -import com.michaldrabik.common.Config import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.ui_model.Show import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.withContext import javax.inject.Inject @@ -15,14 +15,14 @@ class WatchlistTranslationsCase @Inject constructor( private val translationsRepository: TranslationsRepository, ) { - fun getLanguage() = translationsRepository.getLanguage() + fun getLocale() = translationsRepository.getLocale() suspend fun loadTranslation(show: Show, onlyLocal: Boolean): Translation? = withContext(dispatchers.IO) { - val language = getLanguage() - if (language == Config.DEFAULT_LANGUAGE) { + val locale = getLocale() + if (locale == AppLocale.default()) { return@withContext Translation.EMPTY } - translationsRepository.loadTranslation(show, language, onlyLocal) + translationsRepository.loadTranslation(show, locale, onlyLocal) } } diff --git a/ui-people/src/main/java/com/michaldrabik/ui_people/details/PersonDetailsViewModel.kt b/ui-people/src/main/java/com/michaldrabik/ui_people/details/PersonDetailsViewModel.kt index 32b006e88f..fc16b34df6 100644 --- a/ui-people/src/main/java/com/michaldrabik/ui_people/details/PersonDetailsViewModel.kt +++ b/ui-people/src/main/java/com/michaldrabik/ui_people/details/PersonDetailsViewModel.kt @@ -2,7 +2,6 @@ package com.michaldrabik.ui_people.details import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.michaldrabik.common.Config import com.michaldrabik.common.Mode import com.michaldrabik.repository.settings.SettingsRepository import com.michaldrabik.ui_base.utilities.events.MessageEvent @@ -14,6 +13,7 @@ import com.michaldrabik.ui_base.utilities.extensions.rethrowCancellation import com.michaldrabik.ui_base.viewmodel.ChannelsDelegate import com.michaldrabik.ui_base.viewmodel.DefaultChannelsDelegate import com.michaldrabik.ui_model.Person +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_people.R import com.michaldrabik.ui_people.details.cases.PersonDetailsCreditsCase import com.michaldrabik.ui_people.details.cases.PersonDetailsImagesCase @@ -147,18 +147,18 @@ class PersonDetailsViewModel @Inject constructor( } fun loadMissingTranslation(item: PersonDetailsItem) { - val language = settingsRepository.language - if (language == Config.DEFAULT_LANGUAGE || item.getId() in translationsJobs.keys) { + val locale = settingsRepository.locale + if (locale == AppLocale.default() || item.getId() in translationsJobs.keys) { return } translationsJobs[item.getId()] = true viewModelScope.launch { (item as? PersonDetailsItem.CreditsShowItem)?.let { - val updatedItem = loadTranslationsCase.loadMissingTranslation(it, language) + val updatedItem = loadTranslationsCase.loadMissingTranslation(it, locale) updateItem(updatedItem) } (item as? PersonDetailsItem.CreditsMovieItem)?.let { - val updatedItem = loadTranslationsCase.loadMissingTranslation(it, language) + val updatedItem = loadTranslationsCase.loadMissingTranslation(it, locale) updateItem(updatedItem) } } diff --git a/ui-people/src/main/java/com/michaldrabik/ui_people/details/cases/PersonDetailsCreditsCase.kt b/ui-people/src/main/java/com/michaldrabik/ui_people/details/cases/PersonDetailsCreditsCase.kt index c9cb1c3ad0..690255924a 100644 --- a/ui-people/src/main/java/com/michaldrabik/ui_people/details/cases/PersonDetailsCreditsCase.kt +++ b/ui-people/src/main/java/com/michaldrabik/ui_people/details/cases/PersonDetailsCreditsCase.kt @@ -1,6 +1,5 @@ package com.michaldrabik.ui_people.details.cases -import com.michaldrabik.common.Config import com.michaldrabik.common.Mode import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.repository.PeopleRepository @@ -16,6 +15,7 @@ import com.michaldrabik.ui_model.Person import com.michaldrabik.ui_model.PersonCredit import com.michaldrabik.ui_model.Show import com.michaldrabik.ui_model.SpoilersSettings +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_people.details.recycler.PersonDetailsItem import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.async @@ -96,9 +96,9 @@ class PersonDetailsCreditsCase @Inject constructor( val isMy = it.traktId in myShowsIds val isWatchlist = it.traktId in watchlistShowsId val image = showImagesProvider.findCachedImage(it, ImageType.POSTER) - val translation = when (val language = translationsRepository.getLanguage()) { - Config.DEFAULT_LANGUAGE -> null - else -> translationsRepository.loadTranslation(it, language, onlyLocal = true) + val translation = when (val locale = translationsRepository.getLocale()) { + AppLocale.default() -> null + else -> translationsRepository.loadTranslation(it, locale, onlyLocal = true) } PersonDetailsItem.CreditsShowItem( show = it, @@ -119,9 +119,9 @@ class PersonDetailsCreditsCase @Inject constructor( val isMy = it.traktId in myMoviesIds val isWatchlist = it.traktId in watchlistMoviesId val image = movieImagesProvider.findCachedImage(it, ImageType.POSTER) - val translation = when (val language = translationsRepository.getLanguage()) { - Config.DEFAULT_LANGUAGE -> null - else -> translationsRepository.loadTranslation(it, language, onlyLocal = true) + val translation = when (val locale = translationsRepository.getLocale()) { + AppLocale.default() -> null + else -> translationsRepository.loadTranslation(it, locale, onlyLocal = true) } PersonDetailsItem.CreditsMovieItem( movie = it, diff --git a/ui-people/src/main/java/com/michaldrabik/ui_people/details/cases/PersonDetailsTranslationsCase.kt b/ui-people/src/main/java/com/michaldrabik/ui_people/details/cases/PersonDetailsTranslationsCase.kt index 4ccd5fd192..23dd8a86cb 100644 --- a/ui-people/src/main/java/com/michaldrabik/ui_people/details/cases/PersonDetailsTranslationsCase.kt +++ b/ui-people/src/main/java/com/michaldrabik/ui_people/details/cases/PersonDetailsTranslationsCase.kt @@ -2,6 +2,7 @@ package com.michaldrabik.ui_people.details.cases import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_people.details.recycler.PersonDetailsItem import dagger.hilt.android.scopes.ViewModelScoped import timber.log.Timber @@ -12,18 +13,18 @@ class PersonDetailsTranslationsCase @Inject constructor( private val translationsRepository: TranslationsRepository, ) { - suspend fun loadMissingTranslation(item: PersonDetailsItem.CreditsShowItem, language: String) = + suspend fun loadMissingTranslation(item: PersonDetailsItem.CreditsShowItem, locale: AppLocale) = try { - val translation = translationsRepository.loadTranslation(item.show, language) ?: Translation.EMPTY + val translation = translationsRepository.loadTranslation(item.show, locale) ?: Translation.EMPTY item.copy(isLoading = false, translation = translation) } catch (error: Throwable) { Timber.w(error) item.copy(isLoading = false, translation = Translation.EMPTY) } - suspend fun loadMissingTranslation(item: PersonDetailsItem.CreditsMovieItem, language: String) = + suspend fun loadMissingTranslation(item: PersonDetailsItem.CreditsMovieItem, locale: AppLocale) = try { - val translation = translationsRepository.loadTranslation(item.movie, language) ?: Translation.EMPTY + val translation = translationsRepository.loadTranslation(item.movie, locale) ?: Translation.EMPTY item.copy(isLoading = false, translation = translation) } catch (error: Throwable) { Timber.w(error) diff --git a/ui-progress-movies/src/main/java/com/michaldrabik/ui_progress_movies/calendar/CalendarMoviesViewModel.kt b/ui-progress-movies/src/main/java/com/michaldrabik/ui_progress_movies/calendar/CalendarMoviesViewModel.kt index ef80c5de6f..e2b65b6452 100644 --- a/ui-progress-movies/src/main/java/com/michaldrabik/ui_progress_movies/calendar/CalendarMoviesViewModel.kt +++ b/ui-progress-movies/src/main/java/com/michaldrabik/ui_progress_movies/calendar/CalendarMoviesViewModel.kt @@ -2,13 +2,13 @@ package com.michaldrabik.ui_progress_movies.calendar import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.michaldrabik.common.Config import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.repository.images.MovieImagesProvider import com.michaldrabik.ui_base.utilities.extensions.SUBSCRIBE_STOP_TIMEOUT import com.michaldrabik.ui_base.utilities.extensions.findReplace import com.michaldrabik.ui_model.CalendarMode import com.michaldrabik.ui_model.Image +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_progress_movies.calendar.cases.items.CalendarMoviesFutureCase import com.michaldrabik.ui_progress_movies.calendar.cases.items.CalendarMoviesRecentsCase import com.michaldrabik.ui_progress_movies.calendar.recycler.CalendarMovieListItem @@ -85,11 +85,11 @@ class CalendarMoviesViewModel @Inject constructor( fun findMissingTranslation(item: CalendarMovieListItem) { check(item is CalendarMovieListItem.MovieItem) - val language = translationsRepository.getLanguage() - if (item.translation != null || language == Config.DEFAULT_LANGUAGE) return + val locale = translationsRepository.getLocale() + if (item.translation != null || locale == AppLocale.default()) return viewModelScope.launch { try { - val translation = translationsRepository.loadTranslation(item.movie, language) + val translation = translationsRepository.loadTranslation(item.movie, locale) updateItem(item.copy(translation = translation)) } catch (error: Throwable) { Timber.e(error) diff --git a/ui-progress-movies/src/main/java/com/michaldrabik/ui_progress_movies/calendar/cases/items/CalendarMoviesItemsCase.kt b/ui-progress-movies/src/main/java/com/michaldrabik/ui_progress_movies/calendar/cases/items/CalendarMoviesItemsCase.kt index d676361c4f..1c9d78a36e 100644 --- a/ui-progress-movies/src/main/java/com/michaldrabik/ui_progress_movies/calendar/cases/items/CalendarMoviesItemsCase.kt +++ b/ui-progress-movies/src/main/java/com/michaldrabik/ui_progress_movies/calendar/cases/items/CalendarMoviesItemsCase.kt @@ -1,6 +1,5 @@ package com.michaldrabik.ui_progress_movies.calendar.cases.items -import com.michaldrabik.common.Config import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.common.extensions.nowUtc import com.michaldrabik.common.extensions.toLocalZone @@ -13,6 +12,7 @@ import com.michaldrabik.ui_model.CalendarMode.PRESENT_FUTURE import com.michaldrabik.ui_model.CalendarMode.RECENTS import com.michaldrabik.ui_model.ImageType import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_progress_movies.calendar.helpers.filters.CalendarFilter import com.michaldrabik.ui_progress_movies.calendar.helpers.groupers.CalendarGrouper import com.michaldrabik.ui_progress_movies.calendar.helpers.sorter.CalendarSorter @@ -40,7 +40,7 @@ abstract class CalendarMoviesItemsCase constructor( ): List { return withContext(dispatchers.IO) { val now = nowUtc().toLocalZone() - val language = translationsRepository.getLanguage() + val locale = translationsRepository.getLocale() val dateFormat = dateFormatProvider.loadFullDayFormat() val spoilers = settingsSpoilersRepository.getAll() @@ -55,8 +55,8 @@ abstract class CalendarMoviesItemsCase constructor( .map { movie -> async { var translation: Translation? = null - if (language != Config.DEFAULT_LANGUAGE) { - translation = translationsRepository.loadTranslation(movie, language, onlyLocal = true) + if (locale != AppLocale.default()) { + translation = translationsRepository.loadTranslation(movie, locale, onlyLocal = true) } CalendarMovieListItem.MovieItem( movie = movie, diff --git a/ui-progress-movies/src/main/java/com/michaldrabik/ui_progress_movies/progress/ProgressMoviesViewModel.kt b/ui-progress-movies/src/main/java/com/michaldrabik/ui_progress_movies/progress/ProgressMoviesViewModel.kt index 342013ad2b..49a0bdc2e1 100644 --- a/ui-progress-movies/src/main/java/com/michaldrabik/ui_progress_movies/progress/ProgressMoviesViewModel.kt +++ b/ui-progress-movies/src/main/java/com/michaldrabik/ui_progress_movies/progress/ProgressMoviesViewModel.kt @@ -3,7 +3,6 @@ package com.michaldrabik.ui_progress_movies.progress import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import androidx.work.WorkManager -import com.michaldrabik.common.Config import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.repository.UserTraktManager import com.michaldrabik.repository.images.MovieImagesProvider @@ -18,6 +17,7 @@ import com.michaldrabik.ui_model.Image import com.michaldrabik.ui_model.Movie import com.michaldrabik.ui_model.SortOrder import com.michaldrabik.ui_model.SortType +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_progress_movies.main.MovieCheckActionUiEvent import com.michaldrabik.ui_progress_movies.main.ProgressMoviesMainUiState import com.michaldrabik.ui_progress_movies.main.RequestWidgetsUpdate @@ -107,11 +107,11 @@ class ProgressMoviesViewModel @Inject constructor( } fun findMissingTranslation(item: ProgressMovieListItem.MovieItem) { - val language = translationsRepository.getLanguage() - if (item.translation != null || language == Config.DEFAULT_LANGUAGE) return + val locale = translationsRepository.getLocale() + if (item.translation != null || locale == AppLocale.default()) return viewModelScope.launch { try { - val translation = translationsRepository.loadTranslation(item.movie, language) + val translation = translationsRepository.loadTranslation(item.movie, locale) updateItem(item.copy(translation = translation)) } catch (error: Throwable) { Timber.e(error) diff --git a/ui-progress-movies/src/main/java/com/michaldrabik/ui_progress_movies/progress/cases/ProgressMoviesItemsCase.kt b/ui-progress-movies/src/main/java/com/michaldrabik/ui_progress_movies/progress/cases/ProgressMoviesItemsCase.kt index 7c0b4e19f7..ecaf9e9714 100644 --- a/ui-progress-movies/src/main/java/com/michaldrabik/ui_progress_movies/progress/cases/ProgressMoviesItemsCase.kt +++ b/ui-progress-movies/src/main/java/com/michaldrabik/ui_progress_movies/progress/cases/ProgressMoviesItemsCase.kt @@ -1,6 +1,5 @@ package com.michaldrabik.ui_progress_movies.progress.cases -import com.michaldrabik.common.Config import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.repository.PinnedItemsRepository import com.michaldrabik.repository.RatingsRepository @@ -13,6 +12,7 @@ import com.michaldrabik.ui_model.ImageType import com.michaldrabik.ui_model.SortOrder import com.michaldrabik.ui_model.SortType import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_progress_movies.helpers.ProgressMoviesItemsSorter import com.michaldrabik.ui_progress_movies.progress.recycler.ProgressMovieListItem import kotlinx.coroutines.async @@ -36,7 +36,7 @@ class ProgressMoviesItemsCase @Inject constructor( suspend fun loadItems(searchQuery: String) = withContext(dispatchers.IO) { - val language = translationsRepository.getLanguage() + val locale = translationsRepository.getLocale() val dateFormat = dateFormatProvider.loadFullDayFormat() val spoilers = settingsRepository.spoilers.getAll() @@ -48,8 +48,8 @@ class ProgressMoviesItemsCase @Inject constructor( async { val rating = ratingsRepository.movies.loadRatings(listOf(movie)) var translation: Translation? = null - if (language != Config.DEFAULT_LANGUAGE) { - translation = translationsRepository.loadTranslation(movie, language, onlyLocal = true) + if (locale != AppLocale.default()) { + translation = translationsRepository.loadTranslation(movie, locale, onlyLocal = true) } ProgressMovieListItem.MovieItem( diff --git a/ui-progress-movies/src/test/java/com/michaldrabik/ui_progress_movies/calendar/CalendarMoviesViewModelTest.kt b/ui-progress-movies/src/test/java/com/michaldrabik/ui_progress_movies/calendar/CalendarMoviesViewModelTest.kt index c9e6985f98..0c1373950f 100644 --- a/ui-progress-movies/src/test/java/com/michaldrabik/ui_progress_movies/calendar/CalendarMoviesViewModelTest.kt +++ b/ui-progress-movies/src/test/java/com/michaldrabik/ui_progress_movies/calendar/CalendarMoviesViewModelTest.kt @@ -6,6 +6,7 @@ import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.repository.images.MovieImagesProvider import com.michaldrabik.ui_base.utilities.events.MessageEvent import com.michaldrabik.ui_model.CalendarMode +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_progress_movies.BaseMockTest import com.michaldrabik.ui_progress_movies.calendar.cases.items.CalendarMoviesFutureCase import com.michaldrabik.ui_progress_movies.calendar.cases.items.CalendarMoviesRecentsCase @@ -44,7 +45,7 @@ class CalendarMoviesViewModelTest : BaseMockTest() { override fun setUp() { super.setUp() - coEvery { translationsRepository.getLanguage() } returns "en" + coEvery { translationsRepository.getLocale() } returns AppLocale.fromCode("en_us") SUT = CalendarMoviesViewModel( recentsCase, diff --git a/ui-progress-movies/src/test/java/com/michaldrabik/ui_progress_movies/progress/ProgressMoviesViewModelTest.kt b/ui-progress-movies/src/test/java/com/michaldrabik/ui_progress_movies/progress/ProgressMoviesViewModelTest.kt index f3879b2d80..1935f0d830 100644 --- a/ui-progress-movies/src/test/java/com/michaldrabik/ui_progress_movies/progress/ProgressMoviesViewModelTest.kt +++ b/ui-progress-movies/src/test/java/com/michaldrabik/ui_progress_movies/progress/ProgressMoviesViewModelTest.kt @@ -9,6 +9,7 @@ import com.michaldrabik.repository.images.MovieImagesProvider import com.michaldrabik.repository.settings.SettingsRepository import com.michaldrabik.ui_base.utilities.events.MessageEvent import com.michaldrabik.ui_model.Movie +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_progress_movies.BaseMockTest import com.michaldrabik.ui_progress_movies.main.ProgressMoviesMainUiState import com.michaldrabik.ui_progress_movies.progress.cases.ProgressMoviesItemsCase @@ -54,7 +55,7 @@ class ProgressMoviesViewModelTest : BaseMockTest() { override fun setUp() { super.setUp() - coEvery { translationsRepository.getLanguage() } returns "en" + coEvery { translationsRepository.getLocale() } returns AppLocale.default() coEvery { userTraktManager.isAuthorized() } returns false SUT = ProgressMoviesViewModel( diff --git a/ui-progress/src/main/java/com/michaldrabik/ui_progress/calendar/CalendarViewModel.kt b/ui-progress/src/main/java/com/michaldrabik/ui_progress/calendar/CalendarViewModel.kt index ff399238ef..7d69801cdf 100644 --- a/ui-progress/src/main/java/com/michaldrabik/ui_progress/calendar/CalendarViewModel.kt +++ b/ui-progress/src/main/java/com/michaldrabik/ui_progress/calendar/CalendarViewModel.kt @@ -2,7 +2,6 @@ package com.michaldrabik.ui_progress.calendar import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.michaldrabik.common.Config import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.repository.images.ShowImagesProvider import com.michaldrabik.repository.settings.SettingsRepository @@ -14,6 +13,7 @@ import com.michaldrabik.ui_model.CalendarMode import com.michaldrabik.ui_model.EpisodeBundle import com.michaldrabik.ui_model.IdTrakt import com.michaldrabik.ui_model.Image +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_progress.calendar.cases.items.CalendarFutureCase import com.michaldrabik.ui_progress.calendar.cases.items.CalendarRecentsCase import com.michaldrabik.ui_progress.calendar.recycler.CalendarListItem @@ -107,13 +107,13 @@ class CalendarViewModel @Inject constructor( fun findMissingTranslation(item: CalendarListItem) { check(item is CalendarListItem.Episode) val showId = item.show.ids.trakt - val language = translationsRepository.getLanguage() - if (item.translations?.show != null || language == Config.DEFAULT_LANGUAGE || loadTranslationJobs.contains(showId)) { + val locale = translationsRepository.getLocale() + if (item.translations?.show != null || locale == AppLocale.default() || loadTranslationJobs.contains(showId)) { return } viewModelScope.launch { try { - val translation = translationsRepository.loadTranslation(item.show, language) + val translation = translationsRepository.loadTranslation(item.show, locale) val translations = item.translations?.copy(show = translation) updateItem(item.copy(translations = translations)) } catch (error: Throwable) { diff --git a/ui-progress/src/main/java/com/michaldrabik/ui_progress/calendar/cases/items/CalendarItemsCase.kt b/ui-progress/src/main/java/com/michaldrabik/ui_progress/calendar/cases/items/CalendarItemsCase.kt index d9b0cd80ec..083429f8b1 100644 --- a/ui-progress/src/main/java/com/michaldrabik/ui_progress/calendar/cases/items/CalendarItemsCase.kt +++ b/ui-progress/src/main/java/com/michaldrabik/ui_progress/calendar/cases/items/CalendarItemsCase.kt @@ -1,6 +1,5 @@ package com.michaldrabik.ui_progress.calendar.cases.items -import com.michaldrabik.common.Config import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.common.extensions.nowUtc import com.michaldrabik.common.extensions.toLocalZone @@ -16,6 +15,7 @@ import com.michaldrabik.ui_base.dates.DateFormatProvider import com.michaldrabik.ui_model.CalendarMode.PRESENT_FUTURE import com.michaldrabik.ui_model.CalendarMode.RECENTS import com.michaldrabik.ui_model.ImageType +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_progress.calendar.helpers.WatchlistAppender import com.michaldrabik.ui_progress.calendar.helpers.filters.CalendarFilter import com.michaldrabik.ui_progress.calendar.helpers.groupers.CalendarGrouper @@ -53,7 +53,7 @@ abstract class CalendarItemsCase constructor( return withContext(dispatchers.IO) { val now = nowUtc().toLocalZone() - val language = translationsRepository.getLanguage() + val locale = translationsRepository.getLocale() val dateFormat = dateFormatProvider.loadFullHourFormat() val spoilers = spoilersRepository.getAll() @@ -110,10 +110,10 @@ abstract class CalendarItemsCase constructor( val seasonUi = mappers.season.fromDatabase(season, seasonEpisodes) var translations: TranslationsBundle? = null - if (language != Config.DEFAULT_LANGUAGE) { + if (locale != AppLocale.default()) { translations = TranslationsBundle( - episode = translationsRepository.loadTranslation(episodeUi, show.ids.trakt, language, onlyLocal = true), - show = translationsRepository.loadTranslation(show, language, onlyLocal = true) + episode = translationsRepository.loadTranslation(episodeUi, show.ids.trakt, locale, onlyLocal = true), + show = translationsRepository.loadTranslation(show, locale, onlyLocal = true) ) } CalendarListItem.Episode( diff --git a/ui-progress/src/main/java/com/michaldrabik/ui_progress/history/HistoryViewModel.kt b/ui-progress/src/main/java/com/michaldrabik/ui_progress/history/HistoryViewModel.kt index 5961982f98..8041731ca7 100644 --- a/ui-progress/src/main/java/com/michaldrabik/ui_progress/history/HistoryViewModel.kt +++ b/ui-progress/src/main/java/com/michaldrabik/ui_progress/history/HistoryViewModel.kt @@ -2,7 +2,6 @@ package com.michaldrabik.ui_progress.history import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.michaldrabik.common.Config import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.repository.images.ShowImagesProvider import com.michaldrabik.repository.settings.SettingsRepository @@ -12,6 +11,7 @@ import com.michaldrabik.ui_base.utilities.extensions.findReplace import com.michaldrabik.ui_model.HistoryPeriod import com.michaldrabik.ui_model.IdTrakt import com.michaldrabik.ui_model.Image +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_progress.history.entities.HistoryListItem import com.michaldrabik.ui_progress.history.usecases.GetHistoryItemsCase import com.michaldrabik.ui_progress.main.ProgressMainUiState @@ -100,16 +100,16 @@ internal class HistoryViewModel @Inject constructor( fun findMissingTranslation(item: HistoryListItem) { check(item is HistoryListItem.Episode) val showId = item.show.ids.trakt - val language = translationsRepository.getLanguage() + val locale = translationsRepository.getLocale() if (item.translations?.show != null || - language == Config.DEFAULT_LANGUAGE || + locale == AppLocale.default() || translationJobs.contains(showId) ) { return } viewModelScope.launch { try { - val translation = translationsRepository.loadTranslation(item.show, language) + val translation = translationsRepository.loadTranslation(item.show, locale) val translations = item.translations?.copy(show = translation) updateItem(item.copy(translations = translations)) } catch (error: Throwable) { diff --git a/ui-progress/src/main/java/com/michaldrabik/ui_progress/history/usecases/GetHistoryItemsCase.kt b/ui-progress/src/main/java/com/michaldrabik/ui_progress/history/usecases/GetHistoryItemsCase.kt index 54ea0b0fdf..8712e60e3c 100644 --- a/ui-progress/src/main/java/com/michaldrabik/ui_progress/history/usecases/GetHistoryItemsCase.kt +++ b/ui-progress/src/main/java/com/michaldrabik/ui_progress/history/usecases/GetHistoryItemsCase.kt @@ -1,6 +1,5 @@ package com.michaldrabik.ui_progress.history.usecases -import com.michaldrabik.common.Config.DEFAULT_LANGUAGE import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.common.extensions.dateFromMillis import com.michaldrabik.common.extensions.nowUtcMillis @@ -27,6 +26,7 @@ import com.michaldrabik.ui_model.HistoryPeriod.THIS_MONTH import com.michaldrabik.ui_model.HistoryPeriod.THIS_WEEK import com.michaldrabik.ui_model.ImageType import com.michaldrabik.ui_model.Show +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_progress.helpers.TranslationsBundle import com.michaldrabik.ui_progress.history.entities.HistoryListItem import com.michaldrabik.ui_progress.history.utilities.groupers.HistoryItemsGrouper @@ -82,7 +82,7 @@ internal class GetHistoryItemsCase @Inject constructor( val localEpisodes = episodes as List val localSeasons = seasons as List - val language = translationsRepository.getLanguage() + val locale = translationsRepository.getLocale() val dateFormat = dateFormatProvider.loadFullHourFormat() val items = localEpisodes @@ -111,7 +111,7 @@ internal class GetHistoryItemsCase @Inject constructor( season = seasonUi, episode = episodeUi, image = imagesProvider.findCachedImage(show, ImageType.POSTER), - translations = getTranslation(language, show, episodeUi), + translations = getTranslation(locale, show, episodeUi), dateFormat = dateFormat, ) } @@ -123,7 +123,7 @@ internal class GetHistoryItemsCase @Inject constructor( val searchItems = filterByQuery(searchQuery, dateFormat, items) val groupedItems = grouper.groupByDay( items = searchItems, - language = language, + language = locale.language.code, ) filtersItem + groupedItems } @@ -146,22 +146,22 @@ internal class GetHistoryItemsCase @Inject constructor( } private suspend fun getTranslation( - language: String, + locale: AppLocale, show: Show, episode: EpisodeUi ): TranslationsBundle? { - if (language == DEFAULT_LANGUAGE) { + if (locale == AppLocale.default()) { return null } return TranslationsBundle( episode = translationsRepository.loadTranslation( - language = language, + locale = locale, showId = show.ids.trakt, episode = episode, onlyLocal = true ), show = translationsRepository.loadTranslation( - language = language, + locale = locale, show = show, onlyLocal = true ) diff --git a/ui-progress/src/main/java/com/michaldrabik/ui_progress/progress/ProgressViewModel.kt b/ui-progress/src/main/java/com/michaldrabik/ui_progress/progress/ProgressViewModel.kt index 34b0beceb7..f3c101dabd 100644 --- a/ui-progress/src/main/java/com/michaldrabik/ui_progress/progress/ProgressViewModel.kt +++ b/ui-progress/src/main/java/com/michaldrabik/ui_progress/progress/ProgressViewModel.kt @@ -3,7 +3,6 @@ package com.michaldrabik.ui_progress.progress import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import androidx.work.WorkManager -import com.michaldrabik.common.Config import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.repository.UserTraktManager import com.michaldrabik.repository.images.ShowImagesProvider @@ -18,6 +17,7 @@ import com.michaldrabik.ui_model.EpisodeBundle import com.michaldrabik.ui_model.Image import com.michaldrabik.ui_model.SortOrder import com.michaldrabik.ui_model.SortType +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_progress.main.EpisodeCheckActionUiEvent import com.michaldrabik.ui_progress.main.ProgressMainUiState import com.michaldrabik.ui_progress.main.RequestWidgetsUpdate @@ -125,11 +125,11 @@ class ProgressViewModel @Inject constructor( fun findMissingTranslation(item: ProgressListItem) { check(item is ProgressListItem.Episode) - val language = translationsRepository.getLanguage() - if (item.translations?.show != null || language == Config.DEFAULT_LANGUAGE) return + val locale = translationsRepository.getLocale() + if (item.translations?.show != null || locale == AppLocale.default()) return viewModelScope.launch { try { - val translation = translationsRepository.loadTranslation(item.show, language) + val translation = translationsRepository.loadTranslation(item.show, locale) val translations = item.translations?.copy(show = translation) updateItem(item.copy(translations = translations)) } catch (error: Throwable) { diff --git a/ui-progress/src/main/java/com/michaldrabik/ui_progress/progress/cases/ProgressItemsCase.kt b/ui-progress/src/main/java/com/michaldrabik/ui_progress/progress/cases/ProgressItemsCase.kt index 3a406590f2..fdb64aaa2e 100644 --- a/ui-progress/src/main/java/com/michaldrabik/ui_progress/progress/cases/ProgressItemsCase.kt +++ b/ui-progress/src/main/java/com/michaldrabik/ui_progress/progress/cases/ProgressItemsCase.kt @@ -1,6 +1,5 @@ package com.michaldrabik.ui_progress.progress.cases -import com.michaldrabik.common.Config import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.common.extensions.nowUtc import com.michaldrabik.common.extensions.toMillis @@ -21,6 +20,7 @@ import com.michaldrabik.ui_model.ProgressNextEpisodeType import com.michaldrabik.ui_model.ProgressNextEpisodeType.LAST_WATCHED import com.michaldrabik.ui_model.ProgressNextEpisodeType.OLDEST import com.michaldrabik.ui_model.ProgressType +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_progress.R import com.michaldrabik.ui_progress.helpers.ProgressItemsSorter import com.michaldrabik.ui_progress.helpers.TranslationsBundle @@ -58,7 +58,7 @@ class ProgressItemsCase @Inject constructor( val nowUtc = nowUtc() val dateFormat = dateFormatProvider.loadFullHourFormat() - val language = translationsRepository.getLanguage() + val locale = translationsRepository.getLocale() val nextEpisodeType = settingsRepository.progressNextEpisodeType val progressUpcomingDays = settingsRepository.progressUpcomingDays val isUpcomingEnabled = progressUpcomingDays > 0 @@ -110,10 +110,10 @@ class ProgressItemsCase @Inject constructor( val isOnHold = onHoldItemsRepository.isOnHold(it.show) var translations: TranslationsBundle? = null - if (language != Config.DEFAULT_LANGUAGE) { + if (locale != AppLocale.default()) { translations = TranslationsBundle( - show = translationsRepository.loadTranslation(it.show, language, onlyLocal = true), - episode = translationsRepository.loadTranslation(it.episode ?: EpisodeUi.EMPTY, it.show.ids.trakt, language, onlyLocal = true) + show = translationsRepository.loadTranslation(it.show, locale, onlyLocal = true), + episode = translationsRepository.loadTranslation(it.episode ?: EpisodeUi.EMPTY, it.show.ids.trakt, locale, onlyLocal = true) ) } diff --git a/ui-search/src/main/java/com/michaldrabik/ui_search/SearchViewModel.kt b/ui-search/src/main/java/com/michaldrabik/ui_search/SearchViewModel.kt index babb6ce815..3197830ab7 100644 --- a/ui-search/src/main/java/com/michaldrabik/ui_search/SearchViewModel.kt +++ b/ui-search/src/main/java/com/michaldrabik/ui_search/SearchViewModel.kt @@ -2,7 +2,6 @@ package com.michaldrabik.ui_search import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.michaldrabik.common.Config import com.michaldrabik.common.Config.SEARCH_RECENTS_AMOUNT import com.michaldrabik.common.Mode import com.michaldrabik.repository.images.MovieImagesProvider @@ -18,6 +17,7 @@ import com.michaldrabik.ui_model.Image import com.michaldrabik.ui_model.RecentSearch import com.michaldrabik.ui_model.SortOrder import com.michaldrabik.ui_model.SortType +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_search.cases.SearchFiltersCase import com.michaldrabik.ui_search.cases.SearchInvalidateItemCase import com.michaldrabik.ui_search.cases.SearchQueryCase @@ -226,7 +226,7 @@ class SearchViewModel @Inject constructor( } fun loadMissingSuggestionTranslation(item: SearchListItem) { - if (item.translation != null || searchTranslationsCase.getLanguage() == Config.DEFAULT_LANGUAGE) { + if (item.translation != null || searchTranslationsCase.getLocale() == AppLocale.default()) { return } viewModelScope.launch { diff --git a/ui-search/src/main/java/com/michaldrabik/ui_search/cases/SearchQueryCase.kt b/ui-search/src/main/java/com/michaldrabik/ui_search/cases/SearchQueryCase.kt index acac46a4aa..11cef7b037 100644 --- a/ui-search/src/main/java/com/michaldrabik/ui_search/cases/SearchQueryCase.kt +++ b/ui-search/src/main/java/com/michaldrabik/ui_search/cases/SearchQueryCase.kt @@ -1,6 +1,5 @@ package com.michaldrabik.ui_search.cases -import com.michaldrabik.common.Config import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.data_remote.RemoteDataSource import com.michaldrabik.repository.TranslationsRepository @@ -15,6 +14,7 @@ import com.michaldrabik.ui_model.Movie import com.michaldrabik.ui_model.SearchResult import com.michaldrabik.ui_model.Show import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_search.recycler.SearchListItem import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.async @@ -87,11 +87,11 @@ class SearchQueryCase @Inject constructor( } private suspend fun loadTranslation(result: SearchResult): Translation? { - val language = translationsRepository.getLanguage() - if (language == Config.DEFAULT_LANGUAGE) return Translation.EMPTY + val locale = translationsRepository.getLocale() + if (locale == AppLocale.default()) return Translation.EMPTY return when { - result.isShow -> translationsRepository.loadTranslation(result.show, language, onlyLocal = true) - else -> translationsRepository.loadTranslation(result.movie, language, onlyLocal = true) + result.isShow -> translationsRepository.loadTranslation(result.show, locale, onlyLocal = true) + else -> translationsRepository.loadTranslation(result.movie, locale, onlyLocal = true) } } } diff --git a/ui-search/src/main/java/com/michaldrabik/ui_search/cases/SearchSuggestionsCase.kt b/ui-search/src/main/java/com/michaldrabik/ui_search/cases/SearchSuggestionsCase.kt index 9621c04ce1..f08c010948 100644 --- a/ui-search/src/main/java/com/michaldrabik/ui_search/cases/SearchSuggestionsCase.kt +++ b/ui-search/src/main/java/com/michaldrabik/ui_search/cases/SearchSuggestionsCase.kt @@ -1,6 +1,5 @@ package com.michaldrabik.ui_search.cases -import com.michaldrabik.common.Config import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.data_local.LocalDataSource import com.michaldrabik.repository.TranslationsRepository @@ -15,6 +14,7 @@ import com.michaldrabik.ui_model.Movie import com.michaldrabik.ui_model.SearchResult import com.michaldrabik.ui_model.Show import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_search.recycler.SearchListItem import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.async @@ -44,18 +44,18 @@ class SearchSuggestionsCase @Inject constructor( private var movieTranslationsCache: Map? = null suspend fun preloadCache() = withContext(dispatchers.IO) { - val language = translationsRepository.getLanguage() + val locale = translationsRepository.getLocale() val moviesEnabled = settingsRepository.isMoviesEnabled if (showsCache == null) showsCache = localSource.shows.getAll() if (moviesEnabled && moviesCache == null) moviesCache = localSource.movies.getAll() - if (translationsRepository.getLanguage() != Config.DEFAULT_LANGUAGE) { + if (translationsRepository.getLocale() != AppLocale.default()) { if (showTranslationsCache == null) { - showTranslationsCache = translationsRepository.loadAllShowsLocal(language) + showTranslationsCache = translationsRepository.loadAllShowsLocal(locale) } if (moviesEnabled && movieTranslationsCache == null) { - movieTranslationsCache = translationsRepository.loadAllMoviesLocal(language) + movieTranslationsCache = translationsRepository.loadAllMoviesLocal(locale) } } } @@ -132,11 +132,11 @@ class SearchSuggestionsCase @Inject constructor( } private suspend fun loadTranslation(result: SearchResult): Translation? { - val language = translationsRepository.getLanguage() - if (language == Config.DEFAULT_LANGUAGE) return Translation.EMPTY + val locale = translationsRepository.getLocale() + if (locale == AppLocale.default()) return Translation.EMPTY return when { - result.isShow -> translationsRepository.loadTranslation(result.show, language, onlyLocal = true) - else -> translationsRepository.loadTranslation(result.movie, language, onlyLocal = true) + result.isShow -> translationsRepository.loadTranslation(result.show, locale, onlyLocal = true) + else -> translationsRepository.loadTranslation(result.movie, locale, onlyLocal = true) } } diff --git a/ui-search/src/main/java/com/michaldrabik/ui_search/cases/SearchTranslationsCase.kt b/ui-search/src/main/java/com/michaldrabik/ui_search/cases/SearchTranslationsCase.kt index 28a102cca9..e4db06e11d 100644 --- a/ui-search/src/main/java/com/michaldrabik/ui_search/cases/SearchTranslationsCase.kt +++ b/ui-search/src/main/java/com/michaldrabik/ui_search/cases/SearchTranslationsCase.kt @@ -1,11 +1,11 @@ package com.michaldrabik.ui_search.cases -import com.michaldrabik.common.Config import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.ui_model.Movie import com.michaldrabik.ui_model.Show import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.withContext import javax.inject.Inject @@ -16,21 +16,21 @@ class SearchTranslationsCase @Inject constructor( private val translationsRepository: TranslationsRepository, ) { - fun getLanguage() = translationsRepository.getLanguage() + fun getLocale() = translationsRepository.getLocale() suspend fun loadTranslation(show: Show): Translation? = withContext(dispatchers.IO) { - val language = getLanguage() - if (language == Config.DEFAULT_LANGUAGE) { + val locale = getLocale() + if (locale == AppLocale.default()) { return@withContext Translation.EMPTY } - translationsRepository.loadTranslation(show, language) + translationsRepository.loadTranslation(show, locale) } suspend fun loadTranslation(movie: Movie): Translation? = withContext(dispatchers.IO) { - val language = getLanguage() - if (language == Config.DEFAULT_LANGUAGE) { + val locale = getLocale() + if (locale == AppLocale.default()) { return@withContext Translation.EMPTY } - translationsRepository.loadTranslation(movie, language) + translationsRepository.loadTranslation(movie, locale) } } diff --git a/ui-search/src/test/java/com.michaldrabik.ui_search/cases/SearchSuggestionsCaseTest.kt b/ui-search/src/test/java/com.michaldrabik.ui_search/cases/SearchSuggestionsCaseTest.kt index daac2c44b5..36ded7993f 100644 --- a/ui-search/src/test/java/com.michaldrabik.ui_search/cases/SearchSuggestionsCaseTest.kt +++ b/ui-search/src/test/java/com.michaldrabik.ui_search/cases/SearchSuggestionsCaseTest.kt @@ -11,6 +11,9 @@ import com.michaldrabik.repository.mappers.Mappers import com.michaldrabik.repository.movies.MoviesRepository import com.michaldrabik.repository.settings.SettingsRepository import com.michaldrabik.repository.shows.ShowsRepository +import com.michaldrabik.ui_model.locale.AppCountry +import com.michaldrabik.ui_model.locale.AppLanguage +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_search.BaseMockTest import io.mockk.clearAllMocks import io.mockk.coEvery @@ -25,6 +28,10 @@ import org.junit.Test @OptIn(ExperimentalCoroutinesApi::class) class SearchSuggestionsCaseTest : BaseMockTest() { + companion object { + val TEST_LOCALE = AppLocale.fromCode("pt_br") + } + @RelaxedMockK lateinit var database: LocalDataSource @RelaxedMockK lateinit var showsDao: ShowsDao @RelaxedMockK lateinit var moviesDao: MoviesDao @@ -43,7 +50,7 @@ class SearchSuggestionsCaseTest : BaseMockTest() { super.setUp() coEvery { settingsRepository.isMoviesEnabled } returns true - coEvery { translationsRepository.getLanguage() } returns "en" + coEvery { translationsRepository.getLocale() } returns TEST_LOCALE coEvery { database.shows } returns showsDao coEvery { database.movies } returns moviesDao @@ -102,7 +109,7 @@ class SearchSuggestionsCaseTest : BaseMockTest() { @Test fun `Should skip preload local movies translations cache if not default language but movies are disabled`() = runTest { - coEvery { translationsRepository.getLanguage() } returns "br" + coEvery { translationsRepository.getLocale() } returns TEST_LOCALE coEvery { settingsRepository.isMoviesEnabled } returns false SUT.preloadCache() @@ -118,12 +125,12 @@ class SearchSuggestionsCaseTest : BaseMockTest() { @Test fun `Should preload local translations cache`() = runTest { - coEvery { translationsRepository.getLanguage() } returns "br" + coEvery { translationsRepository.getLocale() } returns TEST_LOCALE SUT.preloadCache() - coVerify(exactly = 1) { translationsRepository.loadAllShowsLocal("br") } - coVerify(exactly = 1) { translationsRepository.loadAllMoviesLocal("br") } + coVerify(exactly = 1) { translationsRepository.loadAllShowsLocal(TEST_LOCALE) } + coVerify(exactly = 1) { translationsRepository.loadAllMoviesLocal(TEST_LOCALE)} } @Test @@ -137,7 +144,7 @@ class SearchSuggestionsCaseTest : BaseMockTest() { @Test fun `Should clear local caches properly`() = runTest { - coEvery { translationsRepository.getLanguage() } returns "br" + coEvery { translationsRepository.getLocale() } returns TEST_LOCALE SUT.preloadCache() SUT.clearCache() @@ -145,7 +152,7 @@ class SearchSuggestionsCaseTest : BaseMockTest() { coVerify(exactly = 2) { showsDao.getAll() } coVerify(exactly = 2) { moviesDao.getAll() } - coVerify(exactly = 2) { translationsRepository.loadAllShowsLocal("br") } - coVerify(exactly = 2) { translationsRepository.loadAllMoviesLocal("br") } + coVerify(exactly = 2) { translationsRepository.loadAllShowsLocal(TEST_LOCALE) } + coVerify(exactly = 2) { translationsRepository.loadAllMoviesLocal(TEST_LOCALE) } } } diff --git a/ui-search/src/test/java/com.michaldrabik.ui_search/cases/SearchTranslationsCaseTest.kt b/ui-search/src/test/java/com.michaldrabik.ui_search/cases/SearchTranslationsCaseTest.kt index 9e4524113d..43dbaec675 100644 --- a/ui-search/src/test/java/com.michaldrabik.ui_search/cases/SearchTranslationsCaseTest.kt +++ b/ui-search/src/test/java/com.michaldrabik.ui_search/cases/SearchTranslationsCaseTest.kt @@ -5,6 +5,7 @@ import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.ui_model.Movie import com.michaldrabik.ui_model.Show import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_search.BaseMockTest import io.mockk.clearAllMocks import io.mockk.coEvery @@ -38,52 +39,52 @@ class SearchTranslationsCaseTest : BaseMockTest() { @Test fun `Should return empty show translation if language is default`() = runTest { - coEvery { translationsRepository.getLanguage() } returns "en" + coEvery { translationsRepository.getLocale() } returns AppLocale.fromCode("en_us") val item = mockk() val result = SUT.loadTranslation(item) assertThat(result).isEqualTo(Translation.EMPTY) - coVerify(exactly = 1) { translationsRepository.getLanguage() } + coVerify(exactly = 1) { translationsRepository.getLocale() } confirmVerified(translationsRepository) } @Test fun `Should return empty movie translation if language is default`() = runTest { - coEvery { translationsRepository.getLanguage() } returns "en" + coEvery { translationsRepository.getLocale() } returns AppLocale.fromCode("en_us") val item = mockk() val result = SUT.loadTranslation(item) assertThat(result).isEqualTo(Translation.EMPTY) - coVerify(exactly = 1) { translationsRepository.getLanguage() } + coVerify(exactly = 1) { translationsRepository.getLocale() } confirmVerified(translationsRepository) } @Test fun `Should return show translation if language is not default`() = runTest { - coEvery { translationsRepository.getLanguage() } returns "pl" + coEvery { translationsRepository.getLocale() } returns AppLocale.fromCode("pl_pl") coEvery { translationsRepository.loadTranslation(any(), any(), any()) } returns Translation.EMPTY val item = mockk() val result = SUT.loadTranslation(item) assertThat(result).isNotNull() - coVerify(exactly = 1) { translationsRepository.getLanguage() } + coVerify(exactly = 1) { translationsRepository.getLocale() } coVerify(exactly = 1) { translationsRepository.loadTranslation(any(), any(), any()) } confirmVerified(translationsRepository) } @Test fun `Should return movie translation if language is not default`() = runTest { - coEvery { translationsRepository.getLanguage() } returns "pl" + coEvery { translationsRepository.getLocale() } returns AppLocale.fromCode("pl_pl") coEvery { translationsRepository.loadTranslation(any(), any(), any()) } returns Translation.EMPTY val item = mockk() val result = SUT.loadTranslation(item) assertThat(result).isNotNull() - coVerify(exactly = 1) { translationsRepository.getLanguage() } + coVerify(exactly = 1) { translationsRepository.getLocale() } coVerify(exactly = 1) { translationsRepository.loadTranslation(any(), any(), any()) } confirmVerified(translationsRepository) } diff --git a/ui-settings/src/main/java/com/michaldrabik/ui_settings/sections/general/SettingsGeneralFragment.kt b/ui-settings/src/main/java/com/michaldrabik/ui_settings/sections/general/SettingsGeneralFragment.kt index 52bcf967e8..543d2c3972 100644 --- a/ui-settings/src/main/java/com/michaldrabik/ui_settings/sections/general/SettingsGeneralFragment.kt +++ b/ui-settings/src/main/java/com/michaldrabik/ui_settings/sections/general/SettingsGeneralFragment.kt @@ -11,7 +11,7 @@ import com.michaldrabik.common.Config import com.michaldrabik.common.extensions.nowUtc import com.michaldrabik.common.extensions.toLocalZone import com.michaldrabik.ui_base.BaseFragment -import com.michaldrabik.ui_base.common.AppCountry +import com.michaldrabik.ui_model.locale.AppCountry import com.michaldrabik.ui_base.dates.AppDateFormat import com.michaldrabik.ui_base.dates.DateFormatProvider import com.michaldrabik.ui_base.utilities.extensions.launchAndRepeatStarted @@ -29,7 +29,7 @@ import com.michaldrabik.ui_model.Settings import com.michaldrabik.ui_navigation.java.NavigationArgs.ARG_ITEM import com.michaldrabik.ui_settings.R import com.michaldrabik.ui_settings.databinding.FragmentSettingsGeneralBinding -import com.michaldrabik.ui_settings.helpers.AppLanguage +import com.michaldrabik.ui_model.locale.AppLanguage import com.michaldrabik.ui_settings.helpers.AppTheme import dagger.hilt.android.AndroidEntryPoint diff --git a/ui-settings/src/main/java/com/michaldrabik/ui_settings/sections/general/SettingsGeneralUiState.kt b/ui-settings/src/main/java/com/michaldrabik/ui_settings/sections/general/SettingsGeneralUiState.kt index 3b1e985ccc..2e78716cde 100644 --- a/ui-settings/src/main/java/com/michaldrabik/ui_settings/sections/general/SettingsGeneralUiState.kt +++ b/ui-settings/src/main/java/com/michaldrabik/ui_settings/sections/general/SettingsGeneralUiState.kt @@ -1,12 +1,12 @@ package com.michaldrabik.ui_settings.sections.general import com.michaldrabik.common.Config -import com.michaldrabik.ui_base.common.AppCountry +import com.michaldrabik.ui_model.locale.AppCountry import com.michaldrabik.ui_base.dates.AppDateFormat import com.michaldrabik.ui_model.ProgressDateSelectionType import com.michaldrabik.ui_model.ProgressNextEpisodeType import com.michaldrabik.ui_model.Settings -import com.michaldrabik.ui_settings.helpers.AppLanguage +import com.michaldrabik.ui_model.locale.AppLanguage import com.michaldrabik.ui_settings.helpers.AppTheme data class SettingsGeneralUiState( diff --git a/ui-settings/src/main/java/com/michaldrabik/ui_settings/sections/general/SettingsGeneralViewModel.kt b/ui-settings/src/main/java/com/michaldrabik/ui_settings/sections/general/SettingsGeneralViewModel.kt index 59e90f367e..78798bfc7f 100644 --- a/ui-settings/src/main/java/com/michaldrabik/ui_settings/sections/general/SettingsGeneralViewModel.kt +++ b/ui-settings/src/main/java/com/michaldrabik/ui_settings/sections/general/SettingsGeneralViewModel.kt @@ -6,14 +6,14 @@ import androidx.core.os.LocaleListCompat import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.michaldrabik.common.Config -import com.michaldrabik.ui_base.common.AppCountry +import com.michaldrabik.ui_model.locale.AppCountry import com.michaldrabik.ui_base.dates.AppDateFormat import com.michaldrabik.ui_base.utilities.extensions.SUBSCRIBE_STOP_TIMEOUT import com.michaldrabik.ui_base.utilities.extensions.combine import com.michaldrabik.ui_model.ProgressDateSelectionType import com.michaldrabik.ui_model.ProgressNextEpisodeType import com.michaldrabik.ui_model.Settings -import com.michaldrabik.ui_settings.helpers.AppLanguage +import com.michaldrabik.ui_model.locale.AppLanguage import com.michaldrabik.ui_settings.sections.general.cases.SettingsGeneralMainCase import com.michaldrabik.ui_settings.sections.general.cases.SettingsGeneralStreamingsCase import dagger.hilt.android.lifecycle.HiltViewModel diff --git a/ui-settings/src/main/java/com/michaldrabik/ui_settings/sections/general/cases/SettingsGeneralMainCase.kt b/ui-settings/src/main/java/com/michaldrabik/ui_settings/sections/general/cases/SettingsGeneralMainCase.kt index de06e3fefb..41d8ad2114 100644 --- a/ui-settings/src/main/java/com/michaldrabik/ui_settings/sections/general/cases/SettingsGeneralMainCase.kt +++ b/ui-settings/src/main/java/com/michaldrabik/ui_settings/sections/general/cases/SettingsGeneralMainCase.kt @@ -8,14 +8,15 @@ import com.michaldrabik.common.Config import com.michaldrabik.common.Mode import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.repository.settings.SettingsRepository -import com.michaldrabik.ui_base.common.AppCountry +import com.michaldrabik.ui_model.locale.AppCountry import com.michaldrabik.ui_base.common.WidgetsProvider import com.michaldrabik.ui_base.dates.AppDateFormat import com.michaldrabik.ui_base.notifications.AnnouncementManager import com.michaldrabik.ui_model.ProgressDateSelectionType import com.michaldrabik.ui_model.ProgressNextEpisodeType import com.michaldrabik.ui_model.Settings -import com.michaldrabik.ui_settings.helpers.AppLanguage +import com.michaldrabik.ui_model.locale.AppLanguage +import com.michaldrabik.ui_model.locale.AppLocale import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.withContext import javax.inject.Inject @@ -75,30 +76,39 @@ class SettingsGeneralMainCase @Inject constructor( if (!locales.isEmpty) { val locale = locales.get(0)!!.language val language = AppLanguage.fromCode(locale) - if (settingsRepository.language != locale) { + if (settingsRepository.locale.language.code != locale) { setLanguage(language) } return language } } - return AppLanguage.fromCode(settingsRepository.language) + return settingsRepository.locale.language } suspend fun setLanguage(language: AppLanguage) { settingsRepository.run { - this.language = language.code - val unused = AppLanguage.values() + this.locale = AppLocale(language, locale.country) + val unused = AppLanguage.entries .filter { it.code != Config.DEFAULT_LANGUAGE && it != language } .map { it.code } - clearUnusedTranslations(unused) + clearUnusedTranslationsByLanguage(unused) clearLanguageLogs() } } - fun getCountry() = AppCountry.fromCode(settingsRepository.country) + fun getCountry(): AppCountry { + return AppCountry.fromCode(settingsRepository.locale.country.code) + } - fun setCountry(country: AppCountry) { - settingsRepository.country = country.code + suspend fun setCountry(country: AppCountry) { + settingsRepository.run { + this.locale = AppLocale(locale.language, country) + val unused = AppCountry.entries + .filter { it.code != Config.DEFAULT_COUNTRY && it != country } + .map { it.code } + clearUnusedTranslationsByCountry(unused) + clearLanguageLogs() + } } fun getProgressType() = settingsRepository.progressNextEpisodeType diff --git a/ui-settings/src/main/res/values/strings.xml b/ui-settings/src/main/res/values/strings.xml index 6a62629fd5..e6b6902b1b 100644 --- a/ui-settings/src/main/res/values/strings.xml +++ b/ui-settings/src/main/res/values/strings.xml @@ -115,21 +115,6 @@ Always ask Always \"Now\" - English - Polski - العربية - 中文简体 - Español - Italiano - Français - Dansk - Português brasileiro - Türkçe - Українська - Deutsch - Pусский - Suomi - Dark Light System diff --git a/ui-show/src/main/java/com/michaldrabik/ui_show/cases/ShowDetailsTranslationCase.kt b/ui-show/src/main/java/com/michaldrabik/ui_show/cases/ShowDetailsTranslationCase.kt index dea6528f5e..57ba41559f 100644 --- a/ui-show/src/main/java/com/michaldrabik/ui_show/cases/ShowDetailsTranslationCase.kt +++ b/ui-show/src/main/java/com/michaldrabik/ui_show/cases/ShowDetailsTranslationCase.kt @@ -1,10 +1,10 @@ package com.michaldrabik.ui_show.cases -import com.michaldrabik.common.Config.DEFAULT_LANGUAGE import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.ui_model.Show import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.withContext import javax.inject.Inject @@ -17,10 +17,10 @@ class ShowDetailsTranslationCase @Inject constructor( suspend fun loadTranslation(show: Show): Translation? = withContext(dispatchers.IO) { - val language = translationsRepository.getLanguage() - if (language == DEFAULT_LANGUAGE) { + val locale = translationsRepository.getLocale() + if (locale == AppLocale.default()) { return@withContext null } - translationsRepository.loadTranslation(show, language) + translationsRepository.loadTranslation(show, locale) } } diff --git a/ui-show/src/main/java/com/michaldrabik/ui_show/episodes/ShowDetailsEpisodesViewModel.kt b/ui-show/src/main/java/com/michaldrabik/ui_show/episodes/ShowDetailsEpisodesViewModel.kt index f27762e2b3..f5e2b3dad5 100644 --- a/ui-show/src/main/java/com/michaldrabik/ui_show/episodes/ShowDetailsEpisodesViewModel.kt +++ b/ui-show/src/main/java/com/michaldrabik/ui_show/episodes/ShowDetailsEpisodesViewModel.kt @@ -145,7 +145,7 @@ class ShowDetailsEpisodesViewModel @Inject constructor( val episode = episodes.find { it.id == translation.ids.trakt.id } episode?.let { ep -> if (translation.title.isNotBlank() || translation.overview.isNotBlank()) { - val t = Translation(translation.title, translation.overview, translation.language) + val t = Translation(translation.title, translation.overview, translation.language, translation.country) val withTranslation = ep.copy(translation = t) episodes.findReplace(withTranslation) { it.id == withTranslation.id } } diff --git a/ui-show/src/main/java/com/michaldrabik/ui_show/episodes/cases/EpisodesTranslationCase.kt b/ui-show/src/main/java/com/michaldrabik/ui_show/episodes/cases/EpisodesTranslationCase.kt index 31371c30d6..c8dea4491f 100644 --- a/ui-show/src/main/java/com/michaldrabik/ui_show/episodes/cases/EpisodesTranslationCase.kt +++ b/ui-show/src/main/java/com/michaldrabik/ui_show/episodes/cases/EpisodesTranslationCase.kt @@ -1,11 +1,11 @@ package com.michaldrabik.ui_show.episodes.cases -import com.michaldrabik.common.Config.DEFAULT_LANGUAGE import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.ui_model.Season import com.michaldrabik.ui_model.SeasonTranslation import com.michaldrabik.ui_model.Show +import com.michaldrabik.ui_model.locale.AppLocale import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.withContext import javax.inject.Inject @@ -22,11 +22,11 @@ class EpisodesTranslationCase @Inject constructor( return@withContext emptyList() } - val language = translationsRepository.getLanguage() - if (language == DEFAULT_LANGUAGE) { + val locale = translationsRepository.getLocale() + if (locale == AppLocale.default()) { return@withContext emptyList() } - translationsRepository.loadTranslations(season, show.ids.trakt, language) + translationsRepository.loadTranslations(season, show.ids.trakt, locale) } } diff --git a/ui-show/src/main/java/com/michaldrabik/ui_show/sections/nextepisode/cases/ShowDetailsTranslationCase.kt b/ui-show/src/main/java/com/michaldrabik/ui_show/sections/nextepisode/cases/ShowDetailsTranslationCase.kt index 48001ef56c..dd5f01978f 100644 --- a/ui-show/src/main/java/com/michaldrabik/ui_show/sections/nextepisode/cases/ShowDetailsTranslationCase.kt +++ b/ui-show/src/main/java/com/michaldrabik/ui_show/sections/nextepisode/cases/ShowDetailsTranslationCase.kt @@ -1,11 +1,11 @@ package com.michaldrabik.ui_show.sections.nextepisode.cases -import com.michaldrabik.common.Config.DEFAULT_LANGUAGE import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.repository.TranslationsRepository import com.michaldrabik.ui_model.Episode import com.michaldrabik.ui_model.Show import com.michaldrabik.ui_model.Translation +import com.michaldrabik.ui_model.locale.AppLocale import dagger.hilt.android.scopes.ViewModelScoped import kotlinx.coroutines.withContext import javax.inject.Inject @@ -21,10 +21,10 @@ class ShowDetailsTranslationCase @Inject constructor( show: Show, onlyLocal: Boolean = false, ): Translation? = withContext(dispatchers.IO) { - val language = translationsRepository.getLanguage() - if (language == DEFAULT_LANGUAGE) { + val locale = translationsRepository.getLocale() + if (locale == AppLocale.default()) { return@withContext null } - translationsRepository.loadTranslation(episode, show.ids.trakt, language, onlyLocal) + translationsRepository.loadTranslation(episode, show.ids.trakt, locale, onlyLocal) } } diff --git a/ui-show/src/main/java/com/michaldrabik/ui_show/sections/ratings/ShowDetailsRatingsFragment.kt b/ui-show/src/main/java/com/michaldrabik/ui_show/sections/ratings/ShowDetailsRatingsFragment.kt index dc5686de17..8e1dcc5b3a 100644 --- a/ui-show/src/main/java/com/michaldrabik/ui_show/sections/ratings/ShowDetailsRatingsFragment.kt +++ b/ui-show/src/main/java/com/michaldrabik/ui_show/sections/ratings/ShowDetailsRatingsFragment.kt @@ -4,7 +4,7 @@ import android.os.Bundle import android.view.View import androidx.fragment.app.viewModels import com.michaldrabik.ui_base.BaseFragment -import com.michaldrabik.ui_base.common.AppCountry +import com.michaldrabik.ui_model.locale.AppCountry import com.michaldrabik.ui_base.utilities.events.MessageEvent import com.michaldrabik.ui_base.utilities.extensions.launchAndRepeatStarted import com.michaldrabik.ui_base.utilities.extensions.openImdbUrl diff --git a/ui-show/src/main/java/com/michaldrabik/ui_show/sections/ratings/ShowLink.kt b/ui-show/src/main/java/com/michaldrabik/ui_show/sections/ratings/ShowLink.kt index 98811d3cd3..9ec0beac4d 100644 --- a/ui-show/src/main/java/com/michaldrabik/ui_show/sections/ratings/ShowLink.kt +++ b/ui-show/src/main/java/com/michaldrabik/ui_show/sections/ratings/ShowLink.kt @@ -1,7 +1,7 @@ package com.michaldrabik.ui_show.sections.ratings import android.net.Uri -import com.michaldrabik.ui_base.common.AppCountry +import com.michaldrabik.ui_model.locale.AppCountry enum class ShowLink { IMDB, diff --git a/ui-show/src/main/java/com/michaldrabik/ui_show/sections/streamings/cases/ShowDetailsStreamingCase.kt b/ui-show/src/main/java/com/michaldrabik/ui_show/sections/streamings/cases/ShowDetailsStreamingCase.kt index 75cde6b363..daefd908e0 100644 --- a/ui-show/src/main/java/com/michaldrabik/ui_show/sections/streamings/cases/ShowDetailsStreamingCase.kt +++ b/ui-show/src/main/java/com/michaldrabik/ui_show/sections/streamings/cases/ShowDetailsStreamingCase.kt @@ -5,7 +5,7 @@ import com.michaldrabik.common.dispatchers.CoroutineDispatchers import com.michaldrabik.common.extensions.nowUtc import com.michaldrabik.repository.settings.SettingsRepository import com.michaldrabik.repository.shows.ShowStreamingsRepository -import com.michaldrabik.ui_base.common.AppCountry +import com.michaldrabik.ui_model.locale.AppCountry import com.michaldrabik.ui_model.Show import com.michaldrabik.ui_model.StreamingService import dagger.hilt.android.scopes.ViewModelScoped @@ -24,7 +24,7 @@ class ShowDetailsStreamingCase @Inject constructor( if (!settingsRepository.streamingsEnabled) { return@withContext emptyList() } - val country = AppCountry.fromCode(settingsRepository.country) + val country = AppCountry.fromCode(settingsRepository.locale.country.code) val localData = streamingsRepository.getLocalStreamings(show, country.code) return@withContext localData.first } @@ -34,7 +34,7 @@ class ShowDetailsStreamingCase @Inject constructor( if (!settingsRepository.streamingsEnabled) { return@withContext emptyList() } - val country = AppCountry.fromCode(settingsRepository.country) + val country = AppCountry.fromCode(settingsRepository.locale.country.code) val (localItems, timestamp) = streamingsRepository.getLocalStreamings(show, country.code) if (timestamp != null && timestamp.plusSeconds(ConfigVariant.STREAMINGS_CACHE_DURATION / 1000).isAfter(nowUtc())) { return@withContext localItems diff --git a/ui-statistics/src/main/java/com/michaldrabik/ui_statistics/StatisticsViewModel.kt b/ui-statistics/src/main/java/com/michaldrabik/ui_statistics/StatisticsViewModel.kt index bd769d1ac6..653c55fc48 100644 --- a/ui-statistics/src/main/java/com/michaldrabik/ui_statistics/StatisticsViewModel.kt +++ b/ui-statistics/src/main/java/com/michaldrabik/ui_statistics/StatisticsViewModel.kt @@ -2,7 +2,6 @@ package com.michaldrabik.ui_statistics import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.michaldrabik.common.Config import com.michaldrabik.data_local.LocalDataSource import com.michaldrabik.data_local.database.model.Episode import com.michaldrabik.data_local.database.model.Season @@ -16,6 +15,7 @@ import com.michaldrabik.ui_model.Genre import com.michaldrabik.ui_model.Image import com.michaldrabik.ui_model.ImageType.POSTER import com.michaldrabik.ui_model.Show +import com.michaldrabik.ui_model.locale.AppLocale import com.michaldrabik.ui_statistics.cases.StatisticsLoadRatingsCase import com.michaldrabik.ui_statistics.views.mostWatched.StatisticsMostWatchedItem import com.michaldrabik.ui_statistics.views.ratings.recycler.StatisticsRatingItem @@ -51,7 +51,7 @@ class StatisticsViewModel @Inject constructor( fun loadData(limit: Int = 0, initialDelay: Long = 150L) { takeLimit += limit viewModelScope.launch { - val language = translationsRepository.getLanguage() + val locale = translationsRepository.getLocale() val myShows = showsRepository.myShows.loadAll() val watchlistShows = showsRepository.watchlistShows.loadAll() // Add shows from watchlist @@ -66,7 +66,7 @@ class StatisticsViewModel @Inject constructor( val genres = extractTopGenres(shows) val mostWatchedShows = shows .map { show -> - val translation = loadTranslation(language, show) + val translation = loadTranslation(locale, show) StatisticsMostWatchedItem( show = shows.first { it.traktId == show.traktId }, seasonsCount = seasons.filter { it.idShowTrakt == show.traktId }.count().toLong(), @@ -146,9 +146,9 @@ class StatisticsViewModel @Inject constructor( .toList() .filterNotNull() - private suspend fun loadTranslation(language: String, show: Show) = - if (language == Config.DEFAULT_LANGUAGE) null - else translationsRepository.loadTranslation(show, language, true) + private suspend fun loadTranslation(locale: AppLocale, show: Show) = + if (locale == AppLocale.default()) null + else translationsRepository.loadTranslation(show, locale, true) val uiState = combine( mostWatchedShowsState,