swingmusic/server/app/lib/trackslib.py
geoffrey45 3cf44759b5 process albums seperate from tracks
- break populate function into 2
2022-06-19 14:45:25 +03:00

75 lines
1.8 KiB
Python

"""
This library contains all the functions related to tracks.
"""
import os
from pprint import pprint
from typing import List
from app import api, instances, models
from app.helpers import remove_duplicates
from tqdm import tqdm
def validate_tracks() -> None:
"""
Gets all songs under the ~/ directory.
"""
entries = instances.tracks_instance.get_all_tracks()
for track in tqdm(entries, desc="Validating tracks"):
try:
os.chmod(track["filepath"], 0o755)
except FileNotFoundError:
instances.tracks_instance.remove_song_by_id(track["_id"]["$oid"])
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:
try:
if track.trackid == trackid:
return track
except AttributeError:
print("AttributeError")
def find_track(tracks: list, hash: str) -> int | None:
"""
Finds an album by album title and artist.
"""
left = 0
right = len(tracks) - 1
iter = 0
while left <= right:
iter += 1
mid = (left + right) // 2
if tracks[mid]["albumhash"] == hash:
return mid
if tracks[mid]["albumhash"] < hash:
left = mid + 1
else:
right = mid - 1
return None
def get_p_track(ptrack):
return instances.tracks_instance.find_track_by_title_artists_album(
ptrack["title"], ptrack["artists"], ptrack["album"]
)