فهرست منبع

Implement "Wie Manga!" (#379)

* Implement Wie Manga!

* Unnecessary import
bake 8 سال پیش
والد
کامیت
466515c801

+ 2 - 1
app/src/main/java/eu/kanade/tachiyomi/data/source/Language.kt

@@ -2,7 +2,8 @@ package eu.kanade.tachiyomi.data.source
 
 class Language(val code: String, val lang: String)
 
+val DE = Language("DE", "German")
 val EN = Language("EN", "English")
 val RU = Language("RU", "Russian")
 
-fun getLanguages() = listOf(EN, RU)
+fun getLanguages() = listOf(DE, EN, RU)

+ 4 - 1
app/src/main/java/eu/kanade/tachiyomi/data/source/SourceManager.kt

@@ -7,6 +7,7 @@ import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.data.source.online.OnlineSource
 import eu.kanade.tachiyomi.data.source.online.YamlOnlineSource
 import eu.kanade.tachiyomi.data.source.online.english.*
+import eu.kanade.tachiyomi.data.source.online.german.WieManga
 import eu.kanade.tachiyomi.data.source.online.russian.Mangachan
 import eu.kanade.tachiyomi.data.source.online.russian.Mintmanga
 import eu.kanade.tachiyomi.data.source.online.russian.Readmanga
@@ -26,8 +27,9 @@ open class SourceManager(private val context: Context) {
     val MANGACHAN = 7
     val READMANGATODAY = 8
     val MANGASEE = 9
+    val WIEMANGA = 10
 
-    val LAST_SOURCE = 9
+    val LAST_SOURCE = 10
 
     val sourcesMap = createSources()
 
@@ -47,6 +49,7 @@ open class SourceManager(private val context: Context) {
         MANGACHAN -> Mangachan(context, id)
         READMANGATODAY -> Readmangatoday(context, id)
         MANGASEE -> Mangasee(context, id)
+        WIEMANGA -> WieManga(context, id)
         else -> null
     }
 

+ 97 - 0
app/src/main/java/eu/kanade/tachiyomi/data/source/online/german/WieManga.kt

@@ -0,0 +1,97 @@
+package eu.kanade.tachiyomi.data.source.online.german
+
+import android.content.Context
+import eu.kanade.tachiyomi.data.database.models.Chapter
+import eu.kanade.tachiyomi.data.database.models.Manga
+import eu.kanade.tachiyomi.data.source.DE
+import eu.kanade.tachiyomi.data.source.Language
+import eu.kanade.tachiyomi.data.source.model.Page
+import eu.kanade.tachiyomi.data.source.online.ParsedOnlineSource
+import eu.kanade.tachiyomi.util.asJsoup
+import okhttp3.Response
+import org.jsoup.nodes.Document
+import org.jsoup.nodes.Element
+import java.text.SimpleDateFormat
+
+class WieManga(context: Context, override val id: Int) : ParsedOnlineSource(context) {
+
+        override val name = "Wie Manga!"
+
+        override val baseUrl = "http://www.wiemanga.com"
+
+        override val lang: Language get() = DE
+
+        override fun popularMangaInitialUrl() = "$baseUrl/list/Hot-Book/"
+
+        override fun popularMangaSelector() = ".booklist td > div"
+
+        override fun popularMangaFromElement(element: Element, manga: Manga) {
+                val image = element.select("dt img")
+                val title = element.select("dd a:first-child")
+
+                manga.setUrlWithoutDomain(title.attr("href"))
+                manga.title = title.text()
+                manga.thumbnail_url = image.attr("src")
+        }
+
+        override fun popularMangaNextPageSelector() = null
+
+        override fun searchMangaInitialUrl(query: String) = "$baseUrl/search/?wd=$query"
+
+        override fun searchMangaSelector() = ".searchresult td > div"
+
+        override fun searchMangaFromElement(element: Element, manga: Manga) {
+                val image = element.select(".resultimg img")
+                val title = element.select(".resultbookname")
+
+                manga.setUrlWithoutDomain(title.attr("href"))
+                manga.title = title.text()
+                manga.thumbnail_url = image.attr("src")
+        }
+
+        override fun searchMangaNextPageSelector() = ".pagetor a.l"
+
+        override fun mangaDetailsParse(document: Document, manga: Manga) {
+                val imageElement = document.select(".bookmessgae tr > td:nth-child(1)").first()
+                val infoElement = document.select(".bookmessgae tr > td:nth-child(2)").first()
+
+                manga.author = infoElement.select("dd:nth-of-type(2) a").first()?.text()
+                manga.artist = infoElement.select("dd:nth-of-type(3) a").first()?.text()
+                manga.description = infoElement.select("dl > dt:last-child").first()?.text()?.replaceFirst("Beschreibung", "")
+                manga.thumbnail_url = imageElement.select("img").first()?.attr("src")
+
+                if (manga.author == "RSS")
+                        manga.author = null
+
+                if (manga.artist == "RSS")
+                        manga.artist = null
+        }
+
+        override fun chapterListSelector() = ".chapterlist tr:not(:first-child)"
+
+        override fun chapterFromElement(element: Element, chapter: Chapter) {
+                val urlElement = element.select(".col1 a").first()
+                val dateElement = element.select(".col3 a").first()
+
+                chapter.setUrlWithoutDomain(urlElement.attr("href"))
+                chapter.name = urlElement.text()
+                chapter.date_upload = dateElement?.text()?.let { parseChapterDate(it) } ?: 0
+        }
+
+        private fun parseChapterDate(date: String): Long {
+                return SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(date).time
+        }
+
+        override fun pageListParse(response: Response, pages: MutableList<Page>) {
+                val document = response.asJsoup()
+
+                document.select("select#page").first().select("option").forEach {
+                        pages.add(Page(pages.size, it.attr("value")))
+                }
+        }
+
+        override fun pageListParse(document: Document, pages: MutableList<Page>) {}
+
+        override fun imageUrlParse(document: Document) = document.select("img#comicpic").first().attr("src")
+
+}