1
0
mirror of https://github.com/spl0k/supysonic.git synced 2024-12-22 08:56:17 +00:00

Fix Folder ID bugs and sqlite migration.

This commit is contained in:
mvn23 2019-09-15 13:48:25 +02:00
parent 99ce42c9ff
commit 81192bfeca
4 changed files with 22 additions and 8 deletions

View File

@ -97,8 +97,11 @@ def get_entity_id(cls, eid):
try: try:
return int(eid) return int(eid)
except ValueError: except ValueError:
raise ValueError("Invalid Folder ID: %s", eid) return None
return uuid.UUID(eid) try:
return uuid.UUID(eid)
except ValueError:
return None
from .errors import * from .errors import *

View File

@ -35,7 +35,7 @@ from ..covers import get_embedded_cover
from ..db import Track, Album, Artist, Folder, User, ClientPrefs, now from ..db import Track, Album, Artist, Folder, User, ClientPrefs, now
from ..py23 import dict from ..py23 import dict
from . import api, get_entity from . import api, get_entity, get_entity_id
from .exceptions import ( from .exceptions import (
GenericError, GenericError,
MissingParameter, MissingParameter,
@ -215,15 +215,19 @@ def download_media():
@api.route("/getCoverArt.view", methods=["GET", "POST"]) @api.route("/getCoverArt.view", methods=["GET", "POST"])
def cover_art(): def cover_art():
cache = current_app.cache cache = current_app.cache
eid = request.values["id"] eid = request.values["id"]
if Folder.exists(id=eid): fid = get_entity_id(Folder, eid)
tid = get_entity_id(Track, eid)
if fid and Folder.exists(id=eid):
res = get_entity(Folder) res = get_entity(Folder)
if not res.cover_art or not os.path.isfile( if not res.cover_art or not os.path.isfile(
os.path.join(res.path, res.cover_art) os.path.join(res.path, res.cover_art)
): ):
raise NotFound("Cover art") raise NotFound("Cover art")
cover_path = os.path.join(res.path, res.cover_art) cover_path = os.path.join(res.path, res.cover_art)
elif Track.exists(id=eid): elif tid and Track.exists(id=eid):
cache_key = "{}-cover".format(eid) cache_key = "{}-cover".format(eid)
try: try:
cover_path = cache.get(cache_key) cover_path = cache.get(cache_key)

View File

@ -29,7 +29,7 @@ try:
except ImportError: except ImportError:
from urlparse import urlparse, parse_qsl from urlparse import urlparse, parse_qsl
SCHEMA_VERSION = "20190518" SCHEMA_VERSION = "20190915"
def now(): def now():

View File

@ -26,11 +26,18 @@ CREATE TABLE IF NOT EXISTS folder_new (
CREATE INDEX IF NOT EXISTS index_folder_parent_id_fk ON folder_new(parent_id); CREATE INDEX IF NOT EXISTS index_folder_parent_id_fk ON folder_new(parent_id);
CREATE UNIQUE INDEX IF NOT EXISTS index_folder_path ON folder_new(path_hash); CREATE UNIQUE INDEX IF NOT EXISTS index_folder_path ON folder_new(path_hash);
INSERT INTO folder_new(id, root, name, path, path_hash, created, cover_art, last_scan, parent_id)
SELECT id_int.id, root, name, path, path_hash, created, cover_art, last_scan, NULL
FROM folder
JOIN folder_id_to_int id_int ON folder.id == id_int.uuid
WHERE folder.parent_id IS NULL;
INSERT INTO folder_new(id, root, name, path, path_hash, created, cover_art, last_scan, parent_id) INSERT INTO folder_new(id, root, name, path, path_hash, created, cover_art, last_scan, parent_id)
SELECT id_int.id, root, name, path, path_hash, created, cover_art, last_scan, parent_id_int.id SELECT id_int.id, root, name, path, path_hash, created, cover_art, last_scan, parent_id_int.id
FROM folder FROM folder
JOIN folder_id_to_int id_int ON folder.id == id_int.uuid JOIN folder_id_to_int id_int ON folder.id == id_int.uuid
JOIN folder_id_to_int parent_id_int ON folder.parent_id == parent_id_int.uuid; JOIN folder_id_to_int parent_id_int ON folder.parent_id == parent_id_int.uuid
WHERE folder.parent_id IS NOT NULL;
DROP TABLE folder; DROP TABLE folder;
ALTER TABLE folder_new RENAME TO folder; ALTER TABLE folder_new RENAME TO folder;
@ -94,7 +101,7 @@ CREATE INDEX IF NOT EXISTS index_starred_folder_starred_id_fk ON starred_folder_
INSERT INTO starred_folder_new(user_id, starred_id, date) INSERT INTO starred_folder_new(user_id, starred_id, date)
SELECT user_id, id_int.id, date SELECT user_id, id_int.id, date
FROM starred_folder FROM starred_folder
JOIN folder_id_to_int id_int ON starred_folder_new.starred_id == id_int.uuid; JOIN folder_id_to_int id_int ON starred_folder.starred_id == id_int.uuid;
DROP TABLE starred_folder; DROP TABLE starred_folder;
ALTER TABLE starred_folder_new RENAME TO starred_folder; ALTER TABLE starred_folder_new RENAME TO starred_folder;