Add a special view to replace descriptions for integrated and delegated sources!

As the integrated and delegated websites don't actually have descriptions, just info, I decided to make a special view for them! with all the info you need available to you in front of your face, there is now no need to go searching through the description! This is likely the most work I have put into 1 feature in the whole time I have been developing TachiyomiSY!
This commit is contained in:
Jobobby04
2020-07-25 21:04:13 -04:00
parent a38cb2ab5f
commit 3e9c8dbfd2
55 changed files with 2635 additions and 362 deletions
@@ -1,13 +1,14 @@
package exh.metadata.metadata
import android.content.Context
import android.net.Uri
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.source.model.SManga
import exh.metadata.EX_DATE_FORMAT
import exh.metadata.ONGOING_SUFFIX
import exh.metadata.humanReadableByteCount
import exh.metadata.metadata.base.RaisedSearchMetadata
import exh.plusAssign
import java.util.Date
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
@@ -76,7 +77,7 @@ class EHentaiSearchMetadata : RaisedSearchMetadata() {
}
// Build a nice looking description out of what we know
val titleDesc = StringBuilder()
/* val titleDesc = StringBuilder()
title?.let { titleDesc += "Title: $it\n" }
altTitle?.let { titleDesc += "Alternate Title: $it\n" }
@@ -99,11 +100,36 @@ class EHentaiSearchMetadata : RaisedSearchMetadata() {
detailsDesc += "\n"
}
val tagsDesc = tagsToDescription()
val tagsDesc = tagsToDescription()*/
manga.description = listOf(titleDesc.toString(), detailsDesc.toString(), tagsDesc.toString())
manga.description = "meta" /*listOf(titleDesc.toString(), detailsDesc.toString(), tagsDesc.toString())
.filter(String::isNotBlank)
.joinToString(separator = "\n")
.joinToString(separator = "\n")*/
}
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
val pairs = mutableListOf<Pair<String, String>>()
gId?.let { pairs += Pair(context.getString(R.string.id), it) }
gToken?.let { pairs += Pair(context.getString(R.string.token), it) }
exh?.let { pairs += Pair(context.getString(R.string.is_exhentai_gallery), context.getString(if (it) android.R.string.yes else android.R.string.no)) }
thumbnailUrl?.let { pairs += Pair(context.getString(R.string.thumbnail_url), it) }
title?.let { pairs += Pair(context.getString(R.string.title), it) }
altTitle?.let { pairs += Pair(context.getString(R.string.alt_title), it) }
genre?.let { pairs += Pair(context.getString(R.string.genre), it) }
datePosted?.let { pairs += Pair(context.getString(R.string.date_posted), EX_DATE_FORMAT.format(Date(it))) }
parent?.let { pairs += Pair(context.getString(R.string.parent), it) }
visible?.let { pairs += Pair(context.getString(R.string.visible), it) }
language?.let { pairs += Pair(context.getString(R.string.language), it) }
translated?.let { pairs += Pair("Translated", context.getString(if (it) android.R.string.yes else android.R.string.no)) }
size?.let { pairs += Pair(context.getString(R.string.gallery_size), humanReadableByteCount(it, true)) }
length?.let { pairs += Pair(context.getString(R.string.page_count), it.toString()) }
favorites?.let { pairs += Pair(context.getString(R.string.total_favorites), it.toString()) }
ratingCount?.let { pairs += Pair(context.getString(R.string.total_ratings), it.toString()) }
averageRating?.let { pairs += Pair(context.getString(R.string.average_rating), it.toString()) }
aged.let { pairs += Pair(context.getString(R.string.aged), context.getString(if (it) android.R.string.yes else android.R.string.no)) }
lastUpdateCheck.let { pairs += Pair(context.getString(R.string.last_update_check), EX_DATE_FORMAT.format(Date(it))) }
return pairs
}
companion object {
@@ -112,6 +138,7 @@ class EHentaiSearchMetadata : RaisedSearchMetadata() {
const val TAG_TYPE_NORMAL = 0
const val TAG_TYPE_LIGHT = 1
const val TAG_TYPE_WEAK = 2
const val EH_GENRE_NAMESPACE = "genre"
private const val EH_ARTIST_NAMESPACE = "artist"
@@ -1,8 +1,9 @@
package exh.metadata.metadata
import android.content.Context
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.source.model.SManga
import exh.metadata.metadata.base.RaisedSearchMetadata
import exh.plusAssign
class EightMusesSearchMetadata : RaisedSearchMetadata() {
var path: List<String> = emptyList()
@@ -26,14 +27,25 @@ class EightMusesSearchMetadata : RaisedSearchMetadata() {
manga.genre = tagsToGenreString()
val titleDesc = StringBuilder()
/*val titleDesc = StringBuilder()
title?.let { titleDesc += "Title: $it\n" }
val tagsDesc = tagsToDescription()
val tagsDesc = tagsToDescription()*/
manga.description = listOf(titleDesc.toString(), tagsDesc.toString())
manga.description = "meta" /*listOf(titleDesc.toString(), tagsDesc.toString())
.filter(String::isNotBlank)
.joinToString(separator = "\n")
.joinToString(separator = "\n")*/
}
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
val pairs = mutableListOf<Pair<String, String>>()
title?.let { pairs += Pair(context.getString(R.string.title), it) }
val path = path.joinToString("/", prefix = "/")
if (path.isNotBlank()) {
pairs += Pair(context.getString(R.string.path), path)
}
thumbnailUrl?.let { pairs += Pair(context.getString(R.string.thumbnail_url), it) }
return pairs
}
companion object {
@@ -1,9 +1,10 @@
package exh.metadata.metadata
import android.content.Context
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.source.model.SManga
import exh.metadata.metadata.EightMusesSearchMetadata.Companion.ARTIST_NAMESPACE
import exh.metadata.metadata.base.RaisedSearchMetadata
import exh.plusAssign
class HBrowseSearchMetadata : RaisedSearchMetadata() {
var hbId: Long? = null
@@ -27,15 +28,25 @@ class HBrowseSearchMetadata : RaisedSearchMetadata() {
manga.artist = tags.ofNamespace(ARTIST_NAMESPACE).joinToString { it.name }
val titleDesc = StringBuilder()
manga.genre = tagsToGenreString()
/*val titleDesc = StringBuilder()
title?.let { titleDesc += "Title: $it\n" }
length?.let { titleDesc += "Length: $it page(s)\n" }
val tagsDesc = tagsToDescription()
val tagsDesc = tagsToDescription()*/
manga.description = listOf(titleDesc.toString(), tagsDesc.toString())
manga.description = "meta" /*listOf(titleDesc.toString(), tagsDesc.toString())
.filter(String::isNotBlank)
.joinToString(separator = "\n")
.joinToString(separator = "\n")*/
}
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
val pairs = mutableListOf<Pair<String, String>>()
hbId?.let { pairs += Pair(context.getString(R.string.id), it.toString()) }
title?.let { pairs += Pair(context.getString(R.string.title), it) }
length?.let { pairs += Pair(context.getString(R.string.page_count), it.toString()) }
return pairs
}
companion object {
@@ -1,5 +1,7 @@
package exh.metadata.metadata
import android.content.Context
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.source.model.SManga
import exh.metadata.metadata.base.RaisedSearchMetadata
@@ -30,16 +32,26 @@ class HentaiCafeSearchMetadata : RaisedSearchMetadata() {
// Not available
manga.status = SManga.UNKNOWN
val detailsDesc = "Title: $title\n" +
"Artist: $artist\n"
val tagsDesc = tagsToDescription()
manga.genre = tagsToGenreString()
manga.description = listOf(detailsDesc, tagsDesc.toString())
/* val detailsDesc = "Title: $title\n" +
"Artist: $artist\n"
val tagsDesc = tagsToDescription()*/
manga.description = "meta" /*listOf(detailsDesc, tagsDesc.toString())
.filter(String::isNotBlank)
.joinToString(separator = "\n")
.joinToString(separator = "\n")*/
}
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
val pairs = mutableListOf<Pair<String, String>>()
hcId?.let { pairs += Pair(context.getString(R.string.id), it) }
readerId?.let { pairs += Pair(context.getString(R.string.reader_id), it) }
thumbnailUrl?.let { pairs += Pair(context.getString(R.string.thumbnail_url), it) }
title?.let { pairs += Pair(context.getString(R.string.title), it) }
artist?.let { pairs += Pair(context.getString(R.string.artist), it) }
return pairs
}
companion object {
@@ -1,5 +1,7 @@
package exh.metadata.metadata
import android.content.Context
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.source.model.SManga
import exh.metadata.EX_DATE_FORMAT
import exh.metadata.metadata.base.RaisedSearchMetadata
@@ -37,17 +39,25 @@ class HitomiSearchMetadata : RaisedSearchMetadata() {
override fun copyTo(manga: SManga) {
thumbnailUrl?.let { manga.thumbnail_url = it }
val titleDesc = StringBuilder()
title?.let {
manga.title = it
}
// Copy tags -> genres
manga.genre = tagsToGenreString()
manga.artist = artists.joinToString()
manga.status = SManga.UNKNOWN
/*val titleDesc = StringBuilder()
title?.let {
titleDesc += "Title: $it\n"
}
val detailsDesc = StringBuilder()
manga.artist = artists.joinToString()
detailsDesc += "Artist(s): ${manga.artist}\n"
group?.let {
@@ -74,16 +84,35 @@ class HitomiSearchMetadata : RaisedSearchMetadata() {
detailsDesc += "Upload date: ${EX_DATE_FORMAT.format(Date(it))}\n"
}
manga.status = SManga.UNKNOWN
val tagsDesc = tagsToDescription()*/
// Copy tags -> genres
manga.genre = tagsToGenreString()
val tagsDesc = tagsToDescription()
manga.description = listOf(titleDesc.toString(), detailsDesc.toString(), tagsDesc.toString())
manga.description = "meta" /*listOf(titleDesc.toString(), detailsDesc.toString(), tagsDesc.toString())
.filter(String::isNotBlank)
.joinToString(separator = "\n")
.joinToString(separator = "\n")*/
}
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
val pairs = mutableListOf<Pair<String, String>>()
hlId?.let { pairs += Pair(context.getString(R.string.id), it) }
title?.let { pairs += Pair(context.getString(R.string.title), it) }
thumbnailUrl?.let { pairs += Pair(context.getString(R.string.thumbnail_url), it) }
val artists = artists.joinToString()
if (artists.isNotBlank()) {
pairs += Pair(context.getString(R.string.artist), artists)
}
group?.let { pairs += Pair(context.getString(R.string.group), it) }
type?.let { pairs += Pair(context.getString(R.string.genre), it) }
language?.let { pairs += Pair(context.getString(R.string.language), it) }
val series = series.joinToString()
if (series.isNotBlank()) {
pairs += Pair(context.getString(R.string.series), series)
}
val characters = characters.joinToString()
if (characters.isNotBlank()) {
pairs += Pair(context.getString(R.string.characters), characters)
}
uploadDate?.let { pairs += Pair(context.getString(R.string.date_posted), EX_DATE_FORMAT.format(Date(it))) }
return pairs
}
companion object {
@@ -1,12 +1,12 @@
package exh.metadata.metadata
import android.content.Context
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.source.model.SManga
import exh.metadata.EX_DATE_FORMAT
import exh.metadata.ONGOING_SUFFIX
import exh.metadata.metadata.base.RaisedSearchMetadata
import exh.metadata.nullIfBlank
import exh.plusAssign
import java.util.Date
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
@@ -77,7 +77,7 @@ class NHentaiSearchMetadata : RaisedSearchMetadata() {
}
}
val titleDesc = StringBuilder()
/*val titleDesc = StringBuilder()
englishTitle?.let { titleDesc += "English Title: $it\n" }
japaneseTitle?.let { titleDesc += "Japanese Title: $it\n" }
shortTitle?.let { titleDesc += "Short Title: $it\n" }
@@ -89,11 +89,27 @@ class NHentaiSearchMetadata : RaisedSearchMetadata() {
favoritesCount?.let { detailsDesc += "Favorited: $it times\n" }
scanlator?.nullIfBlank()?.let { detailsDesc += "Scanlator: $it\n" }
val tagsDesc = tagsToDescription()
val tagsDesc = tagsToDescription()*/
manga.description = listOf(titleDesc.toString(), detailsDesc.toString(), tagsDesc.toString())
manga.description = "meta" /*listOf(titleDesc.toString(), detailsDesc.toString(), tagsDesc.toString())
.filter(String::isNotBlank)
.joinToString(separator = "\n")
.joinToString(separator = "\n")*/
}
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
val pairs = mutableListOf<Pair<String, String>>()
nhId?.let { pairs += Pair(context.getString(R.string.id), it.toString()) }
uploadDate?.let { pairs += Pair(context.getString(R.string.date_posted), EX_DATE_FORMAT.format(Date(it * 1000))) }
favoritesCount?.let { pairs += Pair(context.getString(R.string.total_favorites), it.toString()) }
mediaId?.let { pairs += Pair(context.getString(R.string.media_id), it) }
japaneseTitle?.let { pairs += Pair(context.getString(R.string.japanese_title), it) }
englishTitle?.let { pairs += Pair(context.getString(R.string.english_title), it) }
shortTitle?.let { pairs += Pair(context.getString(R.string.short_title), it) }
coverImageType?.let { pairs += Pair(context.getString(R.string.cover_image_file_type), it) }
pageImageTypes.size.let { pairs += Pair(context.getString(R.string.page_count), it.toString()) }
thumbnailImageType?.let { pairs += Pair(context.getString(R.string.thumbnail_image_file_type), it) }
scanlator?.let { pairs += Pair(context.getString(R.string.scanlator), it) }
return pairs
}
companion object {
@@ -106,7 +122,7 @@ class NHentaiSearchMetadata : RaisedSearchMetadata() {
const val BASE_URL = "https://nhentai.net"
private const val NHENTAI_ARTIST_NAMESPACE = "artist"
private const val NHENTAI_CATEGORIES_NAMESPACE = "category"
const val NHENTAI_CATEGORIES_NAMESPACE = "category"
fun typeToExtension(t: String?) =
when (t) {
@@ -1,12 +1,13 @@
package exh.metadata.metadata
import android.content.Context
import android.net.Uri
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.source.model.SManga
import exh.PERV_EDEN_EN_SOURCE_ID
import exh.PERV_EDEN_IT_SOURCE_ID
import exh.metadata.metadata.base.RaisedSearchMetadata
import exh.metadata.metadata.base.RaisedTitle
import exh.plusAssign
class PervEdenSearchMetadata : RaisedSearchMetadata() {
var pvId: String? = null
@@ -36,9 +37,28 @@ class PervEdenSearchMetadata : RaisedSearchMetadata() {
url?.let { manga.url = it }
thumbnailUrl?.let { manga.thumbnail_url = it }
val titleDesc = StringBuilder()
title?.let {
manga.title = it
}
artist?.let {
manga.artist = it
}
status?.let {
manga.status = when (it) {
"Ongoing" -> SManga.ONGOING
"Completed", "Suspended" -> SManga.COMPLETED
else -> SManga.UNKNOWN
}
}
// Copy tags -> genres
manga.genre = tagsToGenreString()
/*val titleDesc = StringBuilder()
title?.let {
titleDesc += "Title: $it\n"
}
if (altTitles.isNotEmpty()) {
@@ -50,7 +70,6 @@ class PervEdenSearchMetadata : RaisedSearchMetadata() {
val detailsDesc = StringBuilder()
artist?.let {
manga.artist = it
detailsDesc += "Artist: $it\n"
}
@@ -59,11 +78,6 @@ class PervEdenSearchMetadata : RaisedSearchMetadata() {
}
status?.let {
manga.status = when (it) {
"Ongoing" -> SManga.ONGOING
"Completed", "Suspended" -> SManga.COMPLETED
else -> SManga.UNKNOWN
}
detailsDesc += "Status: $it\n"
}
@@ -71,14 +85,30 @@ class PervEdenSearchMetadata : RaisedSearchMetadata() {
detailsDesc += "Rating: %.2\n".format(it)
}
// Copy tags -> genres
manga.genre = tagsToGenreString()
val tagsDesc = tagsToDescription()
val tagsDesc = tagsToDescription()*/
manga.description = listOf(titleDesc.toString(), detailsDesc.toString(), tagsDesc.toString())
manga.description = "meta" /*listOf(titleDesc.toString(), detailsDesc.toString(), tagsDesc.toString())
.filter(String::isNotBlank)
.joinToString(separator = "\n")
.joinToString(separator = "\n")*/
}
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
val pairs = mutableListOf<Pair<String, String>>()
pvId?.let { pairs += Pair(context.getString(R.string.id), it) }
url?.let { pairs += Pair(context.getString(R.string.url), it) }
thumbnailUrl?.let { pairs += Pair(context.getString(R.string.thumbnail_url), it) }
title?.let { pairs += Pair(context.getString(R.string.title), it) }
val altTitles = altTitles.joinToString()
if (altTitles.isNotBlank()) {
pairs += Pair(context.getString(R.string.alt_titles), altTitles)
}
artist?.let { pairs += Pair(context.getString(R.string.artist), it) }
type?.let { pairs += Pair(context.getString(R.string.genre), it) }
rating?.let { pairs += Pair(context.getString(R.string.average_rating), it.toString()) }
status?.let { pairs += Pair(context.getString(R.string.status), it) }
lang?.let { pairs += Pair(context.getString(R.string.language), it) }
return pairs
}
companion object {
@@ -1,8 +1,9 @@
package exh.metadata.metadata
import android.content.Context
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.source.model.SManga
import exh.metadata.metadata.base.RaisedSearchMetadata
import exh.plusAssign
class PururinSearchMetadata : RaisedSearchMetadata() {
var prId: Int? = null
@@ -42,7 +43,7 @@ class PururinSearchMetadata : RaisedSearchMetadata() {
manga.genre = tagsToGenreString()
val titleDesc = StringBuilder()
/*val titleDesc = StringBuilder()
title?.let { titleDesc += "English Title: $it\n" }
altTitle?.let { titleDesc += "Japanese Title: $it\n" }
@@ -52,11 +53,26 @@ class PururinSearchMetadata : RaisedSearchMetadata() {
fileSize?.let { detailsDesc += "Size: $it\n" }
ratingCount?.let { detailsDesc += "Rating: $averageRating ($ratingCount)\n" }
val tagsDesc = tagsToDescription()
val tagsDesc = tagsToDescription()*/
manga.description = listOf(titleDesc.toString(), detailsDesc.toString(), tagsDesc.toString())
manga.description = "meta" /*listOf(titleDesc.toString(), detailsDesc.toString(), tagsDesc.toString())
.filter(String::isNotBlank)
.joinToString(separator = "\n")
.joinToString(separator = "\n")*/
}
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
val pairs = mutableListOf<Pair<String, String>>()
prId?.let { pairs += Pair(context.getString(R.string.id), it.toString()) }
title?.let { pairs += Pair(context.getString(R.string.title), it) }
altTitle?.let { pairs += Pair(context.getString(R.string.alt_title), it) }
thumbnailUrl?.let { pairs += Pair(context.getString(R.string.thumbnail_url), it) }
uploaderDisp?.let { pairs += Pair(context.getString(R.string.uploader_capital), it) }
uploader?.let { pairs += Pair(context.getString(R.string.uploader), it) }
pages?.let { pairs += Pair(context.getString(R.string.page_count), it.toString()) }
fileSize?.let { pairs += Pair(context.getString(R.string.gallery_size), it) }
ratingCount?.let { pairs += Pair(context.getString(R.string.total_ratings), it.toString()) }
averageRating?.let { pairs += Pair(context.getString(R.string.average_rating), it.toString()) }
return pairs
}
companion object {
@@ -66,6 +82,7 @@ class PururinSearchMetadata : RaisedSearchMetadata() {
const val TAG_TYPE_DEFAULT = 0
private const val TAG_NAMESPACE_ARTIST = "artist"
const val TAG_NAMESPACE_CATEGORY = "category"
val BASE_URL = "https://pururin.io"
}
@@ -1,11 +1,14 @@
package exh.metadata.metadata
import android.content.Context
import android.net.Uri
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.source.model.SManga
import exh.metadata.EX_DATE_FORMAT
import exh.metadata.metadata.base.RaisedSearchMetadata
import exh.plusAssign
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
class TsuminoSearchMetadata : RaisedSearchMetadata() {
var tmId: Int? = null
@@ -20,6 +23,12 @@ class TsuminoSearchMetadata : RaisedSearchMetadata() {
var ratingString: String? = null
var averageRating: Float? = null
var userRatings: Long? = null
var favorites: Long? = null
var category: String? = null
var collection: String? = null
@@ -38,7 +47,10 @@ class TsuminoSearchMetadata : RaisedSearchMetadata() {
manga.status = SManga.UNKNOWN
val titleDesc = "Title: $title\n"
// Copy tags -> genres
manga.genre = tagsToGenreString()
/*val titleDesc = "Title: $title\n"
val detailsDesc = StringBuilder()
uploader?.let { detailsDesc += "Uploader: $it\n" }
@@ -59,14 +71,36 @@ class TsuminoSearchMetadata : RaisedSearchMetadata() {
detailsDesc += "Character: $charactersString\n"
}
// Copy tags -> genres
manga.genre = tagsToGenreString()
val tagsDesc = tagsToDescription()*/
val tagsDesc = tagsToDescription()
manga.description = listOf(titleDesc, detailsDesc.toString(), tagsDesc.toString())
manga.description = "meta" /*listOf(titleDesc, detailsDesc.toString(), tagsDesc.toString())
.filter(String::isNotBlank)
.joinToString(separator = "\n")
.joinToString(separator = "\n")*/
}
override fun getExtraInfoPairs(context: Context): List<Pair<String, String>> {
val pairs = mutableListOf<Pair<String, String>>()
tmId?.let { pairs += Pair(context.getString(R.string.id), it.toString()) }
title?.let { pairs += Pair(context.getString(R.string.title), it) }
uploader?.let { pairs += Pair(context.getString(R.string.uploader), it) }
uploadDate?.let { pairs += Pair(context.getString(R.string.date_posted), EX_DATE_FORMAT.format(Date(it))) }
length?.let { pairs += Pair(context.getString(R.string.page_count), it.toString()) }
ratingString?.let { pairs += Pair(context.getString(R.string.rating_string), it) }
averageRating?.let { pairs += Pair(context.getString(R.string.average_rating), it.toString()) }
userRatings?.let { pairs += Pair(context.getString(R.string.total_ratings), it.toString()) }
favorites?.let { pairs += Pair(context.getString(R.string.total_favorites), it.toString()) }
category?.let { pairs += Pair(context.getString(R.string.genre), it) }
collection?.let { pairs += Pair(context.getString(R.string.collection), it) }
group?.let { pairs += Pair(context.getString(R.string.group), it) }
val parodiesString = parody.joinToString()
if (parodiesString.isNotEmpty()) {
pairs += Pair(context.getString(R.string.parodies), parodiesString)
}
val charactersString = character.joinToString()
if (charactersString.isNotEmpty()) {
pairs += Pair(context.getString(R.string.characters), charactersString)
}
return pairs
}
companion object {
@@ -76,6 +110,8 @@ class TsuminoSearchMetadata : RaisedSearchMetadata() {
val BASE_URL = "https://www.tsumino.com"
val TSUMINO_DATE_FORMAT = SimpleDateFormat("yyyy-MM-dd", Locale.US)
fun tmIdFromUrl(url: String) =
Uri.parse(url).lastPathSegment
@@ -1,5 +1,6 @@
package exh.metadata.metadata.base
import android.content.Context
import com.google.gson.GsonBuilder
import eu.kanade.tachiyomi.source.model.SManga
import exh.metadata.forEach
@@ -112,6 +113,8 @@ abstract class RaisedSearchMetadata {
}
}
abstract fun getExtraInfoPairs(context: Context): List<Pair<String, String>>
companion object {
// Virtual tags allow searching of otherwise unindexed fields
const val TAG_TYPE_VIRTUAL = -2