2021-12-19 17:20:34 +01:00
|
|
|
import pdb
|
|
|
|
import argparse
|
|
|
|
from time import sleep
|
|
|
|
import requests
|
|
|
|
import shutil
|
|
|
|
from pathlib import Path
|
|
|
|
import mangadexdlp.api as MdApi
|
|
|
|
import mangadexdlp.utils as MdUtils
|
|
|
|
import mangadexdlp.downloader as MdDownloader
|
|
|
|
import mangadexdlp.sqlite as MdSqlite
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def mangadex_dlp(md_url='',md_chapters=None,md_dest='downloads',md_lang='en',md_list_chapters=False,md_nocbz=False):
|
|
|
|
'''Download Mangas from Mangadex.org\n
|
|
|
|
|
|
|
|
Args:\n
|
|
|
|
url (str) -- Manga URL to Download. No defaults\n
|
|
|
|
chapter (str/int) -- Chapters to download "all" for every chapter available. Defaults to none\n
|
|
|
|
dest (str) -- Folder to save mangas to. Defaults to "downloads"\n
|
|
|
|
lang (str) -- Language to download chapters in. Defaults to "en" -> english\n
|
|
|
|
list (bool) -- If it should only list all available chapters. Defaults to False\n
|
|
|
|
nocbz (bool) -- If the downloaded images should not be packed into a .cbz archive. Defaults to false\n
|
|
|
|
|
|
|
|
Returns:\n
|
|
|
|
nothing\n
|
|
|
|
'''
|
|
|
|
# check if md_list_chapters is true, if not check if chapters to download were specified
|
2021-12-19 17:47:41 +01:00
|
|
|
if not md_list_chapters and md_chapters == None:
|
|
|
|
# no chapters to download were given
|
|
|
|
print(f'You need to specify one or more chapters to download. To see all chapters use "--list"')
|
|
|
|
exit(1)
|
2021-12-19 17:20:34 +01:00
|
|
|
|
|
|
|
# get uuid and manga name of url
|
|
|
|
manga_uuid = MdApi.get_manga_uuid(md_url)
|
|
|
|
manga_title = MdApi.get_manga_title(manga_uuid, md_lang)
|
|
|
|
|
|
|
|
print(f'Manga Name: {manga_title}')
|
|
|
|
print(f'UUID: {manga_uuid}')
|
|
|
|
|
|
|
|
# get chapters
|
|
|
|
manga_chapter_data = MdApi.get_manga_chapters(manga_uuid, md_lang)
|
|
|
|
# [0][0] = Chapter number/oneshot
|
|
|
|
# [0][1] = Chapter UUID
|
|
|
|
# [0][2] = Chapter Hash
|
|
|
|
# [0][3] = Chapter Name
|
|
|
|
# [0][4] = Chapter Data
|
|
|
|
|
|
|
|
# crate chapter list
|
|
|
|
manga_chapter_list = []
|
|
|
|
for chap in manga_chapter_data:
|
|
|
|
chapter_number = chap[0]
|
|
|
|
manga_chapter_list.append(chapter_number)
|
|
|
|
|
|
|
|
# list chapters if md_list_chapters is true
|
|
|
|
if md_list_chapters:
|
|
|
|
print(f'Available Chapters:\n{manga_chapter_list}')
|
|
|
|
|
|
|
|
# check chapters to download if it not all
|
|
|
|
chapters_to_download = []
|
|
|
|
if md_chapters.lower() == 'all':
|
|
|
|
chapters_to_download = manga_chapter_list
|
|
|
|
else:
|
|
|
|
chapters_to_download = MdUtils.get_chapter_list(md_chapters)
|
|
|
|
|
|
|
|
# create manga folder
|
|
|
|
manga_path = Path(f'{md_dest}/{manga_title}')
|
|
|
|
manga_path.mkdir(parents=True, exist_ok=True)
|
|
|
|
|
|
|
|
# main download loop
|
|
|
|
for chapter in chapters_to_download:
|
|
|
|
# get list of image urls
|
|
|
|
list_index = manga_chapter_data.index(chapter)
|
|
|
|
image_urls = MdUtils.get_img_urls(manga_chapter_data[list_index])
|
|
|
|
chapter_num = manga_chapter_data[list_index][0]
|
|
|
|
chapter_name = manga_chapter_data[list_index][3]
|
|
|
|
|
|
|
|
# filename for chapter
|
|
|
|
if chapter_name == None and chapter_num == 'Oneshot':
|
|
|
|
chapter_filename = 'Oneshot'
|
|
|
|
elif chapter_name == None:
|
|
|
|
chapter_filename = f'Ch. {chapter_num}'
|
|
|
|
else:
|
|
|
|
chapter_filename = f'Ch. {chapter_num} - {chapter_name}'
|
|
|
|
|
|
|
|
# create chapter folder
|
|
|
|
chapter_path = manga_path / chapter_filename
|
|
|
|
chapter_path.mkdir(parents=True, exist_ok=True)
|
|
|
|
|
|
|
|
# download images
|
|
|
|
print(f'Downloading Chapter {chapter_num}')
|
|
|
|
print(f'DEBUG: Downloading Chapter {chapter}')
|
|
|
|
try:
|
|
|
|
MdDownloader.download_chapter(image_urls, chapter_path)
|
|
|
|
except:
|
|
|
|
print('Cant download chapter. Exiting')
|
|
|
|
exit(1)
|
|
|
|
else:
|
|
|
|
# Done with chapter
|
|
|
|
print(f'--Done with Chapter {chapter_num}')
|
|
|
|
|
|
|
|
# make cbz of folder
|
|
|
|
if not md_nocbz:
|
|
|
|
print('Creating .cbz archive')
|
|
|
|
try:
|
|
|
|
MdUtils.make_archive(chapter_path, manga_path)
|
|
|
|
except:
|
|
|
|
print('Could not make cbz archive')
|
|
|
|
exit(1)
|
|
|
|
else:
|
|
|
|
print('Done')
|
|
|
|
|
|
|
|
|