feat: implement phase 4 batch — 21 en/ base-class wrapper sources

6 Madara: boratscans, bunmanga, cucumbermanga, decadencescans, linkmanga,
sleepytranslations. 15 MadTheme: beehentai, boxmanhwa, kaliscancom,
kaliscanio, mangabuddy, mangabuddyme, mangacute, mangafab, mangaforest,
mangamonk, mangasaga, mangaspin, mangaxyz, manhuanow, manhuasite.

Also corrects base-class annotations in phase4-standalone.md for sources
previously misidentified as Madara (arcrelight=MangAdventure; atsumaru,
aurora, azcomic, broccolisoup, buttsmithy, clonemanga, clowncorps=HttpSource).
This commit is contained in:
achmad
2026-05-13 23:17:48 +07:00
parent 316ae2f9db
commit 78723bb195
23 changed files with 382 additions and 22 deletions
+21
View File
@@ -89,6 +89,27 @@ import (
_ "goyomi/sources/en/toonitube" _ "goyomi/sources/en/toonitube"
_ "goyomi/sources/en/topmanhua" _ "goyomi/sources/en/topmanhua"
_ "goyomi/sources/en/yaoihub" _ "goyomi/sources/en/yaoihub"
_ "goyomi/sources/en/beehentai"
_ "goyomi/sources/en/boratscans"
_ "goyomi/sources/en/boxmanhwa"
_ "goyomi/sources/en/bunmanga"
_ "goyomi/sources/en/cucumbermanga"
_ "goyomi/sources/en/decadencescans"
_ "goyomi/sources/en/kaliscancom"
_ "goyomi/sources/en/kaliscanio"
_ "goyomi/sources/en/linkmanga"
_ "goyomi/sources/en/mangabuddy"
_ "goyomi/sources/en/mangabuddyme"
_ "goyomi/sources/en/mangacute"
_ "goyomi/sources/en/mangafab"
_ "goyomi/sources/en/mangaforest"
_ "goyomi/sources/en/mangamonk"
_ "goyomi/sources/en/mangasaga"
_ "goyomi/sources/en/mangaspin"
_ "goyomi/sources/en/mangaxyz"
_ "goyomi/sources/en/manhuanow"
_ "goyomi/sources/en/manhuasite"
_ "goyomi/sources/en/sleepytranslations"
) )
func main() { func main() {
+22 -22
View File
@@ -175,7 +175,7 @@ Detailed implementation notes for complex sources are in the **Notes** section a
- [ ] `en/anisascans` - [ ] `en/anisascans`
- [ ] `en/apcomics` - [ ] `en/apcomics`
- [x] `en/aquamanga` - [x] `en/aquamanga`
- [ ] `en/arcrelight` → base: Madara - [ ] `en/arcrelight` → base: MangAdventure
- [x] `en/arenascans` - [x] `en/arenascans`
- [ ] `en/armageddon` - [ ] `en/armageddon`
- [x] `en/artlapsa` - [x] `en/artlapsa`
@@ -196,12 +196,12 @@ Detailed implementation notes for complex sources are in the **Notes** section a
- [ ] `en/bakkinselfhosted` - [ ] `en/bakkinselfhosted`
- [ ] `en/batcave` - [ ] `en/batcave`
- [ ] `en/battleinfivesecondsaftermeeting` - [ ] `en/battleinfivesecondsaftermeeting`
- [ ] `en/beehentai` → base: MadTheme - [x] `en/beehentai` → base: MadTheme
- [ ] `en/bookwalker` ⚠️ see notes - [ ] `en/bookwalker` ⚠️ see notes
- [ ] `en/boratscans` → base: Madara - [x] `en/boratscans` → base: Madara
- [ ] `en/boxmanhwa` → base: MadTheme - [x] `en/boxmanhwa` → base: MadTheme
- [ ] `en/broccolisoup` → base: Madara - [ ] `en/broccolisoup` → base: Madara
- [ ] `en/bunmanga` → base: Madara - [x] `en/bunmanga` → base: Madara
- [ ] `en/buttsmithy` → base: Madara - [ ] `en/buttsmithy` → base: Madara
- [ ] `en/clonemanga` → base: Madara - [ ] `en/clonemanga` → base: Madara
- [ ] `en/clowncorps` → base: Madara - [ ] `en/clowncorps` → base: Madara
@@ -218,7 +218,7 @@ Detailed implementation notes for complex sources are in the **Notes** section a
- [x] `en/comicsland` - [x] `en/comicsland`
- [ ] `en/comix` - [ ] `en/comix`
- [x] `en/crowscans` - [x] `en/crowscans`
- [ ] `en/cucumbermanga` → base: Madara - [x] `en/cucumbermanga` → base: Madara
- [ ] `en/culturedworks` - [ ] `en/culturedworks`
- [ ] `en/cutiecomics` - [ ] `en/cutiecomics`
- [x] `en/dankefurslesen` - [x] `en/dankefurslesen`
@@ -227,7 +227,7 @@ Detailed implementation notes for complex sources are in the **Notes** section a
- [ ] `en/darkscience` - [ ] `en/darkscience`
- [ ] `en/darthsdroids` - [ ] `en/darthsdroids`
- [ ] `en/deathtollscans` - [ ] `en/deathtollscans`
- [ ] `en/decadencescans` → base: Madara - [x] `en/decadencescans` → base: Madara
- [ ] `en/dflowscans` - [ ] `en/dflowscans`
- [ ] `en/digitalcomicmuseum` - [ ] `en/digitalcomicmuseum`
- [x] `en/divascans` - [x] `en/divascans`
@@ -302,8 +302,8 @@ Detailed implementation notes for complex sources are in the **Notes** section a
- [ ] `en/jnovel` - [ ] `en/jnovel`
- [ ] `en/kagane` - [ ] `en/kagane`
- [x] `en/kaizenscan` - [x] `en/kaizenscan`
- [ ] `en/kaliscancom` → base: MadTheme - [x] `en/kaliscancom` → base: MadTheme
- [ ] `en/kaliscanio` → base: MadTheme - [x] `en/kaliscanio` → base: MadTheme
- [x] `en/kaliscanme` - [x] `en/kaliscanme`
- [ ] `en/kappabeast` - [ ] `en/kappabeast`
- [ ] `en/kaynscans` - [ ] `en/kaynscans`
@@ -325,7 +325,7 @@ Detailed implementation notes for complex sources are in the **Notes** section a
- [ ] `en/likemanga` - [ ] `en/likemanga`
- [ ] `en/likemangain` - [ ] `en/likemangain`
- [ ] `en/lilymanga` - [ ] `en/lilymanga`
- [ ] `en/linkmanga` → base: Madara - [x] `en/linkmanga` → base: Madara
- [ ] `en/loadingartist` - [ ] `en/loadingartist`
- [ ] `en/luascans` - [ ] `en/luascans`
- [ ] `en/luminaretranslations` - [ ] `en/luminaretranslations`
@@ -343,11 +343,11 @@ Detailed implementation notes for complex sources are in the **Notes** section a
- [ ] `en/mangablaze` - [ ] `en/mangablaze`
- [ ] `en/mangabolt` - [ ] `en/mangabolt`
- [ ] `en/mangabtt` - [ ] `en/mangabtt`
- [ ] `en/mangabuddy` → base: MadTheme - [x] `en/mangabuddy` → base: MadTheme
- [ ] `en/mangabuddyme` → base: MadTheme - [x] `en/mangabuddyme` → base: MadTheme
- [ ] `en/mangaclash` - [ ] `en/mangaclash`
- [ ] `en/mangacloud` - [ ] `en/mangacloud`
- [ ] `en/mangacute` → base: MadTheme - [x] `en/mangacute` → base: MadTheme
- [ ] `en/mangadass` - [ ] `en/mangadass`
- [ ] `en/mangade` - [ ] `en/mangade`
- [ ] `en/mangademon` - [ ] `en/mangademon`
@@ -355,8 +355,8 @@ Detailed implementation notes for complex sources are in the **Notes** section a
- [ ] `en/mangadistrict` - [ ] `en/mangadistrict`
- [ ] `en/mangadotnet` - [ ] `en/mangadotnet`
- [ ] `en/mangadrama` - [ ] `en/mangadrama`
- [ ] `en/mangafab` → base: MadTheme - [x] `en/mangafab` → base: MadTheme
- [ ] `en/mangaforest` → base: MadTheme - [x] `en/mangaforest` → base: MadTheme
- [ ] `en/mangaforfreecom` - [ ] `en/mangaforfreecom`
- [ ] `en/mangafox` - [ ] `en/mangafox`
- [ ] `en/mangafoxfun` → base: MangaHub - [ ] `en/mangafoxfun` → base: MangaHub
@@ -379,7 +379,7 @@ Detailed implementation notes for complex sources are in the **Notes** section a
- [ ] `en/mangamaniacs` - [ ] `en/mangamaniacs`
- [ ] `en/mangamo` - [ ] `en/mangamo`
- [ ] `en/mangamob` - [ ] `en/mangamob`
- [ ] `en/mangamonk` → base: MadTheme - [x] `en/mangamonk` → base: MadTheme
- [ ] `en/manganel` → base: MangaHub - [ ] `en/manganel` → base: MangaHub
- [ ] `en/manganelo` - [ ] `en/manganelo`
- [ ] `en/manganow` - [ ] `en/manganow`
@@ -393,26 +393,26 @@ Detailed implementation notes for complex sources are in the **Notes** section a
- [ ] `en/mangareadercc` - [ ] `en/mangareadercc`
- [ ] `en/mangareadersite` → base: MangaHub - [ ] `en/mangareadersite` → base: MangaHub
- [ ] `en/mangareadorg` - [ ] `en/mangareadorg`
- [ ] `en/mangasaga` → base: MadTheme - [x] `en/mangasaga` → base: MadTheme
- [ ] `en/mangasect` - [ ] `en/mangasect`
- [ ] `en/mangaspin` → base: MadTheme - [x] `en/mangaspin` → base: MadTheme
- [ ] `en/mangasushi` - [ ] `en/mangasushi`
- [ ] `en/mangatellers` - [ ] `en/mangatellers`
- [ ] `en/mangatoday` → base: MangaHub - [ ] `en/mangatoday` → base: MangaHub
- [ ] `en/mangatown` - [ ] `en/mangatown`
- [ ] `en/mangatrend` - [ ] `en/mangatrend`
- [ ] `en/mangatx` - [ ] `en/mangatx`
- [ ] `en/mangaxyz` → base: MadTheme - [x] `en/mangaxyz` → base: MadTheme
- [ ] `en/manhuafast` - [ ] `en/manhuafast`
- [ ] `en/manhuafastnet` - [ ] `en/manhuafastnet`
- [ ] `en/manhuahot` - [ ] `en/manhuahot`
- [ ] `en/manhuanext` - [ ] `en/manhuanext`
- [ ] `en/manhuanow` → base: MadTheme - [x] `en/manhuanow` → base: MadTheme
- [ ] `en/manhuaplus` - [ ] `en/manhuaplus`
- [ ] `en/manhuaplusorg` - [ ] `en/manhuaplusorg`
- [ ] `en/manhuarush` - [ ] `en/manhuarush`
- [ ] `en/manhuascanus` - [ ] `en/manhuascanus`
- [ ] `en/manhuasite` → base: MadTheme - [x] `en/manhuasite` → base: MadTheme
- [ ] `en/manhuatop` - [ ] `en/manhuatop`
- [ ] `en/manhuaus` - [ ] `en/manhuaus`
- [ ] `en/manhuazonghe` - [ ] `en/manhuazonghe`
@@ -538,7 +538,7 @@ Detailed implementation notes for complex sources are in the **Notes** section a
- [ ] `en/shojoscans` - [ ] `en/shojoscans`
- [x] `en/sirenscans` - [x] `en/sirenscans`
- [ ] `en/skymanga` - [ ] `en/skymanga`
- [ ] `en/sleepytranslations` → base: MangaThemesia - [x] `en/sleepytranslations` → base: Madara
- [ ] `en/solarandsundry` - [ ] `en/solarandsundry`
- [ ] `en/spmanhwa` - [ ] `en/spmanhwa`
- [ ] `en/spyfakku` - [ ] `en/spyfakku`
+16
View File
@@ -0,0 +1,16 @@
package beehentai
import (
"goyomi/internal/registry"
base "goyomi/sources/base/madtheme"
)
func New() *base.Source {
return base.New(base.Config{
Name: "BeeHentai",
BaseURL: "https://beehentai.com",
Lang: "en",
})
}
func init() { registry.Register(New()) }
+17
View File
@@ -0,0 +1,17 @@
package boratscans
import (
"goyomi/internal/registry"
base "goyomi/sources/base/madara"
)
func New() *base.Source {
return base.New(base.Config{
Name: "Borat Scans",
BaseURL: "https://boratscans.com",
Lang: "en",
UseNewChapterEndpoint: true,
})
}
func init() { registry.Register(New()) }
+16
View File
@@ -0,0 +1,16 @@
package boxmanhwa
import (
"goyomi/internal/registry"
base "goyomi/sources/base/madtheme"
)
func New() *base.Source {
return base.New(base.Config{
Name: "BoxManhwa",
BaseURL: "https://boxmanhwa.com",
Lang: "en",
})
}
func init() { registry.Register(New()) }
+16
View File
@@ -0,0 +1,16 @@
package bunmanga
import (
"goyomi/internal/registry"
base "goyomi/sources/base/madara"
)
func New() *base.Source {
return base.New(base.Config{
Name: "Bun Manga",
BaseURL: "https://bunmanga.com",
Lang: "en",
})
}
func init() { registry.Register(New()) }
+17
View File
@@ -0,0 +1,17 @@
package cucumbermanga
import (
"goyomi/internal/registry"
base "goyomi/sources/base/madara"
)
func New() *base.Source {
return base.New(base.Config{
Name: "Cucumber Manga",
BaseURL: "https://cucumbermanga.com",
Lang: "en",
UseNewChapterEndpoint: true,
})
}
func init() { registry.Register(New()) }
@@ -0,0 +1,17 @@
package decadencescans
import (
"goyomi/internal/registry"
base "goyomi/sources/base/madara"
)
func New() *base.Source {
return base.New(base.Config{
Name: "Decadence Scans",
BaseURL: "https://reader.decadencescans.com",
Lang: "en",
UseNewChapterEndpoint: true,
})
}
func init() { registry.Register(New()) }
+16
View File
@@ -0,0 +1,16 @@
package kaliscancom
import (
"goyomi/internal/registry"
base "goyomi/sources/base/madtheme"
)
func New() *base.Source {
return base.New(base.Config{
Name: "KaliScan.com",
BaseURL: "https://kaliscan.com",
Lang: "en",
})
}
func init() { registry.Register(New()) }
+16
View File
@@ -0,0 +1,16 @@
package kaliscanio
import (
"goyomi/internal/registry"
base "goyomi/sources/base/madtheme"
)
func New() *base.Source {
return base.New(base.Config{
Name: "KaliScan.io",
BaseURL: "https://kaliscan.io",
Lang: "en",
})
}
func init() { registry.Register(New()) }
+16
View File
@@ -0,0 +1,16 @@
package linkmanga
import (
"goyomi/internal/registry"
base "goyomi/sources/base/madara"
)
func New() *base.Source {
return base.New(base.Config{
Name: "LinkManga",
BaseURL: "https://linkmanga.com",
Lang: "en",
})
}
func init() { registry.Register(New()) }
+16
View File
@@ -0,0 +1,16 @@
package mangabuddy
import (
"goyomi/internal/registry"
base "goyomi/sources/base/madtheme"
)
func New() *base.Source {
return base.New(base.Config{
Name: "MangaBuddy",
BaseURL: "https://mangabuddy.com",
Lang: "en",
})
}
func init() { registry.Register(New()) }
+16
View File
@@ -0,0 +1,16 @@
package mangabuddyme
import (
"goyomi/internal/registry"
base "goyomi/sources/base/madtheme"
)
func New() *base.Source {
return base.New(base.Config{
Name: "MangaBuddy.me",
BaseURL: "https://mangabuddy.me",
Lang: "en",
})
}
func init() { registry.Register(New()) }
+16
View File
@@ -0,0 +1,16 @@
package mangacute
import (
"goyomi/internal/registry"
base "goyomi/sources/base/madtheme"
)
func New() *base.Source {
return base.New(base.Config{
Name: "MangaCute",
BaseURL: "https://mangacute.com",
Lang: "en",
})
}
func init() { registry.Register(New()) }
+16
View File
@@ -0,0 +1,16 @@
package mangafab
import (
"goyomi/internal/registry"
base "goyomi/sources/base/madtheme"
)
func New() *base.Source {
return base.New(base.Config{
Name: "MangaFab",
BaseURL: "https://mangafab.com",
Lang: "en",
})
}
func init() { registry.Register(New()) }
+16
View File
@@ -0,0 +1,16 @@
package mangaforest
import (
"goyomi/internal/registry"
base "goyomi/sources/base/madtheme"
)
func New() *base.Source {
return base.New(base.Config{
Name: "MangaForest",
BaseURL: "https://mangaforest.me",
Lang: "en",
})
}
func init() { registry.Register(New()) }
+16
View File
@@ -0,0 +1,16 @@
package mangamonk
import (
"goyomi/internal/registry"
base "goyomi/sources/base/madtheme"
)
func New() *base.Source {
return base.New(base.Config{
Name: "MangaMonk",
BaseURL: "https://mangamonk.com",
Lang: "en",
})
}
func init() { registry.Register(New()) }
+16
View File
@@ -0,0 +1,16 @@
package mangasaga
import (
"goyomi/internal/registry"
base "goyomi/sources/base/madtheme"
)
func New() *base.Source {
return base.New(base.Config{
Name: "MangaSaga",
BaseURL: "https://mangasaga.com",
Lang: "en",
})
}
func init() { registry.Register(New()) }
+16
View File
@@ -0,0 +1,16 @@
package mangaspin
import (
"goyomi/internal/registry"
base "goyomi/sources/base/madtheme"
)
func New() *base.Source {
return base.New(base.Config{
Name: "MangaSpin",
BaseURL: "https://mangaspin.com",
Lang: "en",
})
}
func init() { registry.Register(New()) }
+16
View File
@@ -0,0 +1,16 @@
package mangaxyz
import (
"goyomi/internal/registry"
base "goyomi/sources/base/madtheme"
)
func New() *base.Source {
return base.New(base.Config{
Name: "MangaXYZ",
BaseURL: "https://mangaxyz.com",
Lang: "en",
})
}
func init() { registry.Register(New()) }
+16
View File
@@ -0,0 +1,16 @@
package manhuanow
import (
"goyomi/internal/registry"
base "goyomi/sources/base/madtheme"
)
func New() *base.Source {
return base.New(base.Config{
Name: "ManhuaNow",
BaseURL: "https://manhuanow.com",
Lang: "en",
})
}
func init() { registry.Register(New()) }
+16
View File
@@ -0,0 +1,16 @@
package manhuasite
import (
"goyomi/internal/registry"
base "goyomi/sources/base/madtheme"
)
func New() *base.Source {
return base.New(base.Config{
Name: "ManhuaSite",
BaseURL: "https://manhuasite.com",
Lang: "en",
})
}
func init() { registry.Register(New()) }
@@ -0,0 +1,16 @@
package sleepytranslations
import (
"goyomi/internal/registry"
base "goyomi/sources/base/madara"
)
func New() *base.Source {
return base.New(base.Config{
Name: "Sleepy Translations",
BaseURL: "https://sleepytranslations.com",
Lang: "en",
})
}
func init() { registry.Register(New()) }