HeanCms: deeplink support & thumbnail on search (#16156)

* HeanCms: fix english string

* attempt to use thumbnail from search if available

* deep link support

* version

* suggested changes

Co-authored-by: Alessandro Jean <14254807+alessandrojean@users.noreply.github.com>

* lint

* attempt to use status from details response

---------

Co-authored-by: Alessandro Jean <14254807+alessandrojean@users.noreply.github.com>
This commit is contained in:
mobi2002 2023-04-25 22:19:26 +05:00 committed by GitHub
parent e1ecd8d26d
commit 61d34b9ff8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 85 additions and 4 deletions

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="eu.kanade.tachiyomi.extension">
<application>
<activity
android:name="eu.kanade.tachiyomi.multisrc.heancms.HeanCmsUrlActivity"
android:excludeFromRecents="true"
android:exported="true"
android:theme="@android:style/Theme.NoDisplay">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="${SOURCEHOST}"
android:pathPattern="/.*/..*"
android:scheme="${SOURCESCHEME}" />
</intent-filter>
</activity>
</application>
</manifest>

View File

@ -117,6 +117,17 @@ abstract class HeanCms(
override fun latestUpdatesParse(response: Response): MangasPage = popularMangaParse(response)
override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable<MangasPage> {
if (!query.startsWith(SEARCH_PREFIX)) {
return super.fetchSearchManga(page, query, filters)
}
val slug = query.substringAfter(SEARCH_PREFIX)
val manga = SManga.create().apply { url = "/series/$slug" }
return fetchMangaDetails(manga).map { MangasPage(listOf(it), false) }
}
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
/**
* Their query search endpoint doesn't return the thumbnails, so we need to do
@ -224,7 +235,8 @@ abstract class HeanCms(
?: throw Exception(intl.urlChangedError(name))
return seriesDetails.apply {
status = response.request.url.fragment?.toIntOrNull() ?: SManga.UNKNOWN
status = status.takeUnless { it == SManga.UNKNOWN }
?: response.request.url.fragment?.toIntOrNull() ?: SManga.UNKNOWN
}
}
@ -395,5 +407,7 @@ abstract class HeanCms(
private val JSON_MEDIA_TYPE = "application/json".toMediaType()
val TIMESTAMP_REGEX = "-\\d+$".toRegex()
const val SEARCH_PREFIX = "slug:"
}
}

View File

@ -29,6 +29,7 @@ data class HeanCmsSearchDto(
@SerialName("series_slug") val slug: String,
@SerialName("series_type") val type: String,
val title: String,
val thumbnail: String? = null,
) {
fun toSManga(
@ -40,7 +41,8 @@ data class HeanCmsSearchDto(
val thumbnailFileName = slugMap[slugOnly]?.thumbnailFileName
title = this@HeanCmsSearchDto.title
thumbnail_url = thumbnailFileName?.toAbsoluteThumbnailUrl(apiUrl, coverPath)
thumbnail_url = thumbnail?.toAbsoluteThumbnailUrl(apiUrl, coverPath)
?: thumbnailFileName?.toAbsoluteThumbnailUrl(apiUrl, coverPath)
url = "/series/$slugOnly"
}
}

View File

@ -9,7 +9,7 @@ class HeanCmsGenerator : ThemeSourceGenerator {
override val themeClass = "HeanCms"
override val baseVersionCode: Int = 12
override val baseVersionCode: Int = 13
override val sources = listOf(
SingleLang("Omega Scans", "https://omegascans.org", "en", isNsfw = true, overrideVersionCode = 16),

View File

@ -25,7 +25,7 @@ class HeanCmsIntl(lang: String) {
val statusOnHiatus: String = when (availableLang) {
BRAZILIAN_PORTUGUESE -> "Em hiato"
SPANISH -> "En hiatus"
else -> "Ongoing"
else -> "On Hiatus"
}
val statusDropped: String = when (availableLang) {

View File

@ -0,0 +1,42 @@
package eu.kanade.tachiyomi.multisrc.heancms
import android.app.Activity
import android.content.ActivityNotFoundException
import android.content.Intent
import android.os.Bundle
import android.util.Log
import kotlin.system.exitProcess
class HeanCmsUrlActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val pathSegments = intent?.data?.pathSegments
if (pathSegments != null && pathSegments.size >= 2) {
val mainIntent = Intent().apply {
action = "eu.kanade.tachiyomi.SEARCH"
putExtra("query", createQuery(pathSegments))
putExtra("filter", packageName)
}
try {
startActivity(mainIntent)
} catch (e: ActivityNotFoundException) {
Log.e("HeanCmsUrlActivity", e.toString())
}
} else {
Log.e("HeanCmsUrlActivity", "could not parse uri from intent $intent")
}
finish()
exitProcess(0)
}
private fun createQuery(pathSegments: MutableList<String>): String? {
return if (pathSegments.size >= 2) {
val slug = pathSegments[1]
"${HeanCms.SEARCH_PREFIX}$slug"
} else {
null
}
}
}