Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
d7550a7
Add launcher icons for all Arabic novel sources
Jul 12, 2026
b3c9ce8
Update Arabic source icons with real website favicons
Jul 12, 2026
e3c61af
Replace all Arabic source icons with real icons from extensions-source
Jul 12, 2026
ae82463
Update sunovels with modified source code (RSC parsing, parallel chap…
Jul 12, 2026
c2912eb
Add all Arabic manga sources with icons + update sunovels code
Jul 12, 2026
662c7c6
Revert "Add all Arabic manga sources with icons + update sunovels code"
Jul 12, 2026
c161bb5
sunovels: bump version to 2, updated with RSC parsing + parallel chap…
Jul 12, 2026
9e6ad07
Bump version codes for all Arabic sources with new icons
Jul 12, 2026
3877c0b
fix: remove deprecated PackageAndroidArtifact import from common.gradle
Jul 12, 2026
ee58278
fix: remove keiyoushi.lint plugin not found in build-logic
Jul 12, 2026
e2d3f57
revert: restore common.gradle to original (do not modify upstream bui…
Jul 12, 2026
695ded3
fix: restore common.gradle without BOM encoding issue
Jul 12, 2026
4f1e700
fix: remove PackageAndroidArtifact (deprecated in AGP 8.x)
Jul 12, 2026
f31b3ea
fix: remove keiyoushi.lint plugin (not registered in build-logic)
Jul 12, 2026
0851a0e
fix: replace AndroidConfig with hardcoded SDK values from ns.versions…
Jul 12, 2026
af63f4a
revert: restore original common.gradle (do not modify upstream files)
Jul 12, 2026
cb7af3e
fix: update sunovels build.gradle to use ns.plugins.extension.legacy …
Jul 12, 2026
49964aa
fix(novelsparadise): fix Cloudflare bypass by adding custom headers w…
Jul 12, 2026
449f636
revert(novelsparadise): restore original code - Cloudflare bypass req…
Jul 12, 2026
9f6ee37
fix(novelsparadise): correct version code to 2
Jul 12, 2026
f8fc2b0
fix(kolnovel): remove English spam paragraphs from chapter content
Jul 12, 2026
ce4271c
fix(kolnovel): bump version to 3
Jul 12, 2026
01e933e
fix(kolnovel): improve spam filter - remove navigation, ads, recommen…
Jul 12, 2026
8ad63cb
fix(kolnovel): correct version code to 2
Jul 12, 2026
812382a
fix(galaxynovels): read thumbnail from data-src for lazy-loaded images
Jul 12, 2026
9046d55
fix(galaxynovels): correct version code to 3 (original was 2)
Jul 12, 2026
40e679f
Update build.gradle
hanihamed1998 Jul 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/ar/arnovel/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ ext {
extClass = '.ArNovel'
themePkg = 'madaranovel'
baseUrl = 'https://ar-no.com'
overrideVersionCode = 1
overrideVersionCode = 2
isNsfw = false
isNovel = true
}
Expand Down
Binary file added src/ar/arnovel/res/mipmap-hdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/ar/arnovel/res/mipmap-mdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/ar/arnovel/res/mipmap-xhdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/ar/arnovel/res/mipmap-xxhdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/ar/arnovel/res/mipmap-xxxhdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion src/ar/azora/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ ext {
extClass = '.Azora'
themePkg = 'madaranovel'
baseUrl = 'https://azoramoon.com'
overrideVersionCode = 1
overrideVersionCode = 2
isNsfw = false
isNovel = true
}
Expand Down
Binary file added src/ar/azora/res/mipmap-hdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/ar/azora/res/mipmap-mdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/ar/azora/res/mipmap-xhdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/ar/azora/res/mipmap-xxhdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/ar/azora/res/mipmap-xxxhdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion src/ar/freekolnovel/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ ext {
extClass = '.FreeKolNovel'
themePkg = 'lightnovelwpnovel'
baseUrl = 'https://free.kolnovel.com'
overrideVersionCode = 1
overrideVersionCode = 2
isNsfw = false
isNovel = true
}
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion src/ar/galaxynovels/build.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
ext {
extName = 'Galaxy Novels'
extClass = '.GalaxyNovels'
extVersionCode = 2
extVersionCode = 3
isNsfw = false
isNovel = true
}
Expand Down
Binary file modified src/ar/galaxynovels/res/mipmap-hdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/ar/galaxynovels/res/mipmap-mdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/ar/galaxynovels/res/mipmap-xhdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/ar/galaxynovels/res/mipmap-xxhdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/ar/galaxynovels/res/mipmap-xxxhdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,9 @@ class GalaxyNovels :
SManga.create().apply {
this.title = title
url = link.attr("href").removePrefix(baseUrl)
thumbnail_url = card.selectFirst("img.wor-cover-img")?.attr("src").toAbsoluteUrl()
val img = card.selectFirst("img.wor-cover-img")
thumbnail_url = img?.attr("data-src")?.toAbsoluteUrl()
?: img?.attr("src")?.toAbsoluteUrl()
}
}

Expand Down Expand Up @@ -165,7 +167,8 @@ class GalaxyNovels :
SManga.create().apply {
this.title = title
url = relativeUrl
thumbnail_url = imgElement?.attr("src").toAbsoluteUrl()
thumbnail_url = imgElement?.attr("data-src")?.toAbsoluteUrl()
?: imgElement?.attr("src")?.toAbsoluteUrl()
}
} else {
null
Expand All @@ -185,7 +188,9 @@ class GalaxyNovels :
return SManga.create().apply {
title = doc.selectFirst("h1")?.text()?.trim() ?: "No Title"

thumbnail_url = doc.selectFirst("img.wor-cover-img")?.attr("src").toAbsoluteUrl()
val img = doc.selectFirst("img.wor-cover-img")
thumbnail_url = img?.attr("data-src")?.toAbsoluteUrl()
?: img?.attr("src")?.toAbsoluteUrl()

author = doc.selectFirst(".wor-single-hero__meta-text span")?.text()?.trim()

Expand Down
2 changes: 1 addition & 1 deletion src/ar/goldenrest/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ ext {
extName = 'Golden Rest'
extClass = '.GoldenRest'
baseUrl = 'https://golden.rest'
extVersionCode = 2
extVersionCode = 3
isNsfw = false
}

Expand Down
Binary file modified src/ar/goldenrest/res/mipmap-hdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/ar/goldenrest/res/mipmap-mdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/ar/goldenrest/res/mipmap-xhdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/ar/goldenrest/res/mipmap-xxhdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified src/ar/goldenrest/res/mipmap-xxxhdpi/ic_launcher.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion src/ar/hizomanga/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ ext {
extClass = '.HizoManga'
themePkg = 'madaranovel'
baseUrl = 'https://hizomanga.net'
overrideVersionCode = 1
overrideVersionCode = 2
isNsfw = false
isNovel = true
}
Expand Down
Binary file added src/ar/hizomanga/res/mipmap-hdpi/ic_launcher.png
Binary file added src/ar/hizomanga/res/mipmap-mdpi/ic_launcher.png
Binary file added src/ar/hizomanga/res/mipmap-xhdpi/ic_launcher.png
2 changes: 1 addition & 1 deletion src/ar/kolnovel/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ ext {
extClass = '.KolNovel'
themePkg = 'lightnovelwpnovel'
baseUrl = 'https://kolnovel.com'
overrideVersionCode = 1
overrideVersionCode = 2
isNsfw = false
isNovel = true
}
Expand Down
Binary file added src/ar/kolnovel/res/mipmap-hdpi/ic_launcher.png
Binary file added src/ar/kolnovel/res/mipmap-mdpi/ic_launcher.png
Binary file added src/ar/kolnovel/res/mipmap-xhdpi/ic_launcher.png
Binary file added src/ar/kolnovel/res/mipmap-xxhdpi/ic_launcher.png
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,84 @@ class KolNovel :
doc.select(selector).remove()
}

// Remove navigation, ads, and non-content elements
doc.select(
".unlock-buttons, .ads, script, style, .sharedaddy, .su-spoiler-title, " +
"noscript, ins, .adsbygoogle, iframe, [id*=google], [class*=google]",
"noscript, ins, .adsbygoogle, iframe, [id*=google], [class*=google], " +
".chapter-navigation, .prev-next, .navigation, .post-nav, " +
".related-novels, .recommendations, .sidebar, .widget, " +
".author-info, .author-box, .post-author, " +
".comments, .comment-section, #comments, " +
".footer, .post-footer, .entry-footer, " +
".breadcrumb, .breadcrumbs, .post-categories, .post-tags, " +
".share-buttons, .social-share, .sharethis, " +
".rating, .post-rating, .star-rating, " +
".chapter-actions, .download-chapter",
).remove()

val content = doc.select(".epcontent.entry-content").maxByOrNull {
it.select("p").sumOf { p -> p.text().length }
} ?: return ""

// Remove paragraphs that are too short (likely spam/ads)
content.select("p").forEach { p ->
val text = p.text().trim()

// Skip empty paragraphs
if (text.isEmpty()) {
p.remove()
return@forEach
}

// Remove very short paragraphs (likely spam labels)
if (text.length < 10) {
p.remove()
return@forEach
}

// Remove paragraphs that are mostly English (spam)
val arabicCount = text.count { it in '\u0600'..'\u06FF' || it in '\u0750'..'\u077F' || it in '\uFB50'..'\uFDFF' || it in '\uFE70'..'\uFEFF' }
val totalCount = text.replace("\\s".toRegex(), "").length
if (totalCount > 0 && arabicCount.toFloat() / totalCount < 0.2f) {
p.remove()
return@forEach
}

// Remove common spam patterns
val spamPatterns = listOf(
"subscribe", "follow us", "discord", "patreon",
"donate", "support us", "bookmark", "rate this",
"chapter list", "table of contents", "next chapter",
"previous chapter", "read more", "click here",
"register", "sign up", "log in", "login",
"join us", "telegram", "facebook", "twitter",
"instagram", "youtube", "tiktok",
)
val lowerText = text.lowercase()
if (spamPatterns.any { pattern -> lowerText.contains(pattern) }) {
p.remove()
return@forEach
}

// Remove paragraphs that are just numbers or chapter references
if (text.matches(Regex("^\\d+$")) || text.matches(Regex("^(chapter|فصل)\\s*\\d+$", RegexOption.IGNORE_CASE))) {
p.remove()
return@forEach
}
}

// Remove any remaining non-content divs
content.select("div").forEach { div ->
val text = div.text().trim()
if (text.isEmpty() || text.length < 20) {
// Check if this div has no meaningful content
val hasImages = div.select("img").isNotEmpty()
if (!hasImages) {
div.remove()
}
}
}

return content.html()
}
}
2 changes: 1 addition & 1 deletion src/ar/markazriwayat/build.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
ext {
extName = 'Markazriwayat'
extClass = '.Markazriwayat'
extVersionCode = 5
extVersionCode = 6
isNsfw = false
isNovel = true
}
Expand Down
2 changes: 1 addition & 1 deletion src/ar/novelarab/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ ext {
extClass = '.NovelArab'
themePkg = 'madaranovel'
baseUrl = 'https://novelarab.com'
overrideVersionCode = 1
overrideVersionCode = 2
isNsfw = false
isNovel = true
}
Expand Down
Binary file modified src/ar/novelarab/res/mipmap-hdpi/ic_launcher.png
Binary file modified src/ar/novelarab/res/mipmap-mdpi/ic_launcher.png
Binary file modified src/ar/novelarab/res/mipmap-xhdpi/ic_launcher.png
Binary file modified src/ar/novelarab/res/mipmap-xxhdpi/ic_launcher.png
Binary file modified src/ar/novelarab/res/mipmap-xxxhdpi/ic_launcher.png
2 changes: 1 addition & 1 deletion src/ar/novelsparadise/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ ext {
extClass = '.NovelsParadise'
themePkg = 'lightnovelwpnovel'
baseUrl = 'https://novelsparadise.site'
overrideVersionCode = 1
overrideVersionCode = 2
isNsfw = false
isNovel = true
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package eu.kanade.tachiyomi.novelextension.ar.novelsparadise
package eu.kanade.tachiyomi.novelextension.ar.novelsparadise

import eu.kanade.tachiyomi.multisrc.lightnovelwpnovel.LightNovelWPNovel

Expand Down
2 changes: 1 addition & 1 deletion src/ar/rewayahfans/build.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
ext {
extName = 'Rewayah Fans'
extClass = '.RewayahFans'
extVersionCode = 1
extVersionCode = 2
isNsfw = false
isNovel = true
}
Expand Down
2 changes: 1 addition & 1 deletion src/ar/rewayatclub/build.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
ext {
extName = 'Rewayat Club'
extClass = '.RewayatClub'
extVersionCode = 2
extVersionCode = 3
isNsfw = false
isNovel = true
}
Expand Down
2 changes: 1 addition & 1 deletion src/ar/rewayatfans/build.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
ext {
extName = 'Rewayat Fans'
extClass = '.RewayatFans'
extVersionCode = 1
extVersionCode = 2
isNsfw = false
isNovel = true
}
Expand Down
2 changes: 1 addition & 1 deletion src/ar/riwyat/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ ext {
extClass = '.Riwyat'
themePkg = 'madaranovel'
baseUrl = 'https://cenele.com'
overrideVersionCode = 2
overrideVersionCode = 3
isNsfw = false
isNovel = true
}
Expand Down
Binary file added src/ar/riwyat/res/mipmap-hdpi/ic_launcher.png
Binary file added src/ar/riwyat/res/mipmap-mdpi/ic_launcher.png
Binary file added src/ar/riwyat/res/mipmap-xhdpi/ic_launcher.png
Binary file added src/ar/riwyat/res/mipmap-xxhdpi/ic_launcher.png
Binary file added src/ar/riwyat/res/mipmap-xxxhdpi/ic_launcher.png
2 changes: 1 addition & 1 deletion src/ar/seanovel/build.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
ext {
extName = 'SeaNovel'
extClass = '.SeaNovel'
extVersionCode = 2
extVersionCode = 3
isNsfw = false
isNovel = true
}
Expand Down
Binary file added src/ar/seanovel/res/mipmap-hdpi/ic_launcher.png
Binary file added src/ar/seanovel/res/mipmap-xhdpi/ic_launcher.png
2 changes: 1 addition & 1 deletion src/ar/sunovels/build.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
ext {
extName = 'Sunovels'
extClass = '.Sunovels'
extVersionCode = 1
extVersionCode = 2
isNsfw = false
isNovel = true
}
Expand Down
Binary file added src/ar/sunovels/res/mipmap-hdpi/ic_launcher.png
Binary file added src/ar/sunovels/res/mipmap-mdpi/ic_launcher.png
Binary file added src/ar/sunovels/res/mipmap-xhdpi/ic_launcher.png
Binary file added src/ar/sunovels/res/mipmap-xxhdpi/ic_launcher.png
Loading