Artist import moved to a controller, added shiny buttons
This commit is contained in:
parent
2b9db10ac2
commit
da67276a9a
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,3 +1,3 @@
|
||||
tmp/
|
||||
log/
|
||||
.sqlite3
|
||||
*.sqlite3
|
||||
|
@ -1,8 +1,8 @@
|
||||
class ArtistController < ApplicationController
|
||||
def data
|
||||
data = {}
|
||||
artist = Artist.find_by_name(params[:name])
|
||||
data['artist'] = {name: artist.name, desc: artist.desc, pic: artist.pic_url}
|
||||
artist = Artist.find_by_name(params[:name].gsub('+', ' '))
|
||||
data['artist'] = {name: artist.name, desc: ActionController::Base.helpers.strip_tags(artist.desc), pic: artist.pic_url}
|
||||
data['albums'] = []
|
||||
albums = artist.albums
|
||||
albums.each do |album|
|
||||
|
71
app/controllers/import_controller.rb
Normal file
71
app/controllers/import_controller.rb
Normal file
@ -0,0 +1,71 @@
|
||||
class ImportController < ApplicationController
|
||||
def self.importArtist name
|
||||
# Get artist from MB
|
||||
mb_artist = MusicBrainzArtist.getByName(name)
|
||||
# # Save artist
|
||||
artist_xml = open('http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&api_key=04fda005dbf61a50af5abc3e90f111f2&artist='+ URI.escape(name)).read
|
||||
artist = Artist.new
|
||||
artist.name = mb_artist.name
|
||||
artist.desc = artist_xml.scan(/<summary><\!\[CDATA\[?(.*)\]\]><\/summary>/m)[0][0]
|
||||
artist.pic_url = artist_xml.scan(/<image\ssize=\"extralarge\">?(.*)<\/image>/)[0][0]
|
||||
artist.save
|
||||
# Get albums from MB
|
||||
mb_albums = MusicBrainzAlbum.where('artist_id = ? AND release_type = 1', mb_artist.id).order('year ASC, id ASC')
|
||||
mb_albums.each do |mb_album|
|
||||
# Saving album
|
||||
album_xml = open('http://ws.audioscrobbler.com/2.0/?method=album.getinfo&api_key=04fda005dbf61a50af5abc3e90f111f2&artist='+ URI.escape(name) +'&album='+ URI.escape(mb_album.name)).read
|
||||
album = Album.new
|
||||
album.name = mb_album.name
|
||||
album.year = mb_album.year
|
||||
album.artist_id = artist.id
|
||||
album.status = 1
|
||||
album.pic_url = album_xml.scan(/<image\ssize=\"extralarge\">?(.*)<\/image>/)[0][0]
|
||||
album.save
|
||||
# Get album releases from MB
|
||||
mb_releases = MusicBrainzRelease.where('album_id = ? AND release_type = 1', mb_album.id).order('date ASC, id ASC')
|
||||
# Get tracks from the first release and then exclude release
|
||||
mb_main_tracks = MusicBrainzTrack.where('release_id IN (?)', mb_releases.shift.id).order('position ASC')
|
||||
# Creating hashed array for matching
|
||||
mb_main_tracks_hashed = []
|
||||
mb_main_tracks.each do |mb_track|
|
||||
mb_main_tracks_hashed << mb_track.name.downcase.scan(/[a-z0-9]*/).join
|
||||
end
|
||||
# Getting other releases ids
|
||||
release_ids = []
|
||||
mb_releases.each do |mb_release|
|
||||
release_ids << mb_release.id
|
||||
end
|
||||
# Searching for tracks in other releases
|
||||
mb_other_tracks = MusicBrainzTrack.where('release_id IN (?)', release_ids).order('position ASC')
|
||||
mb_bonus_tracks = []
|
||||
mb_other_tracks.each do |mb_track|
|
||||
unless mb_main_tracks_hashed.include? mb_track.name.downcase.scan(/[a-z0-9]*/).join
|
||||
mb_bonus_tracks << mb_track
|
||||
end
|
||||
end
|
||||
# Saving tracks
|
||||
mb_main_tracks.each do |mb_track|
|
||||
track = Track.new
|
||||
track.name = mb_track.name
|
||||
track.album_id = album.id
|
||||
track.position = mb_track.position
|
||||
track.length = mb_track.length
|
||||
track.bonus = 0
|
||||
track.live = mb_track.name.downcase.include? 'live'
|
||||
track.acoustic = mb_track.name.downcase.include? 'acoustic'
|
||||
track.save
|
||||
end
|
||||
mb_bonus_tracks.each do |mb_track|
|
||||
track = Track.new
|
||||
track.name = mb_track.name
|
||||
track.album_id = album.id
|
||||
track.position = mb_track.position
|
||||
track.length = mb_track.length
|
||||
track.bonus = 1
|
||||
track.live = mb_track.name.downcase.include? 'live'
|
||||
track.acoustic = mb_track.name.downcase.include? 'acoustic'
|
||||
track.save
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -3,75 +3,9 @@ require 'open-uri'
|
||||
namespace :db do
|
||||
desc 'Imports data from MusicBrainz database'
|
||||
task :import => :environment do
|
||||
ati = ['Kasabian']
|
||||
ati = ['Foo Fighters']
|
||||
ati.each do |name|
|
||||
# Get artist from MB
|
||||
mb_artist = MusicBrainzArtist.getByName(name)
|
||||
# # Save artist
|
||||
artist_xml = open('http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&api_key=04fda005dbf61a50af5abc3e90f111f2&artist='+ URI.escape(name)).read
|
||||
artist = Artist.new
|
||||
artist.name = mb_artist.name
|
||||
artist.desc = artist_xml.scan(/<summary><\!\[CDATA\[?(.*)\]\]><\/summary>/m)[0][0]
|
||||
artist.pic_url = artist_xml.scan(/<image\ssize=\"extralarge\">?(.*)<\/image>/)[0][0]
|
||||
artist.save
|
||||
# Get albums from MB
|
||||
mb_albums = MusicBrainzAlbum.where('artist_id = ? AND release_type = 1', mb_artist.id).order('year ASC, id ASC')
|
||||
mb_albums.each do |mb_album|
|
||||
# Saving album
|
||||
album_xml = open('http://ws.audioscrobbler.com/2.0/?method=album.getinfo&api_key=04fda005dbf61a50af5abc3e90f111f2&artist='+ URI.escape(name) +'&album='+ URI.escape(mb_album.name)).read
|
||||
album = Album.new
|
||||
album.name = mb_album.name
|
||||
album.year = mb_album.year
|
||||
album.artist_id = artist.id
|
||||
album.status = 1
|
||||
album.pic_url = album_xml.scan(/<image\ssize=\"extralarge\">?(.*)<\/image>/)[0][0]
|
||||
album.save
|
||||
# Get album releases from MB
|
||||
mb_releases = MusicBrainzRelease.where('album_id = ? AND release_type = 1', mb_album.id).order('date ASC, id ASC')
|
||||
# Get tracks from the first release and then exclude release
|
||||
mb_main_tracks = MusicBrainzTrack.where('release_id IN (?)', mb_releases.shift.id).order('position ASC')
|
||||
# Creating hashed array for matching
|
||||
mb_main_tracks_hashed = []
|
||||
mb_main_tracks.each do |mb_track|
|
||||
mb_main_tracks_hashed << mb_track.name.downcase.scan(/[a-z0-9]*/).join
|
||||
end
|
||||
# Getting other releases ids
|
||||
release_ids = []
|
||||
mb_releases.each do |mb_release|
|
||||
release_ids << mb_release.id
|
||||
end
|
||||
# Searching for tracks in other releases
|
||||
mb_other_tracks = MusicBrainzTrack.where('release_id IN (?)', release_ids).order('position ASC')
|
||||
mb_bonus_tracks = []
|
||||
mb_other_tracks.each do |mb_track|
|
||||
unless mb_main_tracks_hashed.include? mb_track.name.downcase.scan(/[a-z0-9]*/).join
|
||||
mb_bonus_tracks << mb_track
|
||||
end
|
||||
end
|
||||
# Saving tracks
|
||||
mb_main_tracks.each do |mb_track|
|
||||
track = Track.new
|
||||
track.name = mb_track.name
|
||||
track.album_id = album.id
|
||||
track.position = mb_track.position
|
||||
track.length = mb_track.length
|
||||
track.bonus = 0
|
||||
track.live = mb_track.name.downcase.include? 'live'
|
||||
track.acoustic = mb_track.name.downcase.include? 'acoustic'
|
||||
track.save
|
||||
end
|
||||
mb_bonus_tracks.each do |mb_track|
|
||||
track = Track.new
|
||||
track.name = mb_track.name
|
||||
track.album_id = album.id
|
||||
track.position = mb_track.position
|
||||
track.length = mb_track.length
|
||||
track.bonus = 1
|
||||
track.live = mb_track.name.downcase.include? 'live'
|
||||
track.acoustic = mb_track.name.downcase.include? 'acoustic'
|
||||
track.save
|
||||
end
|
||||
end
|
||||
ImportController.importArtist(name)
|
||||
end
|
||||
end
|
||||
end
|
@ -1,11 +1,12 @@
|
||||
function loadArtistData(name) {
|
||||
$.get('/artist/'+ name +'/', function(data){
|
||||
Pages.renderArtist(data);
|
||||
})
|
||||
}
|
||||
|
||||
$(function(){
|
||||
$('a.data').live('click', function(){
|
||||
var button = this;
|
||||
$.get(this.href, function(data){
|
||||
if ($(button).hasClass('artist')) {
|
||||
Pages.renderArtist(data);
|
||||
}
|
||||
})
|
||||
$('a.data.artist').live('click', function(){
|
||||
loadArtistData($(this).html());
|
||||
return false;
|
||||
});
|
||||
$('a.data').trigger('click');
|
||||
|
@ -20,7 +20,9 @@ var Pages = {
|
||||
<h2 class="name">'+ album.name +' ('+ album.year +')</h2>\
|
||||
<div class="pic">\
|
||||
<img src="'+ album.pic +'" alt="'+ album.name +' by '+ data.artist.name +'" width="250" />\
|
||||
<div class="add-album">Add to playlist</div>\
|
||||
<div class="add-album-button-container">\
|
||||
<div class="add-album button gray">Add to Now Playing</div>\
|
||||
</div>\
|
||||
</div>\
|
||||
<div class="tracklist">\
|
||||
<ul>\
|
||||
@ -32,9 +34,12 @@ var Pages = {
|
||||
$.each(album.tracks.album, function(i, track){
|
||||
var track_info = $('\
|
||||
<li>\
|
||||
<span class="index">'+ (i+1) +'</span>\
|
||||
<div class="trackname">'+ track.name +'</div>\
|
||||
<div class="length">'+ track.duration +'</div>\
|
||||
<div class="add-track button gray">+</div>\
|
||||
<div class="track-container">\
|
||||
<span class="index">'+ (i+1) +'</span>\
|
||||
<div class="trackname">'+ track.name +'</div>\
|
||||
<div class="length">'+ track.duration +'</div>\
|
||||
</div>\
|
||||
</li>\
|
||||
');
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
var Player = {
|
||||
|
||||
bar_width: 290,
|
||||
bar_width: 330,
|
||||
|
||||
getTrackUrl: function(data) {
|
||||
|
||||
@ -42,18 +42,32 @@ var Player = {
|
||||
}
|
||||
|
||||
$('.add-album').live('click', function() {
|
||||
var artist = $(this).parent().parent().parent().parent().find('.artist-info .name').html();
|
||||
$(this).parent().parent().find('.tracklist li').each(function(i, item){
|
||||
var artist = $('.artist-info .name').html();
|
||||
$(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);
|
||||
});
|
||||
})
|
||||
$('.add-track').live('click', function(){
|
||||
var artist = $('.artist-info .name').html();
|
||||
var track_name = $(this).parent().find('.trackname').html();
|
||||
var length = $(this).parent().find('.length').html();
|
||||
Player.addTrack(artist, track_name, length);
|
||||
});
|
||||
|
||||
$('.tracklist li').live('mouseover mouseout', function(e){
|
||||
if (e.type == 'mouseover') {
|
||||
$(this).find('.add-track').show();
|
||||
} else {
|
||||
$(this).find('.add-track').hide();
|
||||
}
|
||||
});
|
||||
|
||||
$('.playlist-tracks li').live('dblclick', function(){
|
||||
Player.setTrack(this);
|
||||
})
|
||||
});
|
||||
|
||||
$(function(){
|
||||
Audio.init();
|
||||
})
|
||||
});
|
@ -2,7 +2,7 @@
|
||||
.artist-info {
|
||||
width: 100%;
|
||||
float: left;
|
||||
margin: 25px 0;
|
||||
margin: 0 0 25px 0;
|
||||
}
|
||||
.albums {
|
||||
width: 100%;
|
||||
@ -36,28 +36,39 @@
|
||||
.album .pic > * {
|
||||
margin-left: 25px;
|
||||
}
|
||||
.add-album-button-container {
|
||||
position: relative;
|
||||
margin: 10px -25px 0 0;
|
||||
text-align: center;
|
||||
}
|
||||
.album .pic .add-album {
|
||||
margin-top: 15px;
|
||||
width: auto;
|
||||
color: #04D;
|
||||
cursor: pointer;
|
||||
|
||||
}
|
||||
.album .name {
|
||||
display: block;
|
||||
margin: 0 0 10px 300px;
|
||||
}
|
||||
.album .tracklist {
|
||||
margin: 0 25px 30px 300px;
|
||||
margin: 0 25px 30px 275px;
|
||||
}
|
||||
.album .tracklist ul {
|
||||
|
||||
}
|
||||
.album .tracklist ul li {
|
||||
display: block;
|
||||
height: 20px;
|
||||
padding: 5px 0 0 0;
|
||||
border-top: #EEE 1px solid;
|
||||
padding-left: 25px;
|
||||
}
|
||||
.add-track {
|
||||
display: none;
|
||||
float: left;
|
||||
padding: 1px 5px;
|
||||
margin: 3px 0 0 -22px;
|
||||
}
|
||||
.album .tracklist ul li .track-container {
|
||||
height: 20px;
|
||||
padding: 5px 0 0 0;
|
||||
border-top: #EEE 1px solid;
|
||||
}
|
||||
.album .tracklist ul li:hover {
|
||||
background-color: #FAFAFA;
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ body {
|
||||
|
||||
#player {
|
||||
width: 100%;
|
||||
height: 200px;
|
||||
height: 120px;
|
||||
}
|
||||
#playlist {
|
||||
width: 100%;
|
||||
|
@ -28,6 +28,19 @@
|
||||
font-weight: bold;
|
||||
margin-right: 12px;
|
||||
}
|
||||
.button {
|
||||
display: inline;
|
||||
width: auto;
|
||||
padding: 5px 10px;
|
||||
border-radius: 3px;
|
||||
border: 1px solid;
|
||||
cursor: pointer;
|
||||
}
|
||||
.button.gray {
|
||||
background-color: #EEE;
|
||||
color: #444;
|
||||
border-color: #DDD;
|
||||
}
|
||||
|
||||
/* Colorizing *
|
||||
#player-container { background-color: #CFC; }
|
||||
|
@ -8,24 +8,25 @@
|
||||
line-height: 30px;
|
||||
}
|
||||
#player .progress {
|
||||
width: 290px;
|
||||
height: 10px;
|
||||
width: 330px;
|
||||
height: 5px;
|
||||
background-color: #333;
|
||||
margin: 20px 30px;
|
||||
margin: 0 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
#player .progress .loaded {
|
||||
width: 0;
|
||||
height: 10px;
|
||||
height: 5px;
|
||||
background-color: #405050;
|
||||
}
|
||||
#player .progress .played {
|
||||
width: 0;
|
||||
height: 10px;
|
||||
height: 5px;
|
||||
background-color: #09A;
|
||||
}
|
||||
#player .controls {
|
||||
width: 290px;
|
||||
margin: 40px 95px;
|
||||
margin: 20px 95px;
|
||||
}
|
||||
#player .controls > div {
|
||||
width: 40px;
|
||||
@ -35,13 +36,13 @@
|
||||
cursor: pointer;
|
||||
}
|
||||
#player .controls .prev {
|
||||
background-image: url('../icns/prev.png');
|
||||
background-image: url('/images/icns/prev.png');
|
||||
}
|
||||
#player .controls .play {
|
||||
background-image: url('../icns/play.png');
|
||||
background-image: url('/images/icns/play.png');
|
||||
}
|
||||
#player .controls .next {
|
||||
background-image: url('../icns/next.png');
|
||||
background-image: url('/images/icns/next.png');
|
||||
}
|
||||
|
||||
.playlist-tracks li {
|
||||
|
Loading…
x
Reference in New Issue
Block a user