diff --git a/Gemfile.lock b/Gemfile.lock index eebd033..2a0a804 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -8,7 +8,7 @@ GIT PATH remote: vendor/plugins/gems/musicbrainz specs: - musicbrainz (0.5.2) + musicbrainz (0.5.4) nokogiri GEM @@ -45,7 +45,7 @@ GEM multi_json (~> 1.0) addressable (2.2.6) arel (2.2.1) - awesome_print (0.4.0) + awesome_print (1.0.1) bcrypt-ruby (3.0.1) bitmask_attributes (0.2.4) activerecord (~> 3.0) @@ -67,7 +67,7 @@ GEM erubis (2.7.0) execjs (1.2.9) multi_json (~> 1.0) - haml (3.1.3) + haml (3.1.4) heroku (2.14.0) launchy (>= 0.3.2) rest-client (~> 1.6.1) @@ -80,7 +80,7 @@ GEM jquery-rails (1.0.19) railties (~> 3.0) thor (~> 0.14) - json (1.6.1) + json (1.6.2) kgio (2.6.0) launchy (2.0.5) addressable (~> 2.2.6) @@ -90,7 +90,7 @@ GEM mime-types (~> 1.16) treetop (~> 1.4.8) mime-types (1.17.2) - multi_json (1.0.3) + multi_json (1.0.4) mysql2 (0.3.7) nokogiri (1.5.0) pg (0.11.0) @@ -126,7 +126,7 @@ GEM rest-client (1.6.7) mime-types (>= 1.16) rubyzip (0.9.5) - sass (3.1.10) + sass (3.1.11) sass-rails (3.1.5) actionpack (~> 3.1.0) railties (~> 3.1.0) diff --git a/app/assets/javascripts/player.coffee b/app/assets/javascripts/player.coffee index 15ce70a..69b0f2a 100644 --- a/app/assets/javascripts/player.coffee +++ b/app/assets/javascripts/player.coffee @@ -55,10 +55,11 @@ class window.Player if not autoplay? autoplay = false initial_count = $('.playlist li').length - $('.playlist').append this.generateTrackHtml track + c = this.generateTrackHtml track + $('.playlist').append c.html $('.playlist').sortable "refresh" - if initial_count == 0 and not _player.hasTrack() - _player.setTrack($('.playlist li').first().attr('id').split('i')[1]) + unless _player.currentTrack()? + _player.setTrack(c.uid) false generateTrackHtml: (track) -> @@ -67,12 +68,16 @@ class window.Player s = len - Math.floor(len / 60) * 60 duration = m + ':' + (if s < 10 then '0' else '') + s item_class = (if track.available == false then 'unavailable' else '') - "
  • -
    #{duration}
    -
    remove
    -
    #{track.artist}
    -
    #{track.name}
    -
  • " + uid = Math.round(Math.random() * 999999) + { + html: "
  • +
    #{duration}
    +
    remove
    +
    #{track.artist}
    +
    #{track.name}
    +
  • " + uid: uid + } getDataFromLi: (obj) -> id = $(obj).attr 'data-id' @@ -91,13 +96,18 @@ class window.Player $obj.addClass 'now' _vk_music.search track.artist, track.name, track.length, (audio) -> if audio is null - _session.query '/track/report', { id: track.id }, (r) -> - if r.result is 'success' + _session.query '/track/report_available', { id: track.id, available: false }, (r) -> + if r.result is 'success' or r.status is 'success' $(".playlist li[data-id='#{track.id}']").addClass("unavailable") - $($(".album div[data-id='#{track.id}']").siblings()[0]).addClass("unavailable") + $(".s-add[data-id='#{track.id}']").parent().parent().addClass("unavailable") _player.setTrack _player.nextTrack() else _player.playSource audio.url + if track.available == false + _session.query '/track/report_available', { id: track.id, available: true }, (r) -> + if r.result is 'success' or r.status is 'success' + $(".playlist li[data-id='#{track.id}']").removeClass("unavailable") + $(".s-add[data-id='#{track.id}']").parent().parent().removeClass("unavailable") if track.length == 0 len = parseInt(audio.duration, 10) m = Math.floor(len / 60) @@ -128,6 +138,11 @@ class window.Player true false + currentTrack: -> + current_track = $('.playlist li.now') + false unless current_track? + @library[$(current_track).data('id')] + playSource: (url) -> @scrobbled = false $('#jplayer').jPlayer 'setMedia', mp3: url @@ -253,7 +268,8 @@ $ -> cursor: 'move' stop: (e, ui) -> if $(ui.item).prop("tagName") == "TR" - ui.item.replaceWith(_player.generateTrackHtml(_player.library[$(ui.item).find('.s-add').data('id')])) + c = _player.generateTrackHtml(_player.library[$(ui.item).find('.s-add').data('id')]) + ui.item.replaceWith(c.html) false $('.playlist').droppable accept: '.track' diff --git a/app/assets/stylesheets/player.scss b/app/assets/stylesheets/player.scss index ad9f5e9..0cd742f 100644 --- a/app/assets/stylesheets/player.scss +++ b/app/assets/stylesheets/player.scss @@ -80,7 +80,7 @@ .playlist { margin: 20px 0 0 0; - min-height: 300px; + padding-bottom: 200px; li { list-style: none; background-color: #ffffff; diff --git a/app/controllers/track_controller.rb b/app/controllers/track_controller.rb index 4647c0e..722c35c 100644 --- a/app/controllers/track_controller.rb +++ b/app/controllers/track_controller.rb @@ -15,10 +15,11 @@ class TrackController < ApplicationController render :json => { :result => :failed } end - def report_unavailable + def report_available track = Track.find(params[:id]) - unless track.nil? or track.available - track.available = false + available = params[:available] == "false" ? false : true + unless track.nil? + track.available = available track.save return render :json => { :status => :success } end diff --git a/config/routes.rb b/config/routes.rb index 09ff428..9a25db2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -14,7 +14,7 @@ Beathaven::Application.routes.draw do match 'lastfm/scrobble' => 'last_fm#scrobble' match 'track/update_length' => 'track#update_length' - match 'track/report' => 'track#report_unavailable' + match 'track/report_available' => 'track#report_available' match 'playlist/(:id)' => 'playlist#data' match 'playlist/lastfm-top50/(:artist)' => 'playlist#lastfm_top50', constraints: { artist: /.*/ } diff --git a/vendor/plugins/gems/musicbrainz/VERSION b/vendor/plugins/gems/musicbrainz/VERSION index 2411653..167b000 100644 --- a/vendor/plugins/gems/musicbrainz/VERSION +++ b/vendor/plugins/gems/musicbrainz/VERSION @@ -1 +1 @@ -0.5.2 \ No newline at end of file +0.5.4 \ No newline at end of file diff --git a/vendor/plugins/gems/musicbrainz/lib/models/music_brainz/artist.rb b/vendor/plugins/gems/musicbrainz/lib/models/music_brainz/artist.rb index 54c89ad..f770363 100644 --- a/vendor/plugins/gems/musicbrainz/lib/models/music_brainz/artist.rb +++ b/vendor/plugins/gems/musicbrainz/lib/models/music_brainz/artist.rb @@ -59,6 +59,13 @@ module MusicBrainz :type => self.safe_get_attr(a, nil, 'type'), :mbid => self.safe_get_attr(a, nil, 'id') } + if artist[:type] == "Group" + m = artist[:sort_name].match(/(.*?),\sThe$/) + artist[:name] = artist[:sort_name] = "The #{m[1]}" if m + elsif artist[:type] == "Person" + m = artist[:sort_name].match(/(.+?),\s([^,]+?)$/) + artist[:name] = artist[:sort_name] = "#{m[2]} #{m[1]}" if m + end aliases = a.css('alias-list > alias').map{ |item| item.text } if aliases.include? name artist[:weight] += 20 diff --git a/vendor/plugins/gems/musicbrainz/musicbrainz.gemspec b/vendor/plugins/gems/musicbrainz/musicbrainz.gemspec index 1bf5e83..b2353b1 100644 --- a/vendor/plugins/gems/musicbrainz/musicbrainz.gemspec +++ b/vendor/plugins/gems/musicbrainz/musicbrainz.gemspec @@ -5,7 +5,7 @@ Gem::Specification.new do |s| s.name = %q{musicbrainz} - s.version = "0.5.2" + s.version = "0.5.4" s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= s.authors = ["Gregory Eremin"]