diff --git a/app/assets/javascripts/.music_player.js.swo b/app/assets/javascripts/.music_player.js.swo new file mode 100644 index 0000000000000000000000000000000000000000..193c93e3a4cf5249702f8e9d0d3a895f5a1ce0e7 Binary files /dev/null and b/app/assets/javascripts/.music_player.js.swo differ diff --git a/app/assets/javascripts/music_player.js b/app/assets/javascripts/music_player.js index 18f3312983ff98bbfd2c608873409869075ba221..6b6df22528e47dca607a69a77150ba0a2c1f410f 100644 --- a/app/assets/javascripts/music_player.js +++ b/app/assets/javascripts/music_player.js @@ -5,6 +5,9 @@ $( ".clickable_links" ).each(function() { if ($(this).data().player == "youtube" ) { $(this).on( 'click', youtube_click); } + else if ($(this).data().player == "soundcloud" ) { + $(this).on( 'click', soundcloud_click); + } }); function youtube_click() { @@ -13,28 +16,27 @@ function youtube_click() { } function youtube_player() { - if (player && $("div#music_player").length == 0) { - player.loadVideoById(music_info.data().url); - } - else { - player = new YT.Player('music_player', { - height: '390', - width: '640', - videoId: music_info.data().url, - events: { - 'onReady': player_launch, - 'onStateChange': onPlayerStateChange, - 'onError': player_error - } - }); - } + player_destroy(); + player = new YT.Player('player_block', { + height: '390', + width: '640', + videoId: music_info.data().url, + events: { + 'onReady': player_launch, + 'onStateChange': onPlayerStateChange, + 'onError': player_error + } + }); } function next_music() { music_info = $("li[data-id=\'"+music_info.data().id+"\']").next(); if (music_info.data().player == "youtube" ) { youtube_player(); - } + } + else if (music_info.data().player == "soundcloud" ) { + soundcloud_player(); + } } function onPlayerStateChange(event) { @@ -42,11 +44,55 @@ function onPlayerStateChange(event) { next_music(); } } - function player_error(event) { next_music(); } - function player_launch(event) { event.target.playVideo(); } + + + +function soundcloud_click() { + music_info = $(this); + soundcloud_player(); +} + +function player_destroy() { + if (player) { + if ($("#player_block").length == 0) { + $("#player_position").append("<div id=\"player_block\"></div>"); + } + + try { + player.destroy(); + } + catch(e) {} + + try { + var iframe = document.querySelector('iframe'); + iframe.parentNode.removeChild(iframe); + } + catch(e) {} + } +} + +function soundcloud_listener() { + var iframe = document.querySelector('iframe'); + var widget = SC.Widget(iframe); + widget.bind(SC.Widget.Events.READY, function() { + widget.bind(SC.Widget.Events.FINISH, next_music); + }); +} + +function soundcloud_player() { + player_destroy(); + var music_url = "https://soundcloud.com/"+music_info.data().url; + SC.oEmbed(music_url, { auto_play: true , maxheight: 120, maxwidth: 1000 }, function(oEmbed) { + player = oEmbed.html.replace('visual=true&',''); + player = $('#player_block').html(player); + }); + setTimeout(soundcloud_listener, 2000 ); + +} + diff --git a/app/assets/stylesheets/music_index.css b/app/assets/stylesheets/music_index.css index 35147a4db892608b5dfa21f5cb031ed9bddcbd0a..58960d69d88babd8cb5ac761474ca53cd9819389 100644 --- a/app/assets/stylesheets/music_index.css +++ b/app/assets/stylesheets/music_index.css @@ -10,6 +10,8 @@ ul background-color: rgba(0, 110, 140, 0.8); margin: 2px; cursor: pointer; + overflow: hidden; + position: relative; } @@ -19,6 +21,9 @@ ul padding: 15px 0; font: 15px 'Helvetica Neue', Helvetica, Arial, sans-serif; color: rgba(250,220,180,1); + overflow: hidden; + position: relative; + text-overflow: ellipsis; } .music_id @@ -29,7 +34,7 @@ ul .music_chan { - width: 10% + width: 10%; } .music_title @@ -40,7 +45,6 @@ ul .music_sender { width: 10%; - /*overflow: hidden;*/ } .music_tags diff --git a/app/views/channels/show_channel.html.erb b/app/views/channels/show_channel.html.erb index b52a3be244386fb27d7082573a63b7f2f8523a16..ea696e17c28985de21b758915355fd658c6b94d0 100644 --- a/app/views/channels/show_channel.html.erb +++ b/app/views/channels/show_channel.html.erb @@ -1,5 +1,3 @@ -<div id="music_player"></div> - <ul> <% @musics.each do |music| %> <li class="clickable_links" @@ -9,17 +7,11 @@ if music.type == "youtube" track = music.url.sub(/.*v=/,'') elsif music.type == "soundcloud" - begin - track = $soundcloud.get('/resolve', :url => music.url) - track.id - rescue - "Link down" - end + track = music.url.sub(/https:\/\/soundcloud\.com\//,'') end %>"> - <span class="music_id"><%= music.id %></span> - <span class="music_chan"> - <%= link_to(music.channel.chan,'/musics/channels/'+music.channel.chan.sub('#','')) %></span> - <span class="music_title"><%= music.title %></span> + <span class="music_id"><%= music.id %></span> + <span class="music_chan"><%= music.channel.chan %></span> + <span class="music_title"><%= music.title%></span> <span class="music_tags"><%= music.tags.map{|t| t.tag}.join(", ") %></span> <span class="music_sender"><%= music.channel.sender_irc %></span> </li> diff --git a/app/views/channels/show_user.html.erb b/app/views/channels/show_user.html.erb index 922884e5279e64d714820bdce8df2094d94819d2..ea696e17c28985de21b758915355fd658c6b94d0 100644 --- a/app/views/channels/show_user.html.erb +++ b/app/views/channels/show_user.html.erb @@ -1,5 +1,3 @@ -<div id="music_player"></div> - <ul> <% @musics.each do |music| %> <li class="clickable_links" @@ -9,16 +7,11 @@ if music.type == "youtube" track = music.url.sub(/.*v=/,'') elsif music.type == "soundcloud" - begin - track = $soundcloud.get('/resolve', :url => music.url) - track.id - rescue - "Link down" - end + track = music.url.sub(/https:\/\/soundcloud\.com\//,'') end %>"> <span class="music_id"><%= music.id %></span> <span class="music_chan"><%= music.channel.chan %></span> - <span class="music_title"><%= music.title %></span> + <span class="music_title"><%= music.title%></span> <span class="music_tags"><%= music.tags.map{|t| t.tag}.join(", ") %></span> <span class="music_sender"><%= music.channel.sender_irc %></span> </li> diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 2ed556e2970fdcf33ee1adf3c25f504d4833eaad..38a32316351339f2fe6a2a66fdb6dcf26f81e679 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -6,10 +6,15 @@ <%= csrf_meta_tags %> </head> <body> - + <div id="player_position"> + <div id="player_block"></div> + </div> <%= yield %> </body> <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> <script src="https://www.youtube.com/iframe_api"></script> +<script src="https://connect.soundcloud.com/sdk.js"></script> +<script src="https://w.soundcloud.com/player/api.js"></script> + </html> diff --git a/app/controllers/.channels_controller.rb.swp b/app/views/musics/.index.html.erb.swo similarity index 90% rename from app/controllers/.channels_controller.rb.swp rename to app/views/musics/.index.html.erb.swo index cfc225ed60b20e7b67e4a2384bf4fc1735d002d4..a7022bc50a3d652a8beb4988133347be7f1ba119 100644 Binary files a/app/controllers/.channels_controller.rb.swp and b/app/views/musics/.index.html.erb.swo differ diff --git a/app/views/musics/index.html.erb b/app/views/musics/index.html.erb index 8ec427a89601506abdf8097988a8afa1eeb20573..ea696e17c28985de21b758915355fd658c6b94d0 100644 --- a/app/views/musics/index.html.erb +++ b/app/views/musics/index.html.erb @@ -1,5 +1,3 @@ -<div id="music_player"></div> - <ul> <% @musics.each do |music| %> <li class="clickable_links" @@ -9,12 +7,7 @@ if music.type == "youtube" track = music.url.sub(/.*v=/,'') elsif music.type == "soundcloud" - begin - track = $soundcloud.get('/resolve', :url => music.url) - track.id - rescue - "Link down" - end + track = music.url.sub(/https:\/\/soundcloud\.com\//,'') end %>"> <span class="music_id"><%= music.id %></span> <span class="music_chan"><%= music.channel.chan %></span> diff --git a/app/views/musics/show.html.erb b/app/views/musics/show.html.erb index 3d5e0f829fa65b71d3ec3925d0e8dd9857c12dd1..78e787c3b9d22a9187c001b7617ac6fa793031df 100644 --- a/app/views/musics/show.html.erb +++ b/app/views/musics/show.html.erb @@ -1,33 +1,16 @@ <ul> - <li class="clickable_links" data-url=" - <%= - if @music.type == "youtube" - track = @music.url.sub(/.*v=/,'') - elsif @music.type == "soundcloud" - begin - track = $soundcloud.get('/resolve', :url => @music.url) - track.id - rescue - "Link down" - end - end %> - "> + <li class="clickable_links" + data-id="<%= music.id %>" + data-player="<%= music.type %>" + data-url="<%= + if music.type == "youtube" + track = music.url.sub(/.*v=/,'') + elsif music.type == "soundcloud" + track = music.url.sub(/https:\/\/soundcloud\.com\//,'') + end %>"> <span class="music_id"><%= @music.id %></span> <span class="music_title"><%= @music.title%></span> <span class="music_tags"><%= @music.tags.map{|t| t.tag}.join(", ") %></span> <span class="music_sender"><%= @music.sender_irc %></span> </li> </ul> -<%=if @music.type == "youtube" - track = @music.url.sub(/watch\?v=/,'embed/') - raw("<iframe id=\"ytplayer\" type=\"text/html\" width=\"640\" height=\"390\" src=\""+track+"?autoplay=1\" frameborder=\"0\"/>") - elsif @music.type == "soundcloud" - begin - track = $soundcloud.get('/oembed', :url => @music.url, :maxwidth => "800", :maxheight => "150", :auto_play => "true") - raw(track['html'].gsub("visual=true&","")) - #The Soundcloud API doesn't enable modification of the parameter 'visual' - rescue - "Link down" - end - end -%> diff --git a/app/views/channels/.show_channel.html.erb.swp b/app/views/tags/.show.html.erb.swp similarity index 88% rename from app/views/channels/.show_channel.html.erb.swp rename to app/views/tags/.show.html.erb.swp index b765e8a90a40bccd3d9961cd73175932c48d87a7..84869f8ddadad2521ef884c44e34ea0f13766bf8 100644 Binary files a/app/views/channels/.show_channel.html.erb.swp and b/app/views/tags/.show.html.erb.swp differ diff --git a/app/views/tags/show.html.erb b/app/views/tags/show.html.erb index 7d464485f060ab6b3dda48e30b214d3becd4f4d3..18488d206f6d5a31a2fe004dbbf54b29894f4f6c 100644 --- a/app/views/tags/show.html.erb +++ b/app/views/tags/show.html.erb @@ -1,5 +1,3 @@ -<div id="music_player"></div> - <ul> <% @musics.each do |music| %> <li class="clickable_links" @@ -9,18 +7,15 @@ if music.type == "youtube" track = music.url.sub(/.*v=/,'') elsif music.type == "soundcloud" - begin - track = $soundcloud.get('/resolve', :url => music.url) - track.id - rescue - "Link down" - end + track = music.url.sub(/https:\/\/soundcloud\.com\//,'') end %>"> <span class="music_id"><%= music.id %></span> - <span class="music_title"><%= music.title %></span> + <span class="music_chan"><%= music.channel.chan %></span> + <span class="music_title"><%= music.title%></span> <span class="music_tags"><%= music.tags.map{|t| t.tag}.join(", ") %></span> - <span class="music_sender"><%= music.sender_irc %></span> + <span class="music_sender"><%= music.channel.sender_irc %></span> </li> <% end %> </ul> <%= paginate @musics %> + diff --git a/config/initializers/soundcloud.rb b/config/initializers/soundcloud.rb deleted file mode 100644 index 308fe5f0851e533d2663cf818c561823e33e44aa..0000000000000000000000000000000000000000 --- a/config/initializers/soundcloud.rb +++ /dev/null @@ -1,4 +0,0 @@ -#require 'yaml' - -soundcloud = YAML.load_file("#{File.dirname(__FILE__)}/../soundcloud.yml") -$soundcloud = Soundcloud.new(:client_id => soundcloud["client_id"]) diff --git a/config/routes.rb b/config/routes.rb index 0c4b22bf0803652df3506b07fe8593261bc42a45..c05a8d51ac1f9a900bf215852269eef555fc571f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -56,6 +56,8 @@ Rails.application.routes.draw do resources :musics resources :tags resources :channels + + root to: 'musics#index' get '/musics/tags/:tag', to: "tags#show" get '/musics/users/:user', to: "channels#show_user"