def spotify_report(): """Endpoint for reporting incorrect Spotify mappings. Shows confirmation page before submitting report to mbspotify. """ release_group_id = request.args.get('release_group_id') spotify_id = request.args.get('spotify_id') spotify_uri = "spotify:album:" + spotify_id # Checking if release group exists release_group = musicbrainz.get_release_group_by_id(release_group_id) if not release_group: flash(gettext("Can't find release group with that ID!"), 'error') return redirect(url_for('.spotify_list', release_group_id=release_group_id)) # Checking if release group is mapped to Spotify spotify_mappings = mbspotify.mappings(str(release_group_id)) if not (spotify_uri in spotify_mappings): flash(gettext("This album is not mapped to Spotify yet!"), 'error') return redirect(url_for('.spotify_list', release_group_id=release_group_id)) if request.method == 'POST': mbspotify.vote(release_group_id, spotify_uri, current_user.id) flash(gettext("Incorrect Spotify mapping has been reported. Thank you!"), 'success') return redirect(url_for('.spotify_list', release_group_id=release_group_id)) else: album = spotify_api.get_album(spotify_id) if not album or album.get('error'): flash(gettext("You need to specify existing album from Spotify!"), 'error') return redirect(url_for('.spotify_list', release_group_id=release_group_id)) return render_template('mapping/report.html', release_group=release_group, spotify_album=album)
def entity(id, rev=None): review = Review.query.get_or_404(str(id)) # Not showing review if it isn't published yet and not viewed by author. if review.is_draft and not (current_user.is_authenticated() and current_user == review.user): raise NotFound(gettext("Can't find a review with the specified ID.")) if review.is_hidden: if not current_user.is_admin(): raise NotFound(gettext("Review has been hidden.")) else: flash(gettext("Review has been hidden."), 'warning') spotify_mappings = None if review.entity_type == 'release_group': spotify_mappings = mbspotify.mappings(review.entity_id) revisions = Revision.query.filter_by(review=review).order_by(desc(Revision.timestamp)) count = revisions.count() if not rev: rev = count if rev < count: flash(gettext('You are viewing an old revision, the review has been updated since then.')) elif rev > count: raise NotFound(gettext("The revision you are looking for does not exist.")) revision = revisions.offset(count-rev).first() if not review.is_draft and current_user.is_authenticated(): # if user is logged in, get his vote for this review vote = Vote.query.filter_by(user=current_user, revision=revision).first() else: # otherwise set vote to None, its value will not be used vote = None review.text_html = markdown(revision.text, safe_mode="escape") return render_template('review/entity/%s.html' % review.entity_type, review=review, spotify_mappings=spotify_mappings, vote=vote)
def spotify_list(release_group_id): """This view lists all Spotify albums mapped to a specified release group.""" spotify_mappings = mbspotify.mappings(str(release_group_id)) # Converting Spotify URIs to IDs spotify_ids = [] for mapping in spotify_mappings: spotify_ids.append(mapping[14:]) if len(spotify_ids) > 0: spotify_albums = spotify_api.get_multiple_albums(spotify_ids) else: spotify_albums = [] release_group = musicbrainz.get_release_group_by_id(release_group_id) if not release_group: raise NotFound("Can't find release group with a specified ID.") return render_template('mapping/list.html', spotify_albums=spotify_albums, release_group=release_group)
def spotify_report(): """Endpoint for reporting incorrect Spotify mappings. Shows confirmation page before submitting report to mbspotify. """ release_group_id = request.args.get('release_group_id') spotify_id = request.args.get('spotify_id') spotify_uri = "spotify:album:" + spotify_id # Checking if release group exists release_group = musicbrainz.get_release_group_by_id(release_group_id) if not release_group: flash(gettext("Can't find release group with that ID!"), 'error') return redirect( url_for('.spotify_list', release_group_id=release_group_id)) # Checking if release group is mapped to Spotify spotify_mappings = mbspotify.mappings(str(release_group_id)) if not (spotify_uri in spotify_mappings): flash(gettext("This album is not mapped to Spotify yet!"), 'error') return redirect( url_for('.spotify_list', release_group_id=release_group_id)) if request.method == 'POST': mbspotify.vote(release_group_id, spotify_uri, current_user.id) flash( gettext("Incorrect Spotify mapping has been reported. Thank you!"), 'success') return redirect( url_for('.spotify_list', release_group_id=release_group_id)) else: album = spotify_api.get_album(spotify_id) if not album or album.get('error'): flash(gettext("You need to specify existing album from Spotify!"), 'error') return redirect( url_for('.spotify_list', release_group_id=release_group_id)) return render_template('mapping/report.html', release_group=release_group, spotify_album=album)
def entity(id, rev=None): review = Review.query.get_or_404(str(id)) # Not showing review if it isn't published yet and not viewed by author. if review.is_draft and not (current_user.is_authenticated() and current_user == review.user): raise NotFound(gettext("Can't find a review with the specified ID.")) if review.is_hidden: if not current_user.is_admin(): raise NotFound(gettext("Review has been hidden.")) else: flash(gettext("Review has been hidden."), 'warning') spotify_mappings = None if review.entity_type == 'release_group': spotify_mappings = mbspotify.mappings(review.entity_id) revisions = Revision.query.filter_by(review=review).order_by( desc(Revision.timestamp)) count = revisions.count() if not rev: rev = count if rev < count: flash( gettext( 'You are viewing an old revision, the review has been updated since then.' )) elif rev > count: raise NotFound( gettext("The revision you are looking for does not exist.")) revision = revisions.offset(count - rev).first() if not review.is_draft and current_user.is_authenticated( ): # if user is logged in, get his vote for this review vote = Vote.query.filter_by(user=current_user, revision=revision).first() else: # otherwise set vote to None, its value will not be used vote = None review.text_html = markdown(revision.text, safe_mode="escape") return render_template('review/entity/%s.html' % review.entity_type, review=review, spotify_mappings=spotify_mappings, vote=vote)
def entity(id): id = str(id) release_group = musicbrainz.get_release_group_by_id(id) if not release_group: raise NotFound( gettext( "Sorry, we couldn't find a release group with that MusicBrainz ID." )) if len(release_group['release-list']) > 0: release = musicbrainz.get_release_by_id( release_group['release-list'][0]['id']) else: release = None spotify_mappings = mbspotify.mappings(id) limit = int(request.args.get('limit', default=10)) offset = int(request.args.get('offset', default=0)) if current_user.is_authenticated(): my_reviews, my_count = Review.list(entity_id=id, entity_type='release_group', user_id=current_user.id) if my_count != 0: my_review = my_reviews[0] else: my_review = None else: my_review = None reviews, count = Review.list(entity_id=id, entity_type='release_group', sort='rating', limit=limit, offset=offset) return render_template('release_group.html', id=id, release_group=release_group, reviews=reviews, release=release, my_review=my_review, spotify_mappings=spotify_mappings, limit=limit, offset=offset, count=count)
def entity(id): id = str(id) release_group = musicbrainz.get_release_group_by_id(id) if not release_group: raise NotFound(gettext("Sorry, we couldn't find a release group with that MusicBrainz ID.")) if len(release_group['release-list']) > 0: release = musicbrainz.get_release_by_id(release_group['release-list'][0]['id']) else: release = None spotify_mappings = mbspotify.mappings(id) limit = int(request.args.get('limit', default=10)) offset = int(request.args.get('offset', default=0)) if current_user.is_authenticated(): my_reviews, my_count = Review.list(entity_id=id, entity_type='release_group', user_id=current_user.id) if my_count != 0: my_review = my_reviews[0] else: my_review = None else: my_review = None reviews, count = Review.list(entity_id=id, entity_type='release_group', sort='rating', limit=limit, offset=offset) return render_template('release_group.html', id=id, release_group=release_group, reviews=reviews, release=release, my_review=my_review, spotify_mappings=spotify_mappings, limit=limit, offset=offset, count=count)