From 0b6bad1a24cde54b465b803151436058d42ae9f5 Mon Sep 17 00:00:00 2001 From: magnolia-fan Date: Sun, 26 Jun 2011 10:13:16 +0400 Subject: [PATCH] Player improvements, scrobbling with album name --- app/controllers/last_fm_controller.rb | 6 ++-- public/js/beathaven/player.js | 43 +++++++++++++++++---------- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/app/controllers/last_fm_controller.rb b/app/controllers/last_fm_controller.rb index a9accb0..8953c90 100644 --- a/app/controllers/last_fm_controller.rb +++ b/app/controllers/last_fm_controller.rb @@ -47,7 +47,7 @@ class LastFmController < ApplicationController return unless authorized? @res = {} - if params[:artist].nil? or params[:track].nil? + if params[:artist].nil? or params[:album].nil? or params[:track].nil? render :json => {:status => 'bad params'} return end @@ -70,7 +70,7 @@ class LastFmController < ApplicationController return unless authorized? @res = {} - if params[:artist].nil? or params[:track].nil? + if params[:artist].nil? or params[:album].nil? or params[:track].nil? render :json => {:status => 'bad params'} return end @@ -83,7 +83,7 @@ class LastFmController < ApplicationController lastfm = Lastfm.new(@@api_key, @@secret) lastfm.session = user.lastfm_key - r = lastfm.track.scrobble(params[:artist], params[:track], nil, Time.now.utc.to_i) + r = lastfm.track.scrobble(params[:artist], params[:track], params[:album], Time.now.utc.to_i) render :json => {:status => r ? 'success' : 'failed', time: Time.now.utc} return diff --git a/public/js/beathaven/player.js b/public/js/beathaven/player.js index ed8e9af..303cff0 100644 --- a/public/js/beathaven/player.js +++ b/public/js/beathaven/player.js @@ -28,8 +28,8 @@ var Player = { this.jp.bind($.jPlayer.event.timeupdate, function(e){ data = e.jPlayer.status; if (!Player.scrobbled && data.currentPercentAbsolute > 50) { - var tmp = $('#player .now-playing').text().split(' — '); - Player.scrobble(tmp[0], tmp[1]); + var $obj = $('.playlist-tracks li.now'); + Player.scrobble($obj.attr('data-artist'), $obj.attr('data-album'), $obj.attr('data-track')); Player.scrobbled = true; } $('#player .progress .loaded').width(data.seekPercent * Player.bar_width / 100); @@ -40,10 +40,13 @@ var Player = { }); }, - addTrack: function(artist, track, length) { + addTrack: function(artist, album, track, length, autoplay) { + if (typeof autoplay === 'undefined') { + autoplay = false; + } var initial_count = $('.playlist-tracks li').length; $('.playlist-tracks').append('\ -
  • \ +
  • \
    \
    \ '+ artist +' — '+ track +'\ @@ -56,24 +59,24 @@ var Player = { $('#playlist').html($('.playlist-tracks')).scrollbar(); $('.playlist-tracks').sortable(); - if (initial_count === 0 && !Player.hasTrack()) { + if (autoplay) { + Player.setTrack($('.playlist-tracks li').last().attr('id').split('i')[1]); + } else if (initial_count === 0 && !Player.hasTrack()) { Player.setTrack($('.playlist-tracks li').first().attr('id').split('i')[1]); } }, setTrack: function(id) { var $obj = $('#i'+ id); - var query = $obj.find('.title').text(); - var length = $obj.find('.duration').text(); - var tmp = query.split(' — '); + var query = $obj.attr('data-artist') +'—'+ $obj.attr('data-track'); $('#player .now-playing').html(query); $('.playlist-tracks li').removeClass('now'); $obj.addClass('now'); $('#player .loaded, #player .played').width(0); - loadTracksData(tmp[0], tmp[1], length, Player.playSource); - Player.updateNowListening(tmp[0], tmp[1]); + loadTracksData($obj.attr('data-artist'), $obj.attr('data-track'), $obj.attr('data-length'), Player.playSource); + Player.updateNowListening($obj.attr('data-artist'), $obj.attr('data-album'), $obj.attr('data-track')); }, hasTrack: function() { @@ -111,12 +114,12 @@ var Player = { } }, - updateNowListening: function(artist, track) { - Session.query('/lastfm/listening?r='+ Math.random(), {'artist': artist, 'track': track}) + updateNowListening: function(artist, album, track) { + Session.query('/lastfm/listening?r='+ Math.random(), {'artist': artist, 'album': album, 'track': track}) }, - scrobble: function(artist, track) { - Session.query('/lastfm/scrobble?r='+ Math.random(), {'artist': artist, 'track': track}) + scrobble: function(artist, album, track) { + Session.query('/lastfm/scrobble?r='+ Math.random(), {'artist': artist, 'album': album, 'track': track}) } } @@ -134,17 +137,19 @@ $('#player .controls .next').live('click', function(){ $('.add-album').live('click', function() { var artist = $('.artist-info .name').html(); + var album = $(this).parent().parent().parent().find('h2.name').text().replace(/\s\([\d]{4}\)$/, ''); $(this).parent().parent().parent().find('.tracklist li').each(function(i, item){ var track_name = $(item).find('.trackname').html(); var length = $(item).find('.length').html(); - Player.addTrack(artist, track_name, length); + Player.addTrack(artist, album, track_name, length); }); }) $('.add-track').live('click', function(){ var artist = $('.artist-info .name').html(); + var album = $(this).parent().parent().parent().parent().find('h2.name').text().replace(/\s\([\d]{4}\)$/, ''); var track_name = $(this).parent().find('.trackname').html(); var length = $(this).parent().find('.length').html(); - Player.addTrack(artist, track_name, length); + Player.addTrack(artist, album, track_name, length); }); $('#player .play').live('click', function(){ @@ -159,6 +164,12 @@ $('.tracklist li').live('mouseover mouseout', function(e){ } else { $(this).find('.add-track').hide(); } +}).live('dblclick', function(e){ + var artist = $('.artist-info .name').html(); + var album = $(this).parent().parent().parent().find('h2.name').text().replace(/\s\([\d]{4}\)$/, ''); + var track_name = $(this).find('.trackname').html(); + var length = $(this).find('.length').html(); + Player.addTrack(artist, album, track_name, length, true); }); $('.playlist-tracks li .fade, .playlist-tracks li .duration, .playlist-tracks li .remove').live('mouseover mouseout', function(e){