fixes + parralel Downloads

This commit is contained in:
franchioping 2024-07-23 14:19:45 +01:00
parent 0f72120259
commit 189ae77abf
4 changed files with 56 additions and 17 deletions

View File

@ -3,6 +3,7 @@ import discord
import os.path
import requests
from util import parallel_downloads
class ListManga(discord.ui.View):
@ -12,11 +13,16 @@ class ListManga(discord.ui.View):
self.index = 0
self.manga_list = 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):
await interaction.response.defer()
await self.msg.edit(
await interaction.message.edit(
embed=manga_embed(self.manga_list[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]):
ret = []
for manga in 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
return parallel_downloads.parallel_download(manga_list)
def manga_embed(manga: Manga):
e = discord.Embed(title=manga.get_title(), description=manga.get_description(), url=manga.get_url())
e.set_thumbnail(url=f"attachment://{manga.id}.jpg")
extension = manga.get_cover_art_extension()
e.set_thumbnail(url=f"attachment://{manga.id}.{extension}")
return e

View File

@ -43,8 +43,9 @@ async def search_command(
view = embed_util.ListManga(manga_list)
await chanel.send(f"Hey, you searched for {title}")
msg = await chanel.send(view=view, embed=embed_util.manga_embed(manga_list[0]))
view.msg = msg
await view.wait()
await view.force_reload(msg)
ret = await view.wait()
print(ret)
await chanel.send("Done")

View File

@ -51,7 +51,10 @@ class Manga:
try:
return self.data["attributes"]["title"]["en"]
except KeyError:
try:
return self.data["attributes"]["title"][0]
except KeyError:
return "No Title"
def get_latest_chap(self) -> Chapter:
return Chapter(self.data["attributes"]["latestUploadedChapter"])
@ -65,16 +68,28 @@ class Manga:
r = requests.get(f"{self.base_url}/cover/{cover_art_id}")
print( r.json()["data"])
cover_fileName = r.json()["data"]["attributes"]["fileName"]
cover_extension = cover_fileName.split(".")[1]
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:
if "en" in self.data["attributes"]["description"].keys():
return self.data["attributes"]["description"]["en"]
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 ""

View File

@ -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)