diff --git a/server/app/albumslib.py b/server/app/albumslib.py index 09775b3..84a8277 100644 --- a/server/app/albumslib.py +++ b/server/app/albumslib.py @@ -1,21 +1,20 @@ from typing import List -from app import models, functions -from app import trackslib - -ALBUMS: List[models.Album] = [] +from app import models, functions, helpers +from app import trackslib, api -def create_all_albums() -> List[models.Track]: +@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() - ALBUMS.clear() - ALBUMS.extend(albums) + api.ALBUMS.clear() + api.ALBUMS.extend(albums) trackslib.create_all_tracks() - return trackslib.TRACKS + def get_album_duration(album: list) -> int: @@ -46,7 +45,7 @@ def get_album_image(album: list) -> str: def find_album(albumtitle, artist): - for album in ALBUMS: + for album in api.ALBUMS: if album.album == albumtitle and album.artist == artist: return album @@ -58,11 +57,11 @@ def search_albums_by_name(query: str) -> List[models.Album]: title_albums: List[models.Album] = [] artist_albums: List[models.Album] = [] - for album in ALBUMS: + for album in api.ALBUMS: if query.lower() in album.album.lower(): title_albums.append(album) - for album in ALBUMS: + for album in api.ALBUMS: if query.lower() in album.artist.lower(): artist_albums.append(album) diff --git a/server/app/api.py b/server/app/api.py index c6920d8..86f2eaf 100644 --- a/server/app/api.py +++ b/server/app/api.py @@ -8,19 +8,21 @@ from app import albumslib, searchlib from app import trackslib bp = Blueprint("api", __name__, url_prefix="") +functions.start_watchdog() + +ALBUMS: List[models.Album] = [] +TRACKS: List[models.Track] = [] home_dir = helpers.home_dir -all_the_f_music = albumslib.create_all_albums() - @helpers.background def initialize() -> None: """ Runs all the necessary setup functions. """ + albumslib.create_everything() prep.create_config_dir() functions.reindex_tracks() - functions.start_watchdog() initialize() @@ -124,7 +126,7 @@ def get_albumartists(): tracks = [] - for track in all_the_f_music: + for track in TRACKS: if track.album == album and track.albumartist == artist: tracks.append(track) @@ -236,7 +238,7 @@ def get_folder_tree(folder: str): songs = [] for entry in files: - for track in all_the_f_music: + for track in TRACKS: if track.filepath == entry.path: songs.append(track) diff --git a/server/app/functions.py b/server/app/functions.py index 65c02d5..9b7e7d7 100644 --- a/server/app/functions.py +++ b/server/app/functions.py @@ -66,7 +66,7 @@ def populate(): if tags is not None: instances.songs_instance.insert_song(tags) - albumslib.create_all_albums() + albumslib.create_everything() print("\n check done") end = time.time() diff --git a/server/app/helpers.py b/server/app/helpers.py index d91a9db..4d9d160 100644 --- a/server/app/helpers.py +++ b/server/app/helpers.py @@ -4,19 +4,10 @@ This module contains mimi functions for the server. import os import threading -import time from typing import List -import requests import colorgram -from io import BytesIO - -from PIL import Image - -from app import instances -from app import functions -from app import watchdoge -from app import models, settings +from app import models home_dir = os.path.expanduser("~") + "/" app_dir = os.path.join(home_dir, ".musicx") @@ -34,8 +25,6 @@ def background(func): return background_func - - def run_fast_scandir(_dir: str, ext: list): """ Scans a directory for files with a specific extension. Returns a list of files and folders in the directory. @@ -117,13 +106,14 @@ def extract_image_colors(image) -> list: return formatted_colors + def check_artist_image(image: str) -> str: """ Checks if the artist image is valid. """ - img_name = image.replace("/", "::")+ ".webp" + img_name = image.replace("/", "::") + ".webp" if not os.path.exists(os.path.join(app_dir, "images", "artists", img_name)): return "http://0.0.0.0:8900/images/artists/0.webp" else: - return "http://0.0.0.0:8900/images/artists/" + img_name, \ No newline at end of file + return ("http://0.0.0.0:8900/images/artists/" + img_name,) diff --git a/server/app/searchlib.py b/server/app/searchlib.py index 0e37e27..0180cfd 100644 --- a/server/app/searchlib.py +++ b/server/app/searchlib.py @@ -1,14 +1,12 @@ from typing import List -from app import models, trackslib, albumslib, helpers - -TRACKS = trackslib.TRACKS +from app import models, api, albumslib, helpers def get_tracks(query: str) -> List[models.Track]: """ Gets all songs with a given title. """ - tracks = [track for track in TRACKS if query.lower() in track.title.lower()] + tracks = [track for track in api.TRACKS if query.lower() in track.title.lower()] return helpers.remove_duplicates(tracks) @@ -23,4 +21,4 @@ def get_artists(artist: str) -> List[models.Track]: """ Gets all songs with a given artist. """ - return [track for track in TRACKS if artist.lower() in str(track.artists).lower()] + return [track for track in api.TRACKS if artist.lower() in str(track.artists).lower()] diff --git a/server/app/trackslib.py b/server/app/trackslib.py index ecf6fd8..82b4746 100644 --- a/server/app/trackslib.py +++ b/server/app/trackslib.py @@ -2,13 +2,9 @@ import os from trace import Trace from typing import List from app import models, instances -from app import albumslib +from app import albumslib, api from app.helpers import remove_duplicates - -TRACKS: List[models.Track] = [] - - def create_all_tracks() -> List[models.Track]: """ Gets all songs under the ~/ directory. @@ -32,15 +28,15 @@ def create_all_tracks() -> List[models.Track]: tracks.append(models.Track(track)) - TRACKS.clear() - TRACKS.extend(tracks) + api.TRACKS.clear() + api.TRACKS.extend(tracks) def get_album_tracks(albumname, artist): """Returns all tracks matching an album""" _tracks: List[models.Track] = [] - for track in TRACKS: + for track in api.TRACKS: if track.album == albumname and track.albumartist == artist: _tracks.append(track) diff --git a/server/app/watchdoge.py b/server/app/watchdoge.py index b4cdbbe..bfc4db3 100644 --- a/server/app/watchdoge.py +++ b/server/app/watchdoge.py @@ -6,7 +6,7 @@ from watchdog.observers import Observer from watchdog.events import PatternMatchingEventHandler from app import instances, functions -from app import api +from app import api, models class OnMyWatch: @@ -39,10 +39,10 @@ def add_track(filepath: str) -> None: if tags is not None: instances.songs_instance.insert_song(tags) - track = instances.songs_instance.get_song_by_path(tags["filepath"]) + track_obj = instances.songs_instance.get_song_by_path(tags["filepath"]) - track_obj = functions.create_track_class(track) - api.all_the_f_music.append(track_obj) + track = models.Track(track_obj) + api.TRACKS.extend(track) def remove_track(filepath: str) -> None: @@ -52,16 +52,16 @@ def remove_track(filepath: str) -> None: trackid = instances.songs_instance.get_song_by_path(filepath)["_id"]["$oid"] instances.songs_instance.remove_song_by_id(trackid) - for track in api.all_the_f_music: + for track in api.TRACKS: if track.trackid == trackid: - api.all_the_f_music.remove(track) + api.TRACKS.remove(track) class Handler(PatternMatchingEventHandler): files_to_process = [] def __init__(self): - print("💠 started watchdog") + print("💠 started watchdog 💠") PatternMatchingEventHandler.__init__( self, patterns=["*.flac", "*.mp3"], @@ -93,7 +93,7 @@ class Handler(PatternMatchingEventHandler): if tr in event.dest_path: print("trash ++") remove_track(event.src_path) - + elif tr in event.src_path: add_track(event.dest_path) @@ -101,7 +101,6 @@ class Handler(PatternMatchingEventHandler): add_track(event.dest_path) remove_track(event.src_path) - def on_closed(self, event): """ Fired when a created file is closed.