Update Grrl Power Comic (#15717)
* Update Grrl Power Comic * Let tachiyomi guess at chapter numbers as suggested by arkon --------- Co-authored-by: Theray Tharow <TharowT@Tharow.net>
|
@ -6,7 +6,11 @@ ext {
|
|||
extName = 'Grrl Power Comic'
|
||||
pkgNameSuffix = 'en.grrlpower'
|
||||
extClass = '.GrrlPower'
|
||||
extVersionCode = 1
|
||||
extVersionCode = 2
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(project(':lib-textinterceptor'))
|
||||
}
|
||||
|
||||
apply from: "$rootDir/common.gradle"
|
||||
|
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 351 KiB |
|
@ -1,7 +1,14 @@
|
|||
package eu.kanade.tachiyomi.extension.en.grrlpower
|
||||
|
||||
import android.app.Application
|
||||
import android.content.SharedPreferences
|
||||
import androidx.preference.PreferenceScreen
|
||||
import androidx.preference.SwitchPreferenceCompat
|
||||
import eu.kanade.tachiyomi.lib.textinterceptor.TextInterceptor
|
||||
import eu.kanade.tachiyomi.lib.textinterceptor.TextInterceptorHelper
|
||||
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
|
||||
|
@ -12,6 +19,8 @@ import eu.kanade.tachiyomi.util.asJsoup
|
|||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import rx.Observable
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Calendar
|
||||
import java.util.Locale
|
||||
|
@ -23,25 +32,28 @@ class GrrlPower(
|
|||
override val lang: String = "en",
|
||||
override val name: String = "Grrl Power Comic",
|
||||
override val supportsLatest: Boolean = false,
|
||||
) : HttpSource() {
|
||||
) : HttpSource(), ConfigurableSource {
|
||||
private val comicAuthor = "David Barrack"
|
||||
private val startingYear = 2010
|
||||
private val currentYear = Calendar.getInstance().get(Calendar.YEAR)
|
||||
private val dateFormat = SimpleDateFormat("MMM dd yyyy", Locale.US)
|
||||
|
||||
override val client = super.client.newBuilder().addInterceptor(TextInterceptor()).build()
|
||||
|
||||
override fun fetchPopularManga(page: Int): Observable<MangasPage> = Observable.just(
|
||||
MangasPage(
|
||||
listOf(
|
||||
SManga.create().apply {
|
||||
artist = "David Barrack"
|
||||
author = "David Barrack"
|
||||
artist = comicAuthor
|
||||
author = comicAuthor
|
||||
description = "Grrl Power is a comic about a crazy nerdette that becomes a" +
|
||||
" superheroine. Humor, action, cheesecake, beefcake, 'splosions," +
|
||||
" and maybe some drama. Possibly ninjas. "
|
||||
genre = "superhero, humor, action"
|
||||
initialized = true
|
||||
status = SManga.ONGOING
|
||||
// TODO: Find Proper Thumbnail and Extension Icon
|
||||
thumbnail_url = "https://fakeimg.pl/550x780/cc3333/1b2a82/?font=museo&text=Grrl%0APower"
|
||||
// Thumbnail Found On The TvTropes Page for the comic
|
||||
thumbnail_url = "https://static.tvtropes.org/pmwiki/pub/images/rsz_grrl_power.png"
|
||||
title = "Grrl Power"
|
||||
url = "/archive"
|
||||
},
|
||||
|
@ -67,43 +79,87 @@ class GrrlPower(
|
|||
// observables active at once. error shown below for reference in case someone knows a fix.
|
||||
// java.lang.IllegalArgumentException: Sequence contains too many elements
|
||||
}
|
||||
// Sort By Date
|
||||
ret.sortByDescending { it.date_upload }
|
||||
return Observable.just(ret)
|
||||
}
|
||||
|
||||
override fun chapterListParse(response: Response): List<SChapter> {
|
||||
val year = response.request.url.toString().substringAfter('=').toInt()
|
||||
var num = 0
|
||||
return response.asJsoup().getElementsByClass("archive-date").map {
|
||||
val date = dateFormat.parse("${it.text()} $year")
|
||||
val link = it.nextElementSibling()!!.child(0)
|
||||
SChapter.create().apply {
|
||||
name = link.text()
|
||||
setUrlWithoutDomain(link.attr("href"))
|
||||
chapter_number = num++.toFloat()
|
||||
date_upload = date?.time ?: 0L
|
||||
// chapter_number isn't set as suggested by arkon
|
||||
// https://github.com/tachiyomiorg/tachiyomi-extensions/pull/15717#discussion_r1138014748
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun pageListParse(response: Response): List<Page> {
|
||||
return listOf(
|
||||
val url: String = response.request.url.toString()
|
||||
val pages: ArrayList<Page> = ArrayList()
|
||||
val soup = response.asJsoup()
|
||||
pages.add(
|
||||
Page(
|
||||
0,
|
||||
response.request.url.toString(),
|
||||
response.asJsoup().selectFirst("div#comic img")!!.absUrl("src"),
|
||||
url,
|
||||
soup.selectFirst("div#comic img")!!.absUrl("src"),
|
||||
),
|
||||
)
|
||||
// The TextInterceptor handles html natively.
|
||||
val text = soup.getElementsByClass("entry").html()
|
||||
|
||||
if (text.isNotEmpty() && showAuthorsNotesPref()) {
|
||||
pages.add(Page(1, "", TextInterceptorHelper.createUrl(comicAuthor, text)))
|
||||
}
|
||||
return pages
|
||||
}
|
||||
|
||||
// Show Authors Notes Pref Copied from
|
||||
// ProjectRoot/multisrc/overrides/webtoons/webtoons/src/WebtoonsSrc.kt
|
||||
private val preferences: SharedPreferences by lazy {
|
||||
Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
|
||||
}
|
||||
companion object {
|
||||
private const val SHOW_AUTHORS_NOTES_KEY = "showAuthorsNotes"
|
||||
}
|
||||
private fun showAuthorsNotesPref() = preferences.getBoolean(SHOW_AUTHORS_NOTES_KEY, false)
|
||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||
val authorsNotesPref = SwitchPreferenceCompat(screen.context).apply {
|
||||
key = SHOW_AUTHORS_NOTES_KEY
|
||||
title = "Show author's notes"
|
||||
summary = "Enable to see the author's notes at the end of chapters (if they're there)."
|
||||
setDefaultValue(false)
|
||||
|
||||
setOnPreferenceChangeListener { _, newValue ->
|
||||
val checkValue = newValue as Boolean
|
||||
preferences.edit().putBoolean(SHOW_AUTHORS_NOTES_KEY, checkValue).commit()
|
||||
}
|
||||
}
|
||||
screen.addPreference(authorsNotesPref)
|
||||
} // End of Preferences
|
||||
|
||||
// This can be called when the user refreshes the comic even if initialized is true
|
||||
override fun fetchMangaDetails(manga: SManga): Observable<SManga> = Observable.just(manga)
|
||||
|
||||
override fun popularMangaRequest(page: Int): Request = throw UnsupportedOperationException("Not Used")
|
||||
override fun searchMangaParse(response: Response): MangasPage = throw UnsupportedOperationException("Not Used")
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request = throw UnsupportedOperationException("Not Used")
|
||||
override fun imageUrlParse(response: Response): String = throw UnsupportedOperationException("Not Used")
|
||||
override fun latestUpdatesParse(response: Response): MangasPage = throw UnsupportedOperationException("Not Used")
|
||||
override fun latestUpdatesRequest(page: Int): Request = throw UnsupportedOperationException("Not Used")
|
||||
override fun mangaDetailsParse(response: Response): SManga = throw UnsupportedOperationException("Not Used")
|
||||
override fun popularMangaParse(response: Response): MangasPage = throw UnsupportedOperationException("Not Used")
|
||||
override fun popularMangaRequest(page: Int): Request =
|
||||
throw UnsupportedOperationException("Not Used")
|
||||
override fun searchMangaParse(response: Response): MangasPage =
|
||||
throw UnsupportedOperationException("Not Used")
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request =
|
||||
throw UnsupportedOperationException("Not Used")
|
||||
override fun imageUrlParse(response: Response): String =
|
||||
throw UnsupportedOperationException("Not Used")
|
||||
override fun latestUpdatesParse(response: Response): MangasPage =
|
||||
throw UnsupportedOperationException("Not Used")
|
||||
override fun latestUpdatesRequest(page: Int): Request =
|
||||
throw UnsupportedOperationException("Not Used")
|
||||
override fun mangaDetailsParse(response: Response): SManga =
|
||||
throw UnsupportedOperationException("Not Used")
|
||||
override fun popularMangaParse(response: Response): MangasPage =
|
||||
throw UnsupportedOperationException("Not Used")
|
||||
}
|
||||
|
|