Skip to content

fix(migration, extensions): fix batch migration multi-select, manual search overrides, and duplicate extensions#425

Merged
Dark25 merged 4 commits into
masterfrom
Batch-and-extension-download
Jul 9, 2026
Merged

fix(migration, extensions): fix batch migration multi-select, manual search overrides, and duplicate extensions#425
Dark25 merged 4 commits into
masterfrom
Batch-and-extension-download

Conversation

@Dark25

@Dark25 Dark25 commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator

Close #424
Close #423
Close #421
Close #413

Dark25 added 2 commits July 9, 2026 18:57
…search overrides, and duplicate extensions

- Add visual checkboxes on migration source selection config screens.
- Implement multi-selection (long-press) on Migrate screens under Browse.
- Filter manual searches by target sources and return overrides back to the batch migration list.
- Fix extension listing duplicates by ignoring signature hash differences.
Copilot AI review requested due to automatic review settings July 9, 2026 17:01
@Dark25 Dark25 changed the title Batch and extension download fix(migration, extensions): fix batch migration multi-select, manual search overrides, and duplicate extensions Jul 9, 2026

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR expands migration UX by adding multi-select/batch flows and tighter integration between migration search screens and the migration list, plus a small adjustment to how “available” extensions are derived.

Changes:

  • Add “use entry for migration” override path so selecting a target in the search screen can immediately update the existing migration list item.
  • Introduce multi-select mode in migrate lists (long-press to select, select all/clear, continue into migration config).
  • Filter migration search enabled sources by the migration source selection preferences and simplify extension “already installed/untrusted” checks.

Reviewed changes

Copilot reviewed 20 out of 20 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
app/src/main/java/mihon/feature/migration/list/MangaMigrationListScreenModel.kt Adds manual override method to set a migration target from an ID.
app/src/main/java/mihon/feature/migration/list/MangaMigrationListScreen.kt Hooks match override into the screen model via LaunchedEffect.
app/src/main/java/mihon/feature/migration/list/AnimeMigrationListScreenModel.kt Adds manual override method to set a migration target from an ID.
app/src/main/java/mihon/feature/migration/list/AnimeMigrationListScreen.kt Hooks match override into the screen model via LaunchedEffect.
app/src/main/java/mihon/feature/migration/config/MangaMigrationConfigScreen.kt Adds selection checkbox UI to source selection list items.
app/src/main/java/mihon/feature/migration/config/AnimeMigrationConfigScreen.kt Adds selection checkbox UI to source selection list items.
app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/search/MigrateMangaSearchScreenModel.kt Filters enabled sources by migration source preferences.
app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/search/MigrateMangaSearchScreen.kt Returns selected target back to the migration list screen when present.
app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/manga/MigrateMangaScreenModel.kt Adds selection state and selection actions (toggle/select all/clear).
app/src/main/java/eu/kanade/tachiyomi/ui/browse/manga/migration/manga/MigrateMangaScreen.kt Adds selection-mode behavior, back handling, and navigation into config with selected IDs.
app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/search/MigrateAnimeSearchScreenModel.kt Filters enabled sources by migration source preferences.
app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/search/MigrateAnimeSearchScreen.kt Returns selected target back to the migration list screen when present.
app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/anime/MigrateAnimeScreenModel.kt Adds selection state and selection actions (toggle/select all/clear).
app/src/main/java/eu/kanade/tachiyomi/ui/browse/anime/migration/anime/MigrateAnimeScreen.kt Adds selection-mode behavior, back handling, and navigation into config with selected IDs.
app/src/main/java/eu/kanade/presentation/entries/manga/components/BaseMangaListItem.kt Adds long-click support by switching to combinedClickable.
app/src/main/java/eu/kanade/presentation/entries/anime/components/BaseAnimeListItem.kt Adds long-click support by switching to combinedClickable.
app/src/main/java/eu/kanade/presentation/browse/manga/MigrateMangaScreen.kt Adds selection-mode UI (count title, app bar actions, continue FAB, inline checkboxes).
app/src/main/java/eu/kanade/presentation/browse/anime/MigrateAnimeScreen.kt Adds selection-mode UI (count title, app bar actions, continue FAB, inline checkboxes).
app/src/main/java/eu/kanade/domain/extension/manga/interactor/GetMangaExtensionsByType.kt Simplifies available-extension filtering to use pkgName-only matching.
app/src/main/java/eu/kanade/domain/extension/anime/interactor/GetAnimeExtensionsByType.kt Simplifies available-extension filtering to use pkgName-only matching.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +258 to +262
fun useMangaForMigration(mangaId: Long, targetMangaId: Long) {
val item = items.find { it.manga.id == mangaId } ?: return
screenModelScope.launchIO {
item.searchResult.value = SearchResult.Searching
updateMigrationProgress()
Comment on lines +258 to +262
fun useAnimeForMigration(animeId: Long, targetAnimeId: Long) {
val item = items.find { it.anime.id == animeId } ?: return
screenModelScope.launchIO {
item.searchResult.value = SearchResult.Searching
updateMigrationProgress()
Comment on lines +313 to +316
Checkbox(
checked = isSelected,
onCheckedChange = null,
)
Comment on lines +313 to +316
Checkbox(
checked = isSelected,
onCheckedChange = null,
)
Comment on lines +149 to +152
Checkbox(
checked = isSelected,
onCheckedChange = null,
)
Comment on lines +149 to +152
Checkbox(
checked = isSelected,
onCheckedChange = null,
)
Comment on lines 36 to 40
override fun getEnabledSources(): List<CatalogueSource> {
val migrationSources = sourcePreferences.migrationMangaSources.get()
return super.getEnabledSources()
.filter { migrationSources.isEmpty() || it.id in migrationSources }
.filter { state.value.sourceFilter != MangaSourceFilter.PinnedOnly || "${it.id}" in pinnedSources }
Comment on lines 36 to 40
override fun getEnabledSources(): List<AnimeCatalogueSource> {
val migrationSources = sourcePreferences.migrationAnimeSources.get()
return super.getEnabledSources()
.filter { migrationSources.isEmpty() || it.id in migrationSources }
.filter { state.value.sourceFilter != AnimeSourceFilter.PinnedOnly || "${it.id}" in pinnedSources }
Dark25 added 2 commits July 9, 2026 19:15
…M handling

- Port Mihon's simplified extension store decoding logic using first-byte peeking and gzip support.
- Add safeguard to strip UTF-8 BOM headers from index streams.
- Ensure correct fallback to legacy repo.json (which fixes missing Discord button issue).
…M handling

- Port Mihon's simplified extension store decoding logic using first-byte peeking and gzip support.
- Add safeguard to strip UTF-8 BOM headers from index streams.
- Ensure correct fallback to legacy repo.json (which fixes missing Discord button issue).
@Dark25 Dark25 merged commit da14e24 into master Jul 9, 2026
2 of 3 checks passed
@Dark25 Dark25 deleted the Batch-and-extension-download branch July 9, 2026 17:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants