From 94915eeb0fb2f6d9bc0df09ad71d0934feb37b38 Mon Sep 17 00:00:00 2001 From: Aria Moradi Date: Tue, 3 Aug 2021 18:43:00 +0430 Subject: [PATCH] add Tachidesk extension (#8361) * add Tachidesk extension * rewrite with kotlinx-serialization * apply suggestions by @ObserverOfTime * linter must lint * map Tachidesk MangaStatus to SManga constants * raise exception when baseUrl is empty * defensive programming * print Exception to Log.e instead * cesco asked for this... --- src/all/tachidesk/AndroidManifest.xml | 2 + src/all/tachidesk/build.gradle | 14 ++ .../tachidesk/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3892 bytes .../tachidesk/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2079 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5006 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9167 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 12390 bytes src/all/tachidesk/res/web_hi_res_512.png | Bin 0 -> 47251 bytes .../tachiyomi/extension/all/tachidesk/Dto.kt | 73 +++++++ .../extension/all/tachidesk/Tachidesk.kt | 180 ++++++++++++++++++ 10 files changed, 269 insertions(+) create mode 100644 src/all/tachidesk/AndroidManifest.xml create mode 100644 src/all/tachidesk/build.gradle create mode 100644 src/all/tachidesk/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/tachidesk/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/tachidesk/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/tachidesk/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/tachidesk/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/tachidesk/res/web_hi_res_512.png create mode 100644 src/all/tachidesk/src/eu/kanade/tachiyomi/extension/all/tachidesk/Dto.kt create mode 100644 src/all/tachidesk/src/eu/kanade/tachiyomi/extension/all/tachidesk/Tachidesk.kt diff --git a/src/all/tachidesk/AndroidManifest.xml b/src/all/tachidesk/AndroidManifest.xml new file mode 100644 index 000000000..30deb7f79 --- /dev/null +++ b/src/all/tachidesk/AndroidManifest.xml @@ -0,0 +1,2 @@ + + diff --git a/src/all/tachidesk/build.gradle b/src/all/tachidesk/build.gradle new file mode 100644 index 000000000..f62575335 --- /dev/null +++ b/src/all/tachidesk/build.gradle @@ -0,0 +1,14 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlinx-serialization' + +ext { + extName = 'Tachidesk' + pkgNameSuffix = 'all.tachidesk' + extClass = '.Tachidesk' + extVersionCode = 1 + libVersion = '1.2' + containsNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/all/tachidesk/res/mipmap-hdpi/ic_launcher.png b/src/all/tachidesk/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..0fdfde363d44b0355ee7b9e78459fe99a2eef245 GIT binary patch literal 3892 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 JPDHLkV1lHj<-`C0 literal 0 HcmV?d00001 diff --git a/src/all/tachidesk/res/mipmap-xhdpi/ic_launcher.png b/src/all/tachidesk/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..7247e859a6f9c1e003c7cdd4e0950afd95822104 GIT binary patch literal 5006 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 Cz@sey literal 0 HcmV?d00001 diff --git a/src/all/tachidesk/src/eu/kanade/tachiyomi/extension/all/tachidesk/Dto.kt b/src/all/tachidesk/src/eu/kanade/tachiyomi/extension/all/tachidesk/Dto.kt new file mode 100644 index 000000000..b121475cd --- /dev/null +++ b/src/all/tachidesk/src/eu/kanade/tachiyomi/extension/all/tachidesk/Dto.kt @@ -0,0 +1,73 @@ +package eu.kanade.tachiyomi.extension.all.tachidesk + +import kotlinx.serialization.Serializable + +@Serializable +data class SourceDataClass( + val id: String, + val name: String?, + val lang: String?, + val iconUrl: String?, + val supportsLatest: Boolean?, + val isConfigurable: Boolean? +) + +@Serializable +data class MangaDataClass( + val id: Int, + val sourceId: String, + + val url: String, + val title: String, + val thumbnailUrl: String? = null, + + val initialized: Boolean = false, + + val artist: String? = null, + val author: String? = null, + val description: String? = null, + val genre: String? = null, + val status: String = "UNKNOWN", + val inLibrary: Boolean = false, + val source: SourceDataClass? = null, + val meta: Map = emptyMap(), + + val freshData: Boolean = false +) + +@Serializable +data class ChapterDataClass( + val url: String, + val name: String, + val uploadDate: Long, + val chapterNumber: Float, + val scanlator: String?, + val mangaId: Int, + + /** chapter is read */ + val read: Boolean, + + /** chapter is bookmarked */ + val bookmarked: Boolean, + + /** last read page, zero means not read/no data */ + val lastPageRead: Int, + + /** last read page, zero means not read/no data */ + val lastReadAt: Long, + + /** this chapter's index, starts with 1 */ + val index: Int, + + /** is chapter downloaded */ + val downloaded: Boolean, + + /** used to construct pages in the front-end */ + val pageCount: Int = -1, + + /** total chapter count, used to calculate if there's a next and prev chapter */ + val chapterCount: Int? = null, + + /** used to store client specific values */ + val meta: Map = emptyMap(), +) diff --git a/src/all/tachidesk/src/eu/kanade/tachiyomi/extension/all/tachidesk/Tachidesk.kt b/src/all/tachidesk/src/eu/kanade/tachiyomi/extension/all/tachidesk/Tachidesk.kt new file mode 100644 index 000000000..7c7161ec2 --- /dev/null +++ b/src/all/tachidesk/src/eu/kanade/tachiyomi/extension/all/tachidesk/Tachidesk.kt @@ -0,0 +1,180 @@ +package eu.kanade.tachiyomi.extension.all.tachidesk + +import android.app.Application +import android.content.SharedPreferences +import android.text.InputType +import android.util.Log +import android.widget.Toast +import androidx.preference.EditTextPreference +import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.asObservableSuccess +import eu.kanade.tachiyomi.source.ConfigurableSource +import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import eu.kanade.tachiyomi.source.online.HttpSource +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.json.Json +import okhttp3.Request +import okhttp3.Response +import rx.Observable +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get +import uy.kohesive.injekt.injectLazy +import java.lang.RuntimeException + +class Tachidesk : ConfigurableSource, HttpSource() { + override val name = "Tachidesk" + override val baseUrl by lazy { getPrefBaseUrl() } + override val lang = "en" + override val supportsLatest = false + + private val json: Json by injectLazy() + + // ------------- Popular Manga ------------- + + override fun popularMangaRequest(page: Int): Request = + GET("$checkedBaseUrl/api/v1/library") + + override fun popularMangaParse(response: Response): MangasPage = + MangasPage( + json.decodeFromString>(response.body!!.string()).map { + it.toSManga() + }, + false + ) + // ------------- Manga Details ------------- + + override fun mangaDetailsRequest(manga: SManga) = + GET("$checkedBaseUrl/api/v1/manga/${manga.url}/?onlineFetch=true") + + override fun mangaDetailsParse(response: Response): SManga = + json.decodeFromString(response.body!!.string()).let { it.toSManga() } + + // ------------- Chapter ------------- + + override fun chapterListRequest(manga: SManga): Request = + GET("$checkedBaseUrl/api/v1/manga/${manga.url}/chapters?onlineFetch=true", headers) + + override fun chapterListParse(response: Response): List = + json.decodeFromString>(response.body!!.string()).map { + it.toSChapter() + } + + // ------------- Page List ------------- + + override fun fetchPageList(chapter: SChapter): Observable> { + return client.newCall(pageListRequest(chapter)) + .asObservableSuccess() + .map { response -> + pageListParse(response, chapter) + } + } + + override fun pageListRequest(chapter: SChapter): Request { + val mangaId = chapter.url.split(" ").first() + val chapterIndex = chapter.url.split(" ").last() + + return GET("$checkedBaseUrl/api/v1/manga/$mangaId/chapter/$chapterIndex/?onlineFetch=True", headers) + } + + fun pageListParse(response: Response, sChapter: SChapter): List { + val mangaId = sChapter.url.split(" ").first() + val chapterIndex = sChapter.url.split(" ").last() + + val chapter = json.decodeFromString(response.body!!.string()) + + return List(chapter.pageCount) { + Page(it + 1, "", "$checkedBaseUrl/api/v1/manga/$mangaId/chapter/$chapterIndex/page/$it/") + } + } + + // ------------- Preferences ------------- + override fun setupPreferenceScreen(screen: PreferenceScreen) { + screen.addPreference(screen.editTextPreference(ADDRESS_TITLE, ADDRESS_DEFAULT, baseUrl)) + } + + /** boilerplate for [EditTextPreference] */ + private fun PreferenceScreen.editTextPreference(title: String, default: String, value: String, isPassword: Boolean = false): EditTextPreference { + return EditTextPreference(context).apply { + key = title + this.title = title + summary = value + this.setDefaultValue(default) + dialogTitle = title + + if (isPassword) { + setOnBindEditTextListener { + it.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD + } + } + + setOnPreferenceChangeListener { _, newValue -> + try { + val res = preferences.edit().putString(title, newValue as String).commit() + Toast.makeText(context, "Restart Tachiyomi to apply new setting.", Toast.LENGTH_LONG).show() + res + } catch (e: Exception) { + Log.e("Tachidesk", "Exception while setting text preference", e) + false + } + } + } + } + + private val preferences: SharedPreferences by lazy { + Injekt.get().getSharedPreferences("source_$id", 0x0000) + } + + private fun getPrefBaseUrl(): String = preferences.getString(ADDRESS_TITLE, ADDRESS_DEFAULT)!! + + companion object { + private const val ADDRESS_TITLE = "Address" + private const val ADDRESS_DEFAULT = "" + } + + // ------------- Not Used ------------- + + override fun latestUpdatesRequest(page: Int): Request = throw Exception("Not used") + + override fun latestUpdatesParse(response: Response): MangasPage = throw Exception("Not used") + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList) = throw Exception("Not used") + + override fun searchMangaParse(response: Response): MangasPage = throw Exception("Not used") + + override fun pageListParse(response: Response): List = throw Exception("Not used") + + override fun imageUrlParse(response: Response): String = throw Exception("Not used") + + // ------------- Util ------------- + + private fun MangaDataClass.toSManga() = SManga.create().also { + it.title = title + it.url = id.toString() + it.thumbnail_url = "$baseUrl$thumbnailUrl" + it.artist = artist + it.author = author + it.description = description + it.status = when (status) { + "ONGOING" -> SManga.ONGOING + "COMPLETED" -> SManga.COMPLETED + "LICENSED" -> SManga.LICENSED + else -> SManga.UNKNOWN // covers "UNKNOWN" and other Impossible cases + } + } + + private fun ChapterDataClass.toSChapter() = SChapter.create().also { + it.url = "$mangaId $index" + it.name = name + it.date_upload = uploadDate + it.scanlator = scanlator + } + + private val checkedBaseUrl: String + get(): String = if (baseUrl.isNotEmpty()) baseUrl + else throw RuntimeException("Set Tachidesk server url in extension settings") +}