diff --git a/app/assets/javascripts/player.coffee b/app/assets/javascripts/player.coffee index b3046fe..c09ab0c 100644 --- a/app/assets/javascripts/player.coffee +++ b/app/assets/javascripts/player.coffee @@ -187,6 +187,25 @@ class window.Player if _session.getUser().lastfm_username _session.query '/lastfm/scrobble?r=' +Math.random(), track false + + emptyPlaylist: -> + $('.playlist li').remove() + $('#jplayer').jPlayer 'clearMedia' + $('.player .now-playing').text 'Add some music to playlist' + $('.player .loaded, .player .played').width 0 + false + + setPlaylist: (data) -> + this.emptyPlaylist() + tracks = [] + for item in data.playlist_items + tracks.push + id: item.track.id + name: item.track.name + artist: item.track.artists[0].name + length: item.track.length + this.addTracks tracks + false # Player Controls @@ -216,10 +235,7 @@ $('.repeat, .shuffle').live 'click', -> $('.do_empty').live 'click', -> if confirm('Are you sure?') - $('.playlist li').remove() - $('#jplayer').jPlayer 'clearMedia' - $('.player .now-playing').text 'Add some music to playlist' - $('.player .loaded, .player .played').width 0 + _player.emptyPlaylist() false # Playlist Actions @@ -267,3 +283,11 @@ $('.s-add').live 'click', -> _player.addTracks [item] return false false + +$('.set-playlist').live 'click', -> + _search.showSpinner() + $.get "/playlist/#{$(this).data('playlist-id')}", (playlist) -> + _player.setPlaylist playlist + _search.hideSpinner() + false + false diff --git a/app/controllers/playlist_controller.rb b/app/controllers/playlist_controller.rb new file mode 100644 index 0000000..ef8076c --- /dev/null +++ b/app/controllers/playlist_controller.rb @@ -0,0 +1,6 @@ +class PlaylistController < ApplicationController + def data + @playlist = Playlist.find_by_id(params[:id]) + render json: @playlist, include: { playlist_items: { include: { track: { include: { artists: {} }}}}} + end +end diff --git a/app/models/beathaven/playlist.rb b/app/models/beathaven/playlist.rb index 36455d2..92fdea2 100644 --- a/app/models/beathaven/playlist.rb +++ b/app/models/beathaven/playlist.rb @@ -1,4 +1,5 @@ class Playlist < ActiveRecord::Base belongs_to :user + belongs_to :artist has_many :playlist_items end diff --git a/app/models/music/artist.rb b/app/models/music/artist.rb index 08cdf1b..871d504 100644 --- a/app/models/music/artist.rb +++ b/app/models/music/artist.rb @@ -3,6 +3,7 @@ class Artist < ActiveRecord::Base has_many :artist_links, :dependent => :destroy has_many :artist_aliases, :dependent => :destroy has_many :tracks, :through => :track_artists + has_many :playlists after_initialize :prepare_description diff --git a/app/models/music/track.rb b/app/models/music/track.rb index ee71386..40a9a22 100644 --- a/app/models/music/track.rb +++ b/app/models/music/track.rb @@ -2,7 +2,7 @@ class Track < ActiveRecord::Base belongs_to :album has_many :track_artists has_many :artists, :through => :track_artists - @duration + has_many :playlist_items def duration if self.length diff --git a/app/views/artist/_page.html.haml b/app/views/artist/_page.html.haml index 5e96c07..6881534 100644 --- a/app/views/artist/_page.html.haml +++ b/app/views/artist/_page.html.haml @@ -11,29 +11,31 @@ %p= @artist.desc.html_safe unless @artist.desc.nil? - unless @artist.artist_links.empty? .service-icons - %a.foreign-link{ :href => "http://last.fm/artist/#{@artist.name.gsub(" ", "+")}", :target => '_blank' } + %a.foreign-link{ href: "http://last.fm/artist/#{@artist.name.gsub(" ", "+")}", target: '_blank' } = image_tag 'services/lastfm.ico' - @artist.artist_links.each do |service| - if ['wikipedia', 'microblog', 'official_homepage', 'social_network', 'youtube'].include?(service.service) - %a.foreign-link{ :href => service.url, :target => '_blank' } + %a.foreign-link{ href: service.url, target: '_blank' } = image_tag 'services/'+service.service+(service.service == 'official_homepage' ? '.png' : '.ico') -.row - .span7.offset4 - %h3 Playlists - %table.zebra-striped - %tr - %td - %a{ href: "" } Last.fm TOP +- unless @artist.playlists.empty? + .row + .span7.offset4 + %h3 Playlists + %table.zebra-striped + %tr + - @artist.playlists.each do |playlist| + %td + %a.set-playlist{ href: "", 'data-playlist-id' => playlist.id }= playlist.name - @artist.albums.each do |album| .row.album .span4.columns.art - %img{ :src => album.pic_url } + %img{ src: album.pic_url } .button-container - %a.btn.add-album{ :'data-album-id' => album.id }= I18n.t 'player.add' + %a.btn.add-album{ 'data-album-id' => album.id }= I18n.t 'player.add' .span7.columns.tracks - %h3{ :'data-album-id' => album.id } + %h3{ 'data-album-id' => album.id } = album.name %small= " ("+album.year.to_s+")" %table.zebra-striped.tracklist @@ -42,4 +44,4 @@ %td.song-title= track.name %td.song-duration .s-duration= (track.duration != '0:00' ? track.duration : ' '.html_safe) - %span.label.success.s-add{ :'data-album-id' => album.id, :'data-id' => track.id }= I18n.t 'player.add_one' + %span.label.success.s-add{ 'data-album-id' => album.id, 'data-id' => track.id }= I18n.t 'player.add_one' diff --git a/config/routes.rb b/config/routes.rb index 6823092..1597053 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -15,6 +15,8 @@ Beathaven::Application.routes.draw do match 'track/update_length' => 'track#update_length' match 'track/report' => 'track#report_unavailable' + match 'playlist/(:id)' => 'playlist#data' + match 'settings' => 'user#settings' match 'artist/autocomplete' => 'last_fm#autocomplete' diff --git a/db/migrate/20111126142207_add_artist_to_playlists.rb b/db/migrate/20111126142207_add_artist_to_playlists.rb new file mode 100644 index 0000000..19d1263 --- /dev/null +++ b/db/migrate/20111126142207_add_artist_to_playlists.rb @@ -0,0 +1,5 @@ +class AddArtistToPlaylists < ActiveRecord::Migration + def change + add_column :playlists, :artist_id, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index b670c58..230c685 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20111012064322) do +ActiveRecord::Schema.define(:version => 20111126142207) do create_table "album_formats", :force => true do |t| t.integer "album_id" @@ -155,6 +155,7 @@ ActiveRecord::Schema.define(:version => 20111012064322) do t.string "name" t.datetime "created_at" t.datetime "updated_at" + t.integer "artist_id" end create_table "release_formats", :force => true do |t|