diff --git a/src/rust/ninemanga/.cargo/config b/src/rust/multi.ninemanga/.cargo/config similarity index 100% rename from src/rust/ninemanga/.cargo/config rename to src/rust/multi.ninemanga/.cargo/config diff --git a/src/rust/multi.ninemanga/Cargo.lock b/src/rust/multi.ninemanga/Cargo.lock new file mode 100644 index 0000000000..57e39e0892 --- /dev/null +++ b/src/rust/multi.ninemanga/Cargo.lock @@ -0,0 +1,91 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aidoku" +version = "0.2.0" +source = "git+https://github.com/Aidoku/aidoku-rs/#004bddabade7b24c58cf925b08f90dd093b00c9d" +dependencies = [ + "aidoku_imports", + "aidoku_macros", + "aidoku_proc_macros", + "dlmalloc", +] + +[[package]] +name = "aidoku_imports" +version = "0.2.0" +source = "git+https://github.com/Aidoku/aidoku-rs/#004bddabade7b24c58cf925b08f90dd093b00c9d" + +[[package]] +name = "aidoku_macros" +version = "0.1.0" +source = "git+https://github.com/Aidoku/aidoku-rs/#004bddabade7b24c58cf925b08f90dd093b00c9d" + +[[package]] +name = "aidoku_proc_macros" +version = "0.2.0" +source = "git+https://github.com/Aidoku/aidoku-rs/#004bddabade7b24c58cf925b08f90dd093b00c9d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dlmalloc" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "203540e710bfadb90e5e29930baf5d10270cec1f43ab34f46f78b147b2de715a" +dependencies = [ + "libc", +] + +[[package]] +name = "libc" +version = "0.2.147" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" + +[[package]] +name = "ninemanga" +version = "0.1.0" +dependencies = [ + "aidoku", +] + +[[package]] +name = "proc-macro2" +version = "1.0.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92de25114670a878b1261c79c9f8f729fb97e95bac93f6312f583c60dd6a1dfe" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5907a1b7c277254a8b15170f6e7c97cfa60ee7872a3217663bb81151e48184bb" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" diff --git a/src/rust/ninemanga/sources/ninemanga_br/Cargo.toml b/src/rust/multi.ninemanga/Cargo.toml similarity index 54% rename from src/rust/ninemanga/sources/ninemanga_br/Cargo.toml rename to src/rust/multi.ninemanga/Cargo.toml index 3866c85b08..d2cd277f30 100644 --- a/src/rust/ninemanga/sources/ninemanga_br/Cargo.toml +++ b/src/rust/multi.ninemanga/Cargo.toml @@ -1,12 +1,19 @@ [package] -name = "ninemanga_br" +name = "ninemanga" version = "0.1.0" edition = "2021" -publish = false [lib] crate-type = ["cdylib"] +[profile.dev] +panic = "abort" + +[profile.release] +panic = "abort" +opt-level = "s" +strip = true +lto = true + [dependencies] aidoku = { git = "https://github.com/Aidoku/aidoku-rs/" } -ninemanga_template = { path = "../../template" } \ No newline at end of file diff --git a/src/rust/multi.ninemanga/build.sh b/src/rust/multi.ninemanga/build.sh new file mode 100755 index 0000000000..53ff3a99d1 --- /dev/null +++ b/src/rust/multi.ninemanga/build.sh @@ -0,0 +1,6 @@ +cargo +nightly build --release +mkdir -p target/wasm32-unknown-unknown/release/Payload +cp res/* target/wasm32-unknown-unknown/release/Payload +cp target/wasm32-unknown-unknown/release/*.wasm target/wasm32-unknown-unknown/release/Payload/main.wasm +cd target/wasm32-unknown-unknown/release ; zip -r package.aix Payload +mv package.aix ../../../package.aix diff --git a/src/rust/ninemanga/sources/ninemanga_br/res/Icon.png b/src/rust/multi.ninemanga/res/Icon.png similarity index 100% rename from src/rust/ninemanga/sources/ninemanga_br/res/Icon.png rename to src/rust/multi.ninemanga/res/Icon.png diff --git a/src/rust/multi.ninemanga/res/settings.json b/src/rust/multi.ninemanga/res/settings.json new file mode 100644 index 0000000000..78b3a36bcd --- /dev/null +++ b/src/rust/multi.ninemanga/res/settings.json @@ -0,0 +1,20 @@ +[ + { + "type": "group", + "title": "Settings", + "items": [ + { + "type": "select", + "key": "sourceURL", + "title": "Source", + "values": [ + "https://ninemanga.com" + ], + "titles": [ + "Ninemanga" + ], + "default": "http://ninemanga.com" + } + ] + } +] diff --git a/src/rust/multi.ninemanga/res/source.json b/src/rust/multi.ninemanga/res/source.json new file mode 100644 index 0000000000..907c656547 --- /dev/null +++ b/src/rust/multi.ninemanga/res/source.json @@ -0,0 +1,50 @@ +{ + "info": { + "id": "multi.ninemanga", + "lang": "multi", + "name": "Ninemanga", + "version": 1, + "url": "https://ninemanga.com", + "nsfw": 1 + }, + "languages": [ + { + "code": "en", + "default": true + }, + { + "code": "es" + }, + { + "code": "fr" + }, + { + "code": "it" + }, + { + "code": "de" + }, + { + "code": "br" + }, + { + "code": "ru" + }, + { + "code": "other", + "value": "NULL" + } + ], + "languageSelectType": "single", + "listings": [ + { + "name": "Latest" + }, + { + "name": "Hot" + }, + { + "name": "New Titles" + } + ] +} diff --git a/src/rust/ninemanga/template/src/helper.rs b/src/rust/multi.ninemanga/src/helper.rs similarity index 78% rename from src/rust/ninemanga/template/src/helper.rs rename to src/rust/multi.ninemanga/src/helper.rs index 8aa272e367..6ed63f92ec 100644 --- a/src/rust/ninemanga/template/src/helper.rs +++ b/src/rust/multi.ninemanga/src/helper.rs @@ -1,25 +1,48 @@ use aidoku::{ prelude::format, - std::current_date, - std::Vec, std::{ + current_date, + defaults::defaults_get, html::Node, net::{HttpMethod, Request}, - String, + String, Vec, }, MangaStatus, }; -pub fn extract_f32_from_string(chapter_title: String, name : String) -> f32 { + +pub fn get_lang_code() -> Option { + if let Ok(languages_val) = defaults_get("languages") { + if let Ok(languages) = languages_val.as_array() { + if let Ok(language) = languages.get(0).as_string() { + return Some(language.read()); + } + } + } + None +} + +pub fn get_manga_id(url: String) -> String { + let manga_id = url.split('/').nth_back(0).unwrap_or_default(); + String::from(manga_id) +} + +pub fn extract_f32_from_string(chapter_title: String, name: String) -> f32 { if is_string_numeric(chapter_title.clone()) { chapter_title.parse::().unwrap_or(0.0) - } else if chapter_title.contains("vol") || chapter_title.contains("Том") || chapter_title.contains("Vol") { - let title = chapter_title.to_lowercase(); + } else if chapter_title.contains("vol") + || chapter_title.contains("Том") + || chapter_title.contains("Vol") + { + let title = chapter_title.to_lowercase(); let text: String = if title.contains("vol") { title .replace(&title[..title.find("vol.").unwrap() + 7], "") .replace("ch.", "") } else { - chapter_title.replace(&chapter_title[..chapter_title.find("Том").unwrap_or(0) + 8], "") + chapter_title.replace( + &chapter_title[..chapter_title.find("Том").unwrap_or(0) + 8], + "", + ) }; text.chars() .filter(|a| (*a >= '0' && *a <= '9') || *a == ' ' || *a == '.') @@ -31,10 +54,11 @@ pub fn extract_f32_from_string(chapter_title: String, name : String) -> f32 { .find(|a| *a > 0.0) .unwrap_or(0.0) } else { - chapter_title.to_ascii_lowercase() - .replace(&name.to_ascii_lowercase(),"") + chapter_title + .to_ascii_lowercase() + .replace(&name.to_ascii_lowercase(), "") .replace("ch.", "") - .replace("Ch.","") + .replace("Ch.", "") .split('-') .last() .unwrap() @@ -71,6 +95,7 @@ pub fn status_from_string(status: String) -> MangaStatus { _ => MangaStatus::Unknown, }; } + fn is_string_numeric(str: String) -> bool { for c in str.chars() { if !c.is_numeric() { @@ -80,11 +105,6 @@ fn is_string_numeric(str: String) -> bool { true } -pub fn get_chapter_number(id: String) -> f32 { - let values: Vec<&str> = id.split(' ').collect(); - values[values.len() - 1].parse::().unwrap() -} - pub fn get_date(node: Node, date_format: &str, locale: &str) -> f64 { let time_en = ["min", "minute", "minutes", "hour", "hours"]; let time_es = ["minuto", "minutos", "hora", "horas"]; @@ -114,10 +134,12 @@ pub fn get_date(node: Node, date_format: &str, locale: &str) -> f64 { pub fn get_chapter_pages(base_url: String, id: String) -> Vec { let mut pages: Vec = Vec::new(); - let html = Request::new(&id, HttpMethod::Get).html(); - for page in html.select("select#page").first().select("option").array() { - let page_node = page.as_node(); - pages.push(format!("{}{}", base_url, page_node.attr("value").read())); + if let Ok(html) = Request::new(&id, HttpMethod::Get).html() { + for page in html.select("select#page").first().select("option").array() { + if let Ok(page_node) = page.as_node() { + pages.push(format!("{}{}", base_url, page_node.attr("value").read())); + } + } } pages } @@ -172,15 +194,3 @@ pub fn get_search_url( url.push_str("&type=high"); url } - -pub fn stupidencode(string: String) -> String { - let mut result = String::new(); - for c in string.chars() { - if c.is_alphanumeric() { - result.push(c); - } else if c == ' ' { - result.push('_'); - } - } - result -} diff --git a/src/rust/ninemanga/sources/ninemanga_br/src/lib.rs b/src/rust/multi.ninemanga/src/lib.rs similarity index 51% rename from src/rust/ninemanga/sources/ninemanga_br/src/lib.rs rename to src/rust/multi.ninemanga/src/lib.rs index 182bafcfc1..17084071d6 100644 --- a/src/rust/ninemanga/sources/ninemanga_br/src/lib.rs +++ b/src/rust/multi.ninemanga/src/lib.rs @@ -1,17 +1,35 @@ - #![no_std] +#![feature(pattern)] + use aidoku::{ - prelude::*, error::Result, std::String, std::Vec, std::net::Request, - Filter, Listing, Manga, MangaPageResult, Page, Chapter, DeepLink, + error::Result, prelude::*, std::net::Request, std::String, std::Vec, Chapter, DeepLink, Filter, + Listing, Manga, MangaPageResult, Page, }; -use ninemanga_template::template::NineMangaSource; +mod helper; +mod parser; + +use parser::NineMangaSource; fn get_instance() -> NineMangaSource { - NineMangaSource{ - base_url: "https://br.ninemanga.com", - language: "pt-br", - completed_series: "Série Concluído", + let lang_code = helper::get_lang_code(); + let base_url; + let language; + match lang_code { + Some(lang) => { + base_url = format!("https://{}.ninemanga.com", lang); + language = lang; + } + + _ => { + base_url = String::from("https://www.ninemanga.com"); + language = String::from("en"); + } + } + + NineMangaSource { + base_url, + language, ..Default::default() } } @@ -22,13 +40,13 @@ fn get_manga_list(filters: Vec, page: i32) -> Result { } #[get_manga_listing] -fn get_manga_listing(listing: Listing, page: i32) -> Result{ +fn get_manga_listing(listing: Listing, page: i32) -> Result { let url = match listing.name.as_str() { - "Recientes" => format!("{}/list/New-Update/", get_instance().base_url), - "Caliente" => format!("{}/list/Hot-Book/", get_instance().base_url), + "Latest" => format!("{}/list/New-Update/", get_instance().base_url), + "Hot" => format!("{}/list/Hot-Book/", get_instance().base_url), _ => format!("{}/list/New-Book/", get_instance().base_url), }; - get_instance().parse_manga_listing(url, page) + get_instance().parse_manga_listing(url, page) } #[get_manga_details] @@ -42,8 +60,8 @@ fn get_chapter_list(id: String) -> Result> { } #[get_page_list] -fn get_page_list(id: String) -> Result> { - get_instance().parse_page_list(id) +fn get_page_list(id: String, chapter_id: String) -> Result> { + get_instance().parse_page_list(id, chapter_id) } #[modify_image_request] @@ -54,4 +72,4 @@ fn modify_image_request(request: Request) { #[handle_url] fn handle_url(url: String) -> Result { get_instance().handle_url(url) -} \ No newline at end of file +} diff --git a/src/rust/ninemanga/template/src/template.rs b/src/rust/multi.ninemanga/src/parser.rs similarity index 77% rename from src/rust/ninemanga/template/src/template.rs rename to src/rust/multi.ninemanga/src/parser.rs index 8d23124dd5..0a19f16296 100644 --- a/src/rust/ninemanga/template/src/template.rs +++ b/src/rust/multi.ninemanga/src/parser.rs @@ -1,14 +1,14 @@ use aidoku::{ error::Result, prelude::format, std::net::HttpMethod, std::net::Request, std::String, std::Vec, - Chapter, DeepLink, Filter, FilterType, Manga, MangaContentRating, MangaPageResult, MangaStatus, - MangaViewer, Page, + Chapter, DeepLink, Filter, FilterType, Manga, MangaContentRating, MangaPageResult, MangaViewer, + Page, }; use crate::helper::*; pub struct NineMangaSource { - pub base_url: &'static str, - pub language: &'static str, + pub base_url: String, + pub language: String, pub date_format: &'static str, pub completed_series: &'static str, pub date_locale: &'static str, @@ -17,8 +17,8 @@ pub struct NineMangaSource { impl Default for NineMangaSource { fn default() -> Self { NineMangaSource { - base_url: "https://www.ninemanga.com", - language: "en", + base_url: String::from("https://www.ninemanga.com"), + language: String::from("en"), date_format: "MMM d, yyyy", completed_series: "Completed Series", date_locale: "en_US", @@ -33,16 +33,19 @@ impl NineMangaSource { let mut excluded_tags: Vec = Vec::new(); let mut title: String = String::new(); let mut status: String = String::new(); + for filter in filters { match filter.kind { FilterType::Title => { title = filter.value.as_string()?.read(); } + FilterType::Genre => match filter.value.as_int().unwrap_or(-1) { 0 => excluded_tags.push(filter.object.get("id").as_string()?.read()), 1 => included_tags.push(filter.object.get("id").as_string()?.read()), _ => continue, }, + FilterType::Select => { if filter.name.as_str() == self.completed_series { match filter.value.as_int().unwrap_or(-1) { @@ -55,44 +58,45 @@ impl NineMangaSource { _ => continue, }; } + let url = get_search_url( - String::from(self.base_url), + self.base_url.clone(), title, included_tags, excluded_tags, status, page, ); + Self::parse_manga_listing(self, url, page) } // parse the listing page (popular, latest , new etc) pub fn parse_manga_listing(&self, url: String, _page: i32) -> Result { let mut mangas: Vec = Vec::new(); - let html = Request::new(url.as_str(), HttpMethod::Get).html(); + let mut has_more = false; + + let html = Request::new(url.as_str(), HttpMethod::Get) + .html() + .expect("Failed to initialize the request"); + for manga in html.select(".direlist dl").array() { - let manga_node = manga.as_node(); + let manga_node = manga.as_node().expect("Failed to get the node"); let title = manga_node.select("a.bookname").text().read(); - let id = manga_node.select("a.bookname").attr("href").read(); + let id = get_manga_id(manga_node.select("a.bookname").attr("href").read()); let cover = manga_node.select("img").attr("src").read(); mangas.push(Manga { id, cover, title, - author: String::new(), - artist: String::new(), - description: String::new(), - url: String::new(), - categories: Vec::new(), - status: MangaStatus::Unknown, - nsfw: MangaContentRating::Safe, - viewer: MangaViewer::Default, + ..Default::default() }); } - let mut has_more = false; + if url.contains("search") && html.select(".pagelist .l").text().read().contains(">>") { has_more = true } + Ok(MangaPageResult { manga: mangas, has_more, @@ -101,13 +105,16 @@ impl NineMangaSource { // parse manga details page pub fn parse_manga_details(&self, id: String) -> Result { - let html = Request::new(id.as_str(), HttpMethod::Get) + let url = format!("{}/manga/{}", self.base_url, id); + let html = Request::new(url.as_str(), HttpMethod::Get) .header("Accept-Language", "es-ES,es;q=0.9,en;q=0.8,gl;q=0.7") .header( "User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) Gecko/20100101 Firefox/75", ) - .html(); + .html() + .expect("Failed to initialize the request"); + let title = String::from( html.select(".bookintro li") .select("span") @@ -116,12 +123,15 @@ impl NineMangaSource { .replace("Manga", "") .trim(), ); + let cover = html.select(".bookface img").attr("src").read(); + let author = html .select(".bookintro li") .select("[itemprop='author']") .text() .read(); + let description = String::from( html.select(".bookintro p") .text() @@ -129,10 +139,12 @@ impl NineMangaSource { .replace("Summary:", "") .trim(), ); + let status = status_from_string(html.select(".bookintro .red").first().text().read()); let mut categories = Vec::new(); let mut nsfw = MangaContentRating::Safe; - let mut viewer = MangaViewer::Default; + let mut viewer = MangaViewer::Rtl; + let nsfw_genres = [ "Adult", "Mature", @@ -146,42 +158,51 @@ impl NineMangaSource { "Adulto (YAOI)", "Adulte", ]; + for node in html.select("[itemprop='genre'] a").array() { - let category = node.as_node().text().read(); - if nsfw_genres.contains(&category.clone().as_str()) { + let node = node.as_node().expect("Failed to get the node"); + let category = node.text().read(); + + if nsfw_genres.contains(&category.as_str()) { nsfw = MangaContentRating::Nsfw; } - if category.clone().as_str() == "Webtoon" { + + if category.as_str() == "Webtoon" { viewer = MangaViewer::Scroll; } - categories.push(category.clone()); + + categories.push(category); } + Ok(Manga { id: id.clone(), cover, title, author, - artist: String::new(), description, - url: id, + url: format!("{}/manga/{}", self.base_url, id), categories, status, nsfw, viewer, + ..Default::default() }) } // parse the chapters list present on manga details page pub fn parse_chapter_list(&self, id: String) -> Result> { let mut chapters: Vec = Vec::new(); - let url = format!("{}?waring=1", id); + + let url = format!("{}/manga/{}?waring=1", self.base_url, id); let html = Request::new(url.as_str(), HttpMethod::Get) .header("Accept-Language", "es-ES,es;q=0.9,en;q=0.8,gl;q=0.7") .header( "User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) Gecko/20100101 Firefox/75", ) - .html(); + .html() + .expect("Failed to initialize the request"); + let name = String::from( html.select(".bookface img") .attr("alt") @@ -190,8 +211,10 @@ impl NineMangaSource { .replace("Манга", "") .trim(), ); + for chapter in html.select("ul.sub_vol_ul > li").array() { - let chapter_node = chapter.as_node(); + let chapter_node = chapter.as_node().expect("Failed to get the node"); + let raw_title = String::from( chapter_node .select("a") @@ -200,33 +223,36 @@ impl NineMangaSource { .replace("13610", "") .trim(), ); + let chapter_id = chapter_node .select("a.chapter_list_a") .attr("href") .read() .replace(".html", "-10-1.html"); + let url = chapter_id.clone(); let chapter_number = extract_f32_from_string(raw_title.clone(), name.clone()); let date_updated = get_date(chapter_node, self.date_format, self.date_locale); + chapters.push(Chapter { id: chapter_id, - title: String::new(), - volume: -1.0, chapter: chapter_number, date_updated, - scanlator: String::new(), url, - lang: String::from(self.language), + lang: self.language.clone(), + ..Default::default() }); } + Ok(chapters) } //parse the maga chapter images list - pub fn parse_page_list(&self, id: String) -> Result> { + pub fn parse_page_list(&self, _id: String, chapter_id: String) -> Result> { let mut pages: Vec = Vec::new(); let mut at = 0; - let pages_arr = get_chapter_pages(String::from(self.base_url), id); + + let pages_arr = get_chapter_pages(self.base_url.clone(), chapter_id); for url in pages_arr { let html = Request::new(&url, HttpMethod::Get) .header("Accept-Language", "es-ES,es;q=0.9,en;q=0.8,gl;q=0.7") @@ -235,25 +261,27 @@ impl NineMangaSource { "Mozilla/5.0 (Windows NT 10.0; WOW64) Gecko/20100101 Firefox/75", ) .header("Cookie", "ninemanga_webp_valid=true") - .html(); + .html() + .expect("Failed to initialize the request"); + for page in html.select(".pic_box img.manga_pic").array() { - let page_node = page.as_node(); + let page_node = page.as_node().expect("Failed to get the node"); let page_url = page_node.attr("src").read(); pages.push(Page { index: at, url: page_url, - base64: String::new(), - text: String::new(), + ..Default::default() }); at += 1; } } + Ok(pages) } pub fn modify_image_request(&self, request: Request) { request - .header("Referer", self.base_url) + .header("Referer", self.base_url.as_str()) .header("Accept-Language", "es-ES,es;q=0.9,en;q=0.8,gl;q=0.7") .header( "User-Agent", @@ -262,8 +290,9 @@ impl NineMangaSource { } pub fn handle_url(&self, url: String) -> Result { + let id = get_manga_id(url); Ok(DeepLink { - manga: Some(Self::parse_manga_details(self, url)?), + manga: Some(Self::parse_manga_details(self, id)?), chapter: None, }) } diff --git a/src/rust/ninemanga/Cargo.lock b/src/rust/ninemanga/Cargo.lock deleted file mode 100644 index 92826596f8..0000000000 --- a/src/rust/ninemanga/Cargo.lock +++ /dev/null @@ -1,184 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "aidoku" -version = "0.1.2" -source = "git+https://github.com/Aidoku/aidoku-rs/#55765f385b064521d5c2b3d79af1d0ac2bbdd3fb" -dependencies = [ - "aidoku_imports", - "aidoku_macros", - "aidoku_proc_macros", - "wee_alloc", -] - -[[package]] -name = "aidoku_imports" -version = "0.1.2" -source = "git+https://github.com/Aidoku/aidoku-rs/#55765f385b064521d5c2b3d79af1d0ac2bbdd3fb" - -[[package]] -name = "aidoku_macros" -version = "0.1.0" -source = "git+https://github.com/Aidoku/aidoku-rs/#55765f385b064521d5c2b3d79af1d0ac2bbdd3fb" - -[[package]] -name = "aidoku_proc_macros" -version = "0.1.0" -source = "git+https://github.com/Aidoku/aidoku-rs/#55765f385b064521d5c2b3d79af1d0ac2bbdd3fb" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - -[[package]] -name = "libc" -version = "0.2.126" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" - -[[package]] -name = "memory_units" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" - -[[package]] -name = "ninemanga_br" -version = "0.1.0" -dependencies = [ - "aidoku", - "ninemanga_template", -] - -[[package]] -name = "ninemanga_de" -version = "0.1.0" -dependencies = [ - "aidoku", - "ninemanga_template", -] - -[[package]] -name = "ninemanga_en" -version = "0.1.0" -dependencies = [ - "aidoku", - "ninemanga_template", -] - -[[package]] -name = "ninemanga_es" -version = "0.1.0" -dependencies = [ - "aidoku", - "ninemanga_template", -] - -[[package]] -name = "ninemanga_fr" -version = "0.1.0" -dependencies = [ - "aidoku", - "ninemanga_template", -] - -[[package]] -name = "ninemanga_it" -version = "0.1.0" -dependencies = [ - "aidoku", - "ninemanga_template", -] - -[[package]] -name = "ninemanga_ru" -version = "0.1.0" -dependencies = [ - "aidoku", - "ninemanga_template", -] - -[[package]] -name = "ninemanga_template" -version = "0.1.0" -dependencies = [ - "aidoku", -] - -[[package]] -name = "proc-macro2" -version = "1.0.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "syn" -version = "1.0.96" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "unicode-ident" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee" - -[[package]] -name = "wee_alloc" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e" -dependencies = [ - "cfg-if", - "libc", - "memory_units", - "winapi", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/src/rust/ninemanga/Cargo.toml b/src/rust/ninemanga/Cargo.toml deleted file mode 100644 index f9f3dc4b84..0000000000 --- a/src/rust/ninemanga/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[workspace] -members = ["template", "sources/*"] - -[profile.dev] -panic = "abort" - -[profile.release] -panic = "abort" -opt-level = "s" -strip = true -lto = true diff --git a/src/rust/ninemanga/build.ps1 b/src/rust/ninemanga/build.ps1 deleted file mode 100644 index 0e3aeefe00..0000000000 --- a/src/rust/ninemanga/build.ps1 +++ /dev/null @@ -1,64 +0,0 @@ -<# -.SYNOPSIS - Template source build script for Windows -#> -#requires -version 5 -[cmdletbinding()] -param ( - [Parameter(ParameterSetName="help", Mandatory)] - [alias('h')] - [switch]$help, - - [Parameter(ParameterSetName="all", Mandatory)] - [alias('a')] - [switch]$all, - - [Parameter(Position=0, ParameterSetName="some", Mandatory)] - [alias('s')] - [string[]]$sources -) - -function Package-Source { - param ( - [Parameter(Mandatory = $true, Position = 0)] - [String[]]$Name, - - [switch]$Build - ) - $Name | ForEach-Object { - $source = $_ - if ($Build) { - Write-Output "building $source" - Set-Location ./sources/$source - cargo +nightly build --release - Set-Location ../.. - } - - Write-Output "packaging $source" - New-Item -ItemType Directory -Path target/wasm32-unknown-unknown/release/Payload -Force | Out-Null - Copy-Item res/* target/wasm32-unknown-unknown/release/Payload -ErrorAction SilentlyContinue - Copy-Item sources/$source/res/* target/wasm32-unknown-unknown/release/Payload -ErrorAction SilentlyContinue - Set-Location target/wasm32-unknown-unknown/release - Copy-Item "$source.wasm" Payload/main.wasm - Compress-Archive -Force -Path Payload -DestinationPath "../../../$source.aix" - Remove-Item -Recurse -Force Payload/ - Set-Location ../../.. - } -} - -if ($help -or ($null -eq $PSBoundParameters.Keys)) { - Get-Help $MyInvocation.MyCommand.Path -Detailed - break -} - -if ($all) { - cargo +nightly build --release - Get-ChildItem ./sources | ForEach-Object { - $source = (Split-Path -Leaf $_) - Package-Source $source - } -} else { - $sources | ForEach-Object { - Package-Source $_ -Build - } -} diff --git a/src/rust/ninemanga/build.sh b/src/rust/ninemanga/build.sh deleted file mode 100755 index 23f2f2abcd..0000000000 --- a/src/rust/ninemanga/build.sh +++ /dev/null @@ -1,37 +0,0 @@ -# template source build script -# usage: ./build.sh [source_name/-a] - -if [ "$1" != "-a" ] && [ "$1" != "" ]; then - # compile specified source - cargo +nightly build --release - - echo "packaging $1"; - mkdir -p target/wasm32-unknown-unknown/release/Payload - cp res/* target/wasm32-unknown-unknown/release/Payload - cp sources/$1/res/* target/wasm32-unknown-unknown/release/Payload - cd target/wasm32-unknown-unknown/release - cp $1.wasm Payload/main.wasm - zip -r $1.aix Payload - mv $1.aix ../../../$1.aix - rm -rf Payload -else - # compile all sources - cargo +nightly build --release - - for dir in sources/*/ - do - dir=${dir%*/} - dir=${dir##*/} - echo "packaging $dir"; - - mkdir -p target/wasm32-unknown-unknown/release/Payload - cp res/* target/wasm32-unknown-unknown/release/Payload - cp sources/$dir/res/* target/wasm32-unknown-unknown/release/Payload - cd target/wasm32-unknown-unknown/release - cp $dir.wasm Payload/main.wasm - zip -r $dir.aix Payload >> /dev/null - mv $dir.aix ../../../$dir.aix - rm -rf Payload - cd ../../../ - done -fi \ No newline at end of file diff --git a/src/rust/ninemanga/res/filters.json b/src/rust/ninemanga/res/filters.json deleted file mode 100644 index 321b15fb3e..0000000000 --- a/src/rust/ninemanga/res/filters.json +++ /dev/null @@ -1,5 +0,0 @@ -[ - { - "type": "title" - } -] \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_br/res/filters.json b/src/rust/ninemanga/sources/ninemanga_br/res/filters.json deleted file mode 100644 index a1e7c96aa7..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_br/res/filters.json +++ /dev/null @@ -1,578 +0,0 @@ -[ - { - "type": "title" - }, - { - "type": "group", - "name": "Géneros", - "filters": [ - { - "type": "genre", - "name": "4-Koma", - "id": "135", - "canExclude": true - }, - { - "type": "genre", - "name": "4koma", - "id": "107", - "canExclude": true - }, - { - "type": "genre", - "name": "AçãO", - "id": "71", - "canExclude": true - }, - { - "type": "genre", - "name": "Action", - "id": "145", - "canExclude": true - }, - { - "type": "genre", - "name": "Adaptation", - "id": "163", - "canExclude": true - }, - { - "type": "genre", - "name": "Adulto", - "id": "93", - "canExclude": true - }, - { - "type": "genre", - "name": "Adulto (18+)", - "id": "123", - "canExclude": true - }, - { - "type": "genre", - "name": "Adulto (YAOI)", - "id": "122", - "canExclude": true - }, - { - "type": "genre", - "name": "Adventure", - "id": "143", - "canExclude": true - }, - { - "type": "genre", - "name": "Anthology", - "id": "187", - "canExclude": true - }, - { - "type": "genre", - "name": "Artes Marciais", - "id": "83", - "canExclude": true - }, - { - "type": "genre", - "name": "Aventura", - "id": "72", - "canExclude": true - }, - { - "type": "genre", - "name": "Bara", - "id": "126", - "canExclude": true - }, - { - "type": "genre", - "name": "Carros", - "id": "118", - "canExclude": true - }, - { - "type": "genre", - "name": "Colegial", - "id": "63", - "canExclude": true - }, - { - "type": "genre", - "name": "ComéDia", - "id": "64", - "canExclude": true - }, - { - "type": "genre", - "name": "Comedy", - "id": "142", - "canExclude": true - }, - { - "type": "genre", - "name": "Criancas", - "id": "114", - "canExclude": true - }, - { - "type": "genre", - "name": "Crossdressing", - "id": "165", - "canExclude": true - }, - { - "type": "genre", - "name": "Culinaria", - "id": "116", - "canExclude": true - }, - { - "type": "genre", - "name": "Dementia", - "id": "119", - "canExclude": true - }, - { - "type": "genre", - "name": "Demonios", - "id": "109", - "canExclude": true - }, - { - "type": "genre", - "name": "Doujinshi", - "id": "124", - "canExclude": true - }, - { - "type": "genre", - "name": "Drama", - "id": "74", - "canExclude": true - }, - { - "type": "genre", - "name": "Ecchi", - "id": "84", - "canExclude": true - }, - { - "type": "genre", - "name": "Escolar", - "id": "103", - "canExclude": true - }, - { - "type": "genre", - "name": "Espaco", - "id": "117", - "canExclude": true - }, - { - "type": "genre", - "name": "Esporte", - "id": "87", - "canExclude": true - }, - { - "type": "genre", - "name": "Esportes", - "id": "106", - "canExclude": true - }, - { - "type": "genre", - "name": "Fantasia", - "id": "65", - "canExclude": true - }, - { - "type": "genre", - "name": "Fantasy", - "id": "144", - "canExclude": true - }, - { - "type": "genre", - "name": "FicçãO", - "id": "99", - "canExclude": true - }, - { - "type": "genre", - "name": "Gender Bender", - "id": "73", - "canExclude": true - }, - { - "type": "genre", - "name": "Ghosts", - "id": "195", - "canExclude": true - }, - { - "type": "genre", - "name": "HaréM", - "id": "85", - "canExclude": true - }, - { - "type": "genre", - "name": "Hentai", - "id": "137", - "canExclude": true - }, - { - "type": "genre", - "name": "HistóRico", - "id": "77", - "canExclude": true - }, - { - "type": "genre", - "name": "Horror", - "id": "80", - "canExclude": true - }, - { - "type": "genre", - "name": "Isekai", - "id": "121", - "canExclude": true - }, - { - "type": "genre", - "name": "Jogo", - "id": "102", - "canExclude": true - }, - { - "type": "genre", - "name": "Josei", - "id": "89", - "canExclude": true - }, - { - "type": "genre", - "name": "Loli", - "id": "192", - "canExclude": true - }, - { - "type": "genre", - "name": "Maduro", - "id": "105", - "canExclude": true - }, - { - "type": "genre", - "name": "Magia", - "id": "96", - "canExclude": true - }, - { - "type": "genre", - "name": "Manhua", - "id": "125", - "canExclude": true - }, - { - "type": "genre", - "name": "Manhwa", - "id": "129", - "canExclude": true - }, - { - "type": "genre", - "name": "Mecha", - "id": "94", - "canExclude": true - }, - { - "type": "genre", - "name": "Medicina", - "id": "131", - "canExclude": true - }, - { - "type": "genre", - "name": "Militar", - "id": "110", - "canExclude": true - }, - { - "type": "genre", - "name": "MistéRio", - "id": "78", - "canExclude": true - }, - { - "type": "genre", - "name": "Monster Girls", - "id": "173", - "canExclude": true - }, - { - "type": "genre", - "name": "Musical", - "id": "92", - "canExclude": true - }, - { - "type": "genre", - "name": "Mystery", - "id": "148", - "canExclude": true - }, - { - "type": "genre", - "name": "Nonsense", - "id": "120", - "canExclude": true - }, - { - "type": "genre", - "name": "Novel", - "id": "130", - "canExclude": true - }, - { - "type": "genre", - "name": "Office Workers", - "id": "181", - "canExclude": true - }, - { - "type": "genre", - "name": "OneShot", - "id": "69", - "canExclude": true - }, - { - "type": "genre", - "name": "Parodia", - "id": "108", - "canExclude": true - }, - { - "type": "genre", - "name": "Policial", - "id": "101", - "canExclude": true - }, - { - "type": "genre", - "name": "PsicolóGico", - "id": "79", - "canExclude": true - }, - { - "type": "genre", - "name": "Psychological", - "id": "149", - "canExclude": true - }, - { - "type": "genre", - "name": "ReencarnaçãO", - "id": "134", - "canExclude": true - }, - { - "type": "genre", - "name": "Romance", - "id": "66", - "canExclude": true - }, - { - "type": "genre", - "name": "Samurai", - "id": "111", - "canExclude": true - }, - { - "type": "genre", - "name": "Scan", - "id": "133", - "canExclude": true - }, - { - "type": "genre", - "name": "School Life", - "id": "158", - "canExclude": true - }, - { - "type": "genre", - "name": "Sci-Fi", - "id": "67", - "canExclude": true - }, - { - "type": "genre", - "name": "Seinen", - "id": "82", - "canExclude": true - }, - { - "type": "genre", - "name": "Shoujo", - "id": "70", - "canExclude": true - }, - { - "type": "genre", - "name": "Shoujo Ai", - "id": "100", - "canExclude": true - }, - { - "type": "genre", - "name": "Shoujo-Ai", - "id": "86", - "canExclude": true - }, - { - "type": "genre", - "name": "Shounen", - "id": "68", - "canExclude": true - }, - { - "type": "genre", - "name": "Shounen Ai", - "id": "95", - "canExclude": true - }, - { - "type": "genre", - "name": "Slice Of Life", - "id": "75", - "canExclude": true - }, - { - "type": "genre", - "name": "Smut", - "id": "98", - "canExclude": true - }, - { - "type": "genre", - "name": "Sobrenatural", - "id": "76", - "canExclude": true - }, - { - "type": "genre", - "name": "Sports", - "id": "147", - "canExclude": true - }, - { - "type": "genre", - "name": "Super Poderes", - "id": "113", - "canExclude": true - }, - { - "type": "genre", - "name": "Supernatural", - "id": "161", - "canExclude": true - }, - { - "type": "genre", - "name": "Suspense", - "id": "127", - "canExclude": true - }, - { - "type": "genre", - "name": "Terror", - "id": "91", - "canExclude": true - }, - { - "type": "genre", - "name": "Teste 1", - "id": "97", - "canExclude": true - }, - { - "type": "genre", - "name": "Thriller", - "id": "115", - "canExclude": true - }, - { - "type": "genre", - "name": "TragéDia", - "id": "81", - "canExclude": true - }, - { - "type": "genre", - "name": "Vampiros", - "id": "112", - "canExclude": true - }, - { - "type": "genre", - "name": "Web Comic", - "id": "160", - "canExclude": true - }, - { - "type": "genre", - "name": "Webtoon", - "id": "128", - "canExclude": true - }, - { - "type": "genre", - "name": "Wuxia", - "id": "146", - "canExclude": true - }, - { - "type": "genre", - "name": "Xuanhuan", - "id": "104", - "canExclude": true - }, - { - "type": "genre", - "name": "Yaoi", - "id": "90", - "canExclude": true - }, - { - "type": "genre", - "name": "Yaoi (Omegaverse)", - "id": "132", - "canExclude": true - }, - { - "type": "genre", - "name": "Yuri", - "id": "88", - "canExclude": true - }, - { - "type": "genre", - "name": "Zumbi", - "id": "136", - "canExclude": true - } - ] - }, - { - "type": "select", - "name": "Série Concluído", - "options": [ - "Ou", - "Sim", - "Não" - ] - } -] \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_br/res/source.json b/src/rust/ninemanga/sources/ninemanga_br/res/source.json deleted file mode 100644 index aa7586c98b..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_br/res/source.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "info": { - "id": "pt-br.ninemanga", - "lang": "pt-br", - "name": "NinemangaBR", - "version": 1, - "url": "https://br.ninemanga.com", - "nsfw": 1 - }, - "listings": [ - { "name": "recente" }, - { "name": "TOP"}, - { "name": "Nova" } - ] -} \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_de/Cargo.toml b/src/rust/ninemanga/sources/ninemanga_de/Cargo.toml deleted file mode 100644 index 668ec2a4a9..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_de/Cargo.toml +++ /dev/null @@ -1,12 +0,0 @@ -[package] -name = "ninemanga_de" -version = "0.1.0" -edition = "2021" -publish = false - -[lib] -crate-type = ["cdylib"] - -[dependencies] -aidoku = { git = "https://github.com/Aidoku/aidoku-rs/" } -ninemanga_template = { path = "../../template" } \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_de/res/Icon.png b/src/rust/ninemanga/sources/ninemanga_de/res/Icon.png deleted file mode 100644 index 283f60b9fd..0000000000 Binary files a/src/rust/ninemanga/sources/ninemanga_de/res/Icon.png and /dev/null differ diff --git a/src/rust/ninemanga/sources/ninemanga_de/res/filters.json b/src/rust/ninemanga/sources/ninemanga_de/res/filters.json deleted file mode 100644 index a72b7662e3..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_de/res/filters.json +++ /dev/null @@ -1,272 +0,0 @@ -[ - { - "type": "title" - }, - { - "type": "group", - "name": "Genres", - "filters": [ - { - "type": "genre", - "name": "Abenteuer", - "id": "63", - "canExclude": true - }, - { - "type": "genre", - "name": "Action", - "id": "64", - "canExclude": true - }, - { - "type": "genre", - "name": "Alltagsdrama", - "id": "82", - "canExclude": true - }, - { - "type": "genre", - "name": "Comedy", - "id": "110", - "canExclude": true - }, - { - "type": "genre", - "name": "DäMonen", - "id": "76", - "canExclude": true - }, - { - "type": "genre", - "name": "Doujinshi", - "id": "97", - "canExclude": true - }, - { - "type": "genre", - "name": "Drama", - "id": "65", - "canExclude": true - }, - { - "type": "genre", - "name": "Ecchi", - "id": "79", - "canExclude": true - }, - { - "type": "genre", - "name": "Erotik", - "id": "88", - "canExclude": true - }, - { - "type": "genre", - "name": "Fantasy", - "id": "66", - "canExclude": true - }, - { - "type": "genre", - "name": "Gender Bender", - "id": "91", - "canExclude": true - }, - { - "type": "genre", - "name": "Harem", - "id": "73", - "canExclude": true - }, - { - "type": "genre", - "name": "Historisch", - "id": "84", - "canExclude": true - }, - { - "type": "genre", - "name": "Horror", - "id": "72", - "canExclude": true - }, - { - "type": "genre", - "name": "Isekai", - "id": "109", - "canExclude": true - }, - { - "type": "genre", - "name": "Josei", - "id": "95", - "canExclude": true - }, - { - "type": "genre", - "name": "Kampfsport", - "id": "81", - "canExclude": true - }, - { - "type": "genre", - "name": "Kartenspiel", - "id": "78", - "canExclude": true - }, - { - "type": "genre", - "name": "KomöDie", - "id": "67", - "canExclude": true - }, - { - "type": "genre", - "name": "Magie", - "id": "68", - "canExclude": true - }, - { - "type": "genre", - "name": "Mecha", - "id": "89", - "canExclude": true - }, - { - "type": "genre", - "name": "MilitäR", - "id": "90", - "canExclude": true - }, - { - "type": "genre", - "name": "Musik", - "id": "83", - "canExclude": true - }, - { - "type": "genre", - "name": "Mystery", - "id": "69", - "canExclude": true - }, - { - "type": "genre", - "name": "Romance", - "id": "111", - "canExclude": true - }, - { - "type": "genre", - "name": "Romanze", - "id": "74", - "canExclude": true - }, - { - "type": "genre", - "name": "Schule", - "id": "70", - "canExclude": true - }, - { - "type": "genre", - "name": "Sci-Fi", - "id": "86", - "canExclude": true - }, - { - "type": "genre", - "name": "Seinen", - "id": "96", - "canExclude": true - }, - { - "type": "genre", - "name": "Shoujo", - "id": "85", - "canExclude": true - }, - { - "type": "genre", - "name": "Shounen", - "id": "75", - "canExclude": true - }, - { - "type": "genre", - "name": "Slice Of Life", - "id": "112", - "canExclude": true - }, - { - "type": "genre", - "name": "Spiel", - "id": "92", - "canExclude": true - }, - { - "type": "genre", - "name": "Sport", - "id": "87", - "canExclude": true - }, - { - "type": "genre", - "name": "Sports", - "id": "117", - "canExclude": true - }, - { - "type": "genre", - "name": "Super KräFte", - "id": "80", - "canExclude": true - }, - { - "type": "genre", - "name": "Thriller", - "id": "94", - "canExclude": true - }, - { - "type": "genre", - "name": "Tragedy", - "id": "115", - "canExclude": true - }, - { - "type": "genre", - "name": "Vampire", - "id": "71", - "canExclude": true - }, - { - "type": "genre", - "name": "Videospiel", - "id": "77", - "canExclude": true - }, - { - "type": "genre", - "name": "Yaoi", - "id": "93", - "canExclude": true - }, - { - "type": "genre", - "name": "Yuri", - "id": "98", - "canExclude": true - } - ] - }, - { - "type": "select", - "name": "Abgeschlossene Serie", - "options": [ - "Entweder", - "Ja", - "Nein" - ] - } -] \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_de/res/source.json b/src/rust/ninemanga/sources/ninemanga_de/res/source.json deleted file mode 100644 index a24d55a91a..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_de/res/source.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "info": { - "id": "de.ninemanga", - "lang": "de", - "name": "NinemangaDE", - "version": 1, - "url": "https://de.ninemanga.com", - "nsfw": 1 - }, - "listings": [ - { "name": "Neueste" }, - { "name": "Beliebte"}, - { "name": "Neues" } - ] -} \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_de/src/lib.rs b/src/rust/ninemanga/sources/ninemanga_de/src/lib.rs deleted file mode 100644 index a4d860fb70..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_de/src/lib.rs +++ /dev/null @@ -1,57 +0,0 @@ - -#![no_std] -use aidoku::{ - prelude::*, error::Result, std::String, std::Vec, std::net::Request, - Filter, Listing, Manga, MangaPageResult, Page, Chapter, DeepLink, -}; - -use ninemanga_template::template::NineMangaSource; - -fn get_instance() -> NineMangaSource { - NineMangaSource{ - base_url: "https://de.ninemanga.com", - language: "de", - completed_series: "Abgeschlossene Serie", - ..Default::default() - } -} - -#[get_manga_list] -fn get_manga_list(filters: Vec, page: i32) -> Result { - get_instance().parse_manga_list(filters, page) -} - -#[get_manga_listing] -fn get_manga_listing(listing: Listing, page: i32) -> Result{ - let url = match listing.name.as_str() { - "Neueste" => format!("{}/list/New-Update/", get_instance().base_url), - "Beliebte" => format!("{}/list/Hot-Book/", get_instance().base_url), - _ => format!("{}/list/New-Book/", get_instance().base_url), - }; - get_instance().parse_manga_listing(url, page) -} - -#[get_manga_details] -fn get_manga_details(id: String) -> Result { - get_instance().parse_manga_details(id) -} - -#[get_chapter_list] -fn get_chapter_list(id: String) -> Result> { - get_instance().parse_chapter_list(id) -} - -#[get_page_list] -fn get_page_list(id: String) -> Result> { - get_instance().parse_page_list(id) -} - -#[modify_image_request] -fn modify_image_request(request: Request) { - get_instance().modify_image_request(request) -} - -#[handle_url] -fn handle_url(url: String) -> Result { - get_instance().handle_url(url) -} \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_en/Cargo.toml b/src/rust/ninemanga/sources/ninemanga_en/Cargo.toml deleted file mode 100644 index 430edde328..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_en/Cargo.toml +++ /dev/null @@ -1,12 +0,0 @@ -[package] -name = "ninemanga_en" -version = "0.1.0" -edition = "2021" -publish = false - -[lib] -crate-type = ["cdylib"] - -[dependencies] -aidoku = { git = "https://github.com/Aidoku/aidoku-rs/" } -ninemanga_template = { path = "../../template" } \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_en/res/Icon.png b/src/rust/ninemanga/sources/ninemanga_en/res/Icon.png deleted file mode 100644 index 283f60b9fd..0000000000 Binary files a/src/rust/ninemanga/sources/ninemanga_en/res/Icon.png and /dev/null differ diff --git a/src/rust/ninemanga/sources/ninemanga_en/res/filters.json b/src/rust/ninemanga/sources/ninemanga_en/res/filters.json deleted file mode 100644 index fdf91ee890..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_en/res/filters.json +++ /dev/null @@ -1,374 +0,0 @@ -[ - { - "type": "title" - }, - { - "type": "group", - "name": "Genres", - "filters": [ - { - "type": "genre", - "name": "4-Koma", - "id": "56", - "canExclude": true - }, - { - "type": "genre", - "name": "Action", - "id": "1", - "canExclude": true - }, - { - "type": "genre", - "name": "Adult", - "id": "39", - "canExclude": true - }, - { - "type": "genre", - "name": "Adventure", - "id": "2", - "canExclude": true - }, - { - "type": "genre", - "name": "Anime", - "id": "3", - "canExclude": true - }, - { - "type": "genre", - "name": "Award Winning", - "id": "59", - "canExclude": true - }, - { - "type": "genre", - "name": "Comedy", - "id": "4", - "canExclude": true - }, - { - "type": "genre", - "name": "Cooking", - "id": "5", - "canExclude": true - }, - { - "type": "genre", - "name": "Demons", - "id": "49", - "canExclude": true - }, - { - "type": "genre", - "name": "Doujinshi", - "id": "45", - "canExclude": true - }, - { - "type": "genre", - "name": "Drama", - "id": "6", - "canExclude": true - }, - { - "type": "genre", - "name": "Ecchi", - "id": "7", - "canExclude": true - }, - { - "type": "genre", - "name": "Fantasy", - "id": "8", - "canExclude": true - }, - { - "type": "genre", - "name": "Gender Bender", - "id": "9", - "canExclude": true - }, - { - "type": "genre", - "name": "Harem", - "id": "10", - "canExclude": true - }, - { - "type": "genre", - "name": "Historical", - "id": "11", - "canExclude": true - }, - { - "type": "genre", - "name": "Horror", - "id": "12", - "canExclude": true - }, - { - "type": "genre", - "name": "Josei", - "id": "13", - "canExclude": true - }, - { - "type": "genre", - "name": "Live Action", - "id": "14", - "canExclude": true - }, - { - "type": "genre", - "name": "Magic", - "id": "47", - "canExclude": true - }, - { - "type": "genre", - "name": "Manhua", - "id": "15", - "canExclude": true - }, - { - "type": "genre", - "name": "Manhwa", - "id": "16", - "canExclude": true - }, - { - "type": "genre", - "name": "Martial Arts", - "id": "17", - "canExclude": true - }, - { - "type": "genre", - "name": "Matsumoto Tomokicomedy", - "id": "37", - "canExclude": true - }, - { - "type": "genre", - "name": "Mature", - "id": "36", - "canExclude": true - }, - { - "type": "genre", - "name": "Mecha", - "id": "18", - "canExclude": true - }, - { - "type": "genre", - "name": "Medical", - "id": "19", - "canExclude": true - }, - { - "type": "genre", - "name": "Military", - "id": "51", - "canExclude": true - }, - { - "type": "genre", - "name": "Music", - "id": "20", - "canExclude": true - }, - { - "type": "genre", - "name": "Mystery", - "id": "21", - "canExclude": true - }, - { - "type": "genre", - "name": "N/A", - "id": "54", - "canExclude": true - }, - { - "type": "genre", - "name": "One Shot", - "id": "22", - "canExclude": true - }, - { - "type": "genre", - "name": "Oneshot", - "id": "57", - "canExclude": true - }, - { - "type": "genre", - "name": "Psychological", - "id": "23", - "canExclude": true - }, - { - "type": "genre", - "name": "Reverse Harem", - "id": "55", - "canExclude": true - }, - { - "type": "genre", - "name": "Romance", - "id": "24", - "canExclude": true - }, - { - "type": "genre", - "name": "Romance Shoujo", - "id": "38", - "canExclude": true - }, - { - "type": "genre", - "name": "School Life", - "id": "25", - "canExclude": true - }, - { - "type": "genre", - "name": "Sci-Fi", - "id": "26", - "canExclude": true - }, - { - "type": "genre", - "name": "Seinen", - "id": "27", - "canExclude": true - }, - { - "type": "genre", - "name": "Shoujo", - "id": "28", - "canExclude": true - }, - { - "type": "genre", - "name": "Shoujo Ai", - "id": "44", - "canExclude": true - }, - { - "type": "genre", - "name": "Shoujo-Ai", - "id": "29", - "canExclude": true - }, - { - "type": "genre", - "name": "Shoujoai", - "id": "48", - "canExclude": true - }, - { - "type": "genre", - "name": "Shounen", - "id": "30", - "canExclude": true - }, - { - "type": "genre", - "name": "Shounen Ai", - "id": "42", - "canExclude": true - }, - { - "type": "genre", - "name": "Shounen-Ai", - "id": "31", - "canExclude": true - }, - { - "type": "genre", - "name": "Shounenai", - "id": "46", - "canExclude": true - }, - { - "type": "genre", - "name": "Slice Of Life", - "id": "32", - "canExclude": true - }, - { - "type": "genre", - "name": "Smut", - "id": "41", - "canExclude": true - }, - { - "type": "genre", - "name": "Sports", - "id": "33", - "canExclude": true - }, - { - "type": "genre", - "name": "Supernatural", - "id": "34", - "canExclude": true - }, - { - "type": "genre", - "name": "Suspense", - "id": "53", - "canExclude": true - }, - { - "type": "genre", - "name": "Tragedy", - "id": "35", - "canExclude": true - }, - { - "type": "genre", - "name": "Vampire", - "id": "52", - "canExclude": true - }, - { - "type": "genre", - "name": "Webtoon", - "id": "58", - "canExclude": true - }, - { - "type": "genre", - "name": "Webtoons", - "id": "50", - "canExclude": true - }, - { - "type": "genre", - "name": "Yaoi", - "id": "40", - "canExclude": true - }, - { - "type": "genre", - "name": "Yuri", - "id": "43", - "canExclude": true - } - ] - }, - { - "type": "select", - "name": "Completed Series", - "options": [ - "Either", - "Yes", - "No" - ] - } -] \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_en/res/source.json b/src/rust/ninemanga/sources/ninemanga_en/res/source.json deleted file mode 100644 index 5dd65647f9..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_en/res/source.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "info": { - "id": "en.ninemanga", - "lang": "en", - "name": "NinemangaEN", - "version": 1, - "url": "https://www.ninemanga.com", - "nsfw": 1 - }, - "listings": [ - { "name": "Latest" }, - { "name": "Hot"}, - { "name": "New" } - ] -} \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_en/src/lib.rs b/src/rust/ninemanga/sources/ninemanga_en/src/lib.rs deleted file mode 100644 index b1395afc80..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_en/src/lib.rs +++ /dev/null @@ -1,52 +0,0 @@ - -#![no_std] -use aidoku::{ - prelude::*, error::Result, std::String, std::Vec, std::net::Request, - Filter, Listing, Manga, MangaPageResult, Page, Chapter, DeepLink, -}; - -use ninemanga_template::template::NineMangaSource; - -fn get_instance() -> NineMangaSource { - NineMangaSource::default() -} - -#[get_manga_list] -fn get_manga_list(filters: Vec, page: i32) -> Result { - get_instance().parse_manga_list(filters, page) -} - -#[get_manga_listing] -fn get_manga_listing(listing: Listing, page: i32) -> Result{ - let url = match listing.name.as_str() { - "Latest" => format!("{}/list/New-Update/", NineMangaSource::default().base_url), - "Hot" => format!("{}/list/Hot-Book/", NineMangaSource::default().base_url), - _ => format!("{}/list/New-Book/", NineMangaSource::default().base_url), - }; - get_instance().parse_manga_listing(url, page) -} - -#[get_manga_details] -fn get_manga_details(id: String) -> Result { - get_instance().parse_manga_details(id) -} - -#[get_chapter_list] -fn get_chapter_list(id: String) -> Result> { - get_instance().parse_chapter_list(id) -} - -#[get_page_list] -fn get_page_list(id: String) -> Result> { - get_instance().parse_page_list(id) -} - -#[modify_image_request] -fn modify_image_request(request: Request) { - get_instance().modify_image_request(request) -} - -#[handle_url] -fn handle_url(url: String) -> Result { - get_instance().handle_url(url) -} \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_es/Cargo.toml b/src/rust/ninemanga/sources/ninemanga_es/Cargo.toml deleted file mode 100644 index cab1cd96fd..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_es/Cargo.toml +++ /dev/null @@ -1,12 +0,0 @@ -[package] -name = "ninemanga_es" -version = "0.1.0" -edition = "2021" -publish = false - -[lib] -crate-type = ["cdylib"] - -[dependencies] -aidoku = { git = "https://github.com/Aidoku/aidoku-rs/" } -ninemanga_template = { path = "../../template" } \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_es/res/Icon.png b/src/rust/ninemanga/sources/ninemanga_es/res/Icon.png deleted file mode 100644 index 283f60b9fd..0000000000 Binary files a/src/rust/ninemanga/sources/ninemanga_es/res/Icon.png and /dev/null differ diff --git a/src/rust/ninemanga/sources/ninemanga_es/res/filters.json b/src/rust/ninemanga/sources/ninemanga_es/res/filters.json deleted file mode 100644 index b4ddab8730..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_es/res/filters.json +++ /dev/null @@ -1,776 +0,0 @@ -[ - { - "type": "title" - }, - { - "type": "group", - "name": "Genres", - "filters": [ - { - "type": "genre", - "name": "4-Koma", - "id": "201", - "canExclude": true - }, - { - "type": "genre", - "name": "AcciÓN", - "id": "213", - "canExclude": true - }, - { - "type": "genre", - "name": "AccióN", - "id": "69", - "canExclude": true - }, - { - "type": "genre", - "name": "Action", - "id": "177", - "canExclude": true - }, - { - "type": "genre", - "name": "Adult", - "id": "193", - "canExclude": true - }, - { - "type": "genre", - "name": "Adulto", - "id": "86", - "canExclude": true - }, - { - "type": "genre", - "name": "Adventure", - "id": "179", - "canExclude": true - }, - { - "type": "genre", - "name": "AnimacióN", - "id": "229", - "canExclude": true - }, - { - "type": "genre", - "name": "ApocalíPtico", - "id": "202", - "canExclude": true - }, - { - "type": "genre", - "name": "Artes Marciales", - "id": "66", - "canExclude": true - }, - { - "type": "genre", - "name": "Aventura", - "id": "64", - "canExclude": true - }, - { - "type": "genre", - "name": "Aventuras", - "id": "120", - "canExclude": true - }, - { - "type": "genre", - "name": "BL (Boys Love)", - "id": "223", - "canExclude": true - }, - { - "type": "genre", - "name": "Boys Love", - "id": "228", - "canExclude": true - }, - { - "type": "genre", - "name": "Ciberpunk", - "id": "225", - "canExclude": true - }, - { - "type": "genre", - "name": "Ciencia FiccióN", - "id": "93", - "canExclude": true - }, - { - "type": "genre", - "name": "Comedia", - "id": "75", - "canExclude": true - }, - { - "type": "genre", - "name": "Comedy", - "id": "178", - "canExclude": true - }, - { - "type": "genre", - "name": "Crimen", - "id": "227", - "canExclude": true - }, - { - "type": "genre", - "name": "Cyberpunk", - "id": "199", - "canExclude": true - }, - { - "type": "genre", - "name": "Demonios", - "id": "126", - "canExclude": true - }, - { - "type": "genre", - "name": "Deporte", - "id": "76", - "canExclude": true - }, - { - "type": "genre", - "name": "Deportes", - "id": "111", - "canExclude": true - }, - { - "type": "genre", - "name": "Doujinshi", - "id": "216", - "canExclude": true - }, - { - "type": "genre", - "name": "Drama", - "id": "79", - "canExclude": true - }, - { - "type": "genre", - "name": "Ecchi", - "id": "65", - "canExclude": true - }, - { - "type": "genre", - "name": "Escolar", - "id": "81", - "canExclude": true - }, - { - "type": "genre", - "name": "EspañOl", - "id": "249", - "canExclude": true - }, - { - "type": "genre", - "name": "Extranjero", - "id": "238", - "canExclude": true - }, - { - "type": "genre", - "name": "Familia", - "id": "237", - "canExclude": true - }, - { - "type": "genre", - "name": "Fantacia", - "id": "100", - "canExclude": true - }, - { - "type": "genre", - "name": "FantasÍA", - "id": "214", - "canExclude": true - }, - { - "type": "genre", - "name": "FantasíA", - "id": "70", - "canExclude": true - }, - { - "type": "genre", - "name": "Fantasy", - "id": "180", - "canExclude": true - }, - { - "type": "genre", - "name": "Gender Bender", - "id": "175", - "canExclude": true - }, - { - "type": "genre", - "name": "GéNero Bender", - "id": "230", - "canExclude": true - }, - { - "type": "genre", - "name": "Girls Love", - "id": "226", - "canExclude": true - }, - { - "type": "genre", - "name": "GL (Girls Love)", - "id": "222", - "canExclude": true - }, - { - "type": "genre", - "name": "Gore", - "id": "108", - "canExclude": true - }, - { - "type": "genre", - "name": "Guerra", - "id": "234", - "canExclude": true - }, - { - "type": "genre", - "name": "Harem", - "id": "78", - "canExclude": true - }, - { - "type": "genre", - "name": "Hentai", - "id": "83", - "canExclude": true - }, - { - "type": "genre", - "name": "Historia", - "id": "233", - "canExclude": true - }, - { - "type": "genre", - "name": "Historical", - "id": "190", - "canExclude": true - }, - { - "type": "genre", - "name": "HistóRico", - "id": "95", - "canExclude": true - }, - { - "type": "genre", - "name": "Horror", - "id": "99", - "canExclude": true - }, - { - "type": "genre", - "name": "Isekai", - "id": "240", - "canExclude": true - }, - { - "type": "genre", - "name": "Josei", - "id": "112", - "canExclude": true - }, - { - "type": "genre", - "name": "Maduro", - "id": "72", - "canExclude": true - }, - { - "type": "genre", - "name": "Magia", - "id": "172", - "canExclude": true - }, - { - "type": "genre", - "name": "Magical Girls", - "id": "248", - "canExclude": true - }, - { - "type": "genre", - "name": "Manga", - "id": "251", - "canExclude": true - }, - { - "type": "genre", - "name": "Martial", - "id": "189", - "canExclude": true - }, - { - "type": "genre", - "name": "Martial Arts", - "id": "181", - "canExclude": true - }, - { - "type": "genre", - "name": "Mecha", - "id": "115", - "canExclude": true - }, - { - "type": "genre", - "name": "Medical", - "id": "247", - "canExclude": true - }, - { - "type": "genre", - "name": "Militar", - "id": "205", - "canExclude": true - }, - { - "type": "genre", - "name": "Misterio", - "id": "88", - "canExclude": true - }, - { - "type": "genre", - "name": "Music", - "id": "241", - "canExclude": true - }, - { - "type": "genre", - "name": "MúSica", - "id": "121", - "canExclude": true - }, - { - "type": "genre", - "name": "Musical", - "id": "197", - "canExclude": true - }, - { - "type": "genre", - "name": "Mystery", - "id": "187", - "canExclude": true - }, - { - "type": "genre", - "name": "NiñOs", - "id": "235", - "canExclude": true - }, - { - "type": "genre", - "name": "Oeste", - "id": "239", - "canExclude": true - }, - { - "type": "genre", - "name": "One Shot", - "id": "184", - "canExclude": true - }, - { - "type": "genre", - "name": "One-Shot", - "id": "221", - "canExclude": true - }, - { - "type": "genre", - "name": "Oneshot", - "id": "195", - "canExclude": true - }, - { - "type": "genre", - "name": "Parodia", - "id": "198", - "canExclude": true - }, - { - "type": "genre", - "name": "Philosophical", - "id": "252", - "canExclude": true - }, - { - "type": "genre", - "name": "PolicíAca", - "id": "220", - "canExclude": true - }, - { - "type": "genre", - "name": "Policiaco", - "id": "236", - "canExclude": true - }, - { - "type": "genre", - "name": "Policial", - "id": "208", - "canExclude": true - }, - { - "type": "genre", - "name": "PsicolóGica", - "id": "219", - "canExclude": true - }, - { - "type": "genre", - "name": "PsicolóGico", - "id": "96", - "canExclude": true - }, - { - "type": "genre", - "name": "Psychological", - "id": "192", - "canExclude": true - }, - { - "type": "genre", - "name": "Realidad", - "id": "231", - "canExclude": true - }, - { - "type": "genre", - "name": "Realidad Virtual", - "id": "196", - "canExclude": true - }, - { - "type": "genre", - "name": "Recuentos De La Vida", - "id": "169", - "canExclude": true - }, - { - "type": "genre", - "name": "ReencarnacióN", - "id": "207", - "canExclude": true - }, - { - "type": "genre", - "name": "Romance", - "id": "67", - "canExclude": true - }, - { - "type": "genre", - "name": "Samurai", - "id": "210", - "canExclude": true - }, - { - "type": "genre", - "name": "School Life", - "id": "176", - "canExclude": true - }, - { - "type": "genre", - "name": "Sci-Fi", - "id": "123", - "canExclude": true - }, - { - "type": "genre", - "name": "Seinen", - "id": "73", - "canExclude": true - }, - { - "type": "genre", - "name": "Shojo", - "id": "80", - "canExclude": true - }, - { - "type": "genre", - "name": "Shojo Ai", - "id": "186", - "canExclude": true - }, - { - "type": "genre", - "name": "Shojo-Ai (Yuri Soft)", - "id": "218", - "canExclude": true - }, - { - "type": "genre", - "name": "Shonen", - "id": "77", - "canExclude": true - }, - { - "type": "genre", - "name": "Shonen Ai", - "id": "128", - "canExclude": true - }, - { - "type": "genre", - "name": "Shonen-Ai", - "id": "174", - "canExclude": true - }, - { - "type": "genre", - "name": "Shonen-Ai (Yaoi Soft)", - "id": "217", - "canExclude": true - }, - { - "type": "genre", - "name": "Shota", - "id": "224", - "canExclude": true - }, - { - "type": "genre", - "name": "Shoujo", - "id": "85", - "canExclude": true - }, - { - "type": "genre", - "name": "Shoujo Ai", - "id": "194", - "canExclude": true - }, - { - "type": "genre", - "name": "Shoujo-Ai", - "id": "173", - "canExclude": true - }, - { - "type": "genre", - "name": "Shounen", - "id": "68", - "canExclude": true - }, - { - "type": "genre", - "name": "Shounen Ai", - "id": "185", - "canExclude": true - }, - { - "type": "genre", - "name": "Slice Of Life", - "id": "182", - "canExclude": true - }, - { - "type": "genre", - "name": "Smut", - "id": "183", - "canExclude": true - }, - { - "type": "genre", - "name": "Sobrenatural", - "id": "74", - "canExclude": true - }, - { - "type": "genre", - "name": "Sports", - "id": "188", - "canExclude": true - }, - { - "type": "genre", - "name": "Super Natural", - "id": "124", - "canExclude": true - }, - { - "type": "genre", - "name": "Super Poderes", - "id": "206", - "canExclude": true - }, - { - "type": "genre", - "name": "Superhero", - "id": "246", - "canExclude": true - }, - { - "type": "genre", - "name": "Supernatural", - "id": "119", - "canExclude": true - }, - { - "type": "genre", - "name": "Superpoderes", - "id": "215", - "canExclude": true - }, - { - "type": "genre", - "name": "Supervivencia", - "id": "203", - "canExclude": true - }, - { - "type": "genre", - "name": "Suspense", - "id": "171", - "canExclude": true - }, - { - "type": "genre", - "name": "Telenovela", - "id": "242", - "canExclude": true - }, - { - "type": "genre", - "name": "Thiller", - "id": "204", - "canExclude": true - }, - { - "type": "genre", - "name": "Thriller", - "id": "97", - "canExclude": true - }, - { - "type": "genre", - "name": "Tragedia", - "id": "87", - "canExclude": true - }, - { - "type": "genre", - "name": "Tragedy", - "id": "191", - "canExclude": true - }, - { - "type": "genre", - "name": "Vampiros", - "id": "209", - "canExclude": true - }, - { - "type": "genre", - "name": "Ver En Lectormanga", - "id": "243", - "canExclude": true - }, - { - "type": "genre", - "name": "Vida Cotidiana", - "id": "84", - "canExclude": true - }, - { - "type": "genre", - "name": "Vida Escolar", - "id": "170", - "canExclude": true - }, - { - "type": "genre", - "name": "Vida Escolar.", - "id": "122", - "canExclude": true - }, - { - "type": "genre", - "name": "Webcomic", - "id": "92", - "canExclude": true - }, - { - "type": "genre", - "name": "Webtoon", - "id": "200", - "canExclude": true - }, - { - "type": "genre", - "name": "Wuxia", - "id": "244", - "canExclude": true - }, - { - "type": "genre", - "name": "Yaoi", - "id": "105", - "canExclude": true - }, - { - "type": "genre", - "name": "Yaoi (Soft)", - "id": "211", - "canExclude": true - }, - { - "type": "genre", - "name": "Yonkoma", - "id": "232", - "canExclude": true - }, - { - "type": "genre", - "name": "Yuri", - "id": "127", - "canExclude": true - }, - { - "type": "genre", - "name": "Yuri (Soft)", - "id": "212", - "canExclude": true - } - ] - }, - { - "type": "select", - "name": "Series Completado", - "options": [ - "O", - "sí", - "No" - ] - } -] \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_es/res/source.json b/src/rust/ninemanga/sources/ninemanga_es/res/source.json deleted file mode 100644 index dbfffa6b82..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_es/res/source.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "info": { - "id": "es.ninemanga", - "lang": "es", - "name": "NinemangaES", - "version": 1, - "url": "https://es.ninemanga.com", - "nsfw": 1 - }, - "listings": [ - { "name": "Recientes" }, - { "name": "Caliente"}, - { "name": "Nueva" } - ] -} \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_es/src/lib.rs b/src/rust/ninemanga/sources/ninemanga_es/src/lib.rs deleted file mode 100644 index a02543fd9a..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_es/src/lib.rs +++ /dev/null @@ -1,57 +0,0 @@ - -#![no_std] -use aidoku::{ - prelude::*, error::Result, std::String, std::Vec, std::net::Request, - Filter, Listing, Manga, MangaPageResult, Page, Chapter, DeepLink, -}; - -use ninemanga_template::template::NineMangaSource; - -fn get_instance() -> NineMangaSource { - NineMangaSource{ - base_url: "https://es.ninemanga.com", - language: "es", - completed_series: "Series Completado", - ..Default::default() - } -} - -#[get_manga_list] -fn get_manga_list(filters: Vec, page: i32) -> Result { - get_instance().parse_manga_list(filters, page) -} - -#[get_manga_listing] -fn get_manga_listing(listing: Listing, page: i32) -> Result{ - let url = match listing.name.as_str() { - "Recientes" => format!("{}/list/New-Update/", get_instance().base_url), - "Caliente" => format!("{}/list/Hot-Book/", get_instance().base_url), - _ => format!("{}/list/New-Book/", get_instance().base_url), - }; - get_instance().parse_manga_listing(url, page) -} - -#[get_manga_details] -fn get_manga_details(id: String) -> Result { - get_instance().parse_manga_details(id) -} - -#[get_chapter_list] -fn get_chapter_list(id: String) -> Result> { - get_instance().parse_chapter_list(id) -} - -#[get_page_list] -fn get_page_list(id: String) -> Result> { - get_instance().parse_page_list(id) -} - -#[modify_image_request] -fn modify_image_request(request: Request) { - get_instance().modify_image_request(request) -} - -#[handle_url] -fn handle_url(url: String) -> Result { - get_instance().handle_url(url) -} \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_it/Cargo.toml b/src/rust/ninemanga/sources/ninemanga_it/Cargo.toml deleted file mode 100644 index 36b63e18b5..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_it/Cargo.toml +++ /dev/null @@ -1,12 +0,0 @@ -[package] -name = "ninemanga_it" -version = "0.1.0" -edition = "2021" -publish = false - -[lib] -crate-type = ["cdylib"] - -[dependencies] -aidoku = { git = "https://github.com/Aidoku/aidoku-rs/" } -ninemanga_template = { path = "../../template" } \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_it/res/Icon.png b/src/rust/ninemanga/sources/ninemanga_it/res/Icon.png deleted file mode 100644 index 283f60b9fd..0000000000 Binary files a/src/rust/ninemanga/sources/ninemanga_it/res/Icon.png and /dev/null differ diff --git a/src/rust/ninemanga/sources/ninemanga_it/res/filters.json b/src/rust/ninemanga/sources/ninemanga_it/res/filters.json deleted file mode 100644 index e93105372d..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_it/res/filters.json +++ /dev/null @@ -1,458 +0,0 @@ -[ - { - "type": "title" - }, - { - "type": "group", - "name": "Generi", - "filters": [ - { - "type": "genre", - "name": "4-Koma", - "id": "156", - "canExclude": true - }, - { - "type": "genre", - "name": "Action", - "id": "98", - "canExclude": true - }, - { - "type": "genre", - "name": "Adult", - "id": "113", - "canExclude": true - }, - { - "type": "genre", - "name": "Adventure", - "id": "108", - "canExclude": true - }, - { - "type": "genre", - "name": "Americano", - "id": "123", - "canExclude": true - }, - { - "type": "genre", - "name": "Anthology", - "id": "167", - "canExclude": true - }, - { - "type": "genre", - "name": "Autoriale", - "id": "124", - "canExclude": true - }, - { - "type": "genre", - "name": "Avventura", - "id": "63", - "canExclude": true - }, - { - "type": "genre", - "name": "Azione", - "id": "65", - "canExclude": true - }, - { - "type": "genre", - "name": "Bara", - "id": "88", - "canExclude": true - }, - { - "type": "genre", - "name": "Cartoon", - "id": "120", - "canExclude": true - }, - { - "type": "genre", - "name": "Comedy", - "id": "101", - "canExclude": true - }, - { - "type": "genre", - "name": "Comico", - "id": "127", - "canExclude": true - }, - { - "type": "genre", - "name": "Commedia", - "id": "71", - "canExclude": true - }, - { - "type": "genre", - "name": "Crime", - "id": "134", - "canExclude": true - }, - { - "type": "genre", - "name": "Demenziale", - "id": "79", - "canExclude": true - }, - { - "type": "genre", - "name": "Doujinshi", - "id": "114", - "canExclude": true - }, - { - "type": "genre", - "name": "Dounshinji", - "id": "92", - "canExclude": true - }, - { - "type": "genre", - "name": "Drama", - "id": "82", - "canExclude": true - }, - { - "type": "genre", - "name": "Ecchi", - "id": "70", - "canExclude": true - }, - { - "type": "genre", - "name": "Fantasy", - "id": "74", - "canExclude": true - }, - { - "type": "genre", - "name": "Gender Bender", - "id": "109", - "canExclude": true - }, - { - "type": "genre", - "name": "Giallo", - "id": "125", - "canExclude": true - }, - { - "type": "genre", - "name": "Green", - "id": "119", - "canExclude": true - }, - { - "type": "genre", - "name": "Harem", - "id": "76", - "canExclude": true - }, - { - "type": "genre", - "name": "Hentai", - "id": "90", - "canExclude": true - }, - { - "type": "genre", - "name": "Historical", - "id": "107", - "canExclude": true - }, - { - "type": "genre", - "name": "Horror", - "id": "80", - "canExclude": true - }, - { - "type": "genre", - "name": "Humor", - "id": "126", - "canExclude": true - }, - { - "type": "genre", - "name": "Josei", - "id": "95", - "canExclude": true - }, - { - "type": "genre", - "name": "Magico", - "id": "91", - "canExclude": true - }, - { - "type": "genre", - "name": "Manga", - "id": "121", - "canExclude": true - }, - { - "type": "genre", - "name": "Martial Arts", - "id": "99", - "canExclude": true - }, - { - "type": "genre", - "name": "Mature", - "id": "106", - "canExclude": true - }, - { - "type": "genre", - "name": "Maturo", - "id": "115", - "canExclude": true - }, - { - "type": "genre", - "name": "Mecha", - "id": "68", - "canExclude": true - }, - { - "type": "genre", - "name": "Misteri", - "id": "87", - "canExclude": true - }, - { - "type": "genre", - "name": "Musica", - "id": "96", - "canExclude": true - }, - { - "type": "genre", - "name": "Mystery", - "id": "105", - "canExclude": true - }, - { - "type": "genre", - "name": "Oneshot", - "id": "152", - "canExclude": true - }, - { - "type": "genre", - "name": "Poliziesco", - "id": "128", - "canExclude": true - }, - { - "type": "genre", - "name": "Psicologico", - "id": "83", - "canExclude": true - }, - { - "type": "genre", - "name": "Psychological", - "id": "97", - "canExclude": true - }, - { - "type": "genre", - "name": "Raccolta", - "id": "93", - "canExclude": true - }, - { - "type": "genre", - "name": "Realistico", - "id": "118", - "canExclude": true - }, - { - "type": "genre", - "name": "Romance", - "id": "104", - "canExclude": true - }, - { - "type": "genre", - "name": "Romantico", - "id": "75", - "canExclude": true - }, - { - "type": "genre", - "name": "School Life", - "id": "103", - "canExclude": true - }, - { - "type": "genre", - "name": "Sci-Fi", - "id": "66", - "canExclude": true - }, - { - "type": "genre", - "name": "Scolastico", - "id": "64", - "canExclude": true - }, - { - "type": "genre", - "name": "Seinen", - "id": "67", - "canExclude": true - }, - { - "type": "genre", - "name": "Sentimentale", - "id": "72", - "canExclude": true - }, - { - "type": "genre", - "name": "Shota", - "id": "89", - "canExclude": true - }, - { - "type": "genre", - "name": "Shoujo", - "id": "73", - "canExclude": true - }, - { - "type": "genre", - "name": "Shoujo Ai", - "id": "130", - "canExclude": true - }, - { - "type": "genre", - "name": "Shounen", - "id": "69", - "canExclude": true - }, - { - "type": "genre", - "name": "Slice Of Life", - "id": "102", - "canExclude": true - }, - { - "type": "genre", - "name": "Smut", - "id": "111", - "canExclude": true - }, - { - "type": "genre", - "name": "Sovrannaturale", - "id": "78", - "canExclude": true - }, - { - "type": "genre", - "name": "Splatter", - "id": "81", - "canExclude": true - }, - { - "type": "genre", - "name": "Sportivo", - "id": "85", - "canExclude": true - }, - { - "type": "genre", - "name": "Sports", - "id": "110", - "canExclude": true - }, - { - "type": "genre", - "name": "Storico", - "id": "84", - "canExclude": true - }, - { - "type": "genre", - "name": "Supereroistico", - "id": "117", - "canExclude": true - }, - { - "type": "genre", - "name": "Supernatural", - "id": "100", - "canExclude": true - }, - { - "type": "genre", - "name": "Thriller", - "id": "122", - "canExclude": true - }, - { - "type": "genre", - "name": "Tragedia", - "id": "116", - "canExclude": true - }, - { - "type": "genre", - "name": "Tragedy", - "id": "112", - "canExclude": true - }, - { - "type": "genre", - "name": "Vita Quotidiana", - "id": "77", - "canExclude": true - }, - { - "type": "genre", - "name": "Web Comic", - "id": "143", - "canExclude": true - }, - { - "type": "genre", - "name": "Wuxia", - "id": "132", - "canExclude": true - }, - { - "type": "genre", - "name": "Yaoi", - "id": "86", - "canExclude": true - }, - { - "type": "genre", - "name": "Yuri", - "id": "94", - "canExclude": true - } - ] - }, - { - "type": "select", - "name": "Serie Completato", - "options": [ - "O", - "Si", - "No" - ] - } -] \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_it/res/source.json b/src/rust/ninemanga/sources/ninemanga_it/res/source.json deleted file mode 100644 index 37c881622c..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_it/res/source.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "info": { - "id": "it.ninemanga", - "lang": "it", - "name": "NinemangaIT", - "version": 1, - "url": "https://it.ninemanga.com", - "nsfw": 1 - }, - "listings": [ - { "name": "Ultime" }, - { "name": "Popolare"}, - { "name": "Nuovo" } - ] -} \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_it/src/lib.rs b/src/rust/ninemanga/sources/ninemanga_it/src/lib.rs deleted file mode 100644 index e16977c72a..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_it/src/lib.rs +++ /dev/null @@ -1,57 +0,0 @@ - -#![no_std] -use aidoku::{ - prelude::*, error::Result, std::String, std::Vec, std::net::Request, - Filter, Listing, Manga, MangaPageResult, Page, Chapter, DeepLink, -}; - -use ninemanga_template::template::NineMangaSource; - -fn get_instance() -> NineMangaSource { - NineMangaSource{ - base_url: "https://it.ninemanga.com", - language: "it", - completed_series: "Serie Completato", - ..Default::default() - } -} - -#[get_manga_list] -fn get_manga_list(filters: Vec, page: i32) -> Result { - get_instance().parse_manga_list(filters, page) -} - -#[get_manga_listing] -fn get_manga_listing(listing: Listing, page: i32) -> Result{ - let url = match listing.name.as_str() { - "Ultime" => format!("{}/list/New-Update/", get_instance().base_url), - "Popolare" => format!("{}/list/Hot-Book/", get_instance().base_url), - _ => format!("{}/list/New-Book/", get_instance().base_url), - }; - get_instance().parse_manga_listing(url, page) -} - -#[get_manga_details] -fn get_manga_details(id: String) -> Result { - get_instance().parse_manga_details(id) -} - -#[get_chapter_list] -fn get_chapter_list(id: String) -> Result> { - get_instance().parse_chapter_list(id) -} - -#[get_page_list] -fn get_page_list(id: String) -> Result> { - get_instance().parse_page_list(id) -} - -#[modify_image_request] -fn modify_image_request(request: Request) { - get_instance().modify_image_request(request) -} - -#[handle_url] -fn handle_url(url: String) -> Result { - get_instance().handle_url(url) -} \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_ru/Cargo.toml b/src/rust/ninemanga/sources/ninemanga_ru/Cargo.toml deleted file mode 100644 index e2bdd3d55c..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_ru/Cargo.toml +++ /dev/null @@ -1,12 +0,0 @@ -[package] -name = "ninemanga_ru" -version = "0.1.0" -edition = "2021" -publish = false - -[lib] -crate-type = ["cdylib"] - -[dependencies] -aidoku = { git = "https://github.com/Aidoku/aidoku-rs/" } -ninemanga_template = { path = "../../template" } \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_ru/res/Icon.png b/src/rust/ninemanga/sources/ninemanga_ru/res/Icon.png deleted file mode 100644 index 283f60b9fd..0000000000 Binary files a/src/rust/ninemanga/sources/ninemanga_ru/res/Icon.png and /dev/null differ diff --git a/src/rust/ninemanga/sources/ninemanga_ru/res/filters.json b/src/rust/ninemanga/sources/ninemanga_ru/res/filters.json deleted file mode 100644 index a68fe78dbe..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_ru/res/filters.json +++ /dev/null @@ -1,296 +0,0 @@ -[ - { - "type": "title" - }, - { - "type": "group", - "name": "Жанры", - "filters": [ - { - "type": "genre", - "name": "арт", - "id": "90", - "canExclude": true - }, - { - "type": "genre", - "name": "боевик", - "id": "53", - "canExclude": true - }, - { - "type": "genre", - "name": "боевые искусства", - "id": "58", - "canExclude": true - }, - { - "type": "genre", - "name": "вампиры", - "id": "85", - "canExclude": true - }, - { - "type": "genre", - "name": "гарем", - "id": "73", - "canExclude": true - }, - { - "type": "genre", - "name": "гендерная интрига", - "id": "81", - "canExclude": true - }, - { - "type": "genre", - "name": "героическое фэнтези", - "id": "68", - "canExclude": true - }, - { - "type": "genre", - "name": "детектив", - "id": "72", - "canExclude": true - }, - { - "type": "genre", - "name": "дзёсэй", - "id": "64", - "canExclude": true - }, - { - "type": "genre", - "name": "додзинси", - "id": "62", - "canExclude": true - }, - { - "type": "genre", - "name": "драма", - "id": "51", - "canExclude": true - }, - { - "type": "genre", - "name": "игра", - "id": "76", - "canExclude": true - }, - { - "type": "genre", - "name": "история", - "id": "75", - "canExclude": true - }, - { - "type": "genre", - "name": "исэкай", - "id": "392", - "canExclude": true - }, - { - "type": "genre", - "name": "киберпанк", - "id": "91", - "canExclude": true - }, - { - "type": "genre", - "name": "кодомо", - "id": "89", - "canExclude": true - }, - { - "type": "genre", - "name": "комедия", - "id": "57", - "canExclude": true - }, - { - "type": "genre", - "name": "махо-сёдзё", - "id": "88", - "canExclude": true - }, - { - "type": "genre", - "name": "меха", - "id": "84", - "canExclude": true - }, - { - "type": "genre", - "name": "мистика", - "id": "71", - "canExclude": true - }, - { - "type": "genre", - "name": "научная фантастика", - "id": "79", - "canExclude": true - }, - { - "type": "genre", - "name": "омегаверс", - "id": "94", - "canExclude": true - }, - { - "type": "genre", - "name": "повседневность", - "id": "65", - "canExclude": true - }, - { - "type": "genre", - "name": "постапокалиптика", - "id": "87", - "canExclude": true - }, - { - "type": "genre", - "name": "приключения", - "id": "59", - "canExclude": true - }, - { - "type": "genre", - "name": "психология", - "id": "54", - "canExclude": true - }, - { - "type": "genre", - "name": "романтика", - "id": "61", - "canExclude": true - }, - { - "type": "genre", - "name": "самурайский боевик", - "id": "82", - "canExclude": true - }, - { - "type": "genre", - "name": "сверхъестественное", - "id": "55", - "canExclude": true - }, - { - "type": "genre", - "name": "сёдзё", - "id": "67", - "canExclude": true - }, - { - "type": "genre", - "name": "сёдзё-ай", - "id": "78", - "canExclude": true - }, - { - "type": "genre", - "name": "сёнэн", - "id": "52", - "canExclude": true - }, - { - "type": "genre", - "name": "сёнэн-ай", - "id": "63", - "canExclude": true - }, - { - "type": "genre", - "name": "спорт", - "id": "69", - "canExclude": true - }, - { - "type": "genre", - "name": "сэйнэн", - "id": "74", - "canExclude": true - }, - { - "type": "genre", - "name": "трагедия", - "id": "70", - "canExclude": true - }, - { - "type": "genre", - "name": "триллер", - "id": "83", - "canExclude": true - }, - { - "type": "genre", - "name": "ужасы", - "id": "86", - "canExclude": true - }, - { - "type": "genre", - "name": "фантастика", - "id": "77", - "canExclude": true - }, - { - "type": "genre", - "name": "фэнтези", - "id": "56", - "canExclude": true - }, - { - "type": "genre", - "name": "школа", - "id": "66", - "canExclude": true - }, - { - "type": "genre", - "name": "Элементы юмора", - "id": "395", - "canExclude": true - }, - { - "type": "genre", - "name": "эротика", - "id": "93", - "canExclude": true - }, - { - "type": "genre", - "name": "этти", - "id": "60", - "canExclude": true - }, - { - "type": "genre", - "name": "юри", - "id": "80", - "canExclude": true - }, - { - "type": "genre", - "name": "яой", - "id": "92", - "canExclude": true - } - ] - }, - { - "type": "select", - "name": "Завершена серия", - "options": [ - "или", - "Да", - "Нет" - ] - } -] \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_ru/res/source.json b/src/rust/ninemanga/sources/ninemanga_ru/res/source.json deleted file mode 100644 index d1f002f4c2..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_ru/res/source.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "info": { - "id": "ru.ninemanga", - "lang": "ru", - "name": "NinemangaRU", - "version": 1, - "url": "https://ru.ninemanga.com", - "nsfw": 1 - }, - "listings": [ - { "name": "Последние" }, - { "name": "Топ"}, - { "name": "новая" } - ] -} \ No newline at end of file diff --git a/src/rust/ninemanga/sources/ninemanga_ru/src/lib.rs b/src/rust/ninemanga/sources/ninemanga_ru/src/lib.rs deleted file mode 100644 index 1fc94a63e7..0000000000 --- a/src/rust/ninemanga/sources/ninemanga_ru/src/lib.rs +++ /dev/null @@ -1,57 +0,0 @@ - -#![no_std] -use aidoku::{ - prelude::*, error::Result, std::String, std::Vec, std::net::Request, - Filter, Listing, Manga, MangaPageResult, Page, Chapter, DeepLink, -}; - -use ninemanga_template::template::NineMangaSource; - -fn get_instance() -> NineMangaSource { - NineMangaSource{ - base_url: "https://ru.ninemanga.com", - language: "ru", - completed_series: "Завершена серия", - ..Default::default() - } -} - -#[get_manga_list] -fn get_manga_list(filters: Vec, page: i32) -> Result { - get_instance().parse_manga_list(filters, page) -} - -#[get_manga_listing] -fn get_manga_listing(listing: Listing, page: i32) -> Result{ - let url = match listing.name.as_str() { - "Последние" => format!("{}/list/New-Update/", get_instance().base_url), - "Топ" => format!("{}/list/Hot-Book/", get_instance().base_url), - _ => format!("{}/list/New-Book/", get_instance().base_url), - }; - get_instance().parse_manga_listing(url, page) -} - -#[get_manga_details] -fn get_manga_details(id: String) -> Result { - get_instance().parse_manga_details(id) -} - -#[get_chapter_list] -fn get_chapter_list(id: String) -> Result> { - get_instance().parse_chapter_list(id) -} - -#[get_page_list] -fn get_page_list(id: String) -> Result> { - get_instance().parse_page_list(id) -} - -#[modify_image_request] -fn modify_image_request(request: Request) { - get_instance().modify_image_request(request) -} - -#[handle_url] -fn handle_url(url: String) -> Result { - get_instance().handle_url(url) -} \ No newline at end of file diff --git a/src/rust/ninemanga/template/Cargo.toml b/src/rust/ninemanga/template/Cargo.toml deleted file mode 100644 index 0f785daf55..0000000000 --- a/src/rust/ninemanga/template/Cargo.toml +++ /dev/null @@ -1,8 +0,0 @@ -[package] -name = "ninemanga_template" -version = "0.1.0" -edition = "2021" -publish = false - -[dependencies] -aidoku = { git = "https://github.com/Aidoku/aidoku-rs/" } diff --git a/src/rust/ninemanga/template/src/lib.rs b/src/rust/ninemanga/template/src/lib.rs deleted file mode 100644 index 75400d582a..0000000000 --- a/src/rust/ninemanga/template/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -#![no_std] -pub mod helper; -pub mod template;