Made Luscious into only one extension (#10563)

* Update Luscious.kt

* Delete multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/luscious directory

* Delete multisrc/overrides/luscious directory

* Made in to singel source

* Update CHANGELOG.md

* Update build.gradle
This commit is contained in:
jopejoe1 2022-01-24 23:22:15 +13:00 committed by GitHub
parent b6602ec955
commit 26b48d0736
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 257 additions and 148 deletions

View File

@ -1,37 +0,0 @@
package eu.kanade.tachiyomi.extension.all.luscious
import eu.kanade.tachiyomi.multisrc.luscious.Luscious
import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.SourceFactory
class LusciousFactory : SourceFactory {
override fun createSources(): List<Source> = listOf(
LusciousEN(),
LusciousJA(),
LusciousES(),
LusciousIT(),
LusciousDE(),
LusciousFR(),
LusciousZH(),
LusciousKO(),
LusciousOTHER(),
LusciousPT(),
LusciousTH(),
LusciousALL(),
)
}
class LusciousEN : Luscious("Luscious", "https://www.luscious.net", "en")
class LusciousJA : Luscious("Luscious", "https://www.luscious.net", "ja")
class LusciousES : Luscious("Luscious", "https://www.luscious.net", "es")
class LusciousIT : Luscious("Luscious", "https://www.luscious.net", "it")
class LusciousDE : Luscious("Luscious", "https://www.luscious.net", "de")
class LusciousFR : Luscious("Luscious", "https://www.luscious.net", "fr")
class LusciousZH : Luscious("Luscious", "https://www.luscious.net", "zh")
class LusciousKO : Luscious("Luscious", "https://www.luscious.net", "ko")
class LusciousOTHER : Luscious("Luscious", "https://www.luscious.net", "other")
class LusciousPT : Luscious("Luscious", "https://www.luscious.net", "pt-BR") {
// Hardcode the id because the language wasn't specific.
override val id: Long = 5826725746643311801
}
class LusciousTH : Luscious("Luscious", "https://www.luscious.net", "th")
class LusciousALL : Luscious("Luscious", "https://www.luscious.net", "all")

View File

@ -1,37 +0,0 @@
package eu.kanade.tachiyomi.extension.all.lusciousapi
import eu.kanade.tachiyomi.multisrc.luscious.Luscious
import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.SourceFactory
class LusciousAPIFactory : SourceFactory {
override fun createSources(): List<Source> = listOf(
LusciousAPIEN(),
LusciousAPIJA(),
LusciousAPIES(),
LusciousAPIIT(),
LusciousAPIDE(),
LusciousAPIFR(),
LusciousAPIZH(),
LusciousAPIKO(),
LusciousAPIOTHER(),
LusciousAPIPT(),
LusciousAPITH(),
LusciousAPIALL(),
)
}
class LusciousAPIEN : Luscious("Luscious (API)", "https://api.luscious.net", "en")
class LusciousAPIJA : Luscious("Luscious (API)", "https://api.luscious.net", "ja")
class LusciousAPIES : Luscious("Luscious (API)", "https://api.luscious.net", "es")
class LusciousAPIIT : Luscious("Luscious (API)", "https://api.luscious.net", "it")
class LusciousAPIDE : Luscious("Luscious (API)", "https://api.luscious.net", "de")
class LusciousAPIFR : Luscious("Luscious (API)", "https://api.luscious.net", "fr")
class LusciousAPIZH : Luscious("Luscious (API)", "https://api.luscious.net", "zh")
class LusciousAPIKO : Luscious("Luscious (API)", "https://api.luscious.net", "ko")
class LusciousAPIOTHER : Luscious("Luscious (API)", "https://api.luscious.net", "other")
class LusciousAPIPT : Luscious("Luscious (API)", "https://api.luscious.net", "pt-BR") {
// Hardcode the id because the language wasn't specific.
override val id: Long = 7982365826055835382
}
class LusciousAPITH : Luscious("Luscious (API)", "https://api.luscious.net", "th")
class LusciousAPIALL : Luscious("Luscious (API)", "https://api.luscious.net", "all")

View File

@ -1,37 +0,0 @@
package eu.kanade.tachiyomi.extension.all.lusciousmembers
import eu.kanade.tachiyomi.multisrc.luscious.Luscious
import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.SourceFactory
class LusciousMembersFactory : SourceFactory {
override fun createSources(): List<Source> = listOf(
LusciousMembersEN(),
LusciousMembersJA(),
LusciousMembersES(),
LusciousMembersIT(),
LusciousMembersDE(),
LusciousMembersFR(),
LusciousMembersZH(),
LusciousMembersKO(),
LusciousMembersOTHER(),
LusciousMembersPT(),
LusciousMembersTH(),
LusciousMembersALL(),
)
}
class LusciousMembersEN : Luscious("Luscious (Members)", "https://members.luscious.net", "en")
class LusciousMembersJA : Luscious("Luscious (Members)", "https://members.luscious.net", "ja")
class LusciousMembersES : Luscious("Luscious (Members)", "https://members.luscious.net", "es")
class LusciousMembersIT : Luscious("Luscious (Members)", "https://members.luscious.net", "it")
class LusciousMembersDE : Luscious("Luscious (Members)", "https://members.luscious.net", "de")
class LusciousMembersFR : Luscious("Luscious (Members)", "https://members.luscious.net", "fr")
class LusciousMembersZH : Luscious("Luscious (Members)", "https://members.luscious.net", "zh")
class LusciousMembersKO : Luscious("Luscious (Members)", "https://members.luscious.net", "ko")
class LusciousMembersOTHER : Luscious("Luscious (Members)", "https://members.luscious.net", "other")
class LusciousMembersPT : Luscious("Luscious (Members)", "https://members.luscious.net", "pt-BR") {
// Hardcode the id because the language wasn't specific.
override val id: Long = 6917849530594229844
}
class LusciousMembersTH : Luscious("Luscious (Members)", "https://members.luscious.net", "th")
class LusciousMembersALL : Luscious("Luscious (Members)", "https://members.luscious.net", "all")

View File

@ -1,26 +0,0 @@
package eu.kanade.tachiyomi.multisrc.luscious
import generator.ThemeSourceData.MultiLang
import generator.ThemeSourceGenerator
class LusciousGenerator : ThemeSourceGenerator {
override val themePkg = "luscious"
override val themeClass = "Luscious"
override val baseVersionCode: Int = 15
override val sources = listOf(
MultiLang("Luscious", "https://www.luscious.net", listOf("en", "ja", "es", "it", "de", "fr", "zh", "ko", "other", "pt-BR", "th", "all"), isNsfw = true, className = "LusciousFactory", overrideVersionCode = 2),
MultiLang("Luscious (Members)", "https://members.luscious.net", listOf("en", "ja", "es", "it", "de", "fr", "zh", "ko", "other", "pt-BR", "th", "all"), isNsfw = true, className = "LusciousMembersFactory", pkgName = "lusciousmembers"), // Requires Account
MultiLang("Luscious (API)", "https://api.luscious.net", listOf("en", "ja", "es", "it", "de", "fr", "zh", "ko", "other", "pt-BR", "th", "all"), isNsfw = true, className = "LusciousAPIFactory", pkgName = "lusciousapi")
)
companion object {
@JvmStatic
fun main(args: Array<String>) {
LusciousGenerator().createAll()
}
}
}

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="eu.kanade.tachiyomi.extension">
</manifest>

132
src/all/CHANGELOG.md Normal file
View File

@ -0,0 +1,132 @@
## 1.2.18
### Features
* Merged Luscious extensions
* added removed extensions as mirrors
### Fix
* webp images downloading as .bin files
## 1.2.17
### Refactor
* replace Gson with kotlinx.serialization
## 1.2.16
### Fix
* Gson conversion mistake
## 1.2.15
### Fix
* Loading of image URLs that are missing `https` at the beginning
## 1.2.14
### Features
* Chapter Number as prefix
* Missing sort option `Search Score`
## 1.2.13
### Fix
* Change pr to pt-BR
## 1.2.12
### Features
* Chapter release date
* Selection filter
## 1.2.11
### Features
* Uploader Filter
* Favourite filter
### Fix
* Api in webview
## 1.2.10
### Fix
* Latest sort order
## 1.2.9
### Features
* More genres as filter options
## 1.2.8
### Fix
* Android 8 Support
## 1.2.7
### Features
* Unfiltered Language option
* Filter by year is now dynamic
* Page sort preference
* Tag filter is now text input
## 1.2.6
### Features
* Merge Chapter preference
* Resolution preference
## 1.2.5
### Features
* Moved to API
* Every page is now a Chapter
* Album Size Filter
* Restrict Genres Filter
* More sort filter options
### Fix
* Details & tags in members mirror
## 1.2.4
### Fix
* Changed image server
## 1.2.3
### Features
* added api & members mirror
## 1.2.2
### Fix
* Page order
## 1.2.1
### Features
* first version

23
src/all/README.md Normal file
View File

@ -0,0 +1,23 @@
# Luscious
Table of Content
- [FAQ](#FAQ)
[Uncomment this if needed; and replace &#40; and &#41; with ( and )]: <> (- [Guides]&#40;#Guides&#41;)
Don't find the question you are look for go check out our general FAQs and Guides over at [Extension FAQ](https://tachiyomi.org/help/faq/#extensions) or [Getting Started](https://tachiyomi.org/help/guides/getting-started/#installation)
## FAQ
#### Why is each page a Chapter?
New pages can always be added to a Luscious album by the creator of the album.
#### Why do i get the errors like `Index: 2, Size: 2`?
This happens when the manga is not supporting your current resolution.
#### Why do features that require login not work even when im logged in?
Features that require login only work when the mirror is changed to the Members mirror.
#### Where did the other Luscious extensions go?
They are now mirror options in the Luscious extension.
[Uncomment this if needed]: <> (## Guides)

13
src/all/build.gradle Normal file
View File

@ -0,0 +1,13 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlinx-serialization'
ext {
extName = 'Luscious'
pkgNameSuffix = 'all.luscious'
extClass = '.LusciousFactory'
extVersionCode = 18
isNsfw = true
}
apply from: "$rootDir/common.gradle"

View File

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 78 KiB

View File

@ -1,4 +1,4 @@
package eu.kanade.tachiyomi.multisrc.luscious
package eu.kanade.tachiyomi.extension.all.luscious
import android.app.Application
import android.content.SharedPreferences
@ -30,9 +30,12 @@ import kotlinx.serialization.json.put
import kotlinx.serialization.json.putJsonArray
import kotlinx.serialization.json.putJsonObject
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import okhttp3.Interceptor
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
import okhttp3.ResponseBody.Companion.toResponseBody
import rx.Observable
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
@ -40,21 +43,37 @@ import uy.kohesive.injekt.injectLazy
import java.util.Calendar
abstract class Luscious(
override val name: String,
override val baseUrl: String,
final override val lang: String
) : ConfigurableSource, HttpSource() {
// Based on Luscious single source extension form https://github.com/tachiyomiorg/tachiyomi-extensions/commit/aacf56d0c0ddb173372aac69d798ae998f178377
// with modification to make it support multisrc
override val supportsLatest: Boolean = true
override val name: String = "Luscious"
private val preferences: SharedPreferences by lazy {
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
}
override val baseUrl: String = getMirrorPref()!!
private val apiBaseUrl: String = "$baseUrl/graphql/nobatch/"
private val json: Json by injectLazy()
override val client: OkHttpClient = network.cloudflareClient
override val client: OkHttpClient
get() = network.cloudflareClient.newBuilder()
.addNetworkInterceptor(rewriteOctetStream)
.build()
private val rewriteOctetStream: Interceptor = Interceptor { chain ->
val originalResponse: Response = chain.proceed(chain.request())
if (originalResponse.headers("Content-Type").contains("application/octet-stream") && originalResponse.request.url.toString().contains(".webp")) {
val orgBody = originalResponse.body!!.bytes()
val newBody = orgBody.toResponseBody("image/webp".toMediaTypeOrNull())
originalResponse.newBuilder()
.body(newBody)
.build()
} else originalResponse
}
private val lusLang: String = toLusLang(lang)
@ -75,10 +94,6 @@ abstract class Luscious(
}
}
private val preferences: SharedPreferences by lazy {
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
}
// Common
private fun buildAlbumListRequestInput(page: Int, filters: FilterList, query: String = ""): JsonObject {
@ -820,6 +835,12 @@ abstract class Luscious(
private val SORT_PREF_ENTRIES = arrayOf("Position", "Date", "Rating")
private val SORT_PREF_ENTRY_VALUES = arrayOf("position", "date_newest", "rating_all_time")
private val SORT_PREF_DEFAULT_VALUE = SORT_PREF_ENTRY_VALUES[0]
private const val MIRROR_PREF_KEY = "MIRROR"
private const val MIRROR_PREF_TITLE = "Mirror"
private val MIRROR_PREF_ENTRIES = arrayOf("Guest", "API", "Members")
private val MIRROR_PREF_ENTRY_VALUES = arrayOf("https://www.luscious.net", "https://api.luscious.net", "https://members.luscious.net")
private val MIRROR_PREF_DEFAULT_VALUE = MIRROR_PREF_ENTRY_VALUES[0]
}
override fun setupPreferenceScreen(screen: PreferenceScreen) {
@ -864,12 +885,29 @@ abstract class Luscious(
preferences.edit().putBoolean("${MERGE_CHAPTER_PREF_KEY}_$lang", checkValue).commit()
}
}
val mirrorPref = ListPreference(screen.context).apply {
key = "${MIRROR_PREF_KEY}_$lang"
title = MIRROR_PREF_TITLE
entries = MIRROR_PREF_ENTRIES
entryValues = MIRROR_PREF_ENTRY_VALUES
setDefaultValue(MIRROR_PREF_DEFAULT_VALUE)
summary = "%s"
setOnPreferenceChangeListener { _, newValue ->
val selected = newValue as String
val index = findIndexOfValue(selected)
val entry = entryValues[index] as String
preferences.edit().putString("${MIRROR_PREF_KEY}_$lang", entry).commit()
}
}
screen.addPreference(resolutionPref)
screen.addPreference(sortPref)
screen.addPreference(mergeChapterPref)
screen.addPreference(mirrorPref)
}
private fun getMergeChapterPref(): Boolean = preferences.getBoolean("${MERGE_CHAPTER_PREF_KEY}_$lang", MERGE_CHAPTER_PREF_DEFAULT_VALUE)
private fun getResolutionPref(): String? = preferences.getString("${RESOLUTION_PREF_KEY}_$lang", RESOLUTION_PREF_DEFAULT_VALUE)
private fun getSortPref(): String? = preferences.getString("${SORT_PREF_KEY}_$lang", SORT_PREF_DEFAULT_VALUE)
private fun getMirrorPref(): String? = preferences.getString("${MIRROR_PREF_KEY}_$lang", MIRROR_PREF_DEFAULT_VALUE)
}

View File

@ -0,0 +1,36 @@
package eu.kanade.tachiyomi.extension.all.luscious
import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.SourceFactory
class LusciousFactory : SourceFactory {
override fun createSources(): List<Source> = listOf(
LusciousEN(),
LusciousJA(),
LusciousES(),
LusciousIT(),
LusciousDE(),
LusciousFR(),
LusciousZH(),
LusciousKO(),
LusciousOTHER(),
LusciousPT(),
LusciousTH(),
LusciousALL(),
)
}
class LusciousEN : Luscious("en")
class LusciousJA : Luscious("ja")
class LusciousES : Luscious("es")
class LusciousIT : Luscious("it")
class LusciousDE : Luscious("de")
class LusciousFR : Luscious("fr")
class LusciousZH : Luscious("zh")
class LusciousKO : Luscious("ko")
class LusciousOTHER : Luscious("other")
class LusciousPT : Luscious("pt-BR") {
// Hardcode the id because the language wasn't specific.
override val id: Long = 5826725746643311801
}
class LusciousTH : Luscious("th")
class LusciousALL : Luscious("all")