mirror of
https://github.com/tcsenpai/swingmusic.git
synced 2025-06-17 16:30:25 +00:00

- add album page store - show loaders in beforeEnter guards - show bitrate on now playing card - etc
129 lines
2.9 KiB
Python
129 lines
2.9 KiB
Python
"""
|
|
Contains all the models for objects generation and typing.
|
|
"""
|
|
|
|
from dataclasses import dataclass
|
|
from datetime import date
|
|
from typing import List
|
|
from app import api
|
|
from app import settings
|
|
|
|
|
|
@dataclass
|
|
class Track:
|
|
"""
|
|
Track class
|
|
"""
|
|
|
|
trackid: str
|
|
title: str
|
|
artists: str
|
|
albumartist: str
|
|
album: str
|
|
folder: str
|
|
filepath: str
|
|
length: int
|
|
genre: str
|
|
bitrate: int
|
|
image: str
|
|
tracknumber: int
|
|
discnumber: int
|
|
|
|
def __init__(self, tags):
|
|
self.trackid = tags["_id"]["$oid"]
|
|
self.title = tags["title"]
|
|
self.artists = tags["artists"].split(", ")
|
|
self.albumartist = tags["albumartist"]
|
|
self.album = tags["album"]
|
|
self.folder = tags["folder"]
|
|
self.filepath = tags["filepath"]
|
|
self.length = tags["length"]
|
|
self.genre = tags["genre"]
|
|
self.bitrate = tags["bitrate"]
|
|
self.image = tags["image"]
|
|
self.tracknumber = tags["tracknumber"]
|
|
self.discnumber = tags["discnumber"]
|
|
|
|
|
|
@dataclass
|
|
class Album:
|
|
"""
|
|
Album class
|
|
"""
|
|
|
|
album: str
|
|
artist: str
|
|
count: int
|
|
duration: int
|
|
date: int
|
|
artistimage: str
|
|
image: str
|
|
|
|
def __init__(self, tags):
|
|
self.album = tags["album"]
|
|
self.artist = tags["artist"]
|
|
self.count = tags["count"]
|
|
self.duration = tags["duration"]
|
|
self.date = tags["date"]
|
|
self.artistimage = settings.IMG_ARTIST_URI + tags["artistimage"]
|
|
self.image = settings.IMG_THUMB_URI + tags["image"]
|
|
|
|
|
|
def get_p_track(ptrack):
|
|
for track in api.TRACKS:
|
|
if (
|
|
track.title == ptrack["title"]
|
|
and track.artists == ptrack["artists"]
|
|
and ptrack["album"] == track.album
|
|
):
|
|
return track
|
|
|
|
|
|
def create_playlist_tracks(playlist_tracks: List) -> List[Track]:
|
|
"""
|
|
Creates a list of model.Track objects from a list of playlist track dicts.
|
|
"""
|
|
tracks: List[Track] = []
|
|
|
|
for t in playlist_tracks:
|
|
track = get_p_track(t)
|
|
if track is not None:
|
|
tracks.append(track)
|
|
|
|
return tracks
|
|
|
|
|
|
@dataclass
|
|
class Playlist:
|
|
"""Creates playlist objects"""
|
|
|
|
playlistid: str
|
|
name: str
|
|
description: str
|
|
image: str
|
|
tracks: List[Track]
|
|
lastUpdated: int
|
|
count: int = 0
|
|
"""A list of track objects in the playlist"""
|
|
|
|
def __init__(self, data):
|
|
self.playlistid = data["_id"]["$oid"]
|
|
self.name = data["name"]
|
|
self.description = data["description"]
|
|
self.image = ""
|
|
self.tracks = create_playlist_tracks(data["tracks"])
|
|
self.lastUpdated = data["lastUpdated"]
|
|
|
|
|
|
@dataclass
|
|
class Folder:
|
|
name: str
|
|
path: str
|
|
trackcount: int
|
|
"""The number of tracks in the folder"""
|
|
|
|
def __init__(self, data) -> None:
|
|
self.name = data["name"]
|
|
self.path = data["path"]
|
|
self.trackcount = data["trackcount"]
|