ReImplement Mangadex deeplink
This commit is contained in:
parent
90654dc027
commit
d788585d14
@ -312,7 +312,7 @@
|
|||||||
android:scheme="https" />
|
android:scheme="https" />
|
||||||
|
|
||||||
<!-- MangaDex -->
|
<!-- MangaDex -->
|
||||||
<!--<data
|
<data
|
||||||
android:scheme="https"
|
android:scheme="https"
|
||||||
android:host="www.mangadex.org"
|
android:host="www.mangadex.org"
|
||||||
android:pathPrefix="/manga/" />
|
android:pathPrefix="/manga/" />
|
||||||
@ -320,14 +320,6 @@
|
|||||||
android:scheme="https"
|
android:scheme="https"
|
||||||
android:host="mangadex.org"
|
android:host="mangadex.org"
|
||||||
android:pathPrefix="/manga/" />
|
android:pathPrefix="/manga/" />
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="www.mangadex.cc"
|
|
||||||
android:pathPrefix="/manga/" />
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="www.mangadex.cc"
|
|
||||||
android:pathPrefix="/manga/" />
|
|
||||||
|
|
||||||
<data
|
<data
|
||||||
android:scheme="https"
|
android:scheme="https"
|
||||||
@ -337,14 +329,6 @@
|
|||||||
android:scheme="https"
|
android:scheme="https"
|
||||||
android:host="mangadex.org"
|
android:host="mangadex.org"
|
||||||
android:pathPrefix="/title/" />
|
android:pathPrefix="/title/" />
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="www.mangadex.cc"
|
|
||||||
android:pathPrefix="/title/" />
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="www.mangadex.cc"
|
|
||||||
android:pathPrefix="/title/" />
|
|
||||||
|
|
||||||
<data
|
<data
|
||||||
android:scheme="https"
|
android:scheme="https"
|
||||||
@ -354,14 +338,6 @@
|
|||||||
android:scheme="https"
|
android:scheme="https"
|
||||||
android:host="mangadex.org"
|
android:host="mangadex.org"
|
||||||
android:pathPrefix="/chapter/" />
|
android:pathPrefix="/chapter/" />
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="www.mangadex.cc"
|
|
||||||
android:pathPrefix="/chapter/" />
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="www.mangadex.cc"
|
|
||||||
android:pathPrefix="/chapter/" />-->
|
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
|
@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.source.online.all
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
|
import android.net.Uri
|
||||||
import eu.kanade.tachiyomi.data.database.models.Track
|
import eu.kanade.tachiyomi.data.database.models.Track
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
import eu.kanade.tachiyomi.data.track.TrackManager
|
import eu.kanade.tachiyomi.data.track.TrackManager
|
||||||
@ -19,6 +20,7 @@ import eu.kanade.tachiyomi.source.online.LoginSource
|
|||||||
import eu.kanade.tachiyomi.source.online.MetadataSource
|
import eu.kanade.tachiyomi.source.online.MetadataSource
|
||||||
import eu.kanade.tachiyomi.source.online.NamespaceSource
|
import eu.kanade.tachiyomi.source.online.NamespaceSource
|
||||||
import eu.kanade.tachiyomi.source.online.RandomMangaSource
|
import eu.kanade.tachiyomi.source.online.RandomMangaSource
|
||||||
|
import eu.kanade.tachiyomi.source.online.UrlImportableSource
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.BaseController
|
import eu.kanade.tachiyomi.ui.base.controller.BaseController
|
||||||
import eu.kanade.tachiyomi.ui.manga.MangaController
|
import eu.kanade.tachiyomi.ui.manga.MangaController
|
||||||
import eu.kanade.tachiyomi.util.lang.runAsObservable
|
import eu.kanade.tachiyomi.util.lang.runAsObservable
|
||||||
@ -37,7 +39,9 @@ import exh.md.service.MangaDexAuthService
|
|||||||
import exh.md.service.MangaDexService
|
import exh.md.service.MangaDexService
|
||||||
import exh.md.service.SimilarService
|
import exh.md.service.SimilarService
|
||||||
import exh.md.utils.FollowStatus
|
import exh.md.utils.FollowStatus
|
||||||
|
import exh.md.utils.MdApi
|
||||||
import exh.md.utils.MdLang
|
import exh.md.utils.MdLang
|
||||||
|
import exh.md.utils.MdUtil
|
||||||
import exh.metadata.metadata.MangaDexSearchMetadata
|
import exh.metadata.metadata.MangaDexSearchMetadata
|
||||||
import exh.source.DelegatedHttpSource
|
import exh.source.DelegatedHttpSource
|
||||||
import exh.ui.metadata.adapters.MangaDexDescriptionAdapter
|
import exh.ui.metadata.adapters.MangaDexDescriptionAdapter
|
||||||
@ -54,7 +58,7 @@ import kotlin.reflect.KClass
|
|||||||
class MangaDex(delegate: HttpSource, val context: Context) :
|
class MangaDex(delegate: HttpSource, val context: Context) :
|
||||||
DelegatedHttpSource(delegate),
|
DelegatedHttpSource(delegate),
|
||||||
MetadataSource<MangaDexSearchMetadata, MangaDto>,
|
MetadataSource<MangaDexSearchMetadata, MangaDto>,
|
||||||
// UrlImportableSource,
|
UrlImportableSource,
|
||||||
FollowsSource,
|
FollowsSource,
|
||||||
LoginSource,
|
LoginSource,
|
||||||
BrowseSourceFilterHeader,
|
BrowseSourceFilterHeader,
|
||||||
@ -66,7 +70,7 @@ class MangaDex(delegate: HttpSource, val context: Context) :
|
|||||||
MdLang.fromExt(lang) ?: MdLang.ENGLISH
|
MdLang.fromExt(lang) ?: MdLang.ENGLISH
|
||||||
}
|
}
|
||||||
|
|
||||||
// override val matchingHosts: List<String> = listOf("mangadex.org", "www.mangadex.org")
|
override val matchingHosts: List<String> = listOf("mangadex.org", "www.mangadex.org")
|
||||||
|
|
||||||
val preferences = Injekt.get<PreferencesHelper>()
|
val preferences = Injekt.get<PreferencesHelper>()
|
||||||
val mdList: MdList = Injekt.get<TrackManager>().mdList
|
val mdList: MdList = Injekt.get<TrackManager>().mdList
|
||||||
@ -114,18 +118,11 @@ class MangaDex(delegate: HttpSource, val context: Context) :
|
|||||||
PageHandler(headers, mangadexService, mangaPlusHandler, preferences, mdList)
|
PageHandler(headers, mangadexService, mangaPlusHandler, preferences, mdList)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable<MangasPage> =
|
override suspend fun mapUrlToMangaUrl(uri: Uri): String? {
|
||||||
urlImportFetchSearchManga(context, query) {
|
val lcFirstPathSegment = uri.pathSegments.firstOrNull()?.lowercase() ?: return null
|
||||||
importIdToMdId(query) {
|
|
||||||
super.fetchSearchManga(page, query, filters)
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/*override suspend fun mapUrlToMangaUrl(uri: Uri): String? {
|
|
||||||
val lcFirstPathSegment = uri.pathSegments.firstOrNull()?.toLowerCase() ?: return null
|
|
||||||
|
|
||||||
return if (lcFirstPathSegment == "title" || lcFirstPathSegment == "manga") {
|
return if (lcFirstPathSegment == "title" || lcFirstPathSegment == "manga") {
|
||||||
"/manga/" + uri.pathSegments[1]
|
MdUtil.buildMangaUrl(uri.pathSegments[1])
|
||||||
} else {
|
} else {
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
@ -133,15 +130,14 @@ class MangaDex(delegate: HttpSource, val context: Context) :
|
|||||||
|
|
||||||
override fun mapUrlToChapterUrl(uri: Uri): String? {
|
override fun mapUrlToChapterUrl(uri: Uri): String? {
|
||||||
if (!uri.pathSegments.firstOrNull().equals("chapter", true)) return null
|
if (!uri.pathSegments.firstOrNull().equals("chapter", true)) return null
|
||||||
val id = uri.pathSegments.getOrNull(1)?.toIntOrNull() ?: return null
|
val id = uri.pathSegments.getOrNull(1) ?: return null
|
||||||
return MdUtil.oldApiChapter + id
|
return MdApi.chapter + '/' + id
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun mapChapterUrlToMangaUrl(uri: Uri): String? {
|
override suspend fun mapChapterUrlToMangaUrl(uri: Uri): String? {
|
||||||
val id = uri.pathSegments.getOrNull(2) ?: return null
|
val id = uri.pathSegments.getOrNull(1) ?: return null
|
||||||
val mangaId = MangaHandler(baseHttpClient, headers, mdLang).getMangaIdFromChapterId(id)
|
return mangaHandler.getMangaFromChapterId(id)?.let { MdUtil.buildMangaUrl(it) }
|
||||||
return MdUtil.mapMdIdToMangaUrl(mangaId)
|
}
|
||||||
}*/
|
|
||||||
|
|
||||||
override fun fetchMangaDetails(manga: SManga): Observable<SManga> {
|
override fun fetchMangaDetails(manga: SManga): Observable<SManga> {
|
||||||
return mangaHandler.fetchMangaDetailsObservable(manga, id, preferences.mangaDexForceLatestCovers().get())
|
return mangaHandler.fetchMangaDetailsObservable(manga, id, preferences.mangaDexForceLatestCovers().get())
|
||||||
@ -240,9 +236,6 @@ class MangaDex(delegate: HttpSource, val context: Context) :
|
|||||||
}*/
|
}*/
|
||||||
|
|
||||||
override suspend fun fetchTrackingInfo(url: String): Track {
|
override suspend fun fetchTrackingInfo(url: String): Track {
|
||||||
if (!isLogged()) {
|
|
||||||
throw Exception("Not Logged in")
|
|
||||||
}
|
|
||||||
return followsHandler.fetchTrackingInfo(url)
|
return followsHandler.fetchTrackingInfo(url)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -266,26 +259,6 @@ class MangaDex(delegate: HttpSource, val context: Context) :
|
|||||||
return similarHandler.getSimilar(manga)
|
return similarHandler.getSimilar(manga)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*private fun importIdToMdId(query: String, fail: () -> Observable<MangasPage>): Observable<MangasPage> =
|
|
||||||
when {
|
|
||||||
query.toIntOrNull() != null -> {
|
|
||||||
runAsObservable({
|
|
||||||
GalleryAdder().addGallery(context, MdUtil.baseUrl + MdUtil.mapMdIdToMangaUrl(query.toInt()), false, this@MangaDex)
|
|
||||||
})
|
|
||||||
.map { res ->
|
|
||||||
MangasPage(
|
|
||||||
if (res is GalleryAddEvent.Success) {
|
|
||||||
listOf(res.manga)
|
|
||||||
} else {
|
|
||||||
emptyList()
|
|
||||||
},
|
|
||||||
false
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else -> fail()
|
|
||||||
}*/
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val dataSaverPref = "dataSaverV5"
|
private const val dataSaverPref = "dataSaverV5"
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package exh.md.handlers
|
package exh.md.handlers
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
import eu.kanade.tachiyomi.data.database.DatabaseHelper
|
||||||
import eu.kanade.tachiyomi.network.parseAs
|
|
||||||
import eu.kanade.tachiyomi.source.model.SManga
|
import eu.kanade.tachiyomi.source.model.SManga
|
||||||
import exh.log.xLogE
|
import exh.log.xLogE
|
||||||
import exh.md.dto.ChapterDto
|
import exh.md.dto.ChapterDto
|
||||||
@ -15,7 +14,6 @@ import exh.metadata.metadata.base.insertFlatMetadata
|
|||||||
import exh.util.capitalize
|
import exh.util.capitalize
|
||||||
import exh.util.floor
|
import exh.util.floor
|
||||||
import exh.util.nullIfEmpty
|
import exh.util.nullIfEmpty
|
||||||
import okhttp3.Response
|
|
||||||
import tachiyomi.source.model.ChapterInfo
|
import tachiyomi.source.model.ChapterInfo
|
||||||
import tachiyomi.source.model.MangaInfo
|
import tachiyomi.source.model.MangaInfo
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
@ -200,9 +198,8 @@ class ApiMangaParser(
|
|||||||
}.toList()
|
}.toList()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun chapterParseForMangaId(response: Response): String {
|
fun chapterParseForMangaId(chapterDto: ChapterDto): String? {
|
||||||
return response.parseAs<ChapterDto>(MdUtil.jsonParser)
|
return chapterDto.relationships.find { it.type.equals("manga", true) }?.id
|
||||||
.relationships.firstOrNull { it.type.equals("manga", true) }?.id ?: throw Exception("Not found")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun StringBuilder.appends(string: String): StringBuilder = append("$string ")
|
fun StringBuilder.appends(string: String): StringBuilder = append("$string ")
|
||||||
|
@ -82,4 +82,10 @@ class MangaHandler(
|
|||||||
remoteTrack.await() to null
|
remoteTrack.await() to null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
suspend fun getMangaFromChapterId(chapterId: String): String? {
|
||||||
|
return withIOContext {
|
||||||
|
apiMangaParser.chapterParseForMangaId(service.viewChapter(chapterId))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user