From 97cbfb9542d67ce67b7d40df07af59fbd5532bc1 Mon Sep 17 00:00:00 2001 From: xMohnad Date: Sat, 7 Jun 2025 14:59:44 +0300 Subject: [PATCH 01/11] chore(mmrcms): remove Jpmangas source (FR) - site is offline --- dart/manga/multisrc/mmrcms/sources.dart | 3 --- dart/manga/multisrc/mmrcms/src/jpmangas/icon.png | Bin 2980 -> 0 bytes .../multisrc/mmrcms/src/jpmangas/jpmangas.dart | 15 --------------- 3 files changed, 18 deletions(-) delete mode 100644 dart/manga/multisrc/mmrcms/src/jpmangas/icon.png delete mode 100644 dart/manga/multisrc/mmrcms/src/jpmangas/jpmangas.dart diff --git a/dart/manga/multisrc/mmrcms/sources.dart b/dart/manga/multisrc/mmrcms/sources.dart index d052f011..b1718950 100644 --- a/dart/manga/multisrc/mmrcms/sources.dart +++ b/dart/manga/multisrc/mmrcms/sources.dart @@ -2,7 +2,6 @@ import '../../../../model/source.dart'; import 'src/scanvf/scanvf.dart'; import 'src/komikid/komikid.dart'; import 'src/mangaid/mangaid.dart'; -import 'src/jpmangas/jpmangas.dart'; import 'src/onma/onma.dart'; import 'src/readcomicsonline/readcomicsonline.dart'; import 'src/lelscanvf/lelscanvf.dart'; @@ -21,8 +20,6 @@ List _mmrcmsSourcesList = komikidSource, //MangaID (ID) mangaidSource, - //Jpmangas (FR) - jpmangasSource, //مانجا اون لاين (AR) onmaSource, //Read Comics Online (EN) diff --git a/dart/manga/multisrc/mmrcms/src/jpmangas/icon.png b/dart/manga/multisrc/mmrcms/src/jpmangas/icon.png deleted file mode 100644 index 232a21e828125ca2e28d9122e2dcf2c65232b579..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2980 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 _jpmangasSource; - -Source _jpmangasSource = Source( - name: "Jpmangas", - baseUrl: "https://jpmangas.cc", - lang: "fr", - - typeSource: "mmrcms", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/manga/multisrc/mmrcms/src/jpmangas/icon.png", - dateFormat: "d MMM. yyyy", - dateFormatLocale: "en_us", -); From 75869f4cc32c2c5e961cdd96359f3d34a967f9a9 Mon Sep 17 00:00:00 2001 From: xMohnad Date: Sat, 7 Jun 2025 15:04:15 +0300 Subject: [PATCH 02/11] chore(mmrcms): remove Komikid source (ID) - site is offline --- dart/manga/multisrc/mmrcms/sources.dart | 3 --- dart/manga/multisrc/mmrcms/src/komikid/icon.png | Bin 2980 -> 0 bytes .../multisrc/mmrcms/src/komikid/komikid.dart | 15 --------------- 3 files changed, 18 deletions(-) delete mode 100644 dart/manga/multisrc/mmrcms/src/komikid/icon.png delete mode 100644 dart/manga/multisrc/mmrcms/src/komikid/komikid.dart diff --git a/dart/manga/multisrc/mmrcms/sources.dart b/dart/manga/multisrc/mmrcms/sources.dart index b1718950..badadc58 100644 --- a/dart/manga/multisrc/mmrcms/sources.dart +++ b/dart/manga/multisrc/mmrcms/sources.dart @@ -1,6 +1,5 @@ import '../../../../model/source.dart'; import 'src/scanvf/scanvf.dart'; -import 'src/komikid/komikid.dart'; import 'src/mangaid/mangaid.dart'; import 'src/onma/onma.dart'; import 'src/readcomicsonline/readcomicsonline.dart'; @@ -16,8 +15,6 @@ List _mmrcmsSourcesList = [ //Scan VF (FR) scanvfSource, - //Komikid (ID) - komikidSource, //MangaID (ID) mangaidSource, //مانجا اون لاين (AR) diff --git a/dart/manga/multisrc/mmrcms/src/komikid/icon.png b/dart/manga/multisrc/mmrcms/src/komikid/icon.png deleted file mode 100644 index 232a21e828125ca2e28d9122e2dcf2c65232b579..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2980 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 _komikidSource; - -Source _komikidSource = Source( - name: "Komikid", - baseUrl: "https://www.komikid.com", - lang: "id", - - typeSource: "mmrcms", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/manga/multisrc/mmrcms/src/komikid/icon.png", - dateFormat: "d MMM. yyyy", - dateFormatLocale: "en_us", -); From 714a79d1ede88b53ec9b9f5ec352e1acb335bbe4 Mon Sep 17 00:00:00 2001 From: xMohnad Date: Sat, 7 Jun 2025 15:07:02 +0300 Subject: [PATCH 03/11] chore(mmrcms): remove Lelscan-VF source (FR) - site is offline --- dart/manga/multisrc/mmrcms/sources.dart | 3 --- .../manga/multisrc/mmrcms/src/lelscanvf/icon.png | Bin 2980 -> 0 bytes .../multisrc/mmrcms/src/lelscanvf/lelscanvf.dart | 15 --------------- 3 files changed, 18 deletions(-) delete mode 100644 dart/manga/multisrc/mmrcms/src/lelscanvf/icon.png delete mode 100644 dart/manga/multisrc/mmrcms/src/lelscanvf/lelscanvf.dart diff --git a/dart/manga/multisrc/mmrcms/sources.dart b/dart/manga/multisrc/mmrcms/sources.dart index badadc58..a27000f4 100644 --- a/dart/manga/multisrc/mmrcms/sources.dart +++ b/dart/manga/multisrc/mmrcms/sources.dart @@ -3,7 +3,6 @@ import 'src/scanvf/scanvf.dart'; import 'src/mangaid/mangaid.dart'; import 'src/onma/onma.dart'; import 'src/readcomicsonline/readcomicsonline.dart'; -import 'src/lelscanvf/lelscanvf.dart'; import 'src/mangafr/mangafr.dart'; const mmrcmsVersion = "0.0.7"; @@ -21,8 +20,6 @@ List _mmrcmsSourcesList = onmaSource, //Read Comics Online (EN) readcomicsonlineSource, - //Lelscan-VF (FR) - lelscanvfSource, //Manga-FR (FR) mangafrSource, ] diff --git a/dart/manga/multisrc/mmrcms/src/lelscanvf/icon.png b/dart/manga/multisrc/mmrcms/src/lelscanvf/icon.png deleted file mode 100644 index 232a21e828125ca2e28d9122e2dcf2c65232b579..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2980 zcmV;V3tRMwP)9slg^?cMENE+O2*1OiDw2#rM}i3tG&ZBbF24z*UtN2eJb9Ua^0!_N3e|LFAZ zw$o0l(@tw0eBgsxQ4kNs3e{en;&TWDgCRj7CL|=6d%t$~*FSFWvA4VTh(vPc_nEm# za{Ii`=lj0P{QwFI3JMAeii-kfo}AZ)>}+#594=85 zSwhG{@&e-b`~5zjZ>Yb&f7&hyzF}LP(`VV9F(*<2X)|BntpxaB%S6rlzLb zY&P4KH2ed>VDRX`z`(xV-rijRLJY%12q7^5sZyR$jsUD;`4#}?P$;ygrlw{yrCp23 z$;l%gkLNxBK>z^&`63V_a!Xl%Cf*B_{NixC-Q8njV}A$W1W>COEmy2aVarUqmchZn zdnx&)(a_M)<@I{+0^e!mTJ2wY9XgGy<>#FwZ6gsT!=VuC6vpYh~!|?QKuwQ#M7)F1Fl^Q<>|Km?VJTnT%cW;Jc+t!lT zOr0G?@TFHFN29P`b2WtSbzs=yQ8(Uy9Mg|I4iNRnc*M~$Oh5KFxPJan^$8%yVwidQ z1;ju2*l?fV3on7S+hFVI(rgo_XE61fKSB;i005yquYz;bz_xL{G5O=?F!hH&Lk@)j z05c<>L5@UF^X)B$$AsTJjNm_BHr$>(HC%m3n1~_*&%Ric{0wHEcm_n2w9oH+CQE(> zq1O&V3Wf~NHTAnkv*c$*-n|D>AgH^4?4zSa$p-+TyR-TPi2d(<#EyJW_Wq&$udDt} z42>Z5*%@tuJU@l#yGQheeC|ca2I2&E@6meL)HM8md7?<1FhS_)Lj4c#tS$k>X+LJ3 zexWkK-ph$a2ti`t1V}ugFV-vjK~gDo==ox-sNjiX1CV2JwO~&^Ys~%9MmT?bKkDzf zyZZWoz^>hzWL7d?L}J;{LXt@&2ZxH(i84a3<~)YTGGa$Q0ExzmhQ#Ejr*eXv9MbhL z0I*!%4)-sA0n3`z)z^rnM#qpmHKN_XFc5mWPDx-^oI`st8S!H$l$`KddG{9xKu)Bs-pIlk zp0D0n5J@DF9MOgjuC5OJ@+Kt`F<{I(T_wlC%N;mvi3PO&l;S%jWYgU0KuS#4_E%mG&h63_HMGy0_13BqAUS+mKd!c|Qs;y9U9fg`WdG({n^Av% zU(S;vQNz+uBf_NC`b~`uU@TUhyb%Wx(*m$|8y5ZGcKrnZuYV)(&%K7@k$F3c5Wg7H zeV$*oRP)^8`}-ir;~?=w*7DO~!nn(|w6{SV9V>nl91FgA8Kh~y=AW}jA_+*6$}noS z-+*vI69@p2H{OEDxfu3qHdT)Yh*N%jPVxv=-GtSu*(Mhez`FLbGF}-6b89o8mt;H->sc6)28{g7g@_2@0VP3fcjLE>s3j|I3vfz7;k!M3RlkHS@Z8Kwa_*FnL^H%m(G8PG0338z5Y@ zPJcvlG6+YKu(qnsqi;|O~XmQ_N}YXQucuF!oxeBe!es|$q@KYjwq&vR2r&Z+N3CQrI) z;+vQ0hdQO7$RuBLYqM^Nsu$vBo_ZeQ7vs9;v~BLKo<4x9tp(>?tcjb6!65|qdQo%Z zR*+~6@uSBOIrNUIrmws6`>=1>sEjIjkfeIvZ(7orty-*W+YveRj^_G8-rJg7{UWXL zTdkUqa{jk}QjMt#8$a`k*6I;}5v;JZuR-*k|7z;*@c!3z8=ee8`@FDk*_gKE<;##9 zQoj$IZ_&1EH){ppI9R{=4fQc=RwJ1g{#ZfCdWalPVEWO&8j=qH_AQ&h>6EAQHUu#o z2ch>WU=|Za#+pmMmdn&cvb7FX!^U6YhPmL)5=+}Ea0Tx(6gF6Ftt0JSia``3-_o%* zYY^4b2LQ0FY=zL(QSot(ZP(>O$yMraM=-B!)y(MY?)aW6whKL7nklPr<>hL(cP$2E zwSpv)2*35Vad=qT2ZCk+zRtTLPu&wXX=}QFgD_U|wu4o0rvLKRV*q@j$ZH4RMA7QRB=bsCzf8ZX3 zUfz#L5lc&3@~yCK-k=UgJdfI2cVH&=JggmSA?P$o49mi?{dx%9>tMRXW6(L9VcXb) z!0>5s9yf#yJ!xUgJWNeXA)Xyo$NU?&!g2k#46CfF5`eW>PW;6Ju#TzdBre2tvm#g{$#%zY`;fD}@;}BAx zpMh!V64YFG?VKgtiy}bQrCXN6`I86Jb-yy{{3>6lQB%g+Y^dF_9Ty81<08{`9DgYILf(k$dpr8U!0Vt>dQ~(Mp02Lq~^h;Z32XdhVAe755B?7q+A&81F zJIEI#2l)MdKjpGAOiWA!ky}?xo~-}`0P*>JLzL3W;Pd&;Ah(ninT-IM_$BrC_fH3d z!K0Mc@-R9&Iy^Em;zxQ-F%h#^MTz9aFwyJvP7MqU?4#6{hr@>tzkTxL$w{P_u}bE7 z0jZ?K%zXbn55NJyH8C-<)9rS5Q;Ll-JUo1S<;s=60&o_<7=Rf?2uUv&lnOzza$p=l z$m8+cH$Fc8KBc)R`M(BmULihO-~qF$f@An?zt_lPTTKB9!3csb-(GUv$`fl~r=|l{L=G+tS6km zZ^pti>tk_w6%(* _lelscanvfSource; - -Source _lelscanvfSource = Source( - name: "Lelscan-VF", - baseUrl: "https://www.lelscanvf.cc/", - lang: "fr", - - typeSource: "mmrcms", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/manga/multisrc/mmrcms/src/lelscanvf/icon.png", - dateFormat: "d MMM. yyyy", - dateFormatLocale: "en_us", -); From 9a7aa91f0d643c4f7f0a9ac2c6cd142119e7d1ad Mon Sep 17 00:00:00 2001 From: xMohnad Date: Sat, 7 Jun 2025 15:17:44 +0300 Subject: [PATCH 04/11] chore(mmrcms): remove Manga-FR source (FR) - site is offline --- dart/manga/multisrc/mmrcms/sources.dart | 3 --- dart/manga/multisrc/mmrcms/src/mangafr/icon.png | Bin 2980 -> 0 bytes .../multisrc/mmrcms/src/mangafr/mangafr.dart | 15 --------------- 3 files changed, 18 deletions(-) delete mode 100644 dart/manga/multisrc/mmrcms/src/mangafr/icon.png delete mode 100644 dart/manga/multisrc/mmrcms/src/mangafr/mangafr.dart diff --git a/dart/manga/multisrc/mmrcms/sources.dart b/dart/manga/multisrc/mmrcms/sources.dart index a27000f4..75ba3383 100644 --- a/dart/manga/multisrc/mmrcms/sources.dart +++ b/dart/manga/multisrc/mmrcms/sources.dart @@ -3,7 +3,6 @@ import 'src/scanvf/scanvf.dart'; import 'src/mangaid/mangaid.dart'; import 'src/onma/onma.dart'; import 'src/readcomicsonline/readcomicsonline.dart'; -import 'src/mangafr/mangafr.dart'; const mmrcmsVersion = "0.0.7"; const mmrcmsSourceCodeUrl = @@ -20,8 +19,6 @@ List _mmrcmsSourcesList = onmaSource, //Read Comics Online (EN) readcomicsonlineSource, - //Manga-FR (FR) - mangafrSource, ] .map( (e) => diff --git a/dart/manga/multisrc/mmrcms/src/mangafr/icon.png b/dart/manga/multisrc/mmrcms/src/mangafr/icon.png deleted file mode 100644 index 232a21e828125ca2e28d9122e2dcf2c65232b579..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2980 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 _mangafrSource; - -Source _mangafrSource = Source( - name: "Manga-FR", - baseUrl: "https://manga-fr.me", - lang: "fr", - - typeSource: "mmrcms", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/manga/multisrc/mmrcms/src/mangafr/icon.png", - dateFormat: "d MMM. yyyy", - dateFormatLocale: "en_us", -); From 258105f327cdfe88b49f20e13bbe3ec96f0e3d64 Mon Sep 17 00:00:00 2001 From: xMohnad Date: Sat, 7 Jun 2025 15:20:02 +0300 Subject: [PATCH 05/11] chore(mmrcms): remove MangaID source (ID) - site is offline --- dart/manga/multisrc/mmrcms/sources.dart | 3 --- dart/manga/multisrc/mmrcms/src/mangaid/icon.png | Bin 7655 -> 0 bytes .../multisrc/mmrcms/src/mangaid/mangaid.dart | 15 --------------- 3 files changed, 18 deletions(-) delete mode 100644 dart/manga/multisrc/mmrcms/src/mangaid/icon.png delete mode 100644 dart/manga/multisrc/mmrcms/src/mangaid/mangaid.dart diff --git a/dart/manga/multisrc/mmrcms/sources.dart b/dart/manga/multisrc/mmrcms/sources.dart index 75ba3383..de2f1357 100644 --- a/dart/manga/multisrc/mmrcms/sources.dart +++ b/dart/manga/multisrc/mmrcms/sources.dart @@ -1,6 +1,5 @@ import '../../../../model/source.dart'; import 'src/scanvf/scanvf.dart'; -import 'src/mangaid/mangaid.dart'; import 'src/onma/onma.dart'; import 'src/readcomicsonline/readcomicsonline.dart'; @@ -13,8 +12,6 @@ List _mmrcmsSourcesList = [ //Scan VF (FR) scanvfSource, - //MangaID (ID) - mangaidSource, //مانجا اون لاين (AR) onmaSource, //Read Comics Online (EN) diff --git a/dart/manga/multisrc/mmrcms/src/mangaid/icon.png b/dart/manga/multisrc/mmrcms/src/mangaid/icon.png deleted file mode 100644 index 29eb3f6aaaf63fb573ffa9cd73cd5114c19549da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7655 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 tOHUcmZc7hy$dca4 _mangaidSource; - -Source _mangaidSource = Source( - name: "MangaID", - baseUrl: "https://mangaid.click", - lang: "id", - - typeSource: "mmrcms", - iconUrl: - "https://raw.githubusercontent.com/kodjodevf/mangayomi-extensions/$branchName/dart/manga/multisrc/mmrcms/src/mangaid/icon.png", - dateFormat: "d MMM. yyyy", - dateFormatLocale: "en_us", -); From c3286ac35238b0a089ed8c6f7d4a627f84a500b5 Mon Sep 17 00:00:00 2001 From: xMohnad Date: Sun, 8 Jun 2025 08:33:53 +0300 Subject: [PATCH 06/11] remove special cases for Manga-FR --- dart/manga/multisrc/mmrcms/mmrcms.dart | 60 +++++++++----------------- 1 file changed, 20 insertions(+), 40 deletions(-) diff --git a/dart/manga/multisrc/mmrcms/mmrcms.dart b/dart/manga/multisrc/mmrcms/mmrcms.dart index aa75304a..e1e257c7 100644 --- a/dart/manga/multisrc/mmrcms/mmrcms.dart +++ b/dart/manga/multisrc/mmrcms/mmrcms.dart @@ -10,12 +10,11 @@ class MMRCMS extends MProvider { @override Future getPopular(int page) async { - final res = - (await client.get( - Uri.parse( - "${source.baseUrl}/filterList?page=$page&sortBy=views&asc=false", - ), - )).body; + final res = (await client.get( + Uri.parse( + "${source.baseUrl}/filterList?page=$page&sortBy=views&asc=false", + ), + )).body; List mangaList = []; final urls = xpath(res, '//*[ @class="chart-title"]/@href'); @@ -23,13 +22,9 @@ class MMRCMS extends MProvider { List images = []; for (var url in urls) { String slug = substringAfterLast(url, '/'); - if (source.name == "Manga-FR") { - images.add("${source.baseUrl}/uploads/manga/${slug}.jpg"); - } else { - images.add( - "${source.baseUrl}/uploads/manga/${slug}/cover/cover_250x350.jpg", - ); - } + images.add( + "${source.baseUrl}/uploads/manga/${slug}/cover/cover_250x350.jpg", + ); } for (var i = 0; i < names.length; i++) { @@ -45,10 +40,9 @@ class MMRCMS extends MProvider { @override Future getLatestUpdates(int page) async { - final res = - (await client.get( - Uri.parse("${source.baseUrl}/latest-release?page=$page"), - )).body; + final res = (await client.get( + Uri.parse("${source.baseUrl}/latest-release?page=$page"), + )).body; List mangaList = []; final urls = xpath(res, '//*[@class="manga-item"]/h3/a/@href'); @@ -56,13 +50,9 @@ class MMRCMS extends MProvider { List images = []; for (var url in urls) { String slug = substringAfterLast(url, '/'); - if (source.name == "Manga-FR") { - images.add("${source.baseUrl}/uploads/manga/${slug}.jpg"); - } else { - images.add( - "${source.baseUrl}/uploads/manga/${slug}/cover/cover_250x350.jpg", - ); - } + images.add( + "${source.baseUrl}/uploads/manga/${slug}/cover/cover_250x350.jpg", + ); } for (var i = 0; i < names.length; i++) { @@ -120,32 +110,22 @@ class MMRCMS extends MProvider { String data = da["data"]; if (source.name == 'Scan VF') { urls.add('${source.baseUrl}/$data'); - } else if (source.name == 'Manga-FR') { - urls.add('${source.baseUrl}/lecture-en-ligne/$data'); } else { urls.add('${source.baseUrl}/manga/$data'); } names.add(value); - if (source.name == "Manga-FR") { - images.add("${source.baseUrl}/uploads/manga/$data.jpg"); - } else { - images.add( - "${source.baseUrl}/uploads/manga/$data/cover/cover_250x350.jpg", - ); - } + images.add( + "${source.baseUrl}/uploads/manga/$data/cover/cover_250x350.jpg", + ); } } else { urls = xpath(res, '//div/div/div/a/@href'); names = xpath(res, '//div/div/div/a/text()'); for (var url in urls) { String slug = substringAfterLast(url, '/'); - if (source.name == "Manga-FR") { - images.add("${source.baseUrl}/uploads/manga/${slug}.jpg"); - } else { - images.add( - "${source.baseUrl}/uploads/manga/${slug}/cover/cover_250x350.jpg", - ); - } + images.add( + "${source.baseUrl}/uploads/manga/${slug}/cover/cover_250x350.jpg", + ); } } From b0d2479f2591e081b24974dfd3a8356cd59f6a8a Mon Sep 17 00:00:00 2001 From: xMohnad Date: Sun, 8 Jun 2025 08:55:45 +0300 Subject: [PATCH 07/11] refactor(mmrcms): extract cover URL logic into guessCover helper --- dart/manga/multisrc/mmrcms/mmrcms.dart | 31 +++++++++++++------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/dart/manga/multisrc/mmrcms/mmrcms.dart b/dart/manga/multisrc/mmrcms/mmrcms.dart index e1e257c7..642db1e5 100644 --- a/dart/manga/multisrc/mmrcms/mmrcms.dart +++ b/dart/manga/multisrc/mmrcms/mmrcms.dart @@ -20,11 +20,8 @@ class MMRCMS extends MProvider { final urls = xpath(res, '//*[ @class="chart-title"]/@href'); final names = xpath(res, '//*[ @class="chart-title"]/text()'); List images = []; - for (var url in urls) { - String slug = substringAfterLast(url, '/'); - images.add( - "${source.baseUrl}/uploads/manga/${slug}/cover/cover_250x350.jpg", - ); + for (var mangaUrl in urls) { + images.add(guessCover(mangaUrl)); } for (var i = 0; i < names.length; i++) { @@ -48,11 +45,8 @@ class MMRCMS extends MProvider { final urls = xpath(res, '//*[@class="manga-item"]/h3/a/@href'); final names = xpath(res, '//*[@class="manga-item"]/h3/a/text()'); List images = []; - for (var url in urls) { - String slug = substringAfterLast(url, '/'); - images.add( - "${source.baseUrl}/uploads/manga/${slug}/cover/cover_250x350.jpg", - ); + for (var mangaurl in urls) { + images.add(guessCover(mangaUrl)); } for (var i = 0; i < names.length; i++) { @@ -121,14 +115,10 @@ class MMRCMS extends MProvider { } else { urls = xpath(res, '//div/div/div/a/@href'); names = xpath(res, '//div/div/div/a/text()'); - for (var url in urls) { - String slug = substringAfterLast(url, '/'); - images.add( - "${source.baseUrl}/uploads/manga/${slug}/cover/cover_250x350.jpg", - ); + for (var mangaUrl in urls) { + images.add(guessCover(mangaUrl)); } } - for (var i = 0; i < names.length; i++) { MManga manga = MManga(); manga.name = names[i]; @@ -319,6 +309,15 @@ class MMRCMS extends MProvider { } return "?"; } + + String guessCover(String mangaUrl, {String? url}) { + if (url == null || url?.endsWith("no-image.png")) { + String slug = substringAfterLast(mangaUrl, '/'); + return "${source.baseUrl}/uploads/manga/${slug}/cover/cover_250x350.jpg"; + } else { + return url; + } + } } MMRCMS main(MSource source) { From b1f568059b6695bc15bc97c455a0cbdbffbcfe4f Mon Sep 17 00:00:00 2001 From: xMohnad Date: Sun, 8 Jun 2025 23:38:22 +0300 Subject: [PATCH 08/11] refactor(mmrcms): Rewrite getLatestUpdates to use HTML parsing. --- dart/manga/multisrc/mmrcms/mmrcms.dart | 40 ++++++++++++++++---------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/dart/manga/multisrc/mmrcms/mmrcms.dart b/dart/manga/multisrc/mmrcms/mmrcms.dart index 642db1e5..b7e013a7 100644 --- a/dart/manga/multisrc/mmrcms/mmrcms.dart +++ b/dart/manga/multisrc/mmrcms/mmrcms.dart @@ -5,9 +5,19 @@ class MMRCMS extends MProvider { MMRCMS({required this.source}); MSource source; - + static final Set latestTitles = {}; final Client client = Client(); + MManga mangaFromElement(MElement element) { + final anchor = element.selectFirst(".media-heading a, .manga-heading a"); + final link = anchor?.getHref; + + return MManga() + ..name = anchor?.text + ..imageUrl = guessCover(link, url: element.selectFirst("img")?.getSrc) + ..link = link; + } + @override Future getPopular(int page) async { final res = (await client.get( @@ -37,24 +47,22 @@ class MMRCMS extends MProvider { @override Future getLatestUpdates(int page) async { + if (page == 1) latestTitles.clear(); + final res = (await client.get( Uri.parse("${source.baseUrl}/latest-release?page=$page"), )).body; - List mangaList = []; - final urls = xpath(res, '//*[@class="manga-item"]/h3/a/@href'); - final names = xpath(res, '//*[@class="manga-item"]/h3/a/text()'); - List images = []; - for (var mangaurl in urls) { - images.add(guessCover(mangaUrl)); - } + final document = parseHtml(res); + final mangaList = []; - for (var i = 0; i < names.length; i++) { - MManga manga = MManga(); - manga.name = names[i]; - manga.imageUrl = images[i]; - manga.link = urls[i]; - mangaList.add(manga); + for (var el in document.select("div.mangalist div.manga-item")) { + final manga = mangaFromElement(el); + final link = manga.link; + + if (link != null && latestTitles.add(link)) { + mangaList.add(manga); + } } return MPages(mangaList, true); @@ -314,8 +322,10 @@ class MMRCMS extends MProvider { if (url == null || url?.endsWith("no-image.png")) { String slug = substringAfterLast(mangaUrl, '/'); return "${source.baseUrl}/uploads/manga/${slug}/cover/cover_250x350.jpg"; - } else { + } else if (url?.startsWith(source.baseUrl)) { return url; + } else { + return Uri.parse(source.baseUrl).resolve(url).toString(); } } } From a15544d89170db9b044ff7c353ebd2e9f6c4e592 Mon Sep 17 00:00:00 2001 From: xMohnad Date: Sun, 8 Jun 2025 23:50:34 +0300 Subject: [PATCH 09/11] refactor(mmrcms): unify getPopular with HTML parsing using mangaFromElement --- dart/manga/multisrc/mmrcms/mmrcms.dart | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/dart/manga/multisrc/mmrcms/mmrcms.dart b/dart/manga/multisrc/mmrcms/mmrcms.dart index b7e013a7..f600a22f 100644 --- a/dart/manga/multisrc/mmrcms/mmrcms.dart +++ b/dart/manga/multisrc/mmrcms/mmrcms.dart @@ -25,20 +25,10 @@ class MMRCMS extends MProvider { "${source.baseUrl}/filterList?page=$page&sortBy=views&asc=false", ), )).body; - - List mangaList = []; - final urls = xpath(res, '//*[ @class="chart-title"]/@href'); - final names = xpath(res, '//*[ @class="chart-title"]/text()'); - List images = []; - for (var mangaUrl in urls) { - images.add(guessCover(mangaUrl)); - } - - for (var i = 0; i < names.length; i++) { - MManga manga = MManga(); - manga.name = names[i]; - manga.imageUrl = images[i]; - manga.link = urls[i]; + final document = parseHtml(res); + final mangaList = []; + for (final el in document.select("div.chapter-container, div.media")) { + final manga = mangaFromElement(el); mangaList.add(manga); } From fc3a6e3c68f659acfcd26c76375303209ec422d3 Mon Sep 17 00:00:00 2001 From: xMohnad Date: Wed, 11 Jun 2025 12:17:48 +0300 Subject: [PATCH 10/11] Refactor manga detail extraction logic --- dart/manga/multisrc/mmrcms/mmrcms.dart | 251 +++++++++++++++++++------ 1 file changed, 191 insertions(+), 60 deletions(-) diff --git a/dart/manga/multisrc/mmrcms/mmrcms.dart b/dart/manga/multisrc/mmrcms/mmrcms.dart index f600a22f..b57ea706 100644 --- a/dart/manga/multisrc/mmrcms/mmrcms.dart +++ b/dart/manga/multisrc/mmrcms/mmrcms.dart @@ -130,79 +130,75 @@ class MMRCMS extends MProvider { @override Future getDetail(String url) async { - final statusList = [ - { - "complete": 1, - "complet": 1, - "completo": 1, - "zakończone": 1, - "concluído": 1, - "مكتملة": 1, - "ongoing": 0, - "en cours": 0, - "em lançamento": 0, - "prace w toku": 0, - "ativo": 0, - "مستمرة": 0, - "em andamento": 0, - }, - ]; - MManga manga = MManga(); final res = (await client.get(Uri.parse(url))).body; + final document = parseHtml(res); + final manga = MManga(); - final author = xpath( - res, - '//*[@class="dl-horizontal"]/dt[contains(text(), "Auteur(s)") or contains(text(), "Author(s)") or contains(text(), "Autor(es)") or contains(text(), "Yazar(lar) or contains(text(), "Mangaka(lar)")]//following-sibling::dd[1]/text()', - ); - if (author.isNotEmpty) { - manga.author = author.first; - } - final status = xpath( - res, - '//*[@class="dl-horizontal"]/dt[contains(text(), "Statut") or contains(text(), "Status") or contains(text(), "Estado") or contains(text(), "Durum")]/following-sibling::dd[1]/text()', - ); - if (status.isNotEmpty) { - manga.status = parseStatus(status.first, statusList); - } + // Title + final mangaTitle = document + .selectFirst(".panel-heading, .listmanga-header, .widget-title") + ?.text; + manga.name = mangaTitle; - final description = xpath( - res, - '//*[@class="well" or @class="manga well"]/p/text()', - ); - if (description.isNotEmpty) { - manga.description = description.first; - } - - manga.genre = xpath( - res, - '//*[@class="dl-horizontal"]/dt[contains(text(), "Categories") or contains(text(), "Categorias") or contains(text(), "Categorías") or contains(text(), "Catégories") or contains(text(), "Kategoriler" or contains(text(), "Kategorie") or contains(text(), "Kategori") or contains(text(), "Tagi"))]/following-sibling::dd[1]/text()', + // Cover + manga.imageUrl = guessCover( + url, + url: document.selectFirst(".row img.img-responsive")?.getSrc, ); - var chapUrls = xpath(res, '//*[@class="chapter-title-rtl"]/a/@href'); - var chaptersNames = xpath(res, '//*[@class="chapter-title-rtl"]/a/text()'); - var chaptersDates = xpath( - res, - '//*[@class="date-chapter-title-rtl"]/text()', - ); + // Description + manga.description = extractDescription(document); - var dateUploads = parseDates( - chaptersDates, - source.dateFormat, - source.dateFormatLocale, - ); + document.select('.panel-body h3, .row .dl-horizontal dt').forEach(( + element, + ) { + final label = _getOwnText( + element, + ).toLowerCase().replaceFirst(RegExp(r' :$'), ''); + final valueElement = element.selectFirst('div.text'); + if (valueElement.text == null) + final valueElement = element.nextElementSibling; + + _assignMangaInfo(manga, label, valueElement); + }); + + // Chapters List? chaptersList = []; - for (var i = 0; i < chaptersNames.length; i++) { - MChapter chapter = MChapter(); - chapter.name = chaptersNames[i]; - chapter.url = chapUrls[i]; - chapter.dateUpload = dateUploads[i]; - chaptersList.add(chapter); + for (var ch in document.select("ul.chapters > li:not(.btn)")) { + chaptersList.add(chapterFromElement(ch, mangaTitle)); } manga.chapters = chaptersList; + return manga; } + MChapter chapterFromElement(MElement element, String mangaTitle) { + final chapter = MChapter(); + + final titleWrapper = element.selectFirst(".chapter-title-rtl"); + final anchor = titleWrapper?.selectFirst("a"); + + if (anchor != null) { + chapter.url = anchor.getHref ?? ''; + chapter.name = cleanChapterName(titleWrapper.text, mangaTitle); + + final dateElement = element.selectFirst(".date-chapter-title-rtl"); + + if (dateElement != null && dateElement.text.isNotEmpty) { + chapter.dateUpload = parseDates( + [dateElement.text], + source.dateFormat, + source.dateFormatLocale, + )[0]; + } else { + chapter.dateUpload = DateTime.now().millisecondsSinceEpoch.toString(); + } + } + + return chapter; + } + @override Future> getPageList(String url) async { final res = (await client.get(Uri.parse(url))).body; @@ -318,6 +314,141 @@ class MMRCMS extends MProvider { return Uri.parse(source.baseUrl).resolve(url).toString(); } } + + String extractDescription(MDocument document) { + final container = document.selectFirst(".row .well"); + if (container == null) return ""; + + String text = container.text; + + container.select("h5").forEach((element) { + text = text.replaceAll(element.text, ""); + }); + + return text.replaceAll(RegExp(r'\n{3,}'), '\n\n').trim(); + } + + String _getOwnText(MElement element) { + final text = element.text; + final childrenText = element.children.map((e) => e.text).join(); + return text.replaceFirst(childrenText, '').trim(); + } + + void _assignMangaInfo(MManga manga, String label, MElement valueElement) { + if (_detailAuthor.contains(label)) { + manga.author = valueElement.text; + } else if (_detailArtist.contains(label)) { + manga.artist = valueElement.text; + } else if (_detailGenre.contains(label)) { + manga.genre = valueElement?.select("a").map((e) => e.text).toList; + } else if (_detailStatus.contains(label)) { + manga.status = parseStatus(valueElement.text, statusList); + } + } + + String cleanChapterName(String name, String mangaTitle) { + const chapterString = "Chapter"; + const chapterNamePrefix = ""; + + try { + final initialName = name.replaceFirst( + '$chapterNamePrefix$mangaTitle', + chapterString, + ); + + final parts = initialName.split(':'); + + if (parts.isEmpty) return name; + + final firstPart = parts[0].trim(); + if (parts.length == 1) return firstPart; + + final secondPart = parts.sublist(1).join(':').trim(); + + return firstPart == secondPart ? firstPart : "$firstPart: $secondPart"; + } catch (e) { + return name; + } + } + + const _detailAuthor = { + 'author(s)', + 'autor(es)', + 'auteur(s)', + '著作', + 'yazar(lar)', + 'mangaka(lar)', + 'pengarang/penulis', + 'pengarang', + 'penulis', + 'autor', + 'المؤلف', + 'перевод', + 'autor/autorzy', + }; + + const _detailArtist = { + 'artist(s)', + 'artiste(s)', + 'sanatçi(lar)', + 'artista(s)', + 'artist(s)/ilustrator', + 'الرسام', + 'seniman', + 'rysownik/rysownicy', + 'artista', + }; + + const _detailGenre = { + 'categories', + 'categorías', + 'catégories', + 'ジャンル', + 'kategoriler', + 'categorias', + 'kategorie', + 'التصنيفات', + 'жанр', + 'kategori', + 'tagi', + 'género', + }; + + const _detailStatus = { + 'status', + 'statut', + 'estado', + '状態', + 'durum', + 'الحالة', + 'статус', + }; + + const statusList = [ + { + // Ongoing Statuses (0) + 'ongoing': 0, + 'مستمرة': 0, + 'en cours': 0, + 'em lançamento': 0, + 'prace w toku': 0, + 'ativo': 0, + 'em andamento': 0, + 'activo': 0, + + // Complete Statuses (1) + 'complete': 1, + 'مكتملة': 1, + 'complet': 1, + 'completo': 1, + 'zakończone': 1, + 'concluído': 1, + 'finalizado': 1, + + // Dropped Statuses (3) + 'dropped': 3, + }, + ]; } MMRCMS main(MSource source) { From 8e4bd20e458f59af383c0da1e3e9dc010ee97907 Mon Sep 17 00:00:00 2001 From: xMohnad Date: Wed, 11 Jun 2025 18:28:56 +0000 Subject: [PATCH 11/11] refactor(mmrcms): replace XPath with CSS selectors for page list parsing --- dart/manga/multisrc/mmrcms/mmrcms.dart | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/dart/manga/multisrc/mmrcms/mmrcms.dart b/dart/manga/multisrc/mmrcms/mmrcms.dart index b57ea706..2e6c077f 100644 --- a/dart/manga/multisrc/mmrcms/mmrcms.dart +++ b/dart/manga/multisrc/mmrcms/mmrcms.dart @@ -201,18 +201,16 @@ class MMRCMS extends MProvider { @override Future> getPageList(String url) async { - final res = (await client.get(Uri.parse(url))).body; + final response = await client.get(Uri.parse(url)); + final document = parseHtml(response.body); List pagesUrl = []; - final pages = xpath( - res, - '//*[@id="all"]/img[@class="img-responsive"]/@data-src', - ); - for (var page in pages) { - if (page.startsWith('//')) { - pagesUrl.add(page.replaceAll('//', 'https://')); + for (var img in document.select('#all img.img-responsive[data-src]')) { + String? src = img.attr('data-src'); + if (src.startsWith('//')) { + pagesUrl.add('https:${src}'); } else { - pagesUrl.add(page); + pagesUrl.add(src); } }