mirror of
https://github.com/Dvorinka/swingmusic-extended.git
synced 2026-06-03 20:13:02 +00:00
extract original thumbnail image
This commit is contained in:
+7
-7
@@ -2,21 +2,21 @@
|
||||
Contains all the album routes.
|
||||
"""
|
||||
|
||||
from dataclasses import asdict
|
||||
import random
|
||||
from dataclasses import asdict
|
||||
|
||||
from flask import Blueprint, request
|
||||
|
||||
from app.db.sqlite.albums import SQLiteAlbumMethods as adb
|
||||
from app.db.sqlite.favorite import SQLiteFavoriteMethods as favdb
|
||||
from app.db.sqlite.lastfm.similar_artists import \
|
||||
SQLiteLastFMSimilarArtists as lastfmdb
|
||||
from app.models import FavType, Track
|
||||
from app.serializers.album import serialize_for_card
|
||||
from app.serializers.track import track_serializer
|
||||
from app.store.albums import AlbumStore
|
||||
from app.store.tracks import TrackStore
|
||||
from app.db.sqlite.albums import SQLiteAlbumMethods as adb
|
||||
from app.db.sqlite.favorite import SQLiteFavoriteMethods as favdb
|
||||
from app.db.sqlite.lastfm.similar_artists import SQLiteLastFMSimilarArtists as lastfmdb
|
||||
|
||||
from app.utils.hashing import create_hash
|
||||
from app.serializers.album import serialize_for_card
|
||||
from app.utils.remove_duplicates import remove_duplicates
|
||||
|
||||
get_albums_by_albumartist = adb.get_albums_by_albumartist
|
||||
@@ -210,4 +210,4 @@ def get_similar_albums():
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
return {"albums": [serialize_for_card(a) for a in albums]}
|
||||
return {"albums": [serialize_for_card(a) for a in albums[:limit]]}
|
||||
|
||||
@@ -321,7 +321,6 @@ def get_similar_artists(artisthash: str):
|
||||
|
||||
similar = ArtistStore.get_artists_by_hashes(result.get_artist_hash_set())
|
||||
|
||||
# print(similar)
|
||||
if len(similar) > limit:
|
||||
similar = random.sample(similar, limit)
|
||||
|
||||
|
||||
@@ -22,6 +22,17 @@ def send_fallback_img(filename: str = "default.webp"):
|
||||
return send_from_directory(path, filename)
|
||||
|
||||
|
||||
@api.route("/t/o/<imgpath>")
|
||||
def send_original_thumbnail(imgpath: str):
|
||||
path = Paths.get_original_thumb_path()
|
||||
fpath = Path(path) / imgpath
|
||||
|
||||
if fpath.exists():
|
||||
return send_from_directory(path, imgpath)
|
||||
|
||||
return send_fallback_img()
|
||||
|
||||
|
||||
@api.route("/t/<imgpath>")
|
||||
def send_lg_thumbnail(imgpath: str):
|
||||
path = Paths.get_lg_thumb_path()
|
||||
|
||||
@@ -241,7 +241,6 @@ def save_similar_artists(artist: Artist):
|
||||
if len(artist_.similar_artist_hashes) == 0:
|
||||
return
|
||||
|
||||
print(artist.artisthash, artist.name)
|
||||
lastfmdb.insert_one(artist_)
|
||||
|
||||
|
||||
|
||||
@@ -140,7 +140,6 @@ def get_titles(items: _type):
|
||||
text = item.og_title
|
||||
elif isinstance(item, models.Album):
|
||||
text = item.title
|
||||
# print(text)
|
||||
elif isinstance(item, models.Artist):
|
||||
text = item.name
|
||||
else:
|
||||
|
||||
+6
-4
@@ -28,18 +28,20 @@ def extract_thumb(filepath: str, webp_path: str) -> bool:
|
||||
"""
|
||||
Extracts the thumbnail from an audio file. Returns the path to the thumbnail.
|
||||
"""
|
||||
img_path = os.path.join(Paths.get_lg_thumb_path(), webp_path)
|
||||
original_img_path = os.path.join(Paths.get_original_thumb_path(), webp_path)
|
||||
lg_img_path = os.path.join(Paths.get_lg_thumb_path(), webp_path)
|
||||
sm_img_path = os.path.join(Paths.get_sm_thumb_path(), webp_path)
|
||||
|
||||
tsize = Defaults.THUMB_SIZE
|
||||
sm_tsize = Defaults.SM_THUMB_SIZE
|
||||
|
||||
def save_image(img: Image.Image):
|
||||
img.save(original_img_path, "webp")
|
||||
img.resize((tsize, tsize), Image.ANTIALIAS).save(lg_img_path, "webp")
|
||||
img.resize((sm_tsize, sm_tsize), Image.ANTIALIAS).save(sm_img_path, "webp")
|
||||
img.resize((tsize, tsize), Image.ANTIALIAS).save(img_path, "webp")
|
||||
|
||||
if os.path.exists(img_path):
|
||||
img_size = os.path.getsize(img_path)
|
||||
if os.path.exists(lg_img_path):
|
||||
img_size = os.path.getsize(lg_img_path)
|
||||
|
||||
if img_size > 0:
|
||||
return True
|
||||
|
||||
@@ -6,7 +6,7 @@ import requests
|
||||
|
||||
from app import settings
|
||||
from app.utils.hashing import create_hash
|
||||
from requests import ConnectionError, ReadTimeout
|
||||
from requests import ConnectionError, HTTPError, ReadTimeout
|
||||
import urllib.parse
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ def fetch_similar_artists(name: str):
|
||||
try:
|
||||
response = requests.get(url, timeout=10)
|
||||
response.raise_for_status()
|
||||
except (ConnectionError, ReadTimeout):
|
||||
except (ConnectionError, ReadTimeout, HTTPError):
|
||||
return []
|
||||
|
||||
data = response.json()
|
||||
|
||||
@@ -16,6 +16,8 @@ def track_serializer(track: Track, _remove: set = {}, retain_disc=False) -> dict
|
||||
to_remove.union("disc", "track")
|
||||
|
||||
to_remove.update(key for key in album_dict.keys() if key.startswith("is_"))
|
||||
to_remove.remove('is_favorite')
|
||||
|
||||
for key in to_remove:
|
||||
album_dict.pop(key, None)
|
||||
|
||||
|
||||
+17
-11
@@ -27,7 +27,9 @@ class Paths:
|
||||
|
||||
@classmethod
|
||||
def get_config_folder(cls):
|
||||
return "swingmusic" if cls.get_config_dir() != cls.USER_HOME_DIR else ".swingmusic"
|
||||
return (
|
||||
"swingmusic" if cls.get_config_dir() != cls.USER_HOME_DIR else ".swingmusic"
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def get_app_dir(cls):
|
||||
@@ -65,6 +67,10 @@ class Paths:
|
||||
def get_lg_thumb_path(cls):
|
||||
return join(cls.get_thumbs_path(), "large")
|
||||
|
||||
@classmethod
|
||||
def get_original_thumb_path(cls):
|
||||
return join(cls.get_thumbs_path(), "original")
|
||||
|
||||
@classmethod
|
||||
def get_assets_path(cls):
|
||||
return join(Paths.get_app_dir(), "assets")
|
||||
@@ -73,8 +79,8 @@ class Paths:
|
||||
# defaults
|
||||
class Defaults:
|
||||
THUMB_SIZE = 400
|
||||
SM_THUMB_SIZE = 64
|
||||
SM_ARTIST_IMG_SIZE = 64
|
||||
SM_THUMB_SIZE = 144
|
||||
SM_ARTIST_IMG_SIZE = 144
|
||||
"""
|
||||
The size of extracted images in pixels
|
||||
"""
|
||||
@@ -166,14 +172,14 @@ class FromFlags:
|
||||
|
||||
|
||||
class ParserFlags(Enum):
|
||||
EXTRACT_FEAT = 'EXTRACT_FEAT'
|
||||
REMOVE_PROD = 'REMOVE_PROD'
|
||||
CLEAN_ALBUM_TITLE = 'CLEAN_ALBUM_TITLE'
|
||||
SHOW_ALBUM_VERSION = 'SHOW_ALBUM_VERSION'
|
||||
REMOVE_REMASTER_FROM_TRACK = 'REMOVE_REMASTER_FROM_TRACK'
|
||||
DO_PERIODIC_SCANS = 'DO_PERIODIC_SCANS'
|
||||
PERIODIC_SCAN_INTERVAL = 'PERIODIC_SCAN_INTERVAL'
|
||||
MERGE_ALBUM_VERSIONS = 'MERGE_ALBUM_VERSIONS'
|
||||
EXTRACT_FEAT = "EXTRACT_FEAT"
|
||||
REMOVE_PROD = "REMOVE_PROD"
|
||||
CLEAN_ALBUM_TITLE = "CLEAN_ALBUM_TITLE"
|
||||
SHOW_ALBUM_VERSION = "SHOW_ALBUM_VERSION"
|
||||
REMOVE_REMASTER_FROM_TRACK = "REMOVE_REMASTER_FROM_TRACK"
|
||||
DO_PERIODIC_SCANS = "DO_PERIODIC_SCANS"
|
||||
PERIODIC_SCAN_INTERVAL = "PERIODIC_SCAN_INTERVAL"
|
||||
MERGE_ALBUM_VERSIONS = "MERGE_ALBUM_VERSIONS"
|
||||
|
||||
|
||||
def get_flag(flag: ParserFlags) -> bool:
|
||||
|
||||
@@ -63,6 +63,7 @@ def create_config_dir() -> None:
|
||||
thumb_path = os.path.join("images", "thumbnails")
|
||||
small_thumb_path = os.path.join(thumb_path, "small")
|
||||
large_thumb_path = os.path.join(thumb_path, "large")
|
||||
original_thumb_path = os.path.join(thumb_path, "original")
|
||||
|
||||
artist_img_path = os.path.join("images", "artists")
|
||||
small_artist_img_path = os.path.join(artist_img_path, "small")
|
||||
@@ -76,6 +77,7 @@ def create_config_dir() -> None:
|
||||
thumb_path,
|
||||
small_thumb_path,
|
||||
large_thumb_path,
|
||||
original_thumb_path,
|
||||
artist_img_path,
|
||||
small_artist_img_path,
|
||||
large_artist_img_path,
|
||||
|
||||
Reference in New Issue
Block a user