diff --git a/app/src/main/java/eu/kanade/domain/DomainModule.kt b/app/src/main/java/eu/kanade/domain/DomainModule.kt index de226f046..78bfd7300 100644 --- a/app/src/main/java/eu/kanade/domain/DomainModule.kt +++ b/app/src/main/java/eu/kanade/domain/DomainModule.kt @@ -11,8 +11,11 @@ import eu.kanade.domain.manga.interactor.GetExcludedScanlators import eu.kanade.domain.manga.interactor.SetExcludedScanlators import eu.kanade.domain.manga.interactor.SetMangaViewerFlags import eu.kanade.domain.manga.interactor.UpdateManga +import eu.kanade.domain.source.interactor.CreateSourceRepo +import eu.kanade.domain.source.interactor.DeleteSourceRepos import eu.kanade.domain.source.interactor.GetEnabledSources import eu.kanade.domain.source.interactor.GetLanguagesWithSources +import eu.kanade.domain.source.interactor.GetSourceRepos import eu.kanade.domain.source.interactor.GetSourcesWithFavoriteCount import eu.kanade.domain.source.interactor.SetMigrateSorting import eu.kanade.domain.source.interactor.ToggleLanguage @@ -167,5 +170,9 @@ class DomainModule : InjektModule { addFactory { ToggleLanguage(get()) } addFactory { ToggleSource(get()) } addFactory { ToggleSourcePin(get()) } + + addFactory { CreateSourceRepo(get()) } + addFactory { DeleteSourceRepos(get()) } + addFactory { GetSourceRepos(get()) } } } diff --git a/app/src/main/java/eu/kanade/domain/SYDomainModule.kt b/app/src/main/java/eu/kanade/domain/SYDomainModule.kt index c8ed89a5c..33656b7e4 100644 --- a/app/src/main/java/eu/kanade/domain/SYDomainModule.kt +++ b/app/src/main/java/eu/kanade/domain/SYDomainModule.kt @@ -7,7 +7,6 @@ import eu.kanade.domain.manga.interactor.GetPagePreviews import eu.kanade.domain.manga.interactor.GetSortTag import eu.kanade.domain.manga.interactor.ReorderSortTag import eu.kanade.domain.source.interactor.CreateSourceCategory -import eu.kanade.domain.source.interactor.CreateSourceRepo import eu.kanade.domain.source.interactor.DeleteSourceCategory import eu.kanade.domain.source.interactor.GetExhSavedSearch import eu.kanade.domain.source.interactor.GetShowLatest @@ -61,14 +60,12 @@ import tachiyomi.domain.source.interactor.CountFeedSavedSearchBySourceId import tachiyomi.domain.source.interactor.CountFeedSavedSearchGlobal import tachiyomi.domain.source.interactor.DeleteFeedSavedSearchById import tachiyomi.domain.source.interactor.DeleteSavedSearchById -import tachiyomi.domain.source.interactor.DeleteSourceRepos import tachiyomi.domain.source.interactor.GetFeedSavedSearchBySourceId import tachiyomi.domain.source.interactor.GetFeedSavedSearchGlobal import tachiyomi.domain.source.interactor.GetSavedSearchById import tachiyomi.domain.source.interactor.GetSavedSearchBySourceId import tachiyomi.domain.source.interactor.GetSavedSearchBySourceIdFeed import tachiyomi.domain.source.interactor.GetSavedSearchGlobalFeed -import tachiyomi.domain.source.interactor.GetSourceRepos import tachiyomi.domain.source.interactor.InsertFeedSavedSearch import tachiyomi.domain.source.interactor.InsertSavedSearch import tachiyomi.domain.source.repository.FeedSavedSearchRepository @@ -94,9 +91,6 @@ class SYDomainModule : InjektModule { addFactory { FilterSerializer() } addFactory { GetHistoryByMangaId(get()) } addFactory { GetChapterByUrl(get()) } - addFactory { CreateSourceRepo(get()) } - addFactory { DeleteSourceRepos(get()) } - addFactory { GetSourceRepos(get()) } addFactory { GetSourceCategories(get()) } addFactory { CreateSourceCategory(get()) } addFactory { RenameSourceCategory(get(), get()) } diff --git a/app/src/main/java/eu/kanade/domain/source/interactor/CreateSourceRepo.kt b/app/src/main/java/eu/kanade/domain/source/interactor/CreateSourceRepo.kt index 32333d9b4..1140b4eb9 100644 --- a/app/src/main/java/eu/kanade/domain/source/interactor/CreateSourceRepo.kt +++ b/app/src/main/java/eu/kanade/domain/source/interactor/CreateSourceRepo.kt @@ -1,9 +1,9 @@ package eu.kanade.domain.source.interactor +import eu.kanade.domain.source.service.SourcePreferences import tachiyomi.core.preference.plusAssign -import tachiyomi.domain.UnsortedPreferences -class CreateSourceRepo(private val preferences: UnsortedPreferences) { +class CreateSourceRepo(private val preferences: SourcePreferences) { fun await(name: String): Result { // Do not allow invalid formats diff --git a/domain/src/main/java/tachiyomi/domain/source/interactor/DeleteSourceRepos.kt b/app/src/main/java/eu/kanade/domain/source/interactor/DeleteSourceRepos.kt similarity index 51% rename from domain/src/main/java/tachiyomi/domain/source/interactor/DeleteSourceRepos.kt rename to app/src/main/java/eu/kanade/domain/source/interactor/DeleteSourceRepos.kt index f0dbef12d..e8cd4721a 100644 --- a/domain/src/main/java/tachiyomi/domain/source/interactor/DeleteSourceRepos.kt +++ b/app/src/main/java/eu/kanade/domain/source/interactor/DeleteSourceRepos.kt @@ -1,8 +1,8 @@ -package tachiyomi.domain.source.interactor +package eu.kanade.domain.source.interactor -import tachiyomi.domain.UnsortedPreferences +import eu.kanade.domain.source.service.SourcePreferences -class DeleteSourceRepos(private val preferences: UnsortedPreferences) { +class DeleteSourceRepos(private val preferences: SourcePreferences) { fun await(repos: List) { preferences.extensionRepos().set( diff --git a/domain/src/main/java/tachiyomi/domain/source/interactor/GetSourceRepos.kt b/app/src/main/java/eu/kanade/domain/source/interactor/GetSourceRepos.kt similarity index 58% rename from domain/src/main/java/tachiyomi/domain/source/interactor/GetSourceRepos.kt rename to app/src/main/java/eu/kanade/domain/source/interactor/GetSourceRepos.kt index 7ab7412b5..25e3b3a21 100644 --- a/domain/src/main/java/tachiyomi/domain/source/interactor/GetSourceRepos.kt +++ b/app/src/main/java/eu/kanade/domain/source/interactor/GetSourceRepos.kt @@ -1,10 +1,10 @@ -package tachiyomi.domain.source.interactor +package eu.kanade.domain.source.interactor +import eu.kanade.domain.source.service.SourcePreferences import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map -import tachiyomi.domain.UnsortedPreferences -class GetSourceRepos(private val preferences: UnsortedPreferences) { +class GetSourceRepos(private val preferences: SourcePreferences) { fun subscribe(): Flow> { return preferences.extensionRepos().changes().map { it.sortedWith(String.CASE_INSENSITIVE_ORDER) } diff --git a/app/src/main/java/eu/kanade/domain/source/service/SourcePreferences.kt b/app/src/main/java/eu/kanade/domain/source/service/SourcePreferences.kt index a27e2ae3d..defe79400 100644 --- a/app/src/main/java/eu/kanade/domain/source/service/SourcePreferences.kt +++ b/app/src/main/java/eu/kanade/domain/source/service/SourcePreferences.kt @@ -38,6 +38,8 @@ class SourcePreferences( SetMigrateSorting.Direction.ASCENDING, ) + fun extensionRepos() = preferenceStore.getStringSet("extension_repos", emptySet()) + fun extensionUpdatesCount() = preferenceStore.getInt("ext_updates_count", 0) fun trustedSignatures() = preferenceStore.getStringSet(Preference.appStateKey("trusted_signatures"), emptySet()) diff --git a/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt index 93c2c8622..18ef36439 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt @@ -156,11 +156,12 @@ private fun ExtensionDetails( item { WarningBanner(SYMR.strings.redundant_extension_message) } + // SY <-- extension.isRepoSource -> item { val uriHandler = LocalUriHandler.current WarningBanner( - SYMR.strings.repo_extension_message, + MR.strings.repo_extension_message, modifier = Modifier.clickable { extension.repoUrl ?: return@clickable uriHandler.openUri( @@ -171,7 +172,6 @@ private fun ExtensionDetails( }, ) } - // SY <-- extension.isUnofficial -> item { WarningBanner(MR.strings.unofficial_extension_message) diff --git a/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt index 98522d04a..73147f6f8 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt @@ -340,13 +340,11 @@ private fun ExtensionItemContent( val warning = when { extension is Extension.Untrusted -> MR.strings.ext_untrusted - // SY --> - extension is Extension.Installed && extension.isRepoSource -> SYMR.strings.repo_source - extension is Extension.Available && extension.isRepoSource -> SYMR.strings.repo_source - // SY <-- extension is Extension.Installed && extension.isUnofficial -> MR.strings.ext_unofficial extension is Extension.Installed && extension.isObsolete -> MR.strings.ext_obsolete + // SY --> extension is Extension.Installed && extension.isRedundant -> SYMR.strings.ext_redundant + // SY <-- extension.isNsfw -> MR.strings.ext_nsfw_short else -> null } diff --git a/app/src/main/java/eu/kanade/presentation/category/SourceRepoScreen.kt b/app/src/main/java/eu/kanade/presentation/category/SourceRepoScreen.kt index 32e42a180..780ad0f0a 100644 --- a/app/src/main/java/eu/kanade/presentation/category/SourceRepoScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/category/SourceRepoScreen.kt @@ -8,9 +8,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import eu.kanade.presentation.category.components.CategoryFloatingActionButton import eu.kanade.presentation.category.components.repo.SourceRepoContent +import eu.kanade.presentation.category.repos.RepoScreenState import eu.kanade.presentation.components.AppBar -import eu.kanade.tachiyomi.ui.category.repos.RepoScreenState -import tachiyomi.i18n.sy.SYMR +import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.components.material.topSmallPaddingValues @@ -30,7 +30,7 @@ fun SourceRepoScreen( topBar = { scrollBehavior -> AppBar( navigateUp = navigateUp, - title = stringResource(SYMR.strings.action_edit_repos), + title = stringResource(MR.strings.label_extension_repos), scrollBehavior = scrollBehavior, ) }, @@ -43,7 +43,7 @@ fun SourceRepoScreen( ) { paddingValues -> if (state.isEmpty) { EmptyScreen( - SYMR.strings.information_empty_repos, + MR.strings.information_empty_repos, modifier = Modifier.padding(paddingValues), ) return@Scaffold diff --git a/app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt b/app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt index 16eb7188a..676a5b195 100644 --- a/app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt +++ b/app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt @@ -42,12 +42,10 @@ import kotlin.time.Duration.Companion.seconds fun CategoryCreateDialog( onDismissRequest: () -> Unit, onCreate: (String) -> Unit, - // SY --> categories: ImmutableList, title: String, extraMessage: String? = null, alreadyExistsError: StringResource = MR.strings.error_category_exists, - // SY <-- ) { var name by remember { mutableStateOf("") } @@ -76,12 +74,9 @@ fun CategoryCreateDialog( Text(text = title) }, text = { - // SY --> Column { - if (extraMessage != null) { - Text(extraMessage) - } - // SY <-- + extraMessage?.let { Text(it) } + OutlinedTextField( modifier = Modifier .focusRequester(focusRequester), @@ -101,9 +96,7 @@ fun CategoryCreateDialog( isError = name.isNotEmpty() && nameAlreadyExists, singleLine = true, ) - // SY --> } - // SY <-- }, ) @@ -118,11 +111,9 @@ fun CategoryCreateDialog( fun CategoryRenameDialog( onDismissRequest: () -> Unit, onRename: (String) -> Unit, - // SY --> categories: ImmutableList, category: String, alreadyExistsError: StringResource = MR.strings.error_category_exists, - // SY <-- ) { var name by remember { mutableStateOf(category) } var valueHasChanged by remember { mutableStateOf(false) } @@ -185,10 +176,8 @@ fun CategoryRenameDialog( fun CategoryDeleteDialog( onDismissRequest: () -> Unit, onDelete: () -> Unit, - // SY --> title: String, text: String, - // SY <-- ) { AlertDialog( onDismissRequest = onDismissRequest, @@ -351,7 +340,3 @@ fun ChangeCategoryDialog( }, ) } - -private fun List.anyWithName(name: String): Boolean { - return any { name == it.name } -} diff --git a/app/src/main/java/eu/kanade/presentation/category/components/repo/SourceRepoContent.kt b/app/src/main/java/eu/kanade/presentation/category/components/repo/SourceRepoContent.kt index 945b02370..b3cda3fb1 100644 --- a/app/src/main/java/eu/kanade/presentation/category/components/repo/SourceRepoContent.kt +++ b/app/src/main/java/eu/kanade/presentation/category/components/repo/SourceRepoContent.kt @@ -2,11 +2,23 @@ package eu.kanade.presentation.category.components.repo import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.items +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.outlined.Label +import androidx.compose.material.icons.outlined.Delete +import androidx.compose.material3.ElevatedCard +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import kotlinx.collections.immutable.ImmutableList import tachiyomi.presentation.core.components.material.padding @@ -17,11 +29,13 @@ fun SourceRepoContent( lazyListState: LazyListState, paddingValues: PaddingValues, onClickDelete: (String) -> Unit, + modifier: Modifier = Modifier, ) { LazyColumn( state = lazyListState, contentPadding = paddingValues, verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), + modifier = modifier, ) { items(repos) { repo -> SourceRepoListItem( @@ -32,3 +46,34 @@ fun SourceRepoContent( } } } + +@Composable +private fun SourceRepoListItem( + repo: String, + onDelete: () -> Unit, + modifier: Modifier = Modifier, +) { + ElevatedCard( + modifier = modifier, + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding( + start = MaterialTheme.padding.medium, + top = MaterialTheme.padding.medium, + end = MaterialTheme.padding.medium, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + Icon(imageVector = Icons.AutoMirrored.Outlined.Label, contentDescription = "") + Text(text = repo, modifier = Modifier.padding(start = MaterialTheme.padding.medium)) + } + Row { + Spacer(modifier = Modifier.weight(1f)) + IconButton(onClick = onDelete) { + Icon(imageVector = Icons.Outlined.Delete, contentDescription = "") + } + } + } +} diff --git a/app/src/main/java/eu/kanade/presentation/category/components/repo/SourceRepoListItem.kt b/app/src/main/java/eu/kanade/presentation/category/components/repo/SourceRepoListItem.kt deleted file mode 100644 index c86470551..000000000 --- a/app/src/main/java/eu/kanade/presentation/category/components/repo/SourceRepoListItem.kt +++ /dev/null @@ -1,50 +0,0 @@ -package eu.kanade.presentation.category.components.repo - -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.outlined.Label -import androidx.compose.material.icons.outlined.Delete -import androidx.compose.material.icons.outlined.Label -import androidx.compose.material3.ElevatedCard -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import tachiyomi.presentation.core.components.material.padding - -@Composable -fun SourceRepoListItem( - modifier: Modifier, - repo: String, - onDelete: () -> Unit, -) { - ElevatedCard( - modifier = modifier, - ) { - Row( - modifier = Modifier - .fillMaxWidth() - .padding( - start = MaterialTheme.padding.medium, - top = MaterialTheme.padding.medium, - end = MaterialTheme.padding.medium, - ), - verticalAlignment = Alignment.CenterVertically, - ) { - Icon(imageVector = Icons.AutoMirrored.Outlined.Label, contentDescription = "") - Text(text = repo, modifier = Modifier.padding(start = MaterialTheme.padding.medium)) - } - Row { - Spacer(modifier = Modifier.weight(1f)) - IconButton(onClick = onDelete) { - Icon(imageVector = Icons.Outlined.Delete, contentDescription = "") - } - } - } -} diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/repos/RepoScreen.kt b/app/src/main/java/eu/kanade/presentation/category/repos/RepoScreen.kt similarity index 83% rename from app/src/main/java/eu/kanade/tachiyomi/ui/category/repos/RepoScreen.kt rename to app/src/main/java/eu/kanade/presentation/category/repos/RepoScreen.kt index 0fa96f0d7..7a0d089e6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/repos/RepoScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/category/repos/RepoScreen.kt @@ -1,4 +1,4 @@ -package eu.kanade.tachiyomi.ui.category.repos +package eu.kanade.presentation.category.repos import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect @@ -14,11 +14,12 @@ import eu.kanade.presentation.category.components.CategoryDeleteDialog import eu.kanade.presentation.util.Screen import eu.kanade.tachiyomi.util.system.toast import kotlinx.coroutines.flow.collectLatest -import tachiyomi.i18n.sy.SYMR +import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.presentation.core.screens.LoadingScreen class RepoScreen : Screen() { + @Composable override fun Content() { val context = LocalContext.current @@ -48,17 +49,17 @@ class RepoScreen : Screen() { onDismissRequest = screenModel::dismissDialog, onCreate = { screenModel.createRepo(it) }, categories = successState.repos, - title = stringResource(SYMR.strings.action_add_repo), - extraMessage = stringResource(SYMR.strings.action_add_repo_message), - alreadyExistsError = SYMR.strings.error_repo_exists, + title = stringResource(MR.strings.action_add_repo), + extraMessage = stringResource(MR.strings.action_add_repo_message), + alreadyExistsError = MR.strings.error_repo_exists, ) } is RepoDialog.Delete -> { CategoryDeleteDialog( onDismissRequest = screenModel::dismissDialog, onDelete = { screenModel.deleteRepos(listOf(dialog.repo)) }, - title = stringResource(SYMR.strings.delete_repo), - text = stringResource(SYMR.strings.delete_repo_confirmation, dialog.repo), + title = stringResource(MR.strings.action_delete_repo), + text = stringResource(MR.strings.delete_repo_confirmation, dialog.repo), ) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/repos/RepoScreenModel.kt b/app/src/main/java/eu/kanade/presentation/category/repos/RepoScreenModel.kt similarity index 92% rename from app/src/main/java/eu/kanade/tachiyomi/ui/category/repos/RepoScreenModel.kt rename to app/src/main/java/eu/kanade/presentation/category/repos/RepoScreenModel.kt index ab66628c0..039990b20 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/repos/RepoScreenModel.kt +++ b/app/src/main/java/eu/kanade/presentation/category/repos/RepoScreenModel.kt @@ -1,10 +1,12 @@ -package eu.kanade.tachiyomi.ui.category.repos +package eu.kanade.presentation.category.repos import androidx.compose.runtime.Immutable import cafe.adriel.voyager.core.model.StateScreenModel import cafe.adriel.voyager.core.model.screenModelScope import dev.icerock.moko.resources.StringResource import eu.kanade.domain.source.interactor.CreateSourceRepo +import eu.kanade.domain.source.interactor.DeleteSourceRepos +import eu.kanade.domain.source.interactor.GetSourceRepos import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.channels.Channel @@ -12,10 +14,7 @@ import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.update import tachiyomi.core.util.lang.launchIO -import tachiyomi.domain.source.interactor.DeleteSourceRepos -import tachiyomi.domain.source.interactor.GetSourceRepos import tachiyomi.i18n.MR -import tachiyomi.i18n.sy.SYMR import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -87,7 +86,7 @@ class RepoScreenModel( sealed class RepoEvent { sealed class LocalizedMessage(val stringRes: StringResource) : RepoEvent() - data object InvalidName : LocalizedMessage(SYMR.strings.invalid_repo_name) + data object InvalidName : LocalizedMessage(MR.strings.invalid_repo_name) data object InternalError : LocalizedMessage(MR.strings.internal_error) } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBrowseScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBrowseScreen.kt index 169cba3af..7a42777a8 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBrowseScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBrowseScreen.kt @@ -10,8 +10,8 @@ import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.domain.source.service.SourcePreferences import eu.kanade.domain.ui.UiPreferences +import eu.kanade.presentation.category.repos.RepoScreen import eu.kanade.presentation.more.settings.Preference -import eu.kanade.tachiyomi.ui.category.repos.RepoScreen import eu.kanade.tachiyomi.ui.category.sources.SourceCategoryScreen import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.authenticate import kotlinx.collections.immutable.persistentListOf @@ -34,7 +34,11 @@ object SettingsBrowseScreen : SearchableSettings { @Composable override fun getPreferences(): List { val context = LocalContext.current + val navigator = LocalNavigator.currentOrThrow + val sourcePreferences = remember { Injekt.get() } + val reposCount by sourcePreferences.extensionRepos().collectAsState() + // SY --> val uiPreferences = remember { Injekt.get() } val unsortedPreferences = remember { Injekt.get() } @@ -45,7 +49,6 @@ object SettingsBrowseScreen : SearchableSettings { title = stringResource(MR.strings.label_sources), preferenceItems = persistentListOf( kotlin.run { - val navigator = LocalNavigator.currentOrThrow val count by sourcePreferences.sourcesTabCategories().collectAsState() Preference.PreferenceItem.TextPreference( title = stringResource(MR.strings.action_edit_categories), @@ -82,22 +85,6 @@ object SettingsBrowseScreen : SearchableSettings { ), ), ), - Preference.PreferenceGroup( - title = stringResource(MR.strings.label_extensions), - preferenceItems = persistentListOf( - kotlin.run { - val navigator = LocalNavigator.currentOrThrow - val count by unsortedPreferences.extensionRepos().collectAsState() - Preference.PreferenceItem.TextPreference( - title = stringResource(SYMR.strings.action_edit_repos), - subtitle = pluralStringResource(SYMR.plurals.num_repos, count.size, count.size), - onClick = { - navigator.push(RepoScreen()) - }, - ) - }, - ), - ), // SY <-- Preference.PreferenceGroup( title = stringResource(MR.strings.label_sources), @@ -106,6 +93,13 @@ object SettingsBrowseScreen : SearchableSettings { pref = sourcePreferences.hideInLibraryItems(), title = stringResource(MR.strings.pref_hide_in_library_items), ), + Preference.PreferenceItem.TextPreference( + title = stringResource(MR.strings.label_extension_repos), + subtitle = pluralStringResource(MR.plurals.num_repos, reposCount.size, reposCount.size), + onClick = { + navigator.push(RepoScreen()) + }, + ), ), ), Preference.PreferenceGroup( diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt index fa3bc3364..05733e8f7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionGithubApi.kt @@ -18,7 +18,6 @@ import tachiyomi.core.preference.Preference import tachiyomi.core.preference.PreferenceStore import tachiyomi.core.util.lang.withIOContext import tachiyomi.core.util.system.logcat -import tachiyomi.domain.UnsortedPreferences import uy.kohesive.injekt.injectLazy import java.time.Instant import kotlin.time.Duration.Companion.days @@ -27,6 +26,7 @@ internal class ExtensionGithubApi { private val networkService: NetworkHelper by injectLazy() private val preferenceStore: PreferenceStore by injectLazy() + private val sourcePreferences: SourcePreferences by injectLazy() private val extensionManager: ExtensionManager by injectLazy() private val json: Json by injectLazy() @@ -34,11 +34,6 @@ internal class ExtensionGithubApi { preferenceStore.getLong(Preference.appStateKey("last_ext_check"), 0) } - // SY --> - private val sourcePreferences: SourcePreferences by injectLazy() - private val unsortedPreferences: UnsortedPreferences by injectLazy() - // SY <-- - private var requiresFallbackSource = false suspend fun findExtensions(): List { @@ -66,7 +61,7 @@ internal class ExtensionGithubApi { val extensions = with(json) { response .parseAs>() - .toExtensions() /* SY --> */ + unsortedPreferences.extensionRepos() + .toExtensions() + sourcePreferences.extensionRepos() .get() .flatMap { repoPath -> val url = if (requiresFallbackSource) { @@ -80,7 +75,6 @@ internal class ExtensionGithubApi { .parseAs>() .toExtensions(url, repoSource = true) } - // SY <-- } // Sanity check - a small number of extensions probably means something broke @@ -138,10 +132,8 @@ internal class ExtensionGithubApi { } private fun List.toExtensions( - // SY --> repoUrl: String = getUrlPrefix(), repoSource: Boolean = false, - // SY <-- ): List { return this .filter { @@ -159,17 +151,15 @@ internal class ExtensionGithubApi { isNsfw = it.nsfw == 1, sources = it.sources?.map(extensionSourceMapper).orEmpty(), apkName = it.apk, - iconUrl = "${/* SY --> */ repoUrl /* SY <-- */}icon/${it.pkg}.png", - // SY --> + iconUrl = "${repoUrl}icon/${it.pkg}.png", repoUrl = repoUrl, isRepoSource = repoSource, - // SY <-- ) } } fun getApkUrl(extension: Extension.Available): String { - return /* SY --> */ "${extension.repoUrl}/apk/${extension.apkName}" // SY <-- + return "${extension.repoUrl}/apk/${extension.apkName}" } private fun getUrlPrefix(): String { diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/model/Extension.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/model/Extension.kt index b1b3a2b70..624ec8237 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/model/Extension.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/model/Extension.kt @@ -29,10 +29,10 @@ sealed class Extension { val isObsolete: Boolean = false, val isUnofficial: Boolean = false, val isShared: Boolean, - // SY --> - val isRedundant: Boolean = false, val repoUrl: String? = null, val isRepoSource: Boolean = false, + // SY --> + val isRedundant: Boolean = false, // SY <-- ) : Extension() @@ -47,10 +47,8 @@ sealed class Extension { val sources: List, val apkName: String, val iconUrl: String, - // SY --> val repoUrl: String, val isRepoSource: Boolean, - // SY <-- ) : Extension() { data class Source( diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt index 86318012c..2f174cb2b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt @@ -371,7 +371,10 @@ open class BrowseSourceScreenModel( else -> { val preselectedIds = getCategories.await(manga.id).map { it.id } setDialog( - Dialog.ChangeMangaCategory(manga, categories.mapAsCheckboxState { it.id in preselectedIds }.toImmutableList()), + Dialog.ChangeMangaCategory( + manga, + categories.mapAsCheckboxState { it.id in preselectedIds }.toImmutableList(), + ), ) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreen.kt index b71ca0c84..dcd0246bb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/category/CategoryScreen.kt @@ -56,30 +56,24 @@ class CategoryScreen : Screen() { CategoryCreateDialog( onDismissRequest = screenModel::dismissDialog, onCreate = screenModel::createCategory, - // SY --> categories = successState.categories.fastMap { it.name }.toImmutableList(), title = stringResource(MR.strings.action_add_category), - // SY <-- ) } is CategoryDialog.Rename -> { CategoryRenameDialog( onDismissRequest = screenModel::dismissDialog, onRename = { screenModel.renameCategory(dialog.category, it) }, - // SY --> categories = successState.categories.fastMap { it.name }.toImmutableList(), category = dialog.category.name, - // SY <-- ) } is CategoryDialog.Delete -> { CategoryDeleteDialog( onDismissRequest = screenModel::dismissDialog, onDelete = { screenModel.deleteCategory(dialog.category.id) }, - // SY --> title = stringResource(MR.strings.delete_category), text = stringResource(MR.strings.delete_category_confirmation, dialog.category.name), - // SY <-- ) } is CategoryDialog.SortAlphabetically -> { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt index 851cb2605..0936dc0d9 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt @@ -1117,13 +1117,15 @@ class LibraryScreenModel( val common = getCommonCategories(mangaList) // Get indexes of the mix categories to preselect. val mix = getMixCategories(mangaList) - val preselected = categories.map { - when (it) { - in common -> CheckboxState.State.Checked(it) - in mix -> CheckboxState.TriState.Exclude(it) - else -> CheckboxState.State.None(it) + val preselected = categories + .map { + when (it) { + in common -> CheckboxState.State.Checked(it) + in mix -> CheckboxState.TriState.Exclude(it) + else -> CheckboxState.State.None(it) + } } - }.toImmutableList() + .toImmutableList() mutableState.update { it.copy(dialog = Dialog.ChangeCategory(mangaList, preselected)) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt index 5dd4cad48..958acf081 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt @@ -121,6 +121,7 @@ class ChapterLoader( source = source, downloadManager = downloadManager, downloadProvider = downloadProvider, + tempFileManager = tempFileManager, ) source is HttpSource -> HttpPageLoader(chapter, source) source is LocalSource -> source.getFormat(chapter.chapter).let { format -> @@ -139,7 +140,7 @@ class ChapterLoader( } } // SY <-- - isDownloaded -> DownloadPageLoader(chapter, manga, source, downloadManager, downloadProvider) + isDownloaded -> DownloadPageLoader(chapter, manga, source, downloadManager, downloadProvider, tempFileManager) source is LocalSource -> source.getFormat(chapter.chapter).let { format -> when (format) { is Format.Directory -> DirectoryPageLoader(format.file) diff --git a/i18n-sy/src/commonMain/resources/MR/base/plurals.xml b/i18n-sy/src/commonMain/resources/MR/base/plurals.xml index c482c6dd5..b2c582ba9 100644 --- a/i18n-sy/src/commonMain/resources/MR/base/plurals.xml +++ b/i18n-sy/src/commonMain/resources/MR/base/plurals.xml @@ -18,10 +18,6 @@ %1$d tag in sorting list. This adds a option in the library to sort by a priority based tag list, which means entries will be sorted in a way to prioritise the ones with the tags you want %1$d tags in sorting list. This adds a option in the library to sort by a priority based tag list, which means entries will be sorted in a way to prioritise the ones with the tags you want - - %d additional repo - %d additional repos - Migrate %1$d%2$s entry? Migrate %1$d%2$s entries? diff --git a/i18n-sy/src/commonMain/resources/MR/base/strings.xml b/i18n-sy/src/commonMain/resources/MR/base/strings.xml index a4535d61f..294d07893 100644 --- a/i18n-sy/src/commonMain/resources/MR/base/strings.xml +++ b/i18n-sy/src/commonMain/resources/MR/base/strings.xml @@ -391,18 +391,6 @@ Redundant This extension is redundant and will not be used inside this version of Tachiyomi. - This extension is from an external repo. Tap to view the repo. - - - You have no additional repos. Tap the plus button to create one for adding external extensions. - Add repo - Add additional repos to Tachiyomi, the format of a repo is \'username/repo\' , with username being the repo owner, and repo being the repo name - Edit repos - This repo already exists! - Invalid repo name - Repo source - Delete repo - Do you wish to delete the repo %s? Select sources diff --git a/i18n-sy/src/commonMain/resources/MR/in/plurals.xml b/i18n-sy/src/commonMain/resources/MR/in/plurals.xml index ee38bc94e..42b1e6ca0 100644 --- a/i18n-sy/src/commonMain/resources/MR/in/plurals.xml +++ b/i18n-sy/src/commonMain/resources/MR/in/plurals.xml @@ -18,10 +18,6 @@ Ada %1$d tagar dalam daftar penyortiran. Ini menambahkan opsi di perpustakaan untuk mengurutkan berdasarkan daftar tagar berdasarkan prioritas, yang berarti manga akan diurutkan dengan cara memprioritaskan sesuai dengan tagar yang Anda inginkan Ada %1$d tagar dalam daftar penyortiran. Ini menambahkan opsi di perpustakaan untuk mengurutkan berdasarkan daftar tagar berdasarkan prioritas, yang berarti manga akan diurutkan dengan cara memprioritaskan sesuai dengan tagar yang Anda inginkan - - %d repo tambahan - %d repo tambahan - Pindahkan %1$d%2$s manga? Pindahkan %1$d%2$s manga? diff --git a/i18n-sy/src/commonMain/resources/MR/in/strings.xml b/i18n-sy/src/commonMain/resources/MR/in/strings.xml index e6e3e5cfc..c604ea706 100644 --- a/i18n-sy/src/commonMain/resources/MR/in/strings.xml +++ b/i18n-sy/src/commonMain/resources/MR/in/strings.xml @@ -336,16 +336,6 @@ Duplikat Ekstensi ini duplikat dan tak akan digunakan di dalam versi Tachiyomi ini. - - Kamu tidak memiliki repo tambahan. Ketuk tombol tambah untuk menambahkan ekstensi eksternal. - Tambah repo - Tambahkan repo tambahan ke Tachiyomi, format repo adalah \'username/repo\' , username diisi dengan pemilik repo, dan repo diisi dengan nama repo - Edit repo - - Repo ini sudah ada! - Nama repo tidak valid - Sumber Repo - Pilih sumber Tak ada yang dipilih diff --git a/i18n-sy/src/commonMain/resources/MR/pt-rBR/plurals.xml b/i18n-sy/src/commonMain/resources/MR/pt-rBR/plurals.xml index 59e0d4aaa..b763d09c3 100644 --- a/i18n-sy/src/commonMain/resources/MR/pt-rBR/plurals.xml +++ b/i18n-sy/src/commonMain/resources/MR/pt-rBR/plurals.xml @@ -13,10 +13,6 @@ %1$d tag na lista de ordenação. Isto dá uma opção na biblioteca de ordenar por uma lista de tags baseada em prioridade, ou seja, os mangás serão ordenados de modo a priorizar aqueles com as tags que deseja %1$d tags na lista de ordenação. Isto dá uma opção na biblioteca de ordenar por uma lista de tags baseada em prioridade, ou seja, os mangás serão ordenados de modo a priorizar aqueles com as tags que deseja - - %d repositório adicional - %d repositórios adicionais - Migrar %1$d%2$s mangá? diff --git a/i18n-sy/src/commonMain/resources/MR/pt-rBR/strings.xml b/i18n-sy/src/commonMain/resources/MR/pt-rBR/strings.xml index 49093dea2..138074130 100644 --- a/i18n-sy/src/commonMain/resources/MR/pt-rBR/strings.xml +++ b/i18n-sy/src/commonMain/resources/MR/pt-rBR/strings.xml @@ -312,15 +312,6 @@ Redundante Esta extensão é redundante e não será usada nesta versão do Tachiyomi. - - Você não tem repositórios adicionais. Toque no botão Adicionar para criar um e adicionar extensões externas. - Adicionar repositório - Adicione repositórios adicionais ao Tachiyomi, o formato de um repositório é \'username/repo\', sendo username o dono do repositório, e repo o nome do repositório - Editar repositórios - Este repositório já existe! - Nome de repositório inválido - Fonte do repositório - Selecionar fontes Selecionar nenhum diff --git a/i18n-sy/src/commonMain/resources/MR/ru/plurals.xml b/i18n-sy/src/commonMain/resources/MR/ru/plurals.xml index bc2c45a4a..d7a53ae34 100644 --- a/i18n-sy/src/commonMain/resources/MR/ru/plurals.xml +++ b/i18n-sy/src/commonMain/resources/MR/ru/plurals.xml @@ -24,12 +24,7 @@ %1$d тэгов в списке сортировки. Это добавляет в библиотеку возможность сортировки по тэгам, основанному на приоритете. Это означает, что будут отображатся только те серии, которые имеют добавленные тэги. %1$d тэгов в списке сортировки. Это добавляет в библиотеку возможность сортировки по тэгам, основанному на приоритете. Это означает, что будут отображатся только те серии, которые имеют добавленные тэги. - - %d дополнительный репозиторий - %d дополнительных репозитория - %d дополнительных репозиториев - %d дополнительных репозиториев - + Перенести %1$d%2$s серию? Перенести %1$d%2$s серии? diff --git a/i18n-sy/src/commonMain/resources/MR/ru/strings.xml b/i18n-sy/src/commonMain/resources/MR/ru/strings.xml index ad05c5121..f4a138a20 100644 --- a/i18n-sy/src/commonMain/resources/MR/ru/strings.xml +++ b/i18n-sy/src/commonMain/resources/MR/ru/strings.xml @@ -380,18 +380,6 @@ Избыточное Это расширение является избыточным и не будет использоваться внутри этой версии Tachiyomi. - Это расширение из внешнего репозитория. Нажмите, чтобы просмотреть репозиторий. - - - У вас нет дополнительных репозиториев. Нажмите кнопку «Добавить» чтобы создать репозиторий для добавления внешних расширений. - Добавить репозиторий - Добавить дополнительные репозиторий в TachiyomiSY (Формат username/repo). Username - является владельцем репозитория, а repo - имя репозитория - Редактировать репозитории - Этот репозиторий уже существует! - Недопустимое имя репозитория - Источник репозитория - Удалить репозиторий - Хотите ли вы удалить репозиторий %s? Выберите источники diff --git a/i18n-sy/src/commonMain/resources/MR/zh-rCN/plurals.xml b/i18n-sy/src/commonMain/resources/MR/zh-rCN/plurals.xml index 4cfdeb27b..c05a0568b 100644 --- a/i18n-sy/src/commonMain/resources/MR/zh-rCN/plurals.xml +++ b/i18n-sy/src/commonMain/resources/MR/zh-rCN/plurals.xml @@ -12,9 +12,6 @@ %1$d 个标签在排序列表中。 这在书架中增加了一个选项,以基于优先级的标签列表进行排序,这意味着作品将以你想要的标签优先的方式进行排序。 - - %d 个额外的仓库 - 迁移 %1$d%2$s 作品? diff --git a/i18n-sy/src/commonMain/resources/MR/zh-rCN/strings.xml b/i18n-sy/src/commonMain/resources/MR/zh-rCN/strings.xml index 248f38989..f3328f34d 100644 --- a/i18n-sy/src/commonMain/resources/MR/zh-rCN/strings.xml +++ b/i18n-sy/src/commonMain/resources/MR/zh-rCN/strings.xml @@ -376,18 +376,6 @@ 废弃 此插件已废弃,将不会在此版本的 Tachiyomi 上工作。 - 此插件来自外部仓库。点击以浏览其仓库。 - - - 你没有额外的仓库。点击加号按钮以创建一个用于添加外部插件。 - 添加仓库 - 在 Tachiyomi 中添加额外的仓库,仓库的格式是 \'username/repo\',username是仓库所有者,repo是仓库名称。 - 编辑仓库 - 此仓库已存在! - 无效的仓库名称 - 仓库来源 - 删除仓库 - 你想要删除仓库 %s 吗? 选择来源 diff --git a/i18n-sy/src/commonMain/resources/MR/zh-rTW/plurals.xml b/i18n-sy/src/commonMain/resources/MR/zh-rTW/plurals.xml index 9262474ca..ee6a6f534 100644 --- a/i18n-sy/src/commonMain/resources/MR/zh-rTW/plurals.xml +++ b/i18n-sy/src/commonMain/resources/MR/zh-rTW/plurals.xml @@ -12,9 +12,6 @@ %1$d 個標籤在排序列表中。 這在書架中增加了一個選項,以基於優先級的標籤列表進行排序,這意味著作品將以你想要的標籤優先的方式進行排序。 - - %d 個額外的倉庫 - 遷移 %1$d%2$s 作品? diff --git a/i18n-sy/src/commonMain/resources/MR/zh-rTW/strings.xml b/i18n-sy/src/commonMain/resources/MR/zh-rTW/strings.xml index 8a4f89818..e795a1540 100644 --- a/i18n-sy/src/commonMain/resources/MR/zh-rTW/strings.xml +++ b/i18n-sy/src/commonMain/resources/MR/zh-rTW/strings.xml @@ -376,18 +376,6 @@ 廢棄 此插件已廢棄,將不會在此版本的 Tachiyomi 上工作。 - 此插件來自外部倉庫。點擊以瀏覽其倉庫。 - - - 你沒有額外的倉庫。點擊加號按鈕以創建一個用於新增外部插件。 - 新增倉庫 - 在 Tachiyomi 中新增額外的倉庫,倉庫的格式是 \'username/repo\',username是倉庫所有者,repo是倉庫名稱。 - 編輯倉庫 - 此倉庫已存在! - 無效的倉庫名稱 - 倉庫來源 - 刪除倉庫 - 你想要刪除倉庫 %s 嗎? 選擇來源 diff --git a/i18n/src/commonMain/resources/MR/base/plurals.xml b/i18n/src/commonMain/resources/MR/base/plurals.xml index 21b544618..2f10b004c 100644 --- a/i18n/src/commonMain/resources/MR/base/plurals.xml +++ b/i18n/src/commonMain/resources/MR/base/plurals.xml @@ -80,4 +80,9 @@ Extension update available %d extension updates available + + + %d repo + %d repos + diff --git a/i18n/src/commonMain/resources/MR/base/strings.xml b/i18n/src/commonMain/resources/MR/base/strings.xml index e8f1d0a38..050efe1be 100755 --- a/i18n/src/commonMain/resources/MR/base/strings.xml +++ b/i18n/src/commonMain/resources/MR/base/strings.xml @@ -336,6 +336,17 @@ Shizuku is not running Install and start Shizuku to use Shizuku as extension installer. + + Extension repos + You have no repos set. + Add repo + Add additional repos to Tachiyomi, the format of a repo is \"username/repo\", with username being the repo owner, and repo being the repo name. + This repo already exists! + Delete repo + Invalid repo name + Do you wish to delete the repo \"%s\"? + This extension is from an external repo. Tap to view the repo. + Fullscreen Show tap zones overlay