diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/MigrationController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/MigrationController.kt index 3e4bfcc6d..fd213ad85 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/MigrationController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/MigrationController.kt @@ -10,16 +10,27 @@ import com.afollestad.materialdialogs.MaterialDialog import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.items.IFlexible import eu.kanade.tachiyomi.R +import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.ui.base.controller.DialogController import eu.kanade.tachiyomi.ui.base.controller.NucleusController import eu.kanade.tachiyomi.ui.base.controller.popControllerWithTag import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction +import exh.ui.migration.manga.design.MigrationDesignController +import exh.util.await import kotlinx.android.synthetic.main.migration_controller.* +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import rx.schedulers.Schedulers +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get class MigrationController : NucleusController(), FlexibleAdapter.OnItemClickListener, - SourceAdapter.OnSelectClickListener { + SourceAdapter.OnSelectClickListener, + SourceAdapter.OnAutoClickListener { private var adapter: FlexibleAdapter>? = null @@ -109,6 +120,18 @@ class MigrationController : NucleusController(), onItemClick(null, position) } + override fun onAutoClick(position: Int) { + val item = adapter?.getItem(position) as? SourceItem ?: return + + GlobalScope.launch { + val manga = Injekt.get().getFavoriteMangas().asRxSingle().await(Schedulers.io()) + val sourceMangas = manga.asSequence().filter { it.source == item.source.id }.map { it.id!! }.toList() + withContext(Dispatchers.Main) { + router.pushController(MigrationDesignController.create(sourceMangas).withFadeTransaction()) + } + } + } + fun migrateManga(prevManga: Manga, manga: Manga) { presenter.migrateManga(prevManga, manga, replace = true) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/SourceAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/SourceAdapter.kt index 86df353f5..fff85421f 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/SourceAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/SourceAdapter.kt @@ -21,6 +21,20 @@ class SourceAdapter(val controller: MigrationController) : setDisplayHeadersAtStartUp(true) } + // EXH --> + /** + * Listener for auto item clicks. + */ + val autoClickListener: OnAutoClickListener? = controller + + /** + * Listener which should be called when user clicks select. + */ + interface OnAutoClickListener { + fun onAutoClick(position: Int) + } + // EXH <-- + /** * Listener for browse item clicks. */ diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/SourceHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/SourceHolder.kt index fd644e385..bcf2ea1cc 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/migration/SourceHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/migration/SourceHolder.kt @@ -21,7 +21,10 @@ class SourceHolder(view: View, override val adapter: SourceAdapter) : get() = card init { - source_latest.gone() + source_latest.text = "Auto" + source_latest.setOnClickListener { + adapter.autoClickListener?.onAutoClick(adapterPosition) + } source_browse.setText(R.string.select) source_browse.setOnClickListener { adapter.selectClickListener?.onSelectClick(adapterPosition) diff --git a/app/src/main/java/exh/ui/migration/manga/process/MigrationProcedureController.kt b/app/src/main/java/exh/ui/migration/manga/process/MigrationProcedureController.kt index 0b9f5fddd..dcd4b7f3a 100644 --- a/app/src/main/java/exh/ui/migration/manga/process/MigrationProcedureController.kt +++ b/app/src/main/java/exh/ui/migration/manga/process/MigrationProcedureController.kt @@ -93,6 +93,7 @@ class MigrationProcedureController(bundle: Bundle? = null) : BaseExhController(b applicationContext?.toast("All migrations complete!") router.popCurrentController() } else { + adapter.migratingManga[pager.currentItem].migrationJob.cancel() pager.setCurrentItem(pager.currentItem + 1, true) launch(Dispatchers.Main) { updateTitle() @@ -155,6 +156,9 @@ class MigrationProcedureController(bundle: Bundle? = null) : BaseExhController(b } else { null } + } catch(e: CancellationException) { + // Ignore cancellations + throw e } catch(e: Exception) { logger.e("Failed to search in source: ${source.id}!", e) null @@ -179,6 +183,9 @@ class MigrationProcedureController(bundle: Bundle? = null) : BaseExhController(b } localManga } else null + } catch(e: CancellationException) { + // Ignore cancellations + throw e } catch(e: Exception) { logger.e("Failed to search in source: ${source.id}!", e) null @@ -206,6 +213,9 @@ class MigrationProcedureController(bundle: Bundle? = null) : BaseExhController(b result.copyFrom(newManga) db.insertManga(result).await() + } catch(e: CancellationException) { + // Ignore cancellations + throw e } catch(e: Exception) { logger.e("Could not load search manga details", e) }