diff --git a/.run/MadThemeGenerator.run.xml b/.run/MadThemeGenerator.run.xml
new file mode 100644
index 000000000..fd0dfd218
--- /dev/null
+++ b/.run/MadThemeGenerator.run.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/multisrc/overrides/madtheme/beehentai/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/beehentai/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..6eea5518b
Binary files /dev/null and b/multisrc/overrides/madtheme/beehentai/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/beehentai/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/beehentai/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..c5428c91e
Binary files /dev/null and b/multisrc/overrides/madtheme/beehentai/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/beehentai/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/beehentai/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..ea104a5a6
Binary files /dev/null and b/multisrc/overrides/madtheme/beehentai/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/beehentai/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/beehentai/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..e07380f6a
Binary files /dev/null and b/multisrc/overrides/madtheme/beehentai/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/beehentai/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/beehentai/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..9b95163a7
Binary files /dev/null and b/multisrc/overrides/madtheme/beehentai/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/beehentai/res/web_hi_res_512.png b/multisrc/overrides/madtheme/beehentai/res/web_hi_res_512.png
new file mode 100644
index 000000000..93c217d1a
Binary files /dev/null and b/multisrc/overrides/madtheme/beehentai/res/web_hi_res_512.png differ
diff --git a/multisrc/overrides/madtheme/boxmanhwa/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/boxmanhwa/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..381a8320c
Binary files /dev/null and b/multisrc/overrides/madtheme/boxmanhwa/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/boxmanhwa/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/boxmanhwa/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..de15a6520
Binary files /dev/null and b/multisrc/overrides/madtheme/boxmanhwa/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/boxmanhwa/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/boxmanhwa/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..039c04756
Binary files /dev/null and b/multisrc/overrides/madtheme/boxmanhwa/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/boxmanhwa/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/boxmanhwa/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..aa784fb0c
Binary files /dev/null and b/multisrc/overrides/madtheme/boxmanhwa/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/boxmanhwa/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/boxmanhwa/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..68e662aea
Binary files /dev/null and b/multisrc/overrides/madtheme/boxmanhwa/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/boxmanhwa/res/web_hi_res_512.png b/multisrc/overrides/madtheme/boxmanhwa/res/web_hi_res_512.png
new file mode 100644
index 000000000..0cdf02433
Binary files /dev/null and b/multisrc/overrides/madtheme/boxmanhwa/res/web_hi_res_512.png differ
diff --git a/multisrc/overrides/madtheme/default/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/default/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..91747e9cc
Binary files /dev/null and b/multisrc/overrides/madtheme/default/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/default/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/default/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..b811309fd
Binary files /dev/null and b/multisrc/overrides/madtheme/default/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/default/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/default/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..65f36430a
Binary files /dev/null and b/multisrc/overrides/madtheme/default/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/default/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/default/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..5453c2977
Binary files /dev/null and b/multisrc/overrides/madtheme/default/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/default/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/default/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..f376815f2
Binary files /dev/null and b/multisrc/overrides/madtheme/default/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/default/res/web_hi_res_512.png b/multisrc/overrides/madtheme/default/res/web_hi_res_512.png
new file mode 100644
index 000000000..c8139cd08
Binary files /dev/null and b/multisrc/overrides/madtheme/default/res/web_hi_res_512.png differ
diff --git a/multisrc/overrides/madtheme/mangabuddy/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangabuddy/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..f425a066e
Binary files /dev/null and b/multisrc/overrides/madtheme/mangabuddy/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangabuddy/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangabuddy/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..d3bd09d19
Binary files /dev/null and b/multisrc/overrides/madtheme/mangabuddy/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangabuddy/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangabuddy/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..d0bc864ae
Binary files /dev/null and b/multisrc/overrides/madtheme/mangabuddy/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangabuddy/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangabuddy/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..74f00e84c
Binary files /dev/null and b/multisrc/overrides/madtheme/mangabuddy/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangabuddy/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangabuddy/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..e396ca6b8
Binary files /dev/null and b/multisrc/overrides/madtheme/mangabuddy/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangabuddy/res/web_hi_res_512.png b/multisrc/overrides/madtheme/mangabuddy/res/web_hi_res_512.png
new file mode 100644
index 000000000..d852390cd
Binary files /dev/null and b/multisrc/overrides/madtheme/mangabuddy/res/web_hi_res_512.png differ
diff --git a/multisrc/overrides/madtheme/mangacute/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangacute/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..b2b6d5581
Binary files /dev/null and b/multisrc/overrides/madtheme/mangacute/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangacute/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangacute/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..1cba96283
Binary files /dev/null and b/multisrc/overrides/madtheme/mangacute/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangacute/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangacute/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..d339c34d1
Binary files /dev/null and b/multisrc/overrides/madtheme/mangacute/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangacute/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangacute/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..555abb3dc
Binary files /dev/null and b/multisrc/overrides/madtheme/mangacute/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangacute/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangacute/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..4ed375e83
Binary files /dev/null and b/multisrc/overrides/madtheme/mangacute/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangacute/res/web_hi_res_512.png b/multisrc/overrides/madtheme/mangacute/res/web_hi_res_512.png
new file mode 100644
index 000000000..5b958b009
Binary files /dev/null and b/multisrc/overrides/madtheme/mangacute/res/web_hi_res_512.png differ
diff --git a/multisrc/overrides/madtheme/mangafab/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangafab/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..85fa9712a
Binary files /dev/null and b/multisrc/overrides/madtheme/mangafab/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangafab/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangafab/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..2e42ba196
Binary files /dev/null and b/multisrc/overrides/madtheme/mangafab/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangafab/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangafab/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..099c0a8f5
Binary files /dev/null and b/multisrc/overrides/madtheme/mangafab/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangafab/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangafab/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..cbcdb472e
Binary files /dev/null and b/multisrc/overrides/madtheme/mangafab/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangafab/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangafab/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..6e22f6075
Binary files /dev/null and b/multisrc/overrides/madtheme/mangafab/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangafab/res/web_hi_res_512.png b/multisrc/overrides/madtheme/mangafab/res/web_hi_res_512.png
new file mode 100644
index 000000000..42c294af2
Binary files /dev/null and b/multisrc/overrides/madtheme/mangafab/res/web_hi_res_512.png differ
diff --git a/multisrc/overrides/madtheme/mangaforest/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaforest/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..79b9e6069
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaforest/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaforest/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaforest/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..12ef94846
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaforest/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaforest/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaforest/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..236b496cf
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaforest/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaforest/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaforest/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..355b34385
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaforest/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaforest/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaforest/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..5e4331fa1
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaforest/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaforest/res/web_hi_res_512.png b/multisrc/overrides/madtheme/mangaforest/res/web_hi_res_512.png
new file mode 100644
index 000000000..c1983c8d5
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaforest/res/web_hi_res_512.png differ
diff --git a/multisrc/overrides/madtheme/mangamad/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangamad/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..91747e9cc
Binary files /dev/null and b/multisrc/overrides/madtheme/mangamad/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangamad/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangamad/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..b811309fd
Binary files /dev/null and b/multisrc/overrides/madtheme/mangamad/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangamad/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangamad/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..65f36430a
Binary files /dev/null and b/multisrc/overrides/madtheme/mangamad/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangamad/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangamad/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..5453c2977
Binary files /dev/null and b/multisrc/overrides/madtheme/mangamad/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangamad/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangamad/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..f376815f2
Binary files /dev/null and b/multisrc/overrides/madtheme/mangamad/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangamad/res/web_hi_res_512.png b/multisrc/overrides/madtheme/mangamad/res/web_hi_res_512.png
new file mode 100644
index 000000000..c8139cd08
Binary files /dev/null and b/multisrc/overrides/madtheme/mangamad/res/web_hi_res_512.png differ
diff --git a/multisrc/overrides/madtheme/mangamax/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangamax/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..4962affa8
Binary files /dev/null and b/multisrc/overrides/madtheme/mangamax/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangamax/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangamax/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..81358004c
Binary files /dev/null and b/multisrc/overrides/madtheme/mangamax/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangamax/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangamax/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..8734c96d8
Binary files /dev/null and b/multisrc/overrides/madtheme/mangamax/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangamax/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangamax/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..91b5e9cec
Binary files /dev/null and b/multisrc/overrides/madtheme/mangamax/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangamax/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangamax/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..15d3b4bda
Binary files /dev/null and b/multisrc/overrides/madtheme/mangamax/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangamax/res/web_hi_res_512.png b/multisrc/overrides/madtheme/mangamax/res/web_hi_res_512.png
new file mode 100644
index 000000000..d147c8e37
Binary files /dev/null and b/multisrc/overrides/madtheme/mangamax/res/web_hi_res_512.png differ
diff --git a/multisrc/overrides/madtheme/mangasaga/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangasaga/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..a9d3fb20c
Binary files /dev/null and b/multisrc/overrides/madtheme/mangasaga/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangasaga/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangasaga/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..0d4ea975c
Binary files /dev/null and b/multisrc/overrides/madtheme/mangasaga/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangasaga/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangasaga/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..a098b0358
Binary files /dev/null and b/multisrc/overrides/madtheme/mangasaga/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangasaga/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangasaga/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..95ea1904b
Binary files /dev/null and b/multisrc/overrides/madtheme/mangasaga/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangasaga/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangasaga/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..97e4d49f8
Binary files /dev/null and b/multisrc/overrides/madtheme/mangasaga/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangasaga/res/web_hi_res_512.png b/multisrc/overrides/madtheme/mangasaga/res/web_hi_res_512.png
new file mode 100644
index 000000000..6b140482c
Binary files /dev/null and b/multisrc/overrides/madtheme/mangasaga/res/web_hi_res_512.png differ
diff --git a/multisrc/overrides/madtheme/mangaspin/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaspin/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..42f0ee9b7
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaspin/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaspin/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaspin/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..f63cda37f
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaspin/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaspin/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaspin/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..a8941032c
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaspin/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaspin/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaspin/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..0cb2a8417
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaspin/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaspin/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaspin/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..0678c3b3c
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaspin/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaspin/res/web_hi_res_512.png b/multisrc/overrides/madtheme/mangaspin/res/web_hi_res_512.png
new file mode 100644
index 000000000..0bfd7d4e1
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaspin/res/web_hi_res_512.png differ
diff --git a/multisrc/overrides/madtheme/mangaxyz/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaxyz/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..8a8e68b20
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaxyz/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaxyz/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaxyz/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..81f750c3c
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaxyz/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaxyz/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaxyz/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..d40a022e2
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaxyz/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaxyz/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaxyz/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..f889240e1
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaxyz/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaxyz/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/mangaxyz/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..9e1bf8544
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaxyz/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/mangaxyz/res/web_hi_res_512.png b/multisrc/overrides/madtheme/mangaxyz/res/web_hi_res_512.png
new file mode 100644
index 000000000..63e7235fb
Binary files /dev/null and b/multisrc/overrides/madtheme/mangaxyz/res/web_hi_res_512.png differ
diff --git a/multisrc/overrides/madtheme/manhuanow/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/manhuanow/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..dea85565a
Binary files /dev/null and b/multisrc/overrides/madtheme/manhuanow/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/manhuanow/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/manhuanow/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..022e6f1a2
Binary files /dev/null and b/multisrc/overrides/madtheme/manhuanow/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/manhuanow/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/manhuanow/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..92832f485
Binary files /dev/null and b/multisrc/overrides/madtheme/manhuanow/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/manhuanow/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/manhuanow/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..1b1f8ee8f
Binary files /dev/null and b/multisrc/overrides/madtheme/manhuanow/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/manhuanow/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/manhuanow/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..c202e339b
Binary files /dev/null and b/multisrc/overrides/madtheme/manhuanow/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/manhuanow/res/web_hi_res_512.png b/multisrc/overrides/madtheme/manhuanow/res/web_hi_res_512.png
new file mode 100644
index 000000000..5ee515214
Binary files /dev/null and b/multisrc/overrides/madtheme/manhuanow/res/web_hi_res_512.png differ
diff --git a/multisrc/overrides/madtheme/manhuasite/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/manhuasite/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..dea85565a
Binary files /dev/null and b/multisrc/overrides/madtheme/manhuasite/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/manhuasite/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/manhuasite/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..022e6f1a2
Binary files /dev/null and b/multisrc/overrides/madtheme/manhuasite/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/manhuasite/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/manhuasite/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..92832f485
Binary files /dev/null and b/multisrc/overrides/madtheme/manhuasite/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/manhuasite/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/manhuasite/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..1b1f8ee8f
Binary files /dev/null and b/multisrc/overrides/madtheme/manhuasite/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/manhuasite/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/manhuasite/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..c202e339b
Binary files /dev/null and b/multisrc/overrides/madtheme/manhuasite/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/manhuasite/res/web_hi_res_512.png b/multisrc/overrides/madtheme/manhuasite/res/web_hi_res_512.png
new file mode 100644
index 000000000..5ee515214
Binary files /dev/null and b/multisrc/overrides/madtheme/manhuasite/res/web_hi_res_512.png differ
diff --git a/multisrc/overrides/madtheme/tooniclub/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/tooniclub/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..6eea5518b
Binary files /dev/null and b/multisrc/overrides/madtheme/tooniclub/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/tooniclub/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/tooniclub/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..c5428c91e
Binary files /dev/null and b/multisrc/overrides/madtheme/tooniclub/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/tooniclub/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/tooniclub/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..ea104a5a6
Binary files /dev/null and b/multisrc/overrides/madtheme/tooniclub/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/tooniclub/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/tooniclub/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..e07380f6a
Binary files /dev/null and b/multisrc/overrides/madtheme/tooniclub/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/tooniclub/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/tooniclub/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..9b95163a7
Binary files /dev/null and b/multisrc/overrides/madtheme/tooniclub/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/tooniclub/res/web_hi_res_512.png b/multisrc/overrides/madtheme/tooniclub/res/web_hi_res_512.png
new file mode 100644
index 000000000..93c217d1a
Binary files /dev/null and b/multisrc/overrides/madtheme/tooniclub/res/web_hi_res_512.png differ
diff --git a/multisrc/overrides/madtheme/toonifab/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonifab/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..6eea5518b
Binary files /dev/null and b/multisrc/overrides/madtheme/toonifab/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonifab/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonifab/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..c5428c91e
Binary files /dev/null and b/multisrc/overrides/madtheme/toonifab/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonifab/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonifab/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..ea104a5a6
Binary files /dev/null and b/multisrc/overrides/madtheme/toonifab/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonifab/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonifab/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..e07380f6a
Binary files /dev/null and b/multisrc/overrides/madtheme/toonifab/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonifab/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonifab/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..9b95163a7
Binary files /dev/null and b/multisrc/overrides/madtheme/toonifab/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonifab/res/web_hi_res_512.png b/multisrc/overrides/madtheme/toonifab/res/web_hi_res_512.png
new file mode 100644
index 000000000..93c217d1a
Binary files /dev/null and b/multisrc/overrides/madtheme/toonifab/res/web_hi_res_512.png differ
diff --git a/multisrc/overrides/madtheme/toonilyme/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonilyme/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..6eea5518b
Binary files /dev/null and b/multisrc/overrides/madtheme/toonilyme/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonilyme/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonilyme/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..c5428c91e
Binary files /dev/null and b/multisrc/overrides/madtheme/toonilyme/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonilyme/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonilyme/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..ea104a5a6
Binary files /dev/null and b/multisrc/overrides/madtheme/toonilyme/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonilyme/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonilyme/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..e07380f6a
Binary files /dev/null and b/multisrc/overrides/madtheme/toonilyme/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonilyme/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonilyme/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..9b95163a7
Binary files /dev/null and b/multisrc/overrides/madtheme/toonilyme/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonilyme/res/web_hi_res_512.png b/multisrc/overrides/madtheme/toonilyme/res/web_hi_res_512.png
new file mode 100644
index 000000000..93c217d1a
Binary files /dev/null and b/multisrc/overrides/madtheme/toonilyme/res/web_hi_res_512.png differ
diff --git a/multisrc/overrides/madtheme/toonitube/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonitube/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..6eea5518b
Binary files /dev/null and b/multisrc/overrides/madtheme/toonitube/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonitube/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonitube/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..c5428c91e
Binary files /dev/null and b/multisrc/overrides/madtheme/toonitube/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonitube/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonitube/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..ea104a5a6
Binary files /dev/null and b/multisrc/overrides/madtheme/toonitube/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonitube/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonitube/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..e07380f6a
Binary files /dev/null and b/multisrc/overrides/madtheme/toonitube/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonitube/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/toonitube/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..9b95163a7
Binary files /dev/null and b/multisrc/overrides/madtheme/toonitube/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/toonitube/res/web_hi_res_512.png b/multisrc/overrides/madtheme/toonitube/res/web_hi_res_512.png
new file mode 100644
index 000000000..93c217d1a
Binary files /dev/null and b/multisrc/overrides/madtheme/toonitube/res/web_hi_res_512.png differ
diff --git a/multisrc/overrides/madtheme/truemanga/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madtheme/truemanga/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..38566e2c8
Binary files /dev/null and b/multisrc/overrides/madtheme/truemanga/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/truemanga/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madtheme/truemanga/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..a3d3a13a7
Binary files /dev/null and b/multisrc/overrides/madtheme/truemanga/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/truemanga/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madtheme/truemanga/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..7a381784d
Binary files /dev/null and b/multisrc/overrides/madtheme/truemanga/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/truemanga/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/truemanga/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..6e33b5f2a
Binary files /dev/null and b/multisrc/overrides/madtheme/truemanga/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/truemanga/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madtheme/truemanga/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..6a76f3ac9
Binary files /dev/null and b/multisrc/overrides/madtheme/truemanga/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/multisrc/overrides/madtheme/truemanga/res/web_hi_res_512.png b/multisrc/overrides/madtheme/truemanga/res/web_hi_res_512.png
new file mode 100644
index 000000000..6b3bf9dd1
Binary files /dev/null and b/multisrc/overrides/madtheme/truemanga/res/web_hi_res_512.png differ
diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madtheme/MadTheme.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madtheme/MadTheme.kt
new file mode 100644
index 000000000..b477f6ee5
--- /dev/null
+++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madtheme/MadTheme.kt
@@ -0,0 +1,298 @@
+package eu.kanade.tachiyomi.multisrc.madtheme
+
+import eu.kanade.tachiyomi.network.GET
+import eu.kanade.tachiyomi.source.model.Filter
+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.ParsedHttpSource
+import eu.kanade.tachiyomi.util.asJsoup
+import kotlinx.serialization.decodeFromString
+import kotlinx.serialization.json.Json
+import okhttp3.Headers
+import okhttp3.HttpUrl.Companion.toHttpUrl
+import okhttp3.Request
+import okhttp3.Response
+import org.jsoup.nodes.Document
+import org.jsoup.nodes.Element
+import uy.kohesive.injekt.injectLazy
+import java.text.ParseException
+import java.text.SimpleDateFormat
+import java.util.Calendar
+import java.util.Locale
+
+abstract class MadTheme(
+ override val name: String,
+ override val baseUrl: String,
+ override val lang: String,
+ private val dateFormat: SimpleDateFormat = SimpleDateFormat("MMM dd, yyy", Locale.US)
+) : ParsedHttpSource() {
+
+ override val supportsLatest = true
+
+ override fun headersBuilder() = Headers.Builder().apply {
+ add("Referer", "$baseUrl/")
+ add("User-Agent", "Tachiyomi " + System.getProperty("http.agent"))
+ }
+
+ private val json: Json by injectLazy()
+
+ // Popular
+ override fun popularMangaRequest(page: Int): Request =
+ searchMangaRequest(page, "", FilterList(OrderFilter(0)))
+
+ override fun popularMangaParse(response: Response): MangasPage =
+ searchMangaParse(response)
+
+ override fun popularMangaSelector(): String =
+ searchMangaSelector()
+
+ override fun popularMangaFromElement(element: Element): SManga =
+ searchMangaFromElement(element)
+
+ override fun popularMangaNextPageSelector(): String? =
+ searchMangaNextPageSelector()
+
+ // Latest
+ override fun latestUpdatesRequest(page: Int): Request =
+ searchMangaRequest(page, "", FilterList(OrderFilter(1)))
+
+ override fun latestUpdatesParse(response: Response): MangasPage =
+ searchMangaParse(response)
+
+ override fun latestUpdatesSelector(): String =
+ searchMangaSelector()
+
+ override fun latestUpdatesFromElement(element: Element): SManga =
+ searchMangaFromElement(element)
+
+ override fun latestUpdatesNextPageSelector(): String? =
+ searchMangaNextPageSelector()
+
+ // Search
+ override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
+ val url = "$baseUrl/search".toHttpUrl().newBuilder()
+ .addQueryParameter("q", query)
+
+ filters.forEach { filter ->
+ when (filter) {
+ is GenreFilter -> {
+ filter.state
+ .filter { it.state }
+ .let { list ->
+ if (list.isNotEmpty()) {
+ list.forEach { genre -> url.addQueryParameter("genre[]", genre.id) }
+ }
+ }
+ }
+ is StatusFilter -> {
+ url.addQueryParameter("status", filter.toUriPart())
+ }
+ is OrderFilter -> {
+ url.addQueryParameter("sort", filter.toUriPart())
+ }
+ else -> {}
+ }
+ }
+
+ return GET(url.toString(), headers)
+ }
+
+ override fun searchMangaSelector(): String = ".book-detailed-item"
+
+ override fun searchMangaFromElement(element: Element): SManga = SManga.create().apply {
+ setUrlWithoutDomain(element.select("a").first()!!.attr("abs:href"))
+ title = element.select("a").first()!!.attr("title")
+ description = element.select(".summary").first()?.text()
+ genre = element.select(".genres > *").joinToString { it.text() }
+ thumbnail_url = element.select("img").first()!!.attr("abs:data-src")
+ }
+
+ override fun searchMangaNextPageSelector(): String? = ".paginator [rel=next]"
+
+ // Details
+ override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply {
+ title = document.select(".detail h1").first()!!.text()
+ author = document.select(".detail .meta > p > strong:contains(Authors) ~ a").joinToString { it.text().trim(',', ' ') }
+ genre = document.select(".detail .meta > p > strong:contains(Genres) ~ a").joinToString { it.text().trim(',', ' ') }
+ thumbnail_url = document.select("#cover img").first()!!.attr("abs:data-src")
+
+ val altNames = document.select(".detail h2").first()?.text()
+ ?.split(',', ';')
+ ?.mapNotNull { it.trim().takeIf { it != title } }
+ ?: listOf()
+
+ description = document.select(".summary .content").first()?.text() +
+ (altNames.takeIf { it.isNotEmpty() }?.let { "\n\nAlt name(s): ${it.joinToString()}" } ?: "")
+
+ val statusText = document.select(".detail .meta > p > strong:contains(Status) ~ a").first()!!.text()
+ status = when (statusText.toLowerCase(Locale.US)) {
+ "ongoing" -> SManga.ONGOING
+ "completed" -> SManga.COMPLETED
+ else -> SManga.UNKNOWN
+ }
+ }
+
+ // Chapters
+ override fun chapterListRequest(manga: SManga): Request =
+ GET("$baseUrl/api/manga${manga.url}/chapters?source=detail", headers)
+
+ override fun searchMangaParse(response: Response): MangasPage {
+ if (genresList == null) {
+ genresList = parseGenres(response.asJsoup(response.peekBody(Long.MAX_VALUE).string()))
+ }
+ return super.searchMangaParse(response)
+ }
+
+ override fun chapterListSelector(): String = "#chapter-list > li"
+
+ override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply {
+ setUrlWithoutDomain(element.select("a").first()!!.attr("abs:href"))
+ name = element.select(".chapter-title").first()!!.text()
+ date_upload = parseChapterDate(element.select(".chapter-update").first()?.text())
+ chapter_number = name.substringAfterLast(' ').toFloatOrNull() ?: -1f
+ }
+
+ // Pages
+ override fun pageListParse(document: Document): List {
+ val html = document.html()!!
+
+ if (!html.contains("var mainServer = \"")) {
+ // No fancy CDN
+ return document.select("#chapter-images img").mapIndexed { index, element ->
+ Page(index, "", element.attr("abs:data-src"))
+ }
+ }
+
+ val scheme = baseUrl.toHttpUrl().scheme + "://"
+
+ val mainCdn = html
+ .substringAfter("var mainServer = \"")
+ .substringBefore("\"")
+
+ val mainCdnHttp = (scheme + mainCdn).toHttpUrl()
+ CDN_URL = scheme + mainCdnHttp.host
+ CDN_PATH = mainCdnHttp.encodedPath
+
+ val chImages = html
+ .substringAfter("var chapImages = '")
+ .substringBefore("'")
+ .split(',')
+
+ if (html.contains("var multiServers = true")) {
+ val altCDNs = json.decodeFromString>(
+ html
+ .substringAfter("var imageServers = ")
+ .substringBefore("\n")
+ )
+ CDN_URL_ALT = altCDNs.mapNotNull {
+ val url = scheme + it
+ if (!(CDN_URL!!).contains(url)) url else null
+ }
+ }
+
+ val allCDN = listOf(CDN_URL) + CDN_URL_ALT
+ return chImages.mapIndexed { index, img ->
+ Page(index, "", allCDN.random() + CDN_PATH + img)
+ }
+ }
+
+ // Image
+ override fun imageUrlParse(document: Document): String =
+ throw UnsupportedOperationException("Not used.")
+
+ // Date logic lifted from Madara
+ private fun parseChapterDate(date: String?): Long {
+ date ?: return 0
+
+ fun SimpleDateFormat.tryParse(string: String): Long {
+ return try {
+ parse(string)?.time ?: 0
+ } catch (_: ParseException) {
+ 0
+ }
+ }
+
+ return when {
+ "ago".endsWith(date) -> {
+ parseRelativeDate(date)
+ }
+ else -> dateFormat.tryParse(date)
+ }
+ }
+
+ private fun parseRelativeDate(date: String): Long {
+ val number = Regex("""(\d+)""").find(date)?.value?.toIntOrNull() ?: return 0
+ val cal = Calendar.getInstance()
+
+ return when {
+ date.contains("day") -> cal.apply { add(Calendar.DAY_OF_MONTH, -number) }.timeInMillis
+ date.contains("hour") -> cal.apply { add(Calendar.HOUR, -number) }.timeInMillis
+ date.contains("minute") -> cal.apply { add(Calendar.MINUTE, -number) }.timeInMillis
+ date.contains("second") -> cal.apply { add(Calendar.SECOND, -number) }.timeInMillis
+ else -> 0
+ }
+ }
+
+ // Dynamic genres
+ private fun parseGenres(document: Document): List? {
+ return document.select(".checkbox-group.genres").first()?.select("label")?.map {
+ Genre(it.select(".radio__label").first()!!.text(), it.select("input").`val`())
+ }
+ }
+
+ // Filters
+ override fun getFilterList() = FilterList(
+ GenreFilter(getGenreList()),
+ StatusFilter(),
+ OrderFilter(),
+ )
+
+ private class GenreFilter(genres: List) : Filter.Group("Genres", genres)
+ private class Genre(name: String, val id: String) : Filter.CheckBox(name)
+ private var genresList: List? = null
+ private fun getGenreList(): List {
+ // Filters are fetched immediately once an extension loads
+ // We're only able to get filters after a loading the manga directory, and resetting
+ // the filters is the only thing that seems to reinflate the view
+ return genresList ?: listOf(Genre("Press reset to attempt to fetch genres", ""))
+ }
+
+ class StatusFilter : UriPartFilter(
+ "Status",
+ arrayOf(
+ Pair("All", "all"),
+ Pair("Ongoing", "ongoing"),
+ Pair("Completed", "completed"),
+ )
+ )
+
+ class OrderFilter(state: Int = 0) : UriPartFilter(
+ "Order By",
+ arrayOf(
+ Pair("Views", "views"),
+ Pair("Updated", "updated_at"),
+ Pair("Created", "created_at"),
+ Pair("Name A-Z", "name"),
+ Pair("Rating", "rating"),
+ ),
+ state
+ )
+
+ open class UriPartFilter(
+ displayName: String,
+ private val vals: Array>,
+ state: Int = 0
+ ) :
+ Filter.Select(displayName, vals.map { it.first }.toTypedArray(), state) {
+ fun toUriPart() = vals[state].second
+ }
+
+ companion object {
+ private var CDN_URL: String? = null
+ private var CDN_URL_ALT: List = listOf()
+ private var CDN_PATH: String? = null
+ }
+}
diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madtheme/MadThemeGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madtheme/MadThemeGenerator.kt
new file mode 100644
index 000000000..8b65b6c01
--- /dev/null
+++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madtheme/MadThemeGenerator.kt
@@ -0,0 +1,41 @@
+package eu.kanade.tachiyomi.multisrc.madtheme
+
+import generator.ThemeSourceData.SingleLang
+import generator.ThemeSourceGenerator
+
+class MadThemeGenerator : ThemeSourceGenerator {
+
+ override val themePkg = "madtheme"
+
+ override val themeClass = "MadTheme"
+
+ override val baseVersionCode: Int = 1
+
+ override val sources = listOf(
+ SingleLang("BeeHentai", "https://beehentai.com", "en", isNsfw = true),
+ SingleLang("BoxManhwa", "https://boxmanhwa.com", "en", isNsfw = true),
+ SingleLang("MangaBuddy", "https://mangabuddy.com", "en", isNsfw = true),
+ SingleLang("MangaCute", "https://mangacute.com", "en", isNsfw = true),
+ SingleLang("MangaFab", "https://mangafab.com", "en", isNsfw = true),
+ SingleLang("MangaForest", "https://mangaforest.com", "en", isNsfw = true),
+ SingleLang("MangaMad", "https://mangamad.com", "en", isNsfw = true),
+ SingleLang("MangaMax", "https://mangamax.net", "en", isNsfw = true),
+ SingleLang("MangaSaga", "https://mangasaga.com", "en", isNsfw = true),
+ SingleLang("MangaSpin", "https://mangaspin.com", "en", isNsfw = true),
+ SingleLang("MangaXYZ", "https://mangaxyz.com", "en", isNsfw = true),
+ SingleLang("ManhuaNow", "https://manhuanow.com", "en", isNsfw = true),
+ SingleLang("ManhuaSite", "https://manhuasite.com", "en", isNsfw = true),
+ SingleLang("TooniClub", "https://tooniclub.com", "en", isNsfw = true),
+ SingleLang("TooniFab", "https://toonifab.com", "en", isNsfw = true),
+ SingleLang("Toonily.me", "https://toonily.me", "en", isNsfw = true, className = "ToonilyMe"),
+ SingleLang("TooniTube", "https://toonitube.com", "en", isNsfw = true),
+ SingleLang("TrueManga", "https://truemanga.com", "en", isNsfw = true),
+ )
+
+ companion object {
+ @JvmStatic
+ fun main(args: Array) {
+ MadThemeGenerator().createAll()
+ }
+ }
+}