From 39a2fc6532a7936f3e6bb763b46704e5c8bfeefd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kasper=20Rynning-T=C3=B8nnesen?= Date: Tue, 25 Sep 2018 17:49:49 +0200 Subject: [PATCH] Fallback with iframed soundcloud player for rate-limit reached - Messes up history of current tab, but it's better than not playing any music --- gulpfile.js | 7 +- package-lock.json | 54 ++--- package.json | 2 +- server/public/assets/js/channel.js | 3 +- server/public/assets/js/functions.js | 30 ++- server/public/assets/js/hostcontroller.js | 3 +- server/public/assets/js/listeners.js | 22 +- server/public/assets/js/player.js | 191 +++++++++++++++--- server/public/assets/js/playercontrols.js | 50 ++++- server/public/assets/js/search.js | 2 +- server/public/assets/sclib/scapi.js | 1 + .../partials/channel/players.handlebars | 2 +- 12 files changed, 271 insertions(+), 96 deletions(-) create mode 100644 server/public/assets/sclib/scapi.js diff --git a/gulpfile.js b/gulpfile.js index 13f76b5d..b916bda2 100755 --- a/gulpfile.js +++ b/gulpfile.js @@ -2,6 +2,7 @@ var gulp = require('gulp'), gutil = require('gulp-util'), uglify = require('gulp-uglify'), //sourcemaps = require('gulp-sourcemaps'), + gutil = require('gulp-util'), concat = require('gulp-concat'), cssnano = require('gulp-cssnano'); @@ -38,7 +39,7 @@ gulp.task('js', function () { compress: true, enclose: true, })) - + .on('error', function (err) { gutil.log(gutil.colors.red('[Error]'), err.toString()); }) //.pipe(sourcemaps.write('maps')) .pipe(gulp.dest('server/public/assets/dist')); }); @@ -52,6 +53,7 @@ gulp.task('embed', function () { compress: true, enclose: true })) + .on('error', function (err) { gutil.log(gutil.colors.red('[Error]'), err.toString()); }) //.pipe(sourcemaps.write('maps')) .pipe(gulp.dest('server/public/assets/dist')); }); @@ -65,6 +67,7 @@ gulp.task('token', function() { compress: true, enclose: true })) + .on('error', function (err) { gutil.log(gutil.colors.red('[Error]'), err.toString()); }) //.pipe(sourcemaps.write('maps')) .pipe(gulp.dest('server/public/assets/dist')); @@ -79,6 +82,7 @@ gulp.task('callback', function () { compress: true, enclose: true })) + .on('error', function (err) { gutil.log(gutil.colors.red('[Error]'), err.toString()); }) //.pipe(sourcemaps.write('maps')) .pipe(gulp.dest('server/public/assets/dist')); @@ -97,6 +101,7 @@ gulp.task('remotecontroller', function () { compress: true, enclose: true })) + .on('error', function (err) { gutil.log(gutil.colors.red('[Error]'), err.toString()); }) //.pipe(sourcemaps.write('maps')) .pipe(gulp.dest('server/public/assets/dist')); diff --git a/package-lock.json b/package-lock.json index 2b334fd4..7326dc11 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2755,6 +2755,27 @@ "optimist": "^0.6.1", "source-map": "^0.4.4", "uglify-js": "^2.6" + }, + "dependencies": { + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "optional": true, + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "optional": true + } + } + } } }, "har-schema": { @@ -4920,20 +4941,6 @@ "inherits": "~2.0.1", "isarray": "0.0.1", "string_decoder": "~0.10.x" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } } }, "rechoir": { @@ -6057,25 +6064,6 @@ } } }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "optional": true, - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "optional": true - } - } - }, "uglify-to-browserify": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", diff --git a/package.json b/package.json index 64074079..7275b3d3 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "gulp-concat": "^2.6.1", "gulp-cssnano": "^2.1.3", "gulp-uglify": "^3.0.1", - "gulp-util": "~3.0.6" + "gulp-util": "^3.0.8" }, "homepage": "https://github.com/zoff-music/zoff#readme", "dependencies": { diff --git a/server/public/assets/js/channel.js b/server/public/assets/js/channel.js index 14605d6b..cdd59282 100644 --- a/server/public/assets/js/channel.js +++ b/server/public/assets/js/channel.js @@ -197,7 +197,8 @@ var Channel = { Player.player.setVolume(Crypt.get_volume()); } catch(e){} try { - Player.soundcloud_player.setVolume(embed ? 1 : Crypt.get_volume() / 100); + if(scUsingWidget) Player.soundcloud_player.setVolume(embed ? 1 : Crypt.get_volume()); + else Player.soundcloud_player.setVolume(embed ? 1 : Crypt.get_volume() / 100); } catch(e){} } Helper.removeClass(".video-container", "no-opacity"); diff --git a/server/public/assets/js/functions.js b/server/public/assets/js/functions.js index 73a06a6c..6a2fc0a8 100644 --- a/server/public/assets/js/functions.js +++ b/server/public/assets/js/functions.js @@ -35,13 +35,23 @@ function resizeFunction() { if(!client && !embed) { var scPlaying = false; var ytPlaying = false; - try { - ytPlaying = Player.player.getPlayerState() == YT.PlayerState.PLAYING || Player.player.getPlayerState() == YT.PlayerState.BUFFERING; - } catch(e) {} - try { - scPlaying = Player.soundcloud_player.isPlaying(); - } catch(e){} - resizePlaylistPlaying(ytPlaying || scPlaying); + if(scUsingWidget) { + Player.soundcloud_player.isPaused(function(paused) { + try { + ytPlaying = Player.player.getPlayerState() == YT.PlayerState.PLAYING || Player.player.getPlayerState() == YT.PlayerState.BUFFERING; + } catch(e) {} + scPlaying = !paused; + resizePlaylistPlaying(ytPlaying || scPlaying); + }) + } else { + try { + ytPlaying = Player.player.getPlayerState() == YT.PlayerState.PLAYING || Player.player.getPlayerState() == YT.PlayerState.BUFFERING; + } catch(e) {} + try { + scPlaying = Player.soundcloud_player.isPlaying(); + } catch(e){} + resizePlaylistPlaying(ytPlaying || scPlaying); + } return; } } @@ -185,7 +195,8 @@ function hide_native(way) { Helper.setHtml("#chromecast_text", "Playing on
" + castSession.getCastDevice().friendlyName); } Player.player.setVolume(100); - Player.soundcloud_player.setVolume(1); + if(scUsingWidget) Player.soundcloud_player.setVolume(100); + else Player.soundcloud_player.setVolume(1); Helper.addClass("#player_overlay_text", "hide"); } else if(way == 0){ @@ -214,7 +225,8 @@ function hide_native(way) { if(!Helper.mobilecheck()){ Player.player.setVolume(Crypt.get_volume()); Playercontrols.visualVolume(Crypt.get_volume()); - Player.soundcloud_player.setVolume(embed ? 1 : Crypt.get_volume() / 100); + if(scUsingWidget) Player.soundcloud_player.setVolume(embed ? 1 : Crypt.get_volume()); + else Player.soundcloud_player.setVolume(embed ? 1 : Crypt.get_volume() / 100); } Helper.addClass("#player_overlay", "hide"); Helper.removeClass("#player_overlay_text", "hide"); diff --git a/server/public/assets/js/hostcontroller.js b/server/public/assets/js/hostcontroller.js index 06a01325..e53ba090 100755 --- a/server/public/assets/js/hostcontroller.js +++ b/server/public/assets/js/hostcontroller.js @@ -40,7 +40,8 @@ var Hostcontroller = { try { Playercontrols.visualVolume(arr.value); Player.setVolume(arr.value); - Player.soundcloud_player.setVolume(arr.value / 100); + if(scUsingWidget) Player.soundcloud_player.setVolume(arr.value); + else Player.soundcloud_player.setVolume(arr.value / 100); try { localStorage.setItem("volume", arr.value); } catch(e){} diff --git a/server/public/assets/js/listeners.js b/server/public/assets/js/listeners.js index bf768c11..248b6889 100755 --- a/server/public/assets/js/listeners.js +++ b/server/public/assets/js/listeners.js @@ -12,6 +12,9 @@ try { } catch(e) { _VERSION = 6; } +var SC_widget; +var scUsingWidget = false; +var SC_player; var soundcloud_enabled = true; var local_new_channel = false; var sc_need_initialization = false; @@ -257,25 +260,29 @@ window.addEventListener("DOMContentLoaded", function() { tagSC.readyState == "complete"){ tagSC.onreadystatechange = null; if(sc_need_initialization) { - Player.soundcloudReady(); + //Player.soundcloudReady(); } else { - SC.initialize({ + SC_player = SC; + SC_player.initialize({ client_id: api_key.soundcloud }, function() { }); } + Player.loadSoundCloudIframe(); } }; } else { //Others tagSC.onload = function(){ if(sc_need_initialization) { - Player.soundcloudReady(); + //Player.soundcloudReady(); } else { - SC.initialize({ + SC_player = SC; + SC_player.initialize({ client_id: api_key.soundcloud }, function() { }); } + Player.loadSoundCloudIframe(); }; } tagSC.src = "https://connect.soundcloud.com/sdk/sdk-3.3.0.js"; @@ -283,7 +290,7 @@ window.addEventListener("DOMContentLoaded", function() { firstScriptTagSC.parentNode.insertBefore(tagSC, firstScriptTagSC); } } else if(window.location.pathname == "/" && client) { - Player.loadSoundCloudPlayer(); + //Player.loadSoundCloudPlayer(); } if(Helper.mobilecheck()) { @@ -676,6 +683,7 @@ function addDynamicListeners() { Player.soundcloud_player.unbind("play", Player.soundcloudPlay); Player.soundcloud_player.kill(); } catch(error){} + if(scUsingWidget) document.querySelector("#sc_player").innerHTML = ""; socket.removeEventListener("np"); socket.removeEventListener("id"); socket.removeEventListener(id); @@ -711,7 +719,9 @@ function addDynamicListeners() { }); addListener("click", "#player_overlay", function(event) { - if(videoSource == "soundcloud") Playercontrols.play_pause(); + if(videoSource == "soundcloud") { + Playercontrols.play_pause(); + } }); /* diff --git a/server/public/assets/js/player.js b/server/public/assets/js/player.js index b629c364..04e24259 100755 --- a/server/public/assets/js/player.js +++ b/server/public/assets/js/player.js @@ -7,6 +7,7 @@ var Player = { stopInterval: false, fireplace: "", np: {}, + seeking: false, soundcloud_dead: false, soundcloud_player: { setVolume: function(val) {} @@ -301,7 +302,7 @@ var Player = { return; } try { - if(SC == null) return; + if(SC_player == null) return; } catch(e) { return; } @@ -314,7 +315,7 @@ var Player = { soundcloud_loading = false; var _autoAdd = "false"; try { - if(SC == null || !SC.stream) return; + if(SC_player == null || !SC_player.stream) return; } catch(e) { return; } @@ -324,14 +325,15 @@ var Player = { _autoAdd = "true"; Helper.removeClass("#player_loader_container", "hide"); } - SC.stream("/tracks/" + id).then(function(player){ + + SC_player.stream("/tracks/" + id).then(function(player){ Player.soundcloud_player = player; Player.soundcloud_player.bind("finish", Player.soundcloudFinish); Player.soundcloud_player.bind("pause", Player.soundcloudPause); Player.soundcloud_player.bind("play", Player.soundcloudPlay); window.player = player; Player.soundcloud_dead = false; - SC.get('/tracks', { + SC_player.get('/tracks', { ids: id }).then(function(tracks) { var sound = tracks[0]; @@ -342,18 +344,17 @@ var Player = { }); if(_autoplay) { player.play().then(function(){ + scUsingWidget = false; Player.soundcloud_player.setVolume(embed ? 1 : Crypt.get_volume() / 100); Player.soundcloud_player.seek((seekTo) * 1000); }).catch(function(e){ }); } }).catch(function(error) { - curr_playing = id; - emit("skip", {error: 5, id: id, channel: chan.toLowerCase()}); - setTimeout(function() { - toast("Seems the SoundCloud-API rate-limit has been reached..", "red lighten"); - }, 1000); + Player.initializeSCWidget(_autoplay, id); }); + //Player.initializeSCWidget(_autoplay, id); + //Player.initializeSCWidget(_autoplay, id); } else { try { Player.soundcloud_player.seek(seekTo * 1000); @@ -382,6 +383,46 @@ var Player = { Helper.addClass("#player_overlay_text", "hide"); }, + initializeSCWidget: function(_autoplay, id) { + try { + Player.soundcloud_player.unbind("finish", Player.soundcloudFinish); + Player.soundcloud_player.unbind("pause", Player.soundcloudPause); + Player.soundcloud_player.unbind("play", Player.soundcloudPlay); + //Player.soundcloud_player.unbind("seek", Player.soundcloudSeek); + }catch(e){} + var this_autoplay = ""; + scUsingWidget = true; + if(_autoplay) this_autoplay = "?auto_play=true"; + if(document.querySelectorAll("#scplayerElement").length == 0) { + var single = "single_active=false"; + if(_autoplay) single = "&"+single; + else single = "?"+single; + document.querySelector("#sc_player").innerHTML = ''; + Player.addSCWidgetElements(); + } else { + Player.soundcloud_player.bind("finish", Player.soundcloudFinish); + Player.soundcloud_player.bind("pause", Player.soundcloudPause); + Player.soundcloud_player.bind("play", Player.soundcloudPlay); + Player.soundcloud_player.load('https://api.soundcloud.com/tracks/' + id + this_autoplay, {single_active: false}); + } + }, + + addSCWidgetElements: function() { + try { + Player.soundcloud_player = SC_widget.Widget(document.querySelector("#scplayerElement")); + Player.soundcloud_player.seek = Player.soundcloud_player.seekTo; + Player.soundcloud_player.bind("finish", Player.soundcloudFinish); + Player.soundcloud_player.bind("pause", Player.soundcloudPause); + Player.soundcloud_player.bind("play", Player.soundcloudPlay); + } catch(e) { + setTimeout(function() { + Player.addSCWidgetElements(); + }, 500); + } + }, + loadVideoById: function(id, this_duration, start, end){ if(id == undefined) return; var s; @@ -504,7 +545,8 @@ var Player = { castSession.setVolume(vol/100); } else { Player.player.setVolume(vol); - Player.soundcloud_player.setVolume(vol / 100); + if(scUsingWidget) Player.soundcloud_player.setVolume(vol); + else Player.soundcloud_player.setVolume(vol / 100); } }, @@ -661,16 +703,27 @@ var Player = { playing = false; end_programmatically = false; } else { - was_stopped = true; + if(!scUsingWidget) was_stopped = true; if(!embed && !client && window.location.pathname != "/") { var scPlaying = false; - try { - scPlaying = Player.soundcloud_player.isPlaying(); - } catch(e){} - try { - resizePlaylistPlaying(Player.player.getPlayerState() == YT.PlayerState.PLAYING || scPlaying || Player.player.getPlayerState() == YT.PlayerState.BUFFERING); - } catch(e) { - resizePlaylistPlaying(scPlaying); + if(scUsingWidget) { + Player.soundcloud_player.isPaused(function(paused) { + scPlaying = !paused; + try { + resizePlaylistPlaying(Player.player.getPlayerState() == YT.PlayerState.PLAYING || scPlaying || Player.player.getPlayerState() == YT.PlayerState.BUFFERING); + } catch(e) { + resizePlaylistPlaying(scPlaying); + } + }); + } else { + try { + scPlaying = Player.soundcloud_player.isPlaying(); + } catch(e){} + try { + resizePlaylistPlaying(Player.player.getPlayerState() == YT.PlayerState.PLAYING || scPlaying || Player.player.getPlayerState() == YT.PlayerState.BUFFERING); + } catch(e) { + resizePlaylistPlaying(scPlaying); + } } } if(!chromecastAvailable){ @@ -697,9 +750,19 @@ var Player = { if(videoSource == "youtube") { Player.soundcloud_player.pause(); } else if(soundcloud_loading){ - Player.soundcloud_player.seek((seekTo) * 1000); - Player.soundcloud_player.setVolume(embed ? 1 : Crypt.get_volume() / 100); - soundcloud_loading = false; + if(scUsingWidget) { + Player.soundcloud_player.getPosition(function(pos) { + Player.seeking = true; + Player.soundcloud_player.seek((seekTo) * 1000); + Player.soundcloud_player.setVolume(embed ? 1 : Crypt.get_volume()); + soundcloud_loading = false; + }) + } else { + Player.seeking = true; + Player.soundcloud_player.seek((seekTo) * 1000); + Player.soundcloud_player.setVolume(embed ? 1 : Crypt.get_volume() / 100); + soundcloud_loading = false; + } } if(embed) { Helper.css("#player", "visibility", "visible"); @@ -714,10 +777,17 @@ var Player = { } if(!embed && !client && window.location.pathname != "/") { var scPlaying = false; - try { - scPlaying = Player.soundcloud_player.isPlaying(); - } catch(e){} - resizePlaylistPlaying(scPlaying); + if(scUsingWidget) { + Player.soundcloud_player.isPaused(function(paused) { + scPlaying = !paused; + resizePlaylistPlaying(scPlaying); + }); + } else { + try { + scPlaying = Player.soundcloud_player.isPlaying(); + } catch(e){} + resizePlaylistPlaying(scPlaying); + } } Helper.css("#playpause", "visibility", "visible"); @@ -739,6 +809,7 @@ var Player = { if(u == undefined) u = "";*/ paused = false; was_stopped = false; + socket.emit('pos', {channel: chan.toLowerCase()}); } else { paused = false; @@ -748,13 +819,13 @@ var Player = { }, soundcloudReady: function() { - if(SC == undefined && sc_need_initialization) { + if(SC_player == undefined && sc_need_initialization) { sc_need_initialization = true; return; } sc_need_initialization = false; try { - SC.initialize({ + SC_player.initialize({ client_id: api_key.soundcloud }, function() { }); @@ -942,7 +1013,13 @@ var Player = { dMinutes = Math.floor(duration / 60); dSeconds = duration - dMinutes * 60; if(videoSource == "soundcloud") { - currDurr = Math.floor(Player.soundcloud_player.currentTime()) / 1000; + if(scUsingWidget) { + Player.soundcloud_player.getPosition(function(pos) { + currDurr = Math.floor(pos) / 1000; + }); + } else { + currDurr = Math.floor(Player.soundcloud_player.currentTime()) / 1000; + } } else { currDurr = Player.player.getCurrentTime() !== undefined ? Math.floor(Player.player.getCurrentTime()) : seekTo; } @@ -974,6 +1051,21 @@ var Player = { document.getElementById("bar").style.width = per+"%"; } if(videoSource == "soundcloud") { + if(scUsingWidget) { + Player.soundcloud_player.isPaused(function(playing) { + playing = !playing; + if(Math.ceil(currDurr) + 1 > Player.np.end && playing) { + end_programmatically = true; + if(!offline) { + Player.soundcloud_player.pause(); + was_stopped = false; + socket.emit("end", {id: video_id, channel: chan.toLowerCase()}); + } else { + Player.playNext(); + } + } + }) + } else { if(Math.ceil(currDurr) + 1 > Player.np.end && Player.soundcloud_player.isPlaying()) { end_programmatically = true; if(!offline) { @@ -984,6 +1076,7 @@ var Player = { Player.playNext(); } } + } } else { if(Math.ceil(Player.player.getCurrentTime()) >= Player.np.end && (Player.player.getPlayerState() == YT.PlayerState.PLAYING)) { end_programmatically = true; @@ -1030,7 +1123,7 @@ var Player = { loadSoundCloudPlayer: function() { if(document.querySelectorAll("script[src='https://connect.soundcloud.com/sdk/sdk-3.3.0.js']").length == 1) { try { - Player.soundcloudReady(); + //Player.soundcloudReady(); } catch(error) { sc_need_initialization = true; //console.error(error); @@ -1043,18 +1136,54 @@ var Player = { if (tagSC.readyState == "loaded" || tagSC.readyState == "complete"){ tagSC.onreadystatechange = null; - Player.soundcloudReady(); + SC_player = SC; + //Player.soundcloudReady(); + Player.loadSoundCloudIframe(); } }; } else { //Others tagSC.onload = function(){ - Player.soundcloudReady(); + SC_player = SC; + //Player.soundcloudReady(); + Player.loadSoundCloudIframe(); }; } tagSC.src = "https://connect.soundcloud.com/sdk/sdk-3.3.0.js"; firstScriptTagSC = document.getElementsByTagName('script')[0]; firstScriptTagSC.parentNode.insertBefore(tagSC, firstScriptTagSC); } + }, + + loadSoundCloudIframe: function() { + if(document.querySelectorAll("script[src='/assets/sclib/scapi.js']").length == 1) { + try { + Player.soundcloudReady(); + } catch(error) { + //sc_need_initialization = true; + //console.error(error); + //console.error("Seems SoundCloud script isn't correctly loaded. Please reload the page."); + } + } else { + tagSC = document.createElement('script'); + if (tagSC.readyState){ //IE + tagSC.onreadystatechange = function(){ + if (tagSC.readyState == "loaded" || + tagSC.readyState == "complete"){ + tagSC.onreadystatechange = null; + SC_widget = SC; + Player.soundcloudReady(); + } + }; + } else { //Others + tagSC.onload = function(){ + SC_widget = SC; + Player.soundcloudReady(); + }; + } + tagSC.src = "/assets/sclib/scapi.js"; + firstScriptTagSC = document.getElementsByTagName('script')[0]; + firstScriptTagSC.parentNode.insertBefore(tagSC, firstScriptTagSC); + } } }; diff --git a/server/public/assets/js/playercontrols.js b/server/public/assets/js/playercontrols.js index c6b6c0fd..229ae500 100755 --- a/server/public/assets/js/playercontrols.js +++ b/server/public/assets/js/playercontrols.js @@ -191,10 +191,22 @@ var Playercontrols = { play_pause: function() { if(!chromecastAvailable){ if(videoSource == "soundcloud") { - if(!Player.soundcloud_player.isPlaying()) { - Player.playVideo(); + if(scUsingWidget) { + Player.soundcloud_player.isPaused(function(playing) { + playing = !playing; + if(!playing) { + Player.playVideo(); + } else { + Player.pauseVideo(); + } + was_stopped = true; + }); } else { - Player.pauseVideo(); + if(!Player.soundcloud_player.isPlaying()) { + Player.playVideo(); + } else { + Player.pauseVideo(); + } } } else { if(Player.player.getPlayerState() == YT.PlayerState.PLAYING) @@ -273,7 +285,8 @@ var Playercontrols = { setVolume: function(vol) { Player.setVolume(vol); - Player.soundcloud_player.setVolume(vol / 100); + if(scUsingWidget) Player.soundcloud_player.setVolume(vol); + else Player.soundcloud_player.setVolume(vol / 100); Playercontrols.choose_button(vol, false); if(Player.player.isMuted()) Player.player.unMute(); @@ -355,14 +368,29 @@ var Playercontrols = { playPause: function() { if(videoSource == "soundcloud") { - if(!Player.soundcloud_player.isPlaying()) { - Helper.addClass("#play", "hide"); - Helper.removeClass("#pause", "hide"); - Player.soundcloud_player.play(); + if(scUsingWidget) { + Player.soundcloud_player.isPaused(function(playing) { + playing = !playing; + if(!playing) { + Helper.addClass("#play", "hide"); + Helper.removeClass("#pause", "hide"); + Player.soundcloud_player.play(); + } else { + Helper.removeClass("#play", "hide"); + Helper.addClass("#pause", "hide"); + Player.soundcloud_player.pause(); + } + }) } else { - Helper.removeClass("#play", "hide"); - Helper.addClass("#pause", "hide"); - Player.soundcloud_player.pause(); + if(!Player.soundcloud_player.isPlaying()) { + Helper.addClass("#play", "hide"); + Helper.removeClass("#pause", "hide"); + Player.soundcloud_player.play(); + } else { + Helper.removeClass("#play", "hide"); + Helper.addClass("#pause", "hide"); + Player.soundcloud_player.pause(); + } } } else { state = Player.player.getPlayerState(); diff --git a/server/public/assets/js/search.js b/server/public/assets/js/search.js index 18c8cdf5..a662ba71 100755 --- a/server/public/assets/js/search.js +++ b/server/public/assets/js/search.js @@ -202,7 +202,7 @@ var Search = { return; } if(keyword.length == 0) return; - SC.get('/tracks', { + SC_player.get('/tracks', { q: keyword }).then(function(tracks) { var pre_result = document.createElement("div"); diff --git a/server/public/assets/sclib/scapi.js b/server/public/assets/sclib/scapi.js new file mode 100644 index 00000000..b2bdbced --- /dev/null +++ b/server/public/assets/sclib/scapi.js @@ -0,0 +1 @@ +var SC=SC||{};SC.Widget=function(n){function t(r){if(e[r])return e[r].exports;var o=e[r]={exports:{},id:r,loaded:!1};return n[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var e={};return t.m=n,t.c=e,t.p="",t(0)}([function(n,t,e){function r(n){return!!(""===n||n&&n.charCodeAt&&n.substr)}function o(n){return!!(n&&n.constructor&&n.call&&n.apply)}function i(n){return!(!n||1!==n.nodeType||"IFRAME"!==n.nodeName.toUpperCase())}function a(n){var t,e=!1;for(t in b)if(b.hasOwnProperty(t)&&b[t]===n){e=!0;break}return e}function s(n){var t,e,r;for(t=0,e=I.length;t-1,a=new _(n),I.push(new y(a,n,o)),a)},O.Events=L,window.SC=window.SC||{},window.SC.Widget=O,y=function(n,t,e){this.instance=n,this.element=t,this.domain=u(t.getAttribute("src")),this.isReady=!!e,this.callbacks={}},_=function(){},_.prototype={constructor:_,load:function(n,t){if(n){t=t||{};var e=this,r=p(this),o=r.element,i=o.src,a=i.substr(0,i.indexOf("?"));r.isReady=!1,r.playEventFired=!1,o.onload=function(){e.bind(L.READY,function(){var n,e=r.callbacks;for(n in e)e.hasOwnProperty(n)&&n!==L.READY&&f(N.ADD_LISTENER,n,r.element);t.callback&&t.callback()})},o.src=R(a,n,t)}},bind:function(n,t){var e=this,r=p(this);return r&&r.element&&(n===L.READY&&r.isReady?setTimeout(t,1):r.isReady?(d(n,t,r),f(N.ADD_LISTENER,n,r.element)):d(C,function(){e.bind(n,t)},r)),this},unbind:function(n){var t,e=p(this);e&&e.element&&(t=E(n,e),n!==L.READY&&t&&f(N.REMOVE_LISTENER,n,e.element))}},S(_.prototype,l(b)),S(_.prototype,l(P),!0)},function(n,t){t.api={LOAD_PROGRESS:"loadProgress",PLAY_PROGRESS:"playProgress",PLAY:"play",PAUSE:"pause",FINISH:"finish",SEEK:"seek",READY:"ready",OPEN_SHARE_PANEL:"sharePanelOpened",CLICK_DOWNLOAD:"downloadClicked",CLICK_BUY:"buyClicked",ERROR:"error"},t.bridge={REMOVE_LISTENER:"removeEventListener",ADD_LISTENER:"addEventListener"}},function(n,t){n.exports={GET_VOLUME:"getVolume",GET_DURATION:"getDuration",GET_POSITION:"getPosition",GET_SOUNDS:"getSounds",GET_CURRENT_SOUND:"getCurrentSound",GET_CURRENT_SOUND_INDEX:"getCurrentSoundIndex",IS_PAUSED:"isPaused"}},function(n,t){n.exports={PLAY:"play",PAUSE:"pause",TOGGLE:"toggle",SEEK_TO:"seekTo",SET_VOLUME:"setVolume",NEXT:"next",PREV:"prev",SKIP:"skip"}}]); diff --git a/server/public/partials/channel/players.handlebars b/server/public/partials/channel/players.handlebars index 57c37cc4..50208d42 100644 --- a/server/public/partials/channel/players.handlebars +++ b/server/public/partials/channel/players.handlebars @@ -4,7 +4,7 @@
{{/unless}}
- +