diff --git a/nlightreader/consts/items/__init__.py b/nlightreader/consts/items/__init__.py index 0fbd56f..a9c788e 100644 --- a/nlightreader/consts/items/__init__.py +++ b/nlightreader/consts/items/__init__.py @@ -3,3 +3,4 @@ from .remanga_items import RemangaItems from .rulate_items import RulateItems from .shikimori_items import ShikimoriItems +from .mangalib_items import MangaLibItems diff --git a/nlightreader/consts/items/desu_items.py b/nlightreader/consts/items/desu_items.py index 40a0fb6..2e530d0 100644 --- a/nlightreader/consts/items/desu_items.py +++ b/nlightreader/consts/items/desu_items.py @@ -1,64 +1,71 @@ from nlightreader.consts.items.parser_items import ParserItems +from nlightreader.consts.items.preset_items import PresetKinds as Pk, PresetOrders as Po class DesuItems(ParserItems): - GENRES = [{"value": "Dementia", "name": "Dementia", "russian": "Безумие"}, - {"value": "Martial Arts", "name": "Martial Arts", "russian": "Боевые искусства"}, - {"value": "Color", "name": "Color", "russian": "В цвете"}, - {"value": "Vampire", "name": "Vampire", "russian": "Вампиры"}, - {"value": "Web", "name": "Web", "russian": "Веб"}, - {"value": "Harem", "name": "Harem", "russian": "Гарем"}, - {"value": "Heroic Fantasy", "name": "Heroic Fantasy", "russian": "Героическое фэнтези"}, - {"value": "Demons", "name": "Demons", "russian": "Демоны"}, - {"value": "Mystery", "name": "Mystery", "russian": "Детектив"}, - {"value": "Josei", "name": "Josei", "russian": "Дзёсей"}, - {"value": "Drama", "name": "Drama", "russian": "Драма"}, - {"value": "Yonkoma", "name": "Yonkoma", "russian": "Ёнкома"}, - {"value": "Game", "name": "Game", "russian": "Игры"}, - {"value": "Isekai", "name": "Isekai", "russian": "Исекай"}, - {"value": "Historical", "name": "Historical", "russian": "Исторический"}, - {"value": "Comedy", "name": "Comedy", "russian": "Комедия"}, - {"value": "Space", "name": "Space", "russian": "Космос"}, - {"value": "LitRPG", "name": "LitRPG", "russian": "ЛитRPG"}, - {"value": "Magic", "name": "Magic", "russian": "Магия"}, - {"value": "Mecha", "name": "Mecha", "russian": "Меха"}, - {"value": "Mystic", "name": "Mystic", "russian": "Мистика"}, - {"value": "Music", "name": "Music", "russian": "Музыка"}, - {"value": "Sci-Fi", "name": "Sci-Fi", "russian": "Научная фантастика"}, - {"value": "Parody", "name": "Parody", "russian": "Пародия"}, - {"value": "Slice of Life", "name": "Slice of Life", "russian": "Повседневность"}, - {"value": "Post Apocalyptic", "name": "Post Apocalyptic", "russian": "Постапокалиптика"}, - {"value": "Adventure", "name": "Adventure", "russian": "Приключения"}, - {"value": "Psychological", "name": "Psychological", "russian": "Психологическое"}, - {"value": "Romance", "name": "Romance", "russian": "Романтика"}, - {"value": "Samurai", "name": "Samurai", "russian": "Самураи"}, - {"value": "Supernatural", "name": "Supernatural", "russian": "Сверхъестественное"}, - {"value": "Shoujo", "name": "Shoujo", "russian": "Сёдзе"}, - {"value": "Shoujo Ai", "name": "Shoujo Ai", "russian": "Сёдзе Ай"}, - {"value": "Seinen", "name": "Seinen", "russian": "Сейнен"}, - {"value": "Shounen", "name": "Shounen", "russian": "Сёнен"}, - {"value": "Shounen Ai", "name": "Shounen Ai", "russian": "Сёнен Ай"}, - {"value": "Gender Bender", "name": "Gender Bender", "russian": "Смена пола"}, - {"value": "Sports", "name": "Sports", "russian": "Спорт"}, - {"value": "Super Power", "name": "Super Power", "russian": "Супер сила"}, - {"value": "Tragedy", "name": "Tragedy", "russian": "Трагедия"}, - {"value": "Thriller", "name": "Thriller", "russian": "Триллер"}, - {"value": "Horror", "name": "Horror", "russian": "Ужасы"}, - {"value": "Fiction", "name": "Fiction", "russian": "Фантастика"}, - {"value": "Fantasy", "name": "Fantasy", "russian": "Фэнтези"}, - {"value": "Hentai", "name": "Hentai", "russian": "Хентай"}, - {"value": "School", "name": "School", "russian": "Школа"}, - {"value": "Action", "name": "Action", "russian": "Экшен"}, - {"value": "Ecchi", "name": "Ecchi", "russian": "Этти"}, - {"value": "Yuri", "name": "Yuri", "russian": "Юри"}, - {"value": "Yaoi", "name": "Yaoi", "russian": "Яой"}] + ORDERS = [ + {"value": "popular"} | Po.POPULARITY, + {"value": "name"} | Po.NAME, + {"value": "updated"} | Po.UPDATED, + ] - ORDERS = [{"value": "popular", "name": "popular", "russian": "Популярность"}, - {"value": "name", "name": "name", "russian": "Название"}, - {"value": "updated", "name": "updated", "russian": "По обновлению"}] + KINDS = [ + {"value": "manga"} | Pk.MANGA, + {"value": "manhwa"} | Pk.MANHWA, + {"value": "manhua"} | Pk.MANHUA, + {"value": "one_shot"} | Pk.ONESHOT, + {"value": "comics"} | Pk.COMIC, + ] - KINDS = [{"value": "manga", "name": "manga", "russian": "Манга"}, - {"value": "manhwa", "name": "manhwa", "russian": "Манхва"}, - {"value": "manhua", "name": "manhua", "russian": "Маньхуа"}, - {"value": "one_shot", "name": "one_shot", "russian": "Ваншот"}, - {"value": "comics", "name": "comics", "russian": "Комикс"}] + GENRES = [ + {"value": "Dementia", "name": "Dementia", "russian": "Безумие"}, + {"value": "Martial Arts", "name": "Martial Arts", "russian": "Боевые искусства"}, + {"value": "Color", "name": "Color", "russian": "В цвете"}, + {"value": "Vampire", "name": "Vampire", "russian": "Вампиры"}, + {"value": "Web", "name": "Web", "russian": "Веб"}, + {"value": "Harem", "name": "Harem", "russian": "Гарем"}, + {"value": "Heroic Fantasy", "name": "Heroic Fantasy", "russian": "Героическое фэнтези"}, + {"value": "Demons", "name": "Demons", "russian": "Демоны"}, + {"value": "Mystery", "name": "Mystery", "russian": "Детектив"}, + {"value": "Josei", "name": "Josei", "russian": "Дзёсей"}, + {"value": "Drama", "name": "Drama", "russian": "Драма"}, + {"value": "Yonkoma", "name": "Yonkoma", "russian": "Ёнкома"}, + {"value": "Game", "name": "Game", "russian": "Игры"}, + {"value": "Isekai", "name": "Isekai", "russian": "Исекай"}, + {"value": "Historical", "name": "Historical", "russian": "Исторический"}, + {"value": "Comedy", "name": "Comedy", "russian": "Комедия"}, + {"value": "Space", "name": "Space", "russian": "Космос"}, + {"value": "LitRPG", "name": "LitRPG", "russian": "ЛитRPG"}, + {"value": "Magic", "name": "Magic", "russian": "Магия"}, + {"value": "Mecha", "name": "Mecha", "russian": "Меха"}, + {"value": "Mystic", "name": "Mystic", "russian": "Мистика"}, + {"value": "Music", "name": "Music", "russian": "Музыка"}, + {"value": "Sci-Fi", "name": "Sci-Fi", "russian": "Научная фантастика"}, + {"value": "Parody", "name": "Parody", "russian": "Пародия"}, + {"value": "Slice of Life", "name": "Slice of Life", "russian": "Повседневность"}, + {"value": "Post Apocalyptic", "name": "Post Apocalyptic", "russian": "Постапокалиптика"}, + {"value": "Adventure", "name": "Adventure", "russian": "Приключения"}, + {"value": "Psychological", "name": "Psychological", "russian": "Психологическое"}, + {"value": "Romance", "name": "Romance", "russian": "Романтика"}, + {"value": "Samurai", "name": "Samurai", "russian": "Самураи"}, + {"value": "Supernatural", "name": "Supernatural", "russian": "Сверхъестественное"}, + {"value": "Shoujo", "name": "Shoujo", "russian": "Сёдзе"}, + {"value": "Shoujo Ai", "name": "Shoujo Ai", "russian": "Сёдзе Ай"}, + {"value": "Seinen", "name": "Seinen", "russian": "Сейнен"}, + {"value": "Shounen", "name": "Shounen", "russian": "Сёнен"}, + {"value": "Shounen Ai", "name": "Shounen Ai", "russian": "Сёнен Ай"}, + {"value": "Gender Bender", "name": "Gender Bender", "russian": "Смена пола"}, + {"value": "Sports", "name": "Sports", "russian": "Спорт"}, + {"value": "Super Power", "name": "Super Power", "russian": "Супер сила"}, + {"value": "Tragedy", "name": "Tragedy", "russian": "Трагедия"}, + {"value": "Thriller", "name": "Thriller", "russian": "Триллер"}, + {"value": "Horror", "name": "Horror", "russian": "Ужасы"}, + {"value": "Fiction", "name": "Fiction", "russian": "Фантастика"}, + {"value": "Fantasy", "name": "Fantasy", "russian": "Фэнтези"}, + {"value": "Hentai", "name": "Hentai", "russian": "Хентай"}, + {"value": "School", "name": "School", "russian": "Школа"}, + {"value": "Action", "name": "Action", "russian": "Экшен"}, + {"value": "Ecchi", "name": "Ecchi", "russian": "Этти"}, + {"value": "Yuri", "name": "Yuri", "russian": "Юри"}, + {"value": "Yaoi", "name": "Yaoi", "russian": "Яой"}, + ] diff --git a/nlightreader/consts/items/mangalib_items.py b/nlightreader/consts/items/mangalib_items.py new file mode 100644 index 0000000..fdfbc91 --- /dev/null +++ b/nlightreader/consts/items/mangalib_items.py @@ -0,0 +1,22 @@ +from nlightreader.consts.items.parser_items import ParserItems +from nlightreader.consts.items.preset_items import PresetKinds as Pk, PresetOrders as Po + + +class MangaLibItems(ParserItems): + ORDERS = [ + {"value": "rating_score"} | Po.RATING, + {"value": "rate"} | Po.RATE_COUNT, + {"value": "views"} | Po.VIEWS, + {"value": "created_at"} | Po.CREATED, + {"value": "last_chapter_at"} | Po.UPDATED, + {"value": "chap_count"} | Po.CHAPTERS_COUNT, + ] + + KINDS = [ + {"value": 1} | Pk.MANGA, + {"value": 5} | Pk.MANHWA, + {"value": 8} | Pk.RU_MANGA, + {"value": 9} | Pk.WESTERN_COMIC, + {"value": 4} | Pk.OEL_MANGA, + {"value": 6} | Pk.MANHUA, + ] diff --git a/nlightreader/consts/items/parser_items.py b/nlightreader/consts/items/parser_items.py index c44ec89..bea5ea0 100644 --- a/nlightreader/consts/items/parser_items.py +++ b/nlightreader/consts/items/parser_items.py @@ -2,6 +2,6 @@ class ParserItems(ABC): - GENRES: list[dict[str, str]] = [] ORDERS: list[dict[str, str]] = [] KINDS: list[dict[str, str]] = [] + GENRES: list[dict[str, str]] = [] diff --git a/nlightreader/consts/items/preset_items.py b/nlightreader/consts/items/preset_items.py new file mode 100644 index 0000000..7d807af --- /dev/null +++ b/nlightreader/consts/items/preset_items.py @@ -0,0 +1,33 @@ +class PresetKinds: + MANGA = {"name": "Manga", "russian": "Манга"} + OEL_MANGA = {"name": "OEL-manga", "russian": "OEL-манга"} + RU_MANGA = {"name": "Rumanga", "russian": "Руманга"} + MANHWA = {"name": "Manhwa", "russian": "Манхва"} + MANHUA = {"name": "Manhua", "russian": "Маньхуа"} + ONESHOT = {"name": "Oneshot", "russian": "Ваншот"} + COMIC = {"name": "Comic", "russian": "Комикс"} + WESTERN_COMIC = {"name": "Western comic", "russian": "Западный комикс"} + RU_COMIC = {"name": "Rucomic", "russian": "Рукомикс"} + INDONESIAN_COMIC = {"name": "Indonesian comic", "russian": "Индонезийский комикс"} + DOUJIN = {"name": "doujin", "russian": "Додзинси"} + OTHER = {"name": "Other", "russian": "Другое"} + + +class PresetOrders: + NAME = {"name": "By name", "russian": "По названию"} + POPULARITY = {"name": "By popularity", "russian": "По популярности"} + LIKES_NUM = {"name": "By likes", "russian": "По лайкам"} + VIEWS = {"name": "By views", "russian": "По просмотрам"} + STATUS = {"name": "By status", "russian": "По статусу"} + RATING = {"name": "By rating", "russian": "По рейтингу"} + RANDOM = {"name": "By random", "russian": "Мне повезет"} + + UPDATED = {"name": "By update date", "russian": "По дате обновления"} + CREATED = {"name": "By date added", "russian": "По дате добавления"} + AIRED_ON = {"name": "By release date", "russian": "По дате выхода"} + + CHAPTERS_COUNT = {"name": "By number of chapters", "russian": "По количеству глав"} + VOLUMES_COUNT = {"name": "By number of volumes", "russian": "По количеству томов"} + RATE_COUNT = {"name": "By number of ratings", "russian": "По количеству оценок"} + + TRANSLATION_VOLUME = {"name": "By volume of translation", "russian": "По объему перевода"} diff --git a/nlightreader/consts/items/ranobehub_items.py b/nlightreader/consts/items/ranobehub_items.py index 2c7d6e0..5d59806 100644 --- a/nlightreader/consts/items/ranobehub_items.py +++ b/nlightreader/consts/items/ranobehub_items.py @@ -1,54 +1,59 @@ from nlightreader.consts.items.parser_items import ParserItems +from nlightreader.consts.items.preset_items import PresetOrders as Po class RanobehubItems(ParserItems): - ORDERS = [{"value": "", "name": "By update date", "russian": "По дате обновления"}, - {"value": "created_at", "name": "By date added", "russian": "По дате добавления"}, - {"value": "name_rus", "name": "By name", "russian": "По названию"}, - {"value": "views", "name": "By views", "russian": "По просмотрам"}, - {"value": "computed_rating", "name": "By rating", "russian": "По рейтингу"}, - {"value": "count_chapters", "name": "By number of chapters", "russian": "По количеству глав"}, - {"value": "count_of_symbols", "name": "By volume of translation", "russian": "По объему перевода"}] + ORDERS = [ + {"value": ""} | Po.UPDATED, + {"value": "created_at"} | Po.CREATED, + {"value": "name_rus"} | Po.NAME, + {"value": "views"} | Po.VIEWS, + {"value": "computed_rating"} | Po.RATING, + {"value": "count_chapters"} | Po.CHAPTERS_COUNT, + {"value": "count_of_symbols"} | Po.TRANSLATION_VOLUME, + ] - GENRES = [{"value": "1", "name": "Horror", "russian": "Ужасы"}, - {"value": "2", "name": "Mystery", "russian": "Мистика"}, - {"value": "3", "name": "Thriller", "russian": "Триллер"}, - {"value": "5", "name": "Seinen", "russian": "Сэйнэн"}, - {"value": "7", "name": "Drama", "russian": "Драма"}, - {"value": "8", "name": "Fantasy", "russian": "Фэнтези"}, - {"value": "9", "name": "Romance", "russian": "Романтика"}, - {"value": "11", "name": "Adventure", "russian": "Приключение"}, - {"value": "12", "name": "Military", "russian": "Милитари"}, - {"value": "13", "name": "Sci-Fi", "russian": "Научная фантастика"}, - {"value": "14", "name": "Action", "russian": "Экшн"}, - {"value": "15", "name": "Shoujo", "russian": "Сёдзё"}, - {"value": "17", "name": "Comedy", "russian": "Комедия"}, - {"value": "18", "name": "Psychological", "russian": "Психология"}, - {"value": "19", "name": "Tragedy", "russian": "Трагедия"}, - {"value": "20", "name": "Supernatural", "russian": "Сверхъестественное"}, - {"value": "21", "name": "School Life", "russian": "Школьная жизнь"}, - {"value": "22", "name": "Martial Arts", "russian": "Боевые искусства"}, - {"value": "23", "name": "Shoujo Ai", "russian": "Сёдзё-ай"}, - {"value": "24", "name": "Mecha", "russian": "Меха"}, - {"value": "93", "name": "Slice of Life", "russian": "Повседневность"}, - {"value": "101", "name": "Historical", "russian": "Исторический"}, - {"value": "114", "name": "Harem", "russian": "Гарем"}, - {"value": "115", "name": "Mature", "russian": "Для взрослых"}, - {"value": "189", "name": "Shounen", "russian": "Сёнэн"}, - {"value": "216", "name": "Josei", "russian": "Дзёсэй"}, - {"value": "242", "name": "Xuanhuan", "russian": "Сюаньхуа"}, - {"value": "246", "name": "Gender Bender", "russian": "Гендер бендер"}, - {"value": "258", "name": "Adult", "russian": "Для взрослых"}, - {"value": "327", "name": "Ecchi", "russian": "Эччи"}, - {"value": "364", "name": "Xianxia", "russian": "Сянься"}, - {"value": "420", "name": "Sports", "russian": "Спорт"}, - {"value": "638", "name": "Lolicon", "russian": "Лоликон"}, - {"value": "680", "name": "Shounen Ai", "russian": "Сёнэн-ай"}, - {"value": "682", "name": "Yaoi", "russian": "Яой"}, - {"value": "691", "name": "Yuri", "russian": "Юри"}, - {"value": "720", "name": "Wuxia", "russian": "Уся"}, - {"value": "747", "name": "Smut", "russian": "Непристойность"}, - {"value": "907", "name": "eastern fantasy", "russian": "eastern fantasy"}, - {"value": "922", "name": "magical realism", "russian": "Магический реализм"}, - {"value": "993", "name": "video games", "russian": "video games"}, - {"value": "999", "name": "isekai", "russian": "isekai"}] + GENRES = [ + {"value": "1", "name": "Horror", "russian": "Ужасы"}, + {"value": "2", "name": "Mystery", "russian": "Мистика"}, + {"value": "3", "name": "Thriller", "russian": "Триллер"}, + {"value": "5", "name": "Seinen", "russian": "Сэйнэн"}, + {"value": "7", "name": "Drama", "russian": "Драма"}, + {"value": "8", "name": "Fantasy", "russian": "Фэнтези"}, + {"value": "9", "name": "Romance", "russian": "Романтика"}, + {"value": "11", "name": "Adventure", "russian": "Приключение"}, + {"value": "12", "name": "Military", "russian": "Милитари"}, + {"value": "13", "name": "Sci-Fi", "russian": "Научная фантастика"}, + {"value": "14", "name": "Action", "russian": "Экшн"}, + {"value": "15", "name": "Shoujo", "russian": "Сёдзё"}, + {"value": "17", "name": "Comedy", "russian": "Комедия"}, + {"value": "18", "name": "Psychological", "russian": "Психология"}, + {"value": "19", "name": "Tragedy", "russian": "Трагедия"}, + {"value": "20", "name": "Supernatural", "russian": "Сверхъестественное"}, + {"value": "21", "name": "School Life", "russian": "Школьная жизнь"}, + {"value": "22", "name": "Martial Arts", "russian": "Боевые искусства"}, + {"value": "23", "name": "Shoujo Ai", "russian": "Сёдзё-ай"}, + {"value": "24", "name": "Mecha", "russian": "Меха"}, + {"value": "93", "name": "Slice of Life", "russian": "Повседневность"}, + {"value": "101", "name": "Historical", "russian": "Исторический"}, + {"value": "114", "name": "Harem", "russian": "Гарем"}, + {"value": "115", "name": "Mature", "russian": "Для взрослых"}, + {"value": "189", "name": "Shounen", "russian": "Сёнэн"}, + {"value": "216", "name": "Josei", "russian": "Дзёсэй"}, + {"value": "242", "name": "Xuanhuan", "russian": "Сюаньхуа"}, + {"value": "246", "name": "Gender Bender", "russian": "Гендер бендер"}, + {"value": "258", "name": "Adult", "russian": "Для взрослых"}, + {"value": "327", "name": "Ecchi", "russian": "Эччи"}, + {"value": "364", "name": "Xianxia", "russian": "Сянься"}, + {"value": "420", "name": "Sports", "russian": "Спорт"}, + {"value": "638", "name": "Lolicon", "russian": "Лоликон"}, + {"value": "680", "name": "Shounen Ai", "russian": "Сёнэн-ай"}, + {"value": "682", "name": "Yaoi", "russian": "Яой"}, + {"value": "691", "name": "Yuri", "russian": "Юри"}, + {"value": "720", "name": "Wuxia", "russian": "Уся"}, + {"value": "747", "name": "Smut", "russian": "Непристойность"}, + {"value": "907", "name": "eastern fantasy", "russian": "eastern fantasy"}, + {"value": "922", "name": "magical realism", "russian": "Магический реализм"}, + {"value": "993", "name": "video games", "russian": "video games"}, + {"value": "999", "name": "isekai", "russian": "isekai"}, + ] diff --git a/nlightreader/consts/items/remanga_items.py b/nlightreader/consts/items/remanga_items.py index fcd2f91..7609feb 100644 --- a/nlightreader/consts/items/remanga_items.py +++ b/nlightreader/consts/items/remanga_items.py @@ -1,19 +1,24 @@ from nlightreader.consts.items.parser_items import ParserItems +from nlightreader.consts.items.preset_items import PresetKinds as Pk, PresetOrders as Po class RemangaItems(ParserItems): - KINDS = [{"value": 0, "name": "Manga", "russian": "Манга"}, - {"value": 1, "name": "Manhwa", "russian": "Манхва"}, - {"value": 2, "name": "Manhua", "russian": "Маньхуа"}, - {"value": 3, "name": "Western comic", "russian": "Западный комикс"}, - {"value": 4, "name": "Rucomics", "russian": "Рукомикс"}, - {"value": 5, "name": "Indonesian comic", "russian": "Индонезийский комикс"}, - {"value": 6, "name": "Other", "russian": "Другое"}] + ORDERS = [ + {"value": "-id"} | Po.CREATED, + {"value": "-chapter_date"} | Po.UPDATED, + {"value": "-rating"} | Po.POPULARITY, + {"value": "-votes"} | Po.LIKES_NUM, + {"value": "-views"} | Po.VIEWS, + {"value": "-count_chapters"} | Po.CHAPTERS_COUNT, + {"value": "-random"} | Po.RANDOM, + ] - ORDERS = [{"value": "-id", "name": "By date added", "russian": "По новизне"}, - {"value": "-chapter_date", "name": "By update date", "russian": "По последним обновлениям"}, - {"value": "-rating", "name": "By popularity", "russian": "По популярности"}, - {"value": "-votes", "name": "By likes", "russian": "По лайкам"}, - {"value": "-views", "name": "By views", "russian": "По просмотрам"}, - {"value": "-count_chapters", "name": "By number of chapters", "russian": "По кол-ву глав"}, - {"value": "-random", "name": "Random", "russian": "Мне повезет"}] + KINDS = [ + {"value": 0} | Pk.MANGA, + {"value": 1} | Pk.MANHWA, + {"value": 2} | Pk.MANHUA, + {"value": 3} | Pk.WESTERN_COMIC, + {"value": 4} | Pk.RU_COMIC, + {"value": 5} | Pk.INDONESIAN_COMIC, + {"value": 6} | Pk.OTHER, + ] diff --git a/nlightreader/consts/items/rulate_items.py b/nlightreader/consts/items/rulate_items.py index 6205a66..d2b8e18 100644 --- a/nlightreader/consts/items/rulate_items.py +++ b/nlightreader/consts/items/rulate_items.py @@ -1,18 +1,21 @@ from nlightreader.consts.items.parser_items import ParserItems +from nlightreader.consts.items.preset_items import PresetOrders as Po class RulateItems(ParserItems): - ORDERS = [{"value": "0", "name": "By degree of readiness", "russian": "По степени готовности"}, - {"value": "1", "name": "Title in original language", "russian": "По названию на языке оригинала"}, - {"value": "2", "name": "By title in target language", "russian": "По названию на языке перевода"}, - {"value": "3", "name": "By creation date", "russian": "По дате создания"}, - {"value": "4", "name": "By last activity date", "russian": "По дате последней активности"}, - {"value": "5", "name": "By views", "russian": "По просмотрам"}, - {"value": "6", "name": "By rating", "russian": "По рейтингу"}, - {"value": "7", "name": "By number of translated chapters", "russian": "По кол-ву переведённых глав"}, - {"value": "8", "name": "By number of likes", "russian": "По кол-ву лайков"}, - {"value": "10", "name": "By number of pages", "russian": "По кол-ву страниц"}, - {"value": "11", "name": "By number of free chapters", "russian": "По кол-ву бесплатных глав"}, - {"value": "12", "name": "By number of reviews", "russian": "По кол-ву рецензий"}, - {"value": "13", "name": "By number in bookmarks", "russian": "По кол-ву в закладках"}, - {"value": "14", "name": "By number in favorites", "russian": "По кол-ву в избранном"}] + ORDERS = [ + {"value": "0", "name": "By degree of readiness", "russian": "По степени готовности"}, + {"value": "1", "name": "Title in original language", "russian": "По названию на языке оригинала"}, + {"value": "2", "name": "By title in target language", "russian": "По названию на языке перевода"}, + {"value": "3"} | Po.CREATED, + {"value": "4", "name": "By last activity date", "russian": "По дате последней активности"}, + {"value": "5"} | Po.VIEWS, + {"value": "6"} | Po.RATING, + {"value": "7", "name": "By number of translated chapters", "russian": "По кол-ву переведённых глав"}, + {"value": "8"} | Po.LIKES_NUM, + {"value": "10", "name": "By number of pages", "russian": "По кол-ву страниц"}, + {"value": "11", "name": "By number of free chapters", "russian": "По кол-ву бесплатных глав"}, + {"value": "12", "name": "By number of reviews", "russian": "По кол-ву рецензий"}, + {"value": "13", "name": "By number in bookmarks", "russian": "По кол-ву в закладках"}, + {"value": "14", "name": "By number in favorites", "russian": "По кол-ву в избранном"}, + ] diff --git a/nlightreader/consts/items/shikimori_items.py b/nlightreader/consts/items/shikimori_items.py index 71e8cd5..3eb296a 100644 --- a/nlightreader/consts/items/shikimori_items.py +++ b/nlightreader/consts/items/shikimori_items.py @@ -1,16 +1,21 @@ from nlightreader.consts.items.parser_items import ParserItems +from nlightreader.consts.items.preset_items import PresetKinds as Pk, PresetOrders as Po class ShikimoriItems(ParserItems): - ORDERS = [{"value": "popularity", "name": "popularity", "russian": "Популярность"}, - {"value": "name", "name": "name", "russian": "Название"}, - {"value": "aired_on", "name": "aired_on", "russian": "Дата выхода"}, - {"value": "volumes", "name": "volumes", "russian": "Тома"}, - {"value": "chapters", "name": "chapters", "russian": "Главы"}, - {"value": "status", "name": "status", "russian": "Статус"}] + ORDERS = [ + {"value": "popularity"} | Po.POPULARITY, + {"value": "name"} | Po.NAME, + {"value": "aired_on"} | Po.AIRED_ON, + {"value": "volumes"} | Po.VOLUMES_COUNT, + {"value": "chapters"} | Po.CHAPTERS_COUNT, + {"value": "status"} | Po.STATUS, + ] - KINDS = [{"value": "manga", "name": "manga", "russian": "Манга"}, - {"value": "manhwa", "name": "manhwa", "russian": "Манхва"}, - {"value": "manhua", "name": "manhua", "russian": "Маньхуа"}, - {"value": "one_shot", "name": "one_shot", "russian": "Ваншот"}, - {"value": "doujin", "name": "doujin", "russian": "Додзинси"}] + KINDS = [ + {"value": "manga"} | Pk.MANGA, + {"value": "manhwa"} | Pk.MANHWA, + {"value": "manhua"} | Pk.MANHUA, + {"value": "one_shot"} | Pk.ONESHOT, + {"value": "doujin"} | Pk.DOUJIN, + ] diff --git a/nlightreader/items/RequestForm.py b/nlightreader/items/RequestForm.py index b653296..410e038 100644 --- a/nlightreader/items/RequestForm.py +++ b/nlightreader/items/RequestForm.py @@ -7,26 +7,38 @@ def __init__(self): self.limit = 50 self.search = "" self.page = 1 - self.genres: list[Genre] = [] - self.order: Order = Order.get_empty_instance() - self.kinds: list[Kind] = [] + self.__genres: list[Genre] = [] + self.__order: Order = Order.get_empty_instance() + self.__kinds: list[Kind] = [] self.lib_list = Nl.LibList.planned @property def offset(self): return (self.page - 1) * 50 - def get_kind_id(self) -> list[str]: - return [kind.content_id for kind in self.kinds] + def set_order(self, order: Order): + self.__order = order - def get_genre_id(self) -> list[str]: - return [genre.content_id for genre in self.genres] + def set_kinds(self, kinds: list[Kind]): + self.__kinds = kinds + + def set_genres(self, genres: list[Genre]): + self.__genres = genres + + def get_order_id(self) -> str: + return self.__order.content_id + + def get_kind_ids(self) -> list[str]: + return [kind.content_id for kind in self.__kinds] + + def get_genre_ids(self) -> list[str]: + return [genre.content_id for genre in self.__genres] def clear(self): self.limit = 50 self.search = "" self.page = 1 - self.genres = [] - self.order = Order.get_empty_instance() - self.kinds = [] + self.__genres = [] + self.__order = Order.get_empty_instance() + self.__kinds = [] self.lib_list = Nl.LibList.planned diff --git a/nlightreader/parsers/Shikimori.py b/nlightreader/parsers/Shikimori.py index 3af04e8..c91ca9b 100644 --- a/nlightreader/parsers/Shikimori.py +++ b/nlightreader/parsers/Shikimori.py @@ -117,9 +117,9 @@ def search_manga(self, form: RequestForm): "limit": form.limit, "search": form.search, "page": form.page, - "genre": ",".join(form.get_genre_id()), - "order": form.order.content_id, - "kind": ",".join([i.content_id for i in form.kinds]), + "order": form.get_order_id(), + "genre": ",".join(form.get_genre_ids()), + "kind": ",".join(form.get_kind_ids()), } response = get_html(url, headers=self.headers, params=params, content_type="json") mangas = [] @@ -143,10 +143,10 @@ def search_manga(self, form: RequestForm): params = { "limit": form.limit, "search": form.search, - "genre": ",".join(form.get_genre_id()), - "order": form.order.name, - "kind": ",".join([i.name for i in form.kinds]), "page": form.page, + "order": form.get_order_id(), + "genre": ",".join(form.get_genre_ids()), + "kind": ",".join(form.get_kind_ids()), } response = get_html(url, headers=self.headers, params=params, content_type="json") mangas = [] diff --git a/nlightreader/parsers/manga/Lib.py b/nlightreader/parsers/manga/Lib.py index efcd12b..ad45ff6 100644 --- a/nlightreader/parsers/manga/Lib.py +++ b/nlightreader/parsers/manga/Lib.py @@ -3,6 +3,7 @@ from bs4 import BeautifulSoup +from nlightreader.consts.items import MangaLibItems from nlightreader.consts.urls import URL_SLASHLIB, URL_MANGALIB from nlightreader.consts.enums import Nl from nlightreader.items import RequestForm, Manga, Chapter, Image @@ -29,11 +30,14 @@ def get_manga(self, manga: Manga): def search_manga(self, form: RequestForm): url = f"{self.url}/manga-list" + headers = self.headers | {"Referer": "https://mangalib.me/?section=home-updates-2239878"} params = { "name": form.search, "page": form.page, + "sort": form.get_order_id(), + "types[]": form.get_kind_ids(), } - response = get_html(url, headers=self.headers, params=params, content_type="text") + response = get_html(url, headers=headers, params=params, content_type="text") mangas = [] if response: soup = BeautifulSoup(response, "html.parser") @@ -92,7 +96,8 @@ def get_image(self, image: Image): return get_html(image.img, headers=headers, content_type="content") def get_preview(self, manga: Manga): - return get_html(manga.preview_url, content_type="content") + headers = self.headers | {"Referer": f"{self.url}/"} + return get_html(manga.preview_url, headers=headers, content_type="content") def get_manga_url(self, manga: Manga): return f"{self.url}/{manga.content_id}" @@ -114,3 +119,4 @@ class MangaLib(LibBase, AbstractMangaCatalog): def __init__(self): super().__init__() self.url = URL_MANGALIB + self.items = MangaLibItems diff --git a/nlightreader/parsers/manga/desu_manga.py b/nlightreader/parsers/manga/desu_manga.py index 05e3784..8487195 100644 --- a/nlightreader/parsers/manga/desu_manga.py +++ b/nlightreader/parsers/manga/desu_manga.py @@ -39,9 +39,9 @@ def search_manga(self, form: RequestForm): "limit": form.limit, "search": form.search, "page": form.page, - "genres": ",".join([i.content_id for i in form.genres]), - "order": form.order.content_id, - "kinds": ",".join([i.content_id for i in form.kinds]), + "genres": ",".join(form.get_genre_ids()), + "order": form.get_order_id(), + "kinds": ",".join(form.get_kind_ids()), } response = get_html(url, headers=self.headers, params=params, content_type="json") manga = [] diff --git a/nlightreader/parsers/manga/mangadex_manga.py b/nlightreader/parsers/manga/mangadex_manga.py index ab08d23..5c29049 100644 --- a/nlightreader/parsers/manga/mangadex_manga.py +++ b/nlightreader/parsers/manga/mangadex_manga.py @@ -65,7 +65,7 @@ def search_manga(self, form: RequestForm): "limit": 50, "title": form.search, "offset": form.offset, - "includedTags[]": form.get_genre_id() + form.get_kind_id(), + "includedTags[]": form.get_genre_ids() + form.get_kind_ids(), "contentRating[]": [ "safe", "suggestive", diff --git a/nlightreader/parsers/manga/remanga_manga.py b/nlightreader/parsers/manga/remanga_manga.py index 51d636c..8b4a281 100644 --- a/nlightreader/parsers/manga/remanga_manga.py +++ b/nlightreader/parsers/manga/remanga_manga.py @@ -32,10 +32,10 @@ def search_manga(self, form: RequestForm): "page": form.page, "query": form.search, "count": 40, - "ordering": form.order.content_id, + "ordering": form.get_order_id(), } params = list(params.items()) - [params.append(("types", kind_id)) for kind_id in form.get_kind_id()] + [params.append(("types", kind_id)) for kind_id in form.get_kind_ids()] response = get_html(url, headers=self.headers, params=params, content_type="json") mangas = [] if response: diff --git a/nlightreader/parsers/ranobe/ranobehub_ranobe.py b/nlightreader/parsers/ranobe/ranobehub_ranobe.py index dd7547b..6c7741d 100644 --- a/nlightreader/parsers/ranobe/ranobehub_ranobe.py +++ b/nlightreader/parsers/ranobe/ranobehub_ranobe.py @@ -37,8 +37,8 @@ def search_manga(self, form: RequestForm): params = { "title-contains": form.search, "page": form.page, - "sort": form.order.content_id, - "tags:positive[]": [int(i) for i in form.get_genre_id()], + "sort": form.get_order_id(), + "tags:positive[]": [int(i) for i in form.get_genre_ids()], } response = get_html(url, headers=self.headers, params=params, content_type="json") mangas = [] diff --git a/nlightreader/parsers/ranobe/rulate_ranobe.py b/nlightreader/parsers/ranobe/rulate_ranobe.py index a7be8a6..2178a3c 100644 --- a/nlightreader/parsers/ranobe/rulate_ranobe.py +++ b/nlightreader/parsers/ranobe/rulate_ranobe.py @@ -38,7 +38,7 @@ def search_manga(self, form: RequestForm): "t": form.search, "cat": 12, "Book_page": form.page, - "sort": form.order.content_id, + "sort": form.get_order_id(), "adult": 0, } response = get_html(f"{self.url_api}/search", params=params, content_type="text") @@ -134,7 +134,7 @@ def search_manga(self, form: RequestForm): "t": form.search, "cat": 2, "Book_page": form.page, - "sort": form.order.content_id, + "sort": form.get_order_id(), "adult": 0, } response = get_html(f"{self.url_api}/search", params=params, content_type="text") diff --git a/nlightreader/widgets/NlightTemplates/Facial.py b/nlightreader/widgets/NlightTemplates/Facial.py index 54dd99b..0fd56c5 100644 --- a/nlightreader/widgets/NlightTemplates/Facial.py +++ b/nlightreader/widgets/NlightTemplates/Facial.py @@ -78,9 +78,9 @@ def search(self): @Slot() def apply_filter(self): self.request_params.clear() - self.request_params.order = self.__filter_controller.get_active_order() - self.request_params.kinds = self.__filter_controller.get_active_kinds() - self.request_params.genres = self.__filter_controller.get_active_genres() + self.request_params.set_order(self.__filter_controller.get_active_order()) + self.request_params.set_kinds(self.__filter_controller.get_active_kinds()) + self.request_params.set_genres(self.__filter_controller.get_active_genres()) self.request_params.search = self.ui.title_line.text() self.get_content()