瀏覽代碼

Minor extension repo enhancements

- Shortcut to settings from extensions tab
- Don't show error toast anymore if nothing's loaded
- Ability to copy extension repo URL to clipboard
arkon 1 年之前
父節點
當前提交
02e50411de

+ 1 - 1
app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt

@@ -101,6 +101,6 @@ data class TabContent(
     val titleRes: StringResource,
     val badgeNumber: Int? = null,
     val searchEnabled: Boolean = false,
-    val actions: ImmutableList<AppBar.Action> = persistentListOf(),
+    val actions: ImmutableList<AppBar.AppBarAction> = persistentListOf(),
     val content: @Composable (contentPadding: PaddingValues, snackbarHostState: SnackbarHostState) -> Unit,
 )

+ 23 - 1
app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionReposContent.kt

@@ -9,6 +9,7 @@ import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.foundation.lazy.LazyListState
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.automirrored.outlined.Label
+import androidx.compose.material.icons.outlined.ContentCopy
 import androidx.compose.material.icons.outlined.Delete
 import androidx.compose.material3.ElevatedCard
 import androidx.compose.material3.Icon
@@ -18,8 +19,12 @@ import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalContext
+import eu.kanade.tachiyomi.util.system.copyToClipboard
 import kotlinx.collections.immutable.ImmutableSet
+import tachiyomi.i18n.MR
 import tachiyomi.presentation.core.components.material.padding
+import tachiyomi.presentation.core.i18n.stringResource
 
 @Composable
 fun ExtensionReposContent(
@@ -53,6 +58,8 @@ private fun ExtensionRepoListItem(
     onDelete: () -> Unit,
     modifier: Modifier = Modifier,
 ) {
+    val context = LocalContext.current
+
     ElevatedCard(
         modifier = modifier,
     ) {
@@ -74,8 +81,23 @@ private fun ExtensionRepoListItem(
             modifier = Modifier.fillMaxWidth(),
             horizontalArrangement = Arrangement.End,
         ) {
+            IconButton(
+                onClick = {
+                    val url = "$repo/index.min.json"
+                    context.copyToClipboard(url, url)
+                },
+            ) {
+                Icon(
+                    imageVector = Icons.Outlined.ContentCopy,
+                    contentDescription = stringResource(MR.strings.action_copy_to_clipboard),
+                )
+            }
+
             IconButton(onClick = onDelete) {
-                Icon(imageVector = Icons.Outlined.Delete, contentDescription = null)
+                Icon(
+                    imageVector = Icons.Outlined.Delete,
+                    contentDescription = stringResource(MR.strings.action_delete),
+                )
             }
         }
     }

+ 1 - 9
app/src/main/java/eu/kanade/tachiyomi/extension/api/ExtensionApi.kt

@@ -35,15 +35,7 @@ internal class ExtensionApi {
 
     suspend fun findExtensions(): List<Extension.Available> {
         return withIOContext {
-            val extensions = sourcePreferences.extensionRepos().get().flatMap { getExtensions(it) }
-
-            // Sanity check - a small number of extensions probably means something broke
-            // with the repo generator
-            if (extensions.isEmpty()) {
-                throw Exception()
-            }
-
-            extensions
+            sourcePreferences.extensionRepos().get().flatMap { getExtensions(it) }
         }
     }
 

+ 6 - 4
app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/ExtensionsTab.kt

@@ -1,7 +1,5 @@
 package eu.kanade.tachiyomi.ui.browse.extension
 
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.outlined.Translate
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.collectAsState
 import androidx.compose.runtime.getValue
@@ -10,6 +8,7 @@ import cafe.adriel.voyager.navigator.currentOrThrow
 import eu.kanade.presentation.browse.ExtensionScreen
 import eu.kanade.presentation.components.AppBar
 import eu.kanade.presentation.components.TabContent
+import eu.kanade.presentation.more.settings.screen.browse.ExtensionReposScreen
 import eu.kanade.tachiyomi.extension.model.Extension
 import eu.kanade.tachiyomi.ui.browse.extension.details.ExtensionDetailsScreen
 import eu.kanade.tachiyomi.ui.webview.WebViewScreen
@@ -29,11 +28,14 @@ fun extensionsTab(
         badgeNumber = state.updates.takeIf { it > 0 },
         searchEnabled = true,
         actions = persistentListOf(
-            AppBar.Action(
+            AppBar.OverflowAction(
                 title = stringResource(MR.strings.action_filter),
-                icon = Icons.Outlined.Translate,
                 onClick = { navigator.push(ExtensionFilterScreen()) },
             ),
+            AppBar.OverflowAction(
+                title = stringResource(MR.strings.label_extension_repos),
+                onClick = { navigator.push(ExtensionReposScreen()) },
+            ),
         ),
         content = { contentPadding, _ ->
             ExtensionScreen(