diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigratingManga.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigratingManga.kt index 37e0c432b..be29dfbeb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigratingManga.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigratingManga.kt @@ -23,6 +23,8 @@ class MigratingManga( val migrationJob = parentContext + SupervisorJob() + Dispatchers.Default + var migrationStatus: Int = MigrationStatus.RUNNUNG + @Volatile private var manga: Manga? = null suspend fun manga(): Manga? { @@ -39,3 +41,11 @@ class MigratingManga( return MigrationProcessItem(this) } } + +class MigrationStatus { + companion object { + val RUNNUNG = 0 + val MANGA_FOUND = 1 + val MANGA_NOT_FOUND = 2 + } +} diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationListController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationListController.kt index 8bd8b3c7b..174179dbd 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationListController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationListController.kt @@ -9,6 +9,7 @@ import android.view.MenuInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup +import android.widget.Toast import androidx.core.graphics.ColorUtils import androidx.recyclerview.widget.LinearLayoutManager import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat @@ -233,6 +234,9 @@ class MigrationListController(bundle: Bundle? = null) : BaseController(bundle), } } + manga.migrationStatus = if (result == null) MigrationStatus.MANGA_NOT_FOUND else + MigrationStatus.MANGA_FOUND + adapter?.sourceFinished() manga.searchResult.initialize(result?.id) } } @@ -281,34 +285,44 @@ class MigrationListController(bundle: Bundle? = null) : BaseController(bundle), fun useMangaForMigration(manga: Manga, source: Source) { val firstIndex = selectedPosition ?: return val migratingManga = adapter?.getItem(firstIndex) ?: return - migratingManga.showSpinner() + migratingManga.manga.migrationStatus = MigrationStatus.RUNNUNG + adapter?.notifyItemChanged(firstIndex) launchUI { val result = CoroutineScope(migratingManga.manga.migrationJob).async { val localManga = smartSearchEngine.networkToLocalManga(manga, source.id) val chapters = source.fetchChapterList(localManga).toSingle().await( Schedulers.io() ) - withContext(Dispatchers.IO) { + try { syncChaptersWithSource(db, chapters, localManga, source) + } catch (e: Exception) { + return@async null } localManga }.await() - try { - val newManga = - sourceManager.getOrStub(result.source).fetchMangaDetails(result).toSingle() - .await() - result.copyFrom(newManga) + if (result != null) { + try { + val newManga = + sourceManager.getOrStub(result.source).fetchMangaDetails(result).toSingle() + .await() + result.copyFrom(newManga) - db.insertManga(result).executeAsBlocking() - } catch (e: CancellationException) { - // Ignore cancellations - throw e - } catch (e: Exception) { + db.insertManga(result).executeAsBlocking() + } catch (e: CancellationException) { + // Ignore cancellations + throw e + } catch (e: Exception) { + } + + migratingManga.manga.migrationStatus = MigrationStatus.MANGA_FOUND + migratingManga.manga.searchResult.set(result.id) + adapter?.notifyDataSetChanged() + } else { + migratingManga.manga.migrationStatus = MigrationStatus.MANGA_NOT_FOUND + activity?.toast(R.string.error_fetching_migration, Toast.LENGTH_LONG) + adapter?.notifyDataSetChanged() } - - migratingManga.manga.searchResult.set(result.id) - adapter?.notifyDataSetChanged() } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessAdapter.kt index 79a9635f9..2ee1bfc69 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessAdapter.kt @@ -12,7 +12,6 @@ import eu.kanade.tachiyomi.ui.migration.MigrationFlags import eu.kanade.tachiyomi.util.lang.launchUI import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.cancel -import kotlinx.coroutines.isActive import kotlinx.coroutines.withContext import uy.kohesive.injekt.injectLazy @@ -44,12 +43,10 @@ class MigrationProcessAdapter( if (allMangasDone()) menuItemListener.enableButtons() } - fun allMangasDone() = (items.all { it.manga.searchResult.initialized || !it.manga.migrationJob - .isActive } && items.any { it.manga - .searchResult.content != null }) + fun allMangasDone() = (items.all { it.manga.migrationStatus != MigrationStatus + .RUNNUNG } && items.any { it.manga.migrationStatus == MigrationStatus.MANGA_FOUND }) - fun mangasSkipped() = (items.count { (!it.manga.searchResult.initialized || it.manga - .searchResult.content == null) }) + fun mangasSkipped() = (items.count { it.manga.migrationStatus == MigrationStatus.MANGA_NOT_FOUND }) suspend fun performMigrations(copy: Boolean) { withContext(Dispatchers.IO) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessHolder.kt index ad2ae4c95..90998c7d5 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessHolder.kt @@ -86,7 +86,8 @@ class MigrationProcessHolder( sourceManager.get(it) } withContext(Dispatchers.Main) { - if (item.manga.mangaId != this@MigrationProcessHolder.item?.manga?.mangaId) { + if (item.manga.mangaId != this@MigrationProcessHolder.item?.manga?.mangaId || + item.manga.migrationStatus == MigrationStatus.RUNNUNG) { return@withContext } if (searchResult != null && resultSource != null) { @@ -100,7 +101,8 @@ class MigrationProcessHolder( } } else { migration_manga_card_to.loading_group.gone() - migration_manga_card_to.title.text = "No Alternatives Found" + migration_manga_card_to.title.text = view.context.applicationContext + .getString(R.string.no_alternatives_found) } migration_menu.visible() skip_manga.gone() @@ -110,10 +112,6 @@ class MigrationProcessHolder( } } - fun showSpinner() { - migration_manga_card_to.loading_group.visible() - } - private fun View.resetManga() { loading_group.visible() thumbnail.setImageDrawable(null) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessItem.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessItem.kt index 8021c7789..df77a57cc 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessItem.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/manga/process/MigrationProcessItem.kt @@ -10,7 +10,6 @@ import eu.kanade.tachiyomi.R class MigrationProcessItem(val manga: MigratingManga) : AbstractFlexibleItem() { - var holder: MigrationProcessHolder? = null override fun getLayoutRes(): Int { return R.layout.migration_process_item } @@ -25,8 +24,6 @@ class MigrationProcessItem(val manga: MigratingManga) : position: Int, payloads: MutableList? ) { - - this.holder = holder holder.bind(this) } @@ -38,10 +35,6 @@ class MigrationProcessItem(val manga: MigratingManga) : return false } - fun showSpinner() { - holder?.showSpinner() - } - override fun hashCode(): Int { return manga.mangaId.toInt() } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index afae6bfda..70460310d 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -492,6 +492,9 @@ Copy %1$d%2$s mangas? (skipping %1$d) No manga migrated + No chapters found, this manga cannot be used for + migration + No Alternatives Found Tracking