diff --git a/maloja/apis/native_v1.py b/maloja/apis/native_v1.py index 5d54f7f..5d3134f 100644 --- a/maloja/apis/native_v1.py +++ b/maloja/apis/native_v1.py @@ -621,6 +621,7 @@ def edit_artist(id,name): @api.post("edit_track") @authenticated_function(api=True) +@catch_exceptions def edit_track(id,title): """Internal Use Only""" result = database.edit_track(id,{'title':title}) diff --git a/maloja/database/sqldb.py b/maloja/database/sqldb.py index 492b89b..81f11dd 100644 --- a/maloja/database/sqldb.py +++ b/maloja/database/sqldb.py @@ -7,6 +7,7 @@ from threading import Lock from ..pkg_global.conf import data_dir from .dbcache import cached_wrapper, cached_wrapper_individual +from . import exceptions as exc from doreah.logging import log from doreah.regular import runhourly, runmonthly @@ -283,7 +284,7 @@ def delete_scrobble(scrobble_id,dbconn=None): @cached_wrapper @connection_provider -def get_track_id(trackdict,dbconn=None): +def get_track_id(trackdict,create_new=True,dbconn=None): ntitle = normalize_name(trackdict['title']) artist_ids = [get_artist_id(a) for a in trackdict['artists']] artist_ids = list(set(artist_ids)) @@ -313,6 +314,8 @@ def get_track_id(trackdict,dbconn=None): #print("ID for",trackdict['title'],"was",row[0]) return row.id + if not create_new: return None + op = DB['tracks'].insert().values( **track_dict_to_db(trackdict) @@ -372,8 +375,16 @@ def edit_artist(id,artistupdatedict,dbconn=None): return True @connection_provider -def edit_track(id,trackdict,dbconn=None): - dbentry = track_dict_to_db(trackdict) +def edit_track(id,trackupdatedict,dbconn=None): + + track = get_track(id) + track.update(trackupdatedict) + + dbentry = track_dict_to_db(trackupdatedict) + + existing_track = get_track_id(track,create_new=False,dbconn=dbconn) + if existing_track: + raise exc.TrackExists(track) op = DB['tracks'].update().where( DB['tracks'].c.id==id