mirror of
https://github.com/krateng/maloja.git
synced 2023-08-10 21:12:55 +03:00
Generalized scrobble updating
This commit is contained in:
parent
a8f8d86ec1
commit
f5d1fbc576
@ -121,13 +121,13 @@ def reparse_scrobble(timestamp):
|
||||
if not scrobble or not scrobble['rawscrobble']:
|
||||
return
|
||||
|
||||
scrobbledict = rawscrobble_to_scrobbledict(scrobble['rawscrobble'])
|
||||
newscrobble = rawscrobble_to_scrobbledict(scrobble['rawscrobble'])
|
||||
|
||||
track_id = sqldb.get_track_id(scrobbledict['track'])
|
||||
track_id = sqldb.get_track_id(newscrobble['track'])
|
||||
|
||||
# check if id changed
|
||||
if sqldb.get_track_id(scrobble['track']) != track_id:
|
||||
sqldb.update_scrobble_track_id(timestamp, track_id)
|
||||
sqldb.edit_scrobble(timestamp, {'track':newscrobble['track']})
|
||||
|
||||
|
||||
def rawscrobble_to_scrobbledict(rawscrobble, fix=True, client=None):
|
||||
|
@ -208,21 +208,22 @@ def artist_db_to_dict(row,dbconn=None):
|
||||
|
||||
|
||||
### DICT -> DB
|
||||
# These should return None when no data is in the dict so they can be used for update statements
|
||||
|
||||
def scrobble_dict_to_db(info,dbconn=None):
|
||||
return {
|
||||
"timestamp":info['time'],
|
||||
"origin":info['origin'],
|
||||
"duration":info['duration'],
|
||||
"track_id":get_track_id(info['track'],dbconn=dbconn),
|
||||
"extra":json.dumps(info.get('extra',{})),
|
||||
"rawscrobble":json.dumps(info.get('rawscrobble',{}))
|
||||
"timestamp":info.get('time'),
|
||||
"origin":info.get('origin'),
|
||||
"duration":info.get('duration'),
|
||||
"track_id":get_track_id(info.get('track'),dbconn=dbconn),
|
||||
"extra":json.dumps(info.get('extra')),
|
||||
"rawscrobble":json.dumps(info.get('rawscrobble'))
|
||||
}
|
||||
|
||||
def track_dict_to_db(info,dbconn=None):
|
||||
return {
|
||||
"title":info['title'],
|
||||
"title_normalized":normalize_name(info['title']),
|
||||
"title":info.get('title'),
|
||||
"title_normalized":normalize_name(info.get('title'),'') or None,
|
||||
"length":info.get('length')
|
||||
}
|
||||
|
||||
@ -280,16 +281,6 @@ def delete_scrobble(scrobble_id,dbconn=None):
|
||||
|
||||
return True
|
||||
|
||||
@connection_provider
|
||||
def update_scrobble_track_id(scrobble_id, track_id, dbconn=None):
|
||||
|
||||
with SCROBBLE_LOCK:
|
||||
|
||||
op = DB['scrobbles'].update().where(
|
||||
DB['scrobbles'].c.timestamp == scrobble_id
|
||||
).values(track_id=track_id)
|
||||
|
||||
dbconn.execute(op)
|
||||
|
||||
### these will 'get' the ID of an entity, creating it if necessary
|
||||
|
||||
@ -372,13 +363,34 @@ def get_artist_id(artistname,create_new=True,dbconn=None):
|
||||
|
||||
### Edit existing
|
||||
|
||||
|
||||
@connection_provider
|
||||
def edit_scrobble(scrobble_id,scrobbleupdatedict,dbconn=None):
|
||||
|
||||
dbentry = scrobble_dict_to_db(scrobbleupdatedict,dbconn=dbconn)
|
||||
dbentry = {k:v for k,v in dbentry.items() if v}
|
||||
|
||||
print("Updating scrobble",dbentry)
|
||||
|
||||
with SCROBBLE_LOCK:
|
||||
|
||||
op = DB['scrobbles'].update().where(
|
||||
DB['scrobbles'].c.timestamp == scrobble_id
|
||||
).values(
|
||||
**dbentry
|
||||
)
|
||||
|
||||
dbconn.execute(op)
|
||||
|
||||
|
||||
@connection_provider
|
||||
def edit_artist(id,artistupdatedict,dbconn=None):
|
||||
|
||||
artist = get_artist(id)
|
||||
changedartist = artistupdatedict # well
|
||||
|
||||
dbentry = artist_dict_to_db(artistupdatedict)
|
||||
dbentry = artist_dict_to_db(artistupdatedict,dbconn=dbconn)
|
||||
dbentry = {k:v for k,v in dbentry.items() if v}
|
||||
|
||||
existing_artist_id = get_artist_id(changedartist,create_new=False,dbconn=dbconn)
|
||||
if existing_artist_id not in (None,id):
|
||||
@ -396,10 +408,11 @@ def edit_artist(id,artistupdatedict,dbconn=None):
|
||||
@connection_provider
|
||||
def edit_track(id,trackupdatedict,dbconn=None):
|
||||
|
||||
track = get_track(id)
|
||||
track = get_track(id,dbconn=dbconn)
|
||||
changedtrack = {**track,**trackupdatedict}
|
||||
|
||||
dbentry = track_dict_to_db(trackupdatedict)
|
||||
dbentry = track_dict_to_db(trackupdatedict,dbconn=dbconn)
|
||||
dbentry = {k:v for k,v in dbentry.items() if v}
|
||||
|
||||
existing_track_id = get_track_id(changedtrack,create_new=False,dbconn=dbconn)
|
||||
if existing_track_id not in (None,id):
|
||||
|
Loading…
Reference in New Issue
Block a user