feat: added base functionality of artwork class

This commit is contained in:
Hazel 2024-04-10 16:39:46 +02:00
parent ae905b5fbf
commit 25c20a7ef3
4 changed files with 55 additions and 1 deletions

View File

@ -0,0 +1,43 @@
from __future__ import annotations
from typing import List, Optional, Dict, Tuple, Type, Union, TypedDict
from .collection import Collection
from .metadata import (
Mapping as id3Mapping,
ID3Timestamp,
Metadata
)
from ..utils.string_processing import unify, hash_url
from .parents import OuterProxy as Base
from ..utils.config import main_settings
class ArtworkVariant(TypedDict):
url: str
width: int
height: int
deviation: float
class Artwork:
def __init__(self, variants: List[ArtworkVariant] = None) -> None:
self._variant_mapping: Dict[str, ArtworkVariant] = {}
@staticmethod
def _calculate_deviation(*dimensions: List[int]) -> float:
return sum(abs(d - main_settings["preferred_artwork_resolution"]) for d in dimensions) / len(dimensions)
def append(self, url: str, width: int, height: int) -> None:
self._variant_mapping[hash_url(url=url)] = {
"url": url,
"width": width,
"height": height,
"deviation": self._calculate_deviation(width, height),
}
@property
def best_variant(self) -> ArtworkVariant:
return min(self._variant_mapping.values(), key=lambda x: x["deviation"])

View File

@ -5,6 +5,7 @@ from urllib.parse import urlparse
from ..utils.enums.source import SourcePages, SourceTypes from ..utils.enums.source import SourcePages, SourceTypes
from ..utils.config import youtube_settings from ..utils.config import youtube_settings
from ..utils.string_processing import hash_url
from .metadata import Mapping, Metadata from .metadata import Mapping, Metadata
from .parents import OuterProxy from .parents import OuterProxy
@ -88,7 +89,7 @@ class Source(OuterProxy):
@property @property
def hash_url(self) -> str: def hash_url(self) -> str:
return self.url.strip().lower().lstrip("https://").lstrip("http://") return hash_url(self.url)
@property @property
def metadata(self) -> Metadata: def metadata(self) -> Metadata:

View File

@ -27,6 +27,10 @@ The further you choose to be able to go back, the higher the memory usage.
EmptyLine(), EmptyLine(),
Attribute(name="preferred_artwork_resolution", default_value=100),
EmptyLine(),
Attribute(name="sort_by_date", default_value=True, description="If this is set to true, it will set the albumsort attribute such that,\nthe albums are sorted by date"), Attribute(name="sort_by_date", default_value=True, description="If this is set to true, it will set the albumsort attribute such that,\nthe albums are sorted by date"),
Attribute(name="sort_album_by_type", default_value=True, description="""If this is set to true, it will set the albumsort attribute such that, Attribute(name="sort_album_by_type", default_value=True, description="""If this is set to true, it will set the albumsort attribute such that,
the albums are put into categories before being sorted. the albums are put into categories before being sorted.
@ -146,6 +150,9 @@ class SettingsStructure(TypedDict):
language: str language: str
user_agent: str user_agent: str
# artwork
preferred_artwork_resolution: int
# paths # paths
music_directory: Path music_directory: Path
temp_directory: Path temp_directory: Path

View File

@ -96,6 +96,9 @@ def unify_punctuation(to_unify: str) -> str:
to_unify = to_unify.replace(char, UNIFY_TO) to_unify = to_unify.replace(char, UNIFY_TO)
return to_unify return to_unify
def hash_url(url: str) -> int:
return url.strip().lower().lstrip("https://").lstrip("http://")
def remove_feature_part_from_track(title: str) -> str: def remove_feature_part_from_track(title: str) -> str:
if ")" != title[-1]: if ")" != title[-1]: