diff --git a/app/api/getall/__init__.py b/app/api/getall/__init__.py index 44e0f6f1..b4801a59 100644 --- a/app/api/getall/__init__.py +++ b/app/api/getall/__init__.py @@ -1,13 +1,9 @@ -from flask import Blueprint - from flask_openapi3 import Tag from flask_openapi3 import APIBlueprint from pydantic import BaseModel, Field from datetime import datetime from app.api.apischemas import GenericLimitSchema -from app.db.libdata import ArtistTable -from app.db.libdata import AlbumTable from app.store.albums import AlbumStore from app.store.artists import ArtistStore @@ -70,9 +66,9 @@ def get_all_items(path: GetAllItemsPath, query: GetAllItemsQuery): is_artists = path.itemtype == "artists" if is_albums: - items = AlbumTable.get_all() + items = AlbumStore.get_flat_list() elif is_artists: - items = ArtistTable.get_all() + items = ArtistStore.get_flat_list() total = len(items) @@ -95,12 +91,17 @@ def get_all_items(path: GetAllItemsPath, query: GetAllItemsQuery): sort_is_artist_albumcount = is_artists and sort == "albumcount" lambda_sort = lambda x: getattr(x, sort) + lambda_sort_casefold = lambda x: getattr(x, sort).casefold() + if sort_is_artist: - lambda_sort = lambda x: getattr(x, sort)[0]["name"] + lambda_sort = lambda x: getattr(x, sort)[0]["name"].casefold() + + try: + sorted_items = sorted(items, key=lambda_sort_casefold, reverse=reverse) + except AttributeError: + sorted_items = sorted(items, key=lambda_sort, reverse=reverse) - sorted_items = sorted(items, key=lambda_sort, reverse=reverse) items = sorted_items[start : start + limit] - album_list = [] for item in items: diff --git a/app/store/albums.py b/app/store/albums.py index 69ef981e..76ab76c9 100644 --- a/app/store/albums.py +++ b/app/store/albums.py @@ -8,6 +8,7 @@ from app.db.sqlite.albumcolors import SQLiteAlbumMethods as aldb from app.lib.tagger import create_albums from app.models import Album, Track from app.store.artists import ArtistStore +from app.utils import flatten from app.utils.customlist import CustomList from app.utils.remove_duplicates import remove_duplicates @@ -76,6 +77,13 @@ class AlbumStore: print("Done!") + @classmethod + def get_flat_list(cls): + """ + Returns a flat list of all albums. + """ + return [a.album for a in cls.albummap.values()] + @classmethod def add_album(cls, album: Album): """ diff --git a/app/store/artists.py b/app/store/artists.py index c3875e0f..5ae6c725 100644 --- a/app/store/artists.py +++ b/app/store/artists.py @@ -4,6 +4,7 @@ from typing import Iterable from app.db.sqlite.artistcolors import SQLiteArtistMethods as ardb from app.lib.tagger import create_artists from app.models import Artist +from app.utils import flatten from app.utils.bisection import use_bisection from app.utils.customlist import CustomList from app.utils.progressbar import tqdm @@ -57,6 +58,13 @@ class ArtistStore: # cls.map_artist_color(artist) + @classmethod + def get_flat_list(cls): + """ + Returns a flat list of all artists. + """ + return [a.artist for a in cls.artistmap.values()] + @classmethod def map_artist_color(cls, artist_tuple: tuple): """