mirror of
https://github.com/tachiyomiorg/tachiyomi.git
synced 2024-11-20 06:09:19 +01:00
Added Cubari as a deeplink target
Also in my findings setting a host with a starting wildcard does not work in android 12 dev preview (you have to enabled links in a12, and links with a starting wildcard do not show) I'll open an issue for cubari extension later when I do some more digging
This commit is contained in:
parent
33e54609cd
commit
c06c93a002
@ -86,6 +86,17 @@
|
|||||||
android:host="mangaplus.shueisha.co.jp"
|
android:host="mangaplus.shueisha.co.jp"
|
||||||
android:pathPattern="/viewer/..*"
|
android:pathPattern="/viewer/..*"
|
||||||
android:scheme="https" />
|
android:scheme="https" />
|
||||||
|
|
||||||
|
<data
|
||||||
|
android:host="cubari.moe"
|
||||||
|
android:pathPattern="/read/imgur/..*"
|
||||||
|
android:scheme="https" />
|
||||||
|
|
||||||
|
<!-- Only link to a chapter if the gist contains a chapter number -->
|
||||||
|
<data
|
||||||
|
android:host="cubari.moe"
|
||||||
|
android:pathPattern="/read/gist/..*/..*"
|
||||||
|
android:scheme="https" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
|
@ -7,6 +7,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
|
|||||||
import eu.kanade.tachiyomi.source.model.SManga
|
import eu.kanade.tachiyomi.source.model.SManga
|
||||||
import eu.kanade.tachiyomi.source.online.DelegatedHttpSource
|
import eu.kanade.tachiyomi.source.online.DelegatedHttpSource
|
||||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||||
|
import eu.kanade.tachiyomi.source.online.all.Cubari
|
||||||
import eu.kanade.tachiyomi.source.online.all.MangaDex
|
import eu.kanade.tachiyomi.source.online.all.MangaDex
|
||||||
import eu.kanade.tachiyomi.source.online.english.KireiCake
|
import eu.kanade.tachiyomi.source.online.english.KireiCake
|
||||||
import eu.kanade.tachiyomi.source.online.english.MangaPlus
|
import eu.kanade.tachiyomi.source.online.english.MangaPlus
|
||||||
@ -33,6 +34,11 @@ open class SourceManager(private val context: Context) {
|
|||||||
"mangaplus.shueisha.co.jp",
|
"mangaplus.shueisha.co.jp",
|
||||||
1998944621602463790,
|
1998944621602463790,
|
||||||
MangaPlus()
|
MangaPlus()
|
||||||
|
),
|
||||||
|
DelegatedSource(
|
||||||
|
"cubari.moe",
|
||||||
|
6338219619148105941,
|
||||||
|
Cubari()
|
||||||
)
|
)
|
||||||
).associateBy { it.sourceId }
|
).associateBy { it.sourceId }
|
||||||
|
|
||||||
|
@ -0,0 +1,64 @@
|
|||||||
|
package eu.kanade.tachiyomi.source.online.all
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
|
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.data.preference.PreferencesHelper
|
||||||
|
import eu.kanade.tachiyomi.source.model.SChapter
|
||||||
|
import eu.kanade.tachiyomi.source.online.DelegatedHttpSource
|
||||||
|
import eu.kanade.tachiyomi.util.system.executeOnIO
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.async
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
import uy.kohesive.injekt.Injekt
|
||||||
|
import uy.kohesive.injekt.api.get
|
||||||
|
import java.util.Locale
|
||||||
|
|
||||||
|
class Cubari : DelegatedHttpSource() {
|
||||||
|
override val domainName: String = "cubari"
|
||||||
|
override fun canOpenUrl(uri: Uri): Boolean = true
|
||||||
|
|
||||||
|
override fun chapterUrl(uri: Uri): String? = null
|
||||||
|
|
||||||
|
override fun pageNumber(uri: Uri): Int? = uri.pathSegments.getOrNull(4)?.toIntOrNull()
|
||||||
|
|
||||||
|
override suspend fun fetchMangaFromChapterUrl(uri: Uri): Triple<Chapter, Manga, List<SChapter>>? {
|
||||||
|
val cubariType = uri.pathSegments.getOrNull(1)?.lowercase(Locale.ROOT) ?: return null
|
||||||
|
val cubariPath = uri.pathSegments.getOrNull(2) ?: return null
|
||||||
|
val chapterNumber = uri.pathSegments.getOrNull(3)?.replace("-", ".")?.toFloatOrNull() ?: return null
|
||||||
|
val mangaUrl = "/read/$cubariType/$cubariPath"
|
||||||
|
return withContext(Dispatchers.IO) {
|
||||||
|
val deferredManga = async {
|
||||||
|
db.getManga(mangaUrl, delegate?.id!!).executeAsBlocking() ?: getMangaInfo(mangaUrl)
|
||||||
|
}
|
||||||
|
val deferredChapters = async {
|
||||||
|
db.getManga(mangaUrl, delegate?.id!!).executeAsBlocking()?.let { manga ->
|
||||||
|
val chapters = db.getChapters(manga).executeOnIO()
|
||||||
|
val chapter = findChapter(chapters, cubariType, chapterNumber)
|
||||||
|
if (chapter != null) {
|
||||||
|
return@async chapters
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getChapters(mangaUrl)
|
||||||
|
}
|
||||||
|
val manga = deferredManga.await()
|
||||||
|
val chapters = deferredChapters.await()
|
||||||
|
val context = Injekt.get<PreferencesHelper>().context
|
||||||
|
val trueChapter = findChapter(chapters, cubariType, chapterNumber)?.toChapter()
|
||||||
|
?: error(
|
||||||
|
context.getString(R.string.chapter_not_found)
|
||||||
|
)
|
||||||
|
if (manga != null) {
|
||||||
|
Triple(trueChapter, manga, chapters.orEmpty())
|
||||||
|
} else null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun findChapter(chapters: List<SChapter>?, cubariType: String, chapterNumber: Float): SChapter? {
|
||||||
|
return when (cubariType) {
|
||||||
|
"imgur" -> chapters?.firstOrNull()
|
||||||
|
else -> chapters?.find { it.chapter_number == chapterNumber }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user