From cef8e23f9dfb76d1d0d3593471b0273516b567bc Mon Sep 17 00:00:00 2001 From: xMohnad Date: Wed, 4 Jun 2025 20:09:15 +0000 Subject: [PATCH 1/3] feat(oduto): add Oduto - Boruto source with static entry --- javascript/manga/src/ar/oduto.js | 33 ++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 javascript/manga/src/ar/oduto.js diff --git a/javascript/manga/src/ar/oduto.js b/javascript/manga/src/ar/oduto.js new file mode 100644 index 00000000..3faea34f --- /dev/null +++ b/javascript/manga/src/ar/oduto.js @@ -0,0 +1,33 @@ +// prettier-ignore +const mangayomiSources = [{ + "name": "Oduto - Boruto", + "lang": "ar", + "baseUrl": "https://nb19u.blogspot.com", + "apiUrl": "", + "iconUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEgKFmNQCUC7ARtXurDIwfOimVn3wogUvH7VaUOfjdutG44-cT4ajgh0KYkqSbRIoQ0b8YG3H6Edx-y1O3GW5SL88jymLZsO6cmS0QRtsp1y4gc24vmF4OGqyIY3PYSjxUYR1iJ5J-sP-00A7NwhNa19SPc0R_62KcuG6dbu2Rg-2YiMV1uUgaB0DGB6IBY_=s1600", + "typeSource": "single", + "itemType": 0, + "version": "0.0.1", + "isNsfw": false, + "pkgPath": "manga/src/ar/oduto.js", + "notes": "This Source Just For Boruto" +}]; + +class DefaultExtension extends MProvider { + getPopular(_) { + return { + list: [ + { + name: "BORUTO: Two Blue Vortex", + imageUrl: + "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggWB9vWPMqjEvIoDsJSO29OmW-srULDQD3cS9HJ8cDk0vq2jLwDerUX-i61CqmZf62eBVmWZwU5CgXi0p2lxhKrh2_nZum3p-k3q9QJ2uozove0QAbOKtbd1QPjytjrJc9UsL65X4BbFdgcicLDYubD9LgY1Kco8wyhDGm4YEOim8u1TL42gOFe16NaaEP/s3464/4D55C3C5-9168-4103-B45C-99B52B58B6A5.jpeg", + link: "https://nb19u.blogspot.com/search/label/%D9%85%D8%A7%D9%86%D8%AC%D8%A7%20%D8%A8%D9%88%D8%B1%D9%88%D8%AA%D9%88?&max-results=4&m=1", + }, + ], + hasNextPage: false, + }; + } + getLatestUpdates(_) { + return this.getPopular(); + } +} From e344c75616652d7774995789bb9156d8fe4250f0 Mon Sep 17 00:00:00 2001 From: xMohnad Date: Wed, 4 Jun 2025 21:36:53 +0000 Subject: [PATCH 2/3] feat(oduto): implement chapters fetch and add static details --- javascript/manga/src/ar/oduto.js | 53 ++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/javascript/manga/src/ar/oduto.js b/javascript/manga/src/ar/oduto.js index 3faea34f..c1420cca 100644 --- a/javascript/manga/src/ar/oduto.js +++ b/javascript/manga/src/ar/oduto.js @@ -14,6 +14,12 @@ const mangayomiSources = [{ }]; class DefaultExtension extends MProvider { + async request(slug) { + this.client ??= new Client(); + const res = await this.client.get(slug); + return new Document(res.body); + } + getPopular(_) { return { list: [ @@ -30,4 +36,51 @@ class DefaultExtension extends MProvider { getLatestUpdates(_) { return this.getPopular(); } + + // Chapters + chapterFromElement(element) { + const anchor = element.selectFirst("div.iPostInfoWrap > h3 > a"); + const timeElement = element.selectFirst("div.iPostInfoWrap time"); + if (!anchor || !timeElement) return {}; + + const name = anchor.text?.trim(); + const url = anchor.getHref; + const rawDate = timeElement.attr("datetime")?.trim(); + const dateUpload = rawDate ? new Date(rawDate).getTime().toString() : null; + + return { name, dateUpload, url }; + } + + // Detail + async getDetail(url) { + let doc = await this.request(url); + const allElements = []; + + for (;;) { + const pageChapters = doc.select("#Blog1 article.blog-post.index-post"); + if (!pageChapters || pageChapters.length === 0) break; + allElements.push(...pageChapters); + + const nextUrl = doc + .selectFirst("#Blog1 > div.iPostsNavigation > button[data-load]") + .attr("data-load"); + if (!nextUrl || nextUrl.length === 0) break; + doc = await this.request(nextUrl); + } + + const chapters = allElements.map((element) => + this.chapterFromElement(element), + ); + + return { + title: "BORUTO: Two Blue Vortex", + imageUrl: + "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggWB9vWPMqjEvIoDsJSO29OmW-srULDQD3cS9HJ8cDk0vq2jLwDerUX-i61CqmZf62eBVmWZwU5CgXi0p2lxhKrh2_nZum3p-k3q9QJ2uozove0QAbOKtbd1QPjytjrJc9UsL65X4BbFdgcicLDYubD9LgY1Kco8wyhDGm4YEOim8u1TL42gOFe16NaaEP/s3464/4D55C3C5-9168-4103-B45C-99B52B58B6A5.jpeg", + author: "Masashi Kishimoto", + description: "Artist: Mikio Ikemoto", + status: 0, + genre: ["شونين", "دراما", "خيال", "أكشن", "نينجا"], + chapters, + }; + } } From 6c78018a6d4fd7634db91222d5eae837994be557 Mon Sep 17 00:00:00 2001 From: xMohnad Date: Thu, 5 Jun 2025 01:29:18 +0000 Subject: [PATCH 3/3] feat(oduto): Add chapter page extraction method --- javascript/manga/src/ar/oduto.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/javascript/manga/src/ar/oduto.js b/javascript/manga/src/ar/oduto.js index c1420cca..b80b1eeb 100644 --- a/javascript/manga/src/ar/oduto.js +++ b/javascript/manga/src/ar/oduto.js @@ -83,4 +83,12 @@ class DefaultExtension extends MProvider { chapters, }; } + + // chapter pages + async getPageList(url) { + const doc = await this.request(url); + return doc.select("div.#post-body img[src]").map((x) => ({ + url: x.attr("src"), + })); + } }