fixes + parralel Downloads
This commit is contained in:
parent
0f72120259
commit
189ae77abf
|
|
@ -3,6 +3,7 @@ import discord
|
||||||
import os.path
|
import os.path
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
from util import parallel_downloads
|
||||||
|
|
||||||
|
|
||||||
class ListManga(discord.ui.View):
|
class ListManga(discord.ui.View):
|
||||||
|
|
@ -12,11 +13,16 @@ class ListManga(discord.ui.View):
|
||||||
self.index = 0
|
self.index = 0
|
||||||
self.manga_list = manga_list
|
self.manga_list = manga_list
|
||||||
self.manga_files = gen_manga_files(self.manga_list)
|
self.manga_files = gen_manga_files(self.manga_list)
|
||||||
self.msg = None
|
|
||||||
|
async def force_reload(self, msg: discord.Message):
|
||||||
|
await msg.edit(
|
||||||
|
embed=manga_embed(self.manga_list[self.index]),
|
||||||
|
attachments=[self.manga_files[self.index]]
|
||||||
|
)
|
||||||
|
|
||||||
async def print_manga(self, interaction: discord.Interaction):
|
async def print_manga(self, interaction: discord.Interaction):
|
||||||
await interaction.response.defer()
|
await interaction.response.defer()
|
||||||
await self.msg.edit(
|
await interaction.message.edit(
|
||||||
embed=manga_embed(self.manga_list[self.index]),
|
embed=manga_embed(self.manga_list[self.index]),
|
||||||
attachments=[self.manga_files[self.index]]
|
attachments=[self.manga_files[self.index]]
|
||||||
)
|
)
|
||||||
|
|
@ -55,19 +61,13 @@ class ListManga(discord.ui.View):
|
||||||
|
|
||||||
|
|
||||||
def gen_manga_files(manga_list: list[Manga]):
|
def gen_manga_files(manga_list: list[Manga]):
|
||||||
ret = []
|
|
||||||
for manga in manga_list:
|
return parallel_downloads.parallel_download(manga_list)
|
||||||
if not os.path.isfile(f'tmp/{manga.id}.jpg'):
|
|
||||||
img_data = requests.get(manga.get_cover_art_url()).content
|
|
||||||
with open(f'tmp/{manga.id}.jpg', 'wb') as handler:
|
|
||||||
handler.write(img_data)
|
|
||||||
ret.append(discord.File(f"tmp/{manga.id}.jpg", f"{manga.id}.jpg"))
|
|
||||||
return ret
|
|
||||||
|
|
||||||
|
|
||||||
def manga_embed(manga: Manga):
|
def manga_embed(manga: Manga):
|
||||||
e = discord.Embed(title=manga.get_title(), description=manga.get_description(), url=manga.get_url())
|
e = discord.Embed(title=manga.get_title(), description=manga.get_description(), url=manga.get_url())
|
||||||
|
extension = manga.get_cover_art_extension()
|
||||||
e.set_thumbnail(url=f"attachment://{manga.id}.jpg")
|
e.set_thumbnail(url=f"attachment://{manga.id}.{extension}")
|
||||||
|
|
||||||
return e
|
return e
|
||||||
|
|
|
||||||
5
main.py
5
main.py
|
|
@ -43,8 +43,9 @@ async def search_command(
|
||||||
view = embed_util.ListManga(manga_list)
|
view = embed_util.ListManga(manga_list)
|
||||||
await chanel.send(f"Hey, you searched for {title}")
|
await chanel.send(f"Hey, you searched for {title}")
|
||||||
msg = await chanel.send(view=view, embed=embed_util.manga_embed(manga_list[0]))
|
msg = await chanel.send(view=view, embed=embed_util.manga_embed(manga_list[0]))
|
||||||
view.msg = msg
|
await view.force_reload(msg)
|
||||||
await view.wait()
|
ret = await view.wait()
|
||||||
|
print(ret)
|
||||||
await chanel.send("Done")
|
await chanel.send("Done")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
19
manga.py
19
manga.py
|
|
@ -51,7 +51,10 @@ class Manga:
|
||||||
try:
|
try:
|
||||||
return self.data["attributes"]["title"]["en"]
|
return self.data["attributes"]["title"]["en"]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
try:
|
||||||
return self.data["attributes"]["title"][0]
|
return self.data["attributes"]["title"][0]
|
||||||
|
except KeyError:
|
||||||
|
return "No Title"
|
||||||
|
|
||||||
def get_latest_chap(self) -> Chapter:
|
def get_latest_chap(self) -> Chapter:
|
||||||
return Chapter(self.data["attributes"]["latestUploadedChapter"])
|
return Chapter(self.data["attributes"]["latestUploadedChapter"])
|
||||||
|
|
@ -65,16 +68,28 @@ class Manga:
|
||||||
|
|
||||||
|
|
||||||
r = requests.get(f"{self.base_url}/cover/{cover_art_id}")
|
r = requests.get(f"{self.base_url}/cover/{cover_art_id}")
|
||||||
print( r.json()["data"])
|
|
||||||
cover_fileName = r.json()["data"]["attributes"]["fileName"]
|
cover_fileName = r.json()["data"]["attributes"]["fileName"]
|
||||||
cover_extension = cover_fileName.split(".")[1]
|
cover_extension = cover_fileName.split(".")[1]
|
||||||
return f"https://mangadex.org/covers/{self.id}/{cover_fileName}.256.{cover_extension}"
|
return f"https://mangadex.org/covers/{self.id}/{cover_fileName}.256.{cover_extension}"
|
||||||
|
|
||||||
|
def get_cover_art_extension(self):
|
||||||
|
cover_art_id = ""
|
||||||
|
for relation in self.data["relationships"]:
|
||||||
|
if relation["type"] == "cover_art":
|
||||||
|
cover_art_id = relation["id"]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
r = requests.get(f"{self.base_url}/cover/{cover_art_id}")
|
||||||
|
cover_fileName = r.json()["data"]["attributes"]["fileName"]
|
||||||
|
cover_extension = cover_fileName.split(".")[1]
|
||||||
|
return cover_extension
|
||||||
|
|
||||||
def get_description(self) -> str:
|
def get_description(self) -> str:
|
||||||
if "en" in self.data["attributes"]["description"].keys():
|
if "en" in self.data["attributes"]["description"].keys():
|
||||||
return self.data["attributes"]["description"]["en"]
|
return self.data["attributes"]["description"]["en"]
|
||||||
else:
|
else:
|
||||||
if list(self.data["attributes"]["description"].keys()) > 0:
|
if len(list(self.data["attributes"]["description"].keys())) > 0:
|
||||||
return self.data["attributes"]["description"][list(self.data["attributes"]["description"].keys())[0]]
|
return self.data["attributes"]["description"][list(self.data["attributes"]["description"].keys())[0]]
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
import concurrent.futures
|
||||||
|
import requests
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
|
||||||
|
import discord
|
||||||
|
from manga import Manga
|
||||||
|
|
||||||
|
|
||||||
|
def download_file(manga: Manga):
|
||||||
|
extension = manga.get_cover_art_extension()
|
||||||
|
if not os.path.isfile(f'tmp/{manga.id}.{extension}'):
|
||||||
|
img_data = requests.get(manga.get_cover_art_url()).content
|
||||||
|
with open(f'tmp/{manga.id}.{extension}', 'wb') as handler:
|
||||||
|
handler.write(img_data)
|
||||||
|
return discord.File(f"tmp/{manga.id}.{extension}", f"{manga.id}.{extension}")
|
||||||
|
|
||||||
|
def parallel_download(manga_list: list[Manga]) -> list[discord.File]:
|
||||||
|
with concurrent.futures.ThreadPoolExecutor() as exector:
|
||||||
|
result = exector.map(download_file, manga_list)
|
||||||
|
|
||||||
|
return list(result)
|
||||||
|
|
||||||
Loading…
Reference in New Issue