ux changes, async requests
This commit is contained in:
parent
2a0941643c
commit
3cd3e44430
|
|
@ -48,16 +48,7 @@ class ListManga(discord.ui.View):
|
|||
self.add_button.disabled = self.manga_list[self.index] in self.user_manga_list
|
||||
self.remove.disabled = self.manga_list[self.index] not in self.user_manga_list
|
||||
|
||||
async def force_reload(self):
|
||||
await self.update_buttons()
|
||||
|
||||
self.msg = await self.msg.edit(
|
||||
embed=manga_embed(self.manga_list, self.index),
|
||||
attachments=[
|
||||
parallel_downloads.discord_file_from_filename(self.thumbnail_files[self.index])
|
||||
],
|
||||
view=self
|
||||
)
|
||||
|
||||
async def print_manga(self, interaction: discord.Interaction):
|
||||
|
||||
|
|
@ -65,7 +56,13 @@ class ListManga(discord.ui.View):
|
|||
|
||||
await self.update_buttons()
|
||||
|
||||
await self.force_reload()
|
||||
await interaction.message.edit(
|
||||
embed=await manga_embed(self.manga_list, self.index),
|
||||
attachments=[
|
||||
parallel_downloads.discord_file_from_filename(self.thumbnail_files[self.index])
|
||||
],
|
||||
view=self
|
||||
)
|
||||
|
||||
@discord.ui.button(label=prev_label, style=discord.ButtonStyle.grey)
|
||||
async def previous(self, interaction: discord.Interaction, button: discord.ui.Button):
|
||||
|
|
@ -113,11 +110,11 @@ def gen_manga_files(manga_list: list[Manga]):
|
|||
return parallel_downloads.parallel_download(manga_list)
|
||||
|
||||
|
||||
def manga_embed(manga_list: list[Manga], index: int):
|
||||
async def manga_embed(manga_list: list[Manga], index: int):
|
||||
manga = manga_list[index]
|
||||
e = discord.Embed(title=f"({index + 1}\\{len(manga_list)}) {manga.get_title()}",
|
||||
description=manga.get_description(), url=manga.get_url())
|
||||
extension = manga.get_cover_art_extension()
|
||||
extension = await manga.get_cover_art_extension()
|
||||
e.set_thumbnail(url=f"attachment://{manga.id}.{extension}")
|
||||
|
||||
return e
|
||||
|
|
@ -138,14 +135,14 @@ def get_chapter_filenames(manga: Manga):
|
|||
return parallel_downloads.parallel_download([manga])
|
||||
|
||||
|
||||
def chapter_embed(manga: Manga, chapter: Chapter):
|
||||
async def chapter_embed(manga: Manga, chapter: Chapter):
|
||||
volume_info = f"Volume {chapter.get_volume()}" if chapter.get_volume() else ""
|
||||
chapter_title = f"{chapter.get_title()}" if chapter.get_title() else ""
|
||||
chapter_title = f"\"{chapter.get_title()}\" " if chapter.get_title() else ""
|
||||
e = discord.Embed(
|
||||
title=f'"{manga.get_title()}" Chapter {chapter_title} Released!',
|
||||
title=f'"{manga.get_title()}" Chapter {chapter_title}Released!',
|
||||
description=f"{volume_info} Chapter {chapter.get_number()} of {manga.get_title()} Released."
|
||||
f"\nGo read it now!",
|
||||
url=chapter.get_url()
|
||||
)
|
||||
e.set_thumbnail(url=f"attachment://{manga.id}.{manga.get_cover_art_extension()}")
|
||||
e.set_thumbnail(url=f"attachment://{manga.id}.{await manga.get_cover_art_extension()}")
|
||||
return e
|
||||
|
|
|
|||
11
main.py
11
main.py
|
|
@ -8,6 +8,7 @@ from dotenv import load_dotenv
|
|||
import embed_util
|
||||
import manager
|
||||
import manga_api
|
||||
from util import parallel_downloads
|
||||
|
||||
mh = manga_api.MangaHandler()
|
||||
|
||||
|
|
@ -32,16 +33,18 @@ async def first_command(interaction: discord.Interaction):
|
|||
|
||||
async def render_manga_list_in_dm(interaction: discord.Interaction, manga_list: list[manga_api.Manga]):
|
||||
chanel = await interaction.user.create_dm()
|
||||
await interaction.followup.send("Check your DM's")
|
||||
|
||||
if len(manga_list) == 0:
|
||||
await chanel.send("No Manga in Here")
|
||||
return
|
||||
|
||||
list_msg = await interaction.followup.send(embed=embed_util.manga_list_embed(manga_list))
|
||||
list_msg = await chanel.send(embed=embed_util.manga_list_embed(manga_list))
|
||||
view = embed_util.ListManga(manga_list, await man.get_user_mangas(interaction.user))
|
||||
msg = await interaction.followup.send(view=view, embed=embed_util.manga_embed(manga_list, 0))
|
||||
view.set_msg(msg)
|
||||
await view.force_reload()
|
||||
msg = await chanel.send(view=view, embed=await embed_util.manga_embed(manga_list, 0),
|
||||
files=[parallel_downloads.discord_file_from_filename(filename) for filename in
|
||||
embed_util.get_chapter_filenames(manga_list[0])]
|
||||
)
|
||||
|
||||
await view.wait()
|
||||
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ class Manager:
|
|||
chapter: manga_api.Chapter) -> None:
|
||||
dm_channel = await user.create_dm()
|
||||
await dm_channel.send(
|
||||
embed=embed_util.chapter_embed(manga, chapter),
|
||||
embed=await embed_util.chapter_embed(manga, chapter),
|
||||
files=[parallel_downloads.discord_file_from_filename(filename) for filename in
|
||||
embed_util.get_chapter_filenames(manga)]
|
||||
)
|
||||
|
|
|
|||
37
manga_api.py
37
manga_api.py
|
|
@ -1,6 +1,6 @@
|
|||
import os
|
||||
from dotenv import load_dotenv
|
||||
import requests
|
||||
import util.async_requests as requests
|
||||
import asyncio
|
||||
|
||||
|
||||
|
|
@ -15,8 +15,6 @@ class Chapter:
|
|||
self.base_url = _base_url
|
||||
self.data = None
|
||||
|
||||
self.update_data()
|
||||
|
||||
@classmethod
|
||||
async def init(cls, id: str , _base_url=base_url):
|
||||
self = cls(id, _base_url)
|
||||
|
|
@ -24,7 +22,7 @@ class Chapter:
|
|||
return self
|
||||
|
||||
async def update_data(self):
|
||||
r = requests.get(
|
||||
r = await requests.get(
|
||||
f"{self.base_url}/chapter/{self.id}"
|
||||
)
|
||||
self.data = r.json()["data"]
|
||||
|
|
@ -72,7 +70,7 @@ class Manga:
|
|||
|
||||
|
||||
async def update_data(self):
|
||||
r = requests.get(
|
||||
r = await requests.get(
|
||||
f"{self.base_url}/manga/{self.id}"
|
||||
)
|
||||
self.data = r.json()["data"]
|
||||
|
|
@ -87,21 +85,14 @@ class Manga:
|
|||
return "No Title"
|
||||
|
||||
async def get_latest_chap(self) -> Chapter:
|
||||
params = {
|
||||
"manga": self.id,
|
||||
"translatedLanguage": ["en"],
|
||||
"order": {
|
||||
"chapter": "desc"
|
||||
}
|
||||
}
|
||||
r = requests.get(
|
||||
r = await requests.get(
|
||||
f"{self.base_url}/chapter?manga={self.id}&originalLanguage%5B%5D=en&contentRating%5B%5D=safe"
|
||||
f"&contentRating%5B%5D=suggestive&contentRating%5B%5D=erotica&includeFutureUpdates=1&order%5Bchapter%5D"
|
||||
f"=desc",
|
||||
|
||||
)
|
||||
if r.json()["total"] == 0:
|
||||
r = requests.get(
|
||||
r = await requests.get(
|
||||
f"{self.base_url}/chapter?manga={self.id}&translatedLanguage%5B%5D=en&contentRating%5B%5D=safe"
|
||||
f"&contentRating%5B%5D=suggestive&contentRating%5B%5D=erotica&includeFutureUpdates=1&order%5Bchapter"
|
||||
f"%5D=desc",
|
||||
|
|
@ -109,26 +100,26 @@ class Manga:
|
|||
|
||||
latest_chap = r.json()["data"][0]
|
||||
|
||||
return Chapter(latest_chap["id"])
|
||||
return await Chapter.init(latest_chap["id"])
|
||||
|
||||
def get_cover_art_url(self):
|
||||
async def get_cover_art_url(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}")
|
||||
r = await requests.get(f"{self.base_url}/cover/{cover_art_id}")
|
||||
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):
|
||||
async 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}")
|
||||
r = await 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
|
||||
|
|
@ -149,8 +140,8 @@ class Manga:
|
|||
"id": self.id,
|
||||
"title": self.get_title(),
|
||||
"url": self.get_url(),
|
||||
"art_url": self.get_cover_art_url(),
|
||||
"latest_chapter": str(asyncio.ensure_future(self.get_latest_chap()))
|
||||
"art_url": asyncio.gather(self.get_cover_art_url()),
|
||||
"latest_chapter": str(asyncio.gather(self.get_latest_chap()))
|
||||
})
|
||||
|
||||
def __eq__(self, other):
|
||||
|
|
@ -162,7 +153,7 @@ class MangaHandler:
|
|||
self.base_url = base_url
|
||||
|
||||
async def search(self, title: str) -> list[Manga]:
|
||||
r = requests.get(
|
||||
r = await requests.get(
|
||||
f"{self.base_url}/manga",
|
||||
params={"title": title}
|
||||
)
|
||||
|
|
@ -170,7 +161,7 @@ class MangaHandler:
|
|||
manga_list: list[Manga] = []
|
||||
for manga in data:
|
||||
manga_id = manga["id"]
|
||||
manga_list.append(Manga(manga_id))
|
||||
manga_list.append(await Manga.init(manga_id))
|
||||
|
||||
return manga_list
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
import asyncio
|
||||
|
||||
import requests
|
||||
|
||||
|
||||
async def get(*args, **kwargs):
|
||||
return await asyncio.to_thread(requests.get, *args, **kwargs)
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
import concurrent.futures
|
||||
import requests
|
||||
import os.path
|
||||
|
||||
import asyncio
|
||||
|
||||
import discord
|
||||
from manga_api import Manga
|
||||
|
|
@ -12,9 +12,9 @@ DOWNLOAD_DIRECTORY = 'tmp/'
|
|||
def discord_file_from_filename(filename: str) -> discord.File:
|
||||
return discord.File(f"{DOWNLOAD_DIRECTORY}{filename}",filename)
|
||||
def download_file(manga: Manga) -> str:
|
||||
extension = manga.get_cover_art_extension()
|
||||
extension = asyncio.run(manga.get_cover_art_extension())
|
||||
if not os.path.isfile(f'{DOWNLOAD_DIRECTORY}/{manga.id}.{extension}'):
|
||||
img_data = requests.get(manga.get_cover_art_url()).content
|
||||
img_data = requests.get(asyncio.run(manga.get_cover_art_url())).content
|
||||
with open(f'{DOWNLOAD_DIRECTORY}/{manga.id}.{extension}', 'wb') as handler:
|
||||
handler.write(img_data)
|
||||
return f"{manga.id}.{extension}"
|
||||
|
|
|
|||
Loading…
Reference in New Issue