diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e9985dbd8..23dcf8430 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -340,6 +340,23 @@ android:scheme="https" android:host="www.mangadex.cc" android:pathPrefix="/title/" /> + + + + + { return MangaHandler(client, headers, listOf(mdLang), preferences.mangaDexForceLatestCovers().get()).fetchMangaDetailsObservable(manga) } diff --git a/app/src/main/java/exh/GalleryAdder.kt b/app/src/main/java/exh/GalleryAdder.kt index 092ffaa9d..bed818885 100755 --- a/app/src/main/java/exh/GalleryAdder.kt +++ b/app/src/main/java/exh/GalleryAdder.kt @@ -79,9 +79,29 @@ class GalleryAdder { } ?: return GalleryAddEvent.Fail.UnknownType(url, context) } + val realChapterUrl = try { + source.mapUrlToChapterUrl(uri) + } catch (e: Exception) { + logger.e(context.getString(R.string.gallery_adder_uri_map_to_chapter_error), e) + null + } + + val cleanedChapterUrl = if (realChapterUrl != null) { + try { + source.cleanChapterUrl(realChapterUrl) + } catch (e: Exception) { + logger.e(context.getString(R.string.gallery_adder_uri_clean_error), e) + null + } + } else null + + val chapterMangaUrl = if (realChapterUrl != null) { + source.mapChapterUrlToMangaUrl(realChapterUrl.toUri()) + } else null + // Map URL to manga URL val realMangaUrl = try { - source.mapUrlToMangaUrl(uri) + chapterMangaUrl ?: source.mapUrlToMangaUrl(uri) } catch (e: Exception) { logger.e(context.getString(R.string.gallery_adder_uri_map_to_manga_error), e) null @@ -139,7 +159,16 @@ class GalleryAdder { return GalleryAddEvent.Fail.Error(url, context.getString(R.string.gallery_adder_chapter_fetch_error, url)) } - return GalleryAddEvent.Success(url, manga, context) + return if (cleanedChapterUrl != null) { + val chapter = db.getChapter(cleanedChapterUrl, manga.id!!).executeOnIO() + if (chapter != null) { + GalleryAddEvent.Success(url, manga, context, chapter) + } else { + GalleryAddEvent.Fail.Error(url, context.getString(R.string.gallery_adder_could_not_identify_chapter, url)) + } + } else { + GalleryAddEvent.Success(url, manga, context) + } } catch (e: Exception) { logger.w(context.getString(R.string.gallery_adder_could_not_add_manga, url), e) diff --git a/app/src/main/java/exh/ui/intercept/InterceptActivity.kt b/app/src/main/java/exh/ui/intercept/InterceptActivity.kt index f1d80f270..e68d6913a 100755 --- a/app/src/main/java/exh/ui/intercept/InterceptActivity.kt +++ b/app/src/main/java/exh/ui/intercept/InterceptActivity.kt @@ -9,11 +9,14 @@ import com.afollestad.materialdialogs.callbacks.onCancel import com.afollestad.materialdialogs.callbacks.onDismiss import com.afollestad.materialdialogs.list.listItemsSingleChoice import eu.kanade.tachiyomi.R +import eu.kanade.tachiyomi.data.database.models.Chapter +import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.databinding.EhActivityInterceptBinding import eu.kanade.tachiyomi.source.online.UrlImportableSource import eu.kanade.tachiyomi.ui.base.activity.BaseViewBindingActivity import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.manga.MangaController +import eu.kanade.tachiyomi.ui.reader.ReaderActivity import exh.GalleryAddEvent import exh.GalleryAdder import kotlinx.coroutines.Dispatchers @@ -66,10 +69,14 @@ class InterceptActivity : BaseViewBindingActivity() binding.interceptStatus.setText(R.string.launching_app) onBackPressed() startActivity( - Intent(this, MainActivity::class.java) - .setAction(MainActivity.SHORTCUT_MANGA) - .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) - .putExtra(MangaController.MANGA_EXTRA, it.mangaId) + if (it.chapter != null) { + ReaderActivity.newIntent(this, it.manga, it.chapter) + } else { + Intent(this, MainActivity::class.java) + .setAction(MainActivity.SHORTCUT_MANGA) + .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) + .putExtra(MangaController.MANGA_EXTRA, it.mangaId) + } ) } is InterceptResult.Failure -> { @@ -126,7 +133,7 @@ class InterceptActivity : BaseViewBindingActivity() status.value = when (result) { is GalleryAddEvent.Success -> result.manga.id?.let { - InterceptResult.Success(it) + InterceptResult.Success(it, result.manga, result.chapter) } ?: InterceptResult.Failure(this@InterceptActivity.getString(R.string.manga_id_is_null)) is GalleryAddEvent.Fail -> InterceptResult.Failure(result.logMessage) } @@ -137,6 +144,6 @@ class InterceptActivity : BaseViewBindingActivity() sealed class InterceptResult { object Idle : InterceptResult() object Loading : InterceptResult() - data class Success(val mangaId: Long) : InterceptResult() + data class Success(val mangaId: Long, val manga: Manga, val chapter: Chapter? = null) : InterceptResult() data class Failure(val reason: String) : InterceptResult() } diff --git a/app/src/main/res/values/strings_sy.xml b/app/src/main/res/values/strings_sy.xml index 742c130d1..a85d7d693 100644 --- a/app/src/main/res/values/strings_sy.xml +++ b/app/src/main/res/values/strings_sy.xml @@ -437,9 +437,11 @@ Importing manga (url: %1$s, fav: %2$s, forceSource: %3$s)… Source URI match check error! Source URI map-to-manga error! + Source URI map-to-chapter error! Source URI clean error! Failed to update chapters for manga: %1$s! Could not add manga (url: %1$s)! + Could not identify chapter (url: %1$s)! Launching app…