def update_library(tree, dry_run=False, inudesu=False): changes = [] alltracks = Track.objects.filter(inudesu=inudesu) tracks_kept = [] for tid in tree['Tracks']: changed = False new = False t = tree['Tracks'][tid] added = make_aware(t['Date Added'], utc) if 'Album' not in t: t['Album'] = '' # to prevent future KeyErrors try: db_track = Track.objects.get(id=t['Persistent ID']) except Track.DoesNotExist: # we need to make a new track new = True db_track = Track() else: db_dict = { 'title': db_track.id3_title, 'artist': db_track.id3_artist, 'album': db_track.id3_album, 'msec': db_track.msec, 'composer': db_track.composer, 'added': db_track.added, } track_dict = { 'title': t['Name'], 'artist': t['Artist'], 'album': t['Album'], 'msec': t['Total Time'], 'composer': t.get('Composer', ''), 'added': added, } if db_dict != track_dict: # we need to update an existing track changed = True field_alterations = [{ 'field': k, 'from': db_dict[k], 'to': track_dict[k], } for k in db_dict.keys() if db_dict[k] != track_dict[k]] if new or changed: db_track.id = t['Persistent ID'] db_track.id3_title = t['Name'] db_track.id3_artist = t['Artist'] db_track.id3_album = t['Album'] db_track.msec = t['Total Time'] db_track.composer = t.get('Composer', '') db_track.added = added db_track.inudesu = inudesu if new: if not inudesu: db_track.hidden = True else: db_track.hidden = False changes.append({ 'type': 'new', 'item': unicode(db_track), }) if changed: changes.append({ 'type': 'change', 'item': unicode(db_track), 'changes': field_alterations, }) if (new or changed) and (not dry_run): db_track.save() tracks_kept.append(db_track) for track in [tr for tr in alltracks if tr not in tracks_kept and not tr.hidden]: changes.append({ 'type': 'hide', 'item': unicode(track), }) if not dry_run: track.hidden = True track.save() return changes
def update_library(tree, dry_run=False, inudesu=False): changes = [] alltracks = Track.objects.filter(inudesu=inudesu) tracks_kept = [] for tid in tree['Tracks']: changed = False new = False t = tree['Tracks'][tid] added = make_aware(t['Date Added'], utc) if 'Album' not in t: t['Album'] = '' # to prevent future KeyErrors try: db_track = Track.objects.get(id=t['Persistent ID']) except Track.DoesNotExist: # we need to make a new track new = True db_track = Track() else: if ((db_track.id3_title != t['Name']) or (db_track.id3_artist != t['Artist']) or (db_track.id3_album != t['Album']) or (db_track.msec != t['Total Time']) or (db_track.composer != t.get('Composer')) or (db_track.added != added)): # we need to update an existing track changed = True pre_change = unicode(db_track) if new or changed: db_track.id = t['Persistent ID'] db_track.id3_title = t['Name'] db_track.id3_artist = t['Artist'] db_track.id3_album = t['Album'] db_track.msec = t['Total Time'] db_track.msec = t['Total Time'] db_track.added = added db_track.inudesu = inudesu if new: if not inudesu: db_track.hidden = True else: db_track.hidden = False changes.append('new:\n%s' % unicode(db_track)) if changed: changes.append('change:\n%s' % pre_change) changes.append('to:\n%s' % unicode(db_track)) if (new or changed) and (not dry_run): db_track.save() tracks_kept.append(db_track) for track in [tr for tr in alltracks if tr not in tracks_kept and not tr.hidden]: changes.append('hide:\n%s' % unicode(track)) if not dry_run: track.hidden = True track.save() return changes