Skip to content

Commit

Permalink
Add track duration to np and fix some bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
joinemm committed Nov 28, 2023
1 parent ee5fc85 commit 819adc3
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 23 deletions.
38 changes: 28 additions & 10 deletions cogs/lastfm.py
Original file line number Diff line number Diff line change
Expand Up @@ -463,7 +463,7 @@ async def nowplaying(self, ctx: MisoContext):
content = discord.Embed(
color=await self.image_color(image),
description=f":cd: **{escape_markdown(album_name)}**",
title=f"**{escape_markdown(artist_name)} — *{escape_markdown(track_name)}* **",
title=f"**{escape_markdown(artist_name)} — *{escape_markdown(track_name)}***",
)
content.set_thumbnail(url=image.as_full())

Expand All @@ -486,6 +486,12 @@ async def nowplaying(self, ctx: MisoContext):
text=", ".join(tag["name"] for tag in track_info["toptags"]["tag"])
)

if (duration := int(track_info["duration"])) > 0:
m, s = divmod(duration / 1000, 60)
h, m = divmod(m, 60)
duration_fmt = (f"{int(h)}:" if h > 1 else "") + f"{int(m)}:{int(s):02}"
content.title = content.title + f" `[{duration_fmt}]`"

# play state
if track["nowplaying"]:
state = "| Now Playing"
Expand Down Expand Up @@ -868,9 +874,12 @@ async def album(self, ctx: MisoContext, *, album: Annotated[tuple, AlbumArgument
album_name = albuminfo["name"]
artist_name = albuminfo["artist"]

tracks = albuminfo["tracks"]["track"]
if isinstance(tracks, dict):
tracks = [tracks]
try:
tracks = albuminfo["tracks"]["track"]
if isinstance(tracks, dict):
tracks = [tracks]
except KeyError:
tracks = []

library = {
name: playcount
Expand All @@ -886,10 +895,16 @@ async def album(self, ctx: MisoContext, *, album: Annotated[tuple, AlbumArgument

metadata = await self.api.scrape_album_metadata(artist_name, album_name)
if metadata:
content.add_field(
name="Release Date",
value=f"{metadata['release_date'].format('MMM D YYYY')}",
)
if metadata["length"]:
content.add_field(
name="Length",
value=f"{metadata['length']}",
)
if metadata["release_date"]:
content.add_field(
name="Release Date",
value=f"{metadata['release_date'].format('MMM D YYYY')}",
)

content.add_field(name="Total plays", value=albuminfo["userplaycount"])

Expand All @@ -905,8 +920,8 @@ async def album(self, ctx: MisoContext, *, album: Annotated[tuple, AlbumArgument
else:
row = f"`{track['@attr']['rank']:02}` {track['name']}"

if track["duration"]:
m, s = divmod(track["duration"], 60)
if (duration := int(track["duration"])) > 0:
m, s = divmod(duration, 60)
h, m = divmod(m, 60)
duration_fmt = (f"{h}:" if h > 1 else "") + f"{m}:{s:02}"
row += f" `{duration_fmt}`"
Expand All @@ -915,6 +930,9 @@ async def album(self, ctx: MisoContext, *, album: Annotated[tuple, AlbumArgument
row += f" [**{playcount}**]"
tracklist.append(row)

if not tracklist:
tracklist.append("> This album has no tracks!")

await self.paginated_user_stat_embed(
ctx,
tracklist,
Expand Down
28 changes: 15 additions & 13 deletions modules/lastfm.py
Original file line number Diff line number Diff line change
Expand Up @@ -493,25 +493,27 @@ async def scrape_album_metadata(self, artist: str, album: str) -> dict | None:
"""Get more info about an album."""
url = f"https://www.last.fm/music/{urllib.parse.quote_plus(artist)}/{urllib.parse.quote_plus(album)}"
soup = await self.scrape_page(url)
metadata = soup.select(".catalogue-metadata-description")
metadata_headings = soup.select(".catalogue-metadata-heading")
metadata_values = soup.select(".catalogue-metadata-description")
metadata = dict(
zip(
[h.text.strip() for h in metadata_headings],
[v.text.strip() for v in metadata_values],
)
)
if metadata:
length_str, release_date_str = metadata[:2]
release_date = arrow.get(release_date_str.text, "D MMMM YYYY")
lengthdata = length_str.text.split(",")
length = None
tracks = None
if len(lengthdata) > 1:
tracks, length = lengthdata
tracks = int(tracks.split()[0])
length = length.strip()
release_date = None
if metadata.get("Release Date"):
try:
release_date = arrow.get(metadata["Release Date"], "D MMMM YYYY")
except arrow.parser.ParserMatchError:
release_date = arrow.get(metadata["Release Date"], "YYYY")

return {
"track_count": tracks,
"length": length,
"length": metadata.get("Length"),
"release_date": release_date,
}

logger.warning(f"{artist} | {album} : metadata={metadata}")
return None

async def library_artist_images(
Expand Down

0 comments on commit 819adc3

Please sign in to comment.