mirror of
https://github.com/Dvorinka/swingmusic-extended.git
synced 2026-06-05 04:53:01 +00:00
create the lib module
This commit is contained in:
@@ -0,0 +1,101 @@
|
|||||||
|
import urllib
|
||||||
|
from typing import List
|
||||||
|
from app import models, functions, helpers
|
||||||
|
from app.lib import trackslib
|
||||||
|
from app import api
|
||||||
|
|
||||||
|
|
||||||
|
@helpers.background
|
||||||
|
def create_everything() -> List[models.Track]:
|
||||||
|
"""
|
||||||
|
Creates album objects for all albums and returns
|
||||||
|
a list of track objects
|
||||||
|
"""
|
||||||
|
albums: list[models.Album] = functions.get_all_albums()
|
||||||
|
|
||||||
|
api.ALBUMS.clear()
|
||||||
|
api.ALBUMS.extend(albums)
|
||||||
|
trackslib.create_all_tracks()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def get_album_duration(album: list) -> int:
|
||||||
|
"""
|
||||||
|
Gets the duration of an album.
|
||||||
|
"""
|
||||||
|
|
||||||
|
album_duration = 0
|
||||||
|
|
||||||
|
for track in album:
|
||||||
|
album_duration += track["length"]
|
||||||
|
|
||||||
|
return album_duration
|
||||||
|
|
||||||
|
|
||||||
|
def get_album_image(album: list) -> str:
|
||||||
|
"""
|
||||||
|
Gets the image of an album.
|
||||||
|
"""
|
||||||
|
|
||||||
|
for track in album:
|
||||||
|
img = functions.extract_thumb(track["filepath"])
|
||||||
|
|
||||||
|
if img is not None:
|
||||||
|
return img
|
||||||
|
|
||||||
|
return functions.use_defaults()
|
||||||
|
|
||||||
|
|
||||||
|
def get_album_tracks(album: str, artist: str) -> List:
|
||||||
|
return [
|
||||||
|
track
|
||||||
|
for track in api.DB_TRACKS
|
||||||
|
if track["album"] == album and track["albumartist"] == artist
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def create_album(track) -> models.Album:
|
||||||
|
"""
|
||||||
|
Generates and returns an album object from a track object.
|
||||||
|
"""
|
||||||
|
album = {
|
||||||
|
"album": track["album"],
|
||||||
|
"artist": track["albumartist"],
|
||||||
|
}
|
||||||
|
|
||||||
|
album_tracks = get_album_tracks(album["album"], album["artist"])
|
||||||
|
|
||||||
|
album["count"] = len(album_tracks)
|
||||||
|
album["duration"] = get_album_duration(album_tracks)
|
||||||
|
album["date"] = album_tracks[0]["date"]
|
||||||
|
album["artistimage"] = urllib.parse.quote_plus(
|
||||||
|
album_tracks[0]["albumartist"] + ".webp"
|
||||||
|
)
|
||||||
|
|
||||||
|
album["image"] = get_album_image(album_tracks)
|
||||||
|
|
||||||
|
return models.Album(album)
|
||||||
|
|
||||||
|
|
||||||
|
def find_album(albumtitle, artist):
|
||||||
|
for album in api.ALBUMS:
|
||||||
|
if album.album == albumtitle and album.artist == artist:
|
||||||
|
return album
|
||||||
|
|
||||||
|
|
||||||
|
def search_albums_by_name(query: str) -> List[models.Album]:
|
||||||
|
"""
|
||||||
|
Searches albums by album name.
|
||||||
|
"""
|
||||||
|
title_albums: List[models.Album] = []
|
||||||
|
artist_albums: List[models.Album] = []
|
||||||
|
|
||||||
|
for album in api.ALBUMS:
|
||||||
|
if query.lower() in album.album.lower():
|
||||||
|
title_albums.append(album)
|
||||||
|
|
||||||
|
for album in api.ALBUMS:
|
||||||
|
if query.lower() in album.artist.lower():
|
||||||
|
artist_albums.append(album)
|
||||||
|
|
||||||
|
return [*title_albums, *artist_albums]
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
from app import api, instances, models
|
||||||
|
from app.lib import trackslib
|
||||||
|
|
||||||
|
|
||||||
|
def add_track(playlistid: str, trackid: str):
|
||||||
|
"""
|
||||||
|
Adds a track to a playlist in the api.PLAYLISTS dict and to the database.
|
||||||
|
"""
|
||||||
|
for playlist in api.PLAYLISTS:
|
||||||
|
if playlist.playlistid == playlistid:
|
||||||
|
track = trackslib.get_track_by_id(trackid)
|
||||||
|
playlist.tracks.append(track)
|
||||||
|
|
||||||
|
instances.playlist_instance.add_track_to_playlist(playlistid, track)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def create_all_playlists():
|
||||||
|
"""
|
||||||
|
Gets all playlists from the database.
|
||||||
|
"""
|
||||||
|
for playlist in instances.playlist_instance.get_all_playlists():
|
||||||
|
api.PLAYLISTS.append(models.Playlist(playlist))
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
from typing import List
|
||||||
|
from app import models, helpers
|
||||||
|
from app.lib import albumslib
|
||||||
|
from app import api
|
||||||
|
|
||||||
|
|
||||||
|
def get_tracks(query: str) -> List[models.Track]:
|
||||||
|
"""
|
||||||
|
Gets all songs with a given title.
|
||||||
|
"""
|
||||||
|
tracks = [track for track in api.TRACKS if query.lower() in track.title.lower()]
|
||||||
|
return helpers.remove_duplicates(tracks)
|
||||||
|
|
||||||
|
|
||||||
|
def get_search_albums(query: str) -> List[models.Album]:
|
||||||
|
"""
|
||||||
|
Gets all songs with a given album.
|
||||||
|
"""
|
||||||
|
return albumslib.search_albums_by_name(query)
|
||||||
|
|
||||||
|
|
||||||
|
def get_artists(artist: str) -> List[models.Track]:
|
||||||
|
"""
|
||||||
|
Gets all songs with a given artist.
|
||||||
|
"""
|
||||||
|
return [track for track in api.TRACKS if artist.lower() in str(track.artists).lower()]
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
import os
|
||||||
|
from typing import List
|
||||||
|
from app import models, instances
|
||||||
|
from app.lib import albumslib
|
||||||
|
from app.helpers import remove_duplicates
|
||||||
|
from app import api
|
||||||
|
|
||||||
|
def create_all_tracks() -> List[models.Track]:
|
||||||
|
"""
|
||||||
|
Gets all songs under the ~/ directory.
|
||||||
|
"""
|
||||||
|
print("Getting all songs...")
|
||||||
|
tracks: list[models.Track] = []
|
||||||
|
|
||||||
|
for track in api.DB_TRACKS:
|
||||||
|
try:
|
||||||
|
os.chmod(track["filepath"], 0o755)
|
||||||
|
except FileNotFoundError:
|
||||||
|
instances.songs_instance.remove_song_by_filepath(track["filepath"])
|
||||||
|
|
||||||
|
album = albumslib.find_album(track["album"], track["albumartist"])
|
||||||
|
|
||||||
|
track["image"] = album.image
|
||||||
|
|
||||||
|
tracks.append(models.Track(track))
|
||||||
|
|
||||||
|
api.TRACKS.clear()
|
||||||
|
api.TRACKS.extend(tracks)
|
||||||
|
|
||||||
|
|
||||||
|
def get_album_tracks(albumname, artist):
|
||||||
|
"""Returns api tracks matching an album"""
|
||||||
|
_tracks: List[models.Track] = []
|
||||||
|
|
||||||
|
for track in api.TRACKS:
|
||||||
|
if track.album == albumname and track.albumartist == artist:
|
||||||
|
_tracks.append(track)
|
||||||
|
|
||||||
|
return remove_duplicates(_tracks)
|
||||||
|
|
||||||
|
|
||||||
|
def get_track_by_id(trackid: str) -> models.Track:
|
||||||
|
"""Returns api track matching an id"""
|
||||||
|
for track in api.TRACKS:
|
||||||
|
if track.id == trackid:
|
||||||
|
return track
|
||||||
Reference in New Issue
Block a user