aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/client.js73
-rw-r--r--src/client/players/Youtube.hx69
2 files changed, 81 insertions, 61 deletions
diff --git a/res/client.js b/res/client.js
index 5e4f8b3..df22653 100644
--- a/res/client.js
+++ b/res/client.js
@@ -2477,7 +2477,7 @@ var client_players_Youtube = function(main,player) {
this.matchHours = new EReg("([0-9]+)H","");
this.isLoaded = false;
this.playerEl = window.document.querySelector("#ytapiplayer");
- this.urlVideoId = "?part=snippet&fields=items(snippet/resourceId/videoId)";
+ this.urlVideoId = "?part=snippet&fields=nextPageToken,items(snippet/resourceId/videoId)";
this.urlTitleDuration = "?part=snippet,contentDetails&fields=items(snippet/title,contentDetails/duration)";
this.playlistUrl = "https://www.googleapis.com/youtube/v3/playlistItems";
this.videosUrl = "https://www.googleapis.com/youtube/v3/videos";
@@ -2579,38 +2579,49 @@ client_players_Youtube.prototype = {
var _gthis = this;
var id = this.extractPlaylistId(data.url);
var maxResults = this.main.getYoutubePlaylistLimit();
- var http = new haxe_http_HttpJs("" + this.playlistUrl + this.urlVideoId + "&maxResults=" + maxResults + "&playlistId=" + id + "&key=" + this.apiKey);
- http.onData = function(text) {
- var json = JSON.parse(text);
- if(json.error != null) {
- _gthis.youtubeApiError(json.error);
- callback({ duration : 0});
- return;
- }
- var items = json.items;
- if(items == null || items.length == 0) {
+ var dataUrl = "" + this.playlistUrl + this.urlVideoId + "&maxResults=" + maxResults + "&playlistId=" + id + "&key=" + this.apiKey;
+ var loadJson = null;
+ loadJson = function(url) {
+ var http = new haxe_http_HttpJs(url);
+ http.onData = function(text) {
+ var json = JSON.parse(text);
+ if(json.error != null) {
+ _gthis.youtubeApiError(json.error);
+ callback({ duration : 0});
+ return;
+ }
+ var items = json.items;
+ if(items == null || items.length == 0) {
+ callback({ duration : 0});
+ return;
+ }
+ if(!data.atEnd) {
+ _gthis.main.sortItemsForQueueNext(items);
+ }
+ var loadNextItem = null;
+ loadNextItem = function() {
+ var obj = { url : "https://youtu.be/" + items.shift().snippet.resourceId.videoId, atEnd : data.atEnd};
+ _gthis.getVideoData(obj,function(data) {
+ callback(data);
+ maxResults -= 1;
+ if(maxResults <= 0) {
+ return;
+ }
+ if(items.length > 0) {
+ loadNextItem();
+ } else if(json.nextPageToken != null) {
+ loadJson("" + dataUrl + "&pageToken=" + json.nextPageToken);
+ }
+ });
+ };
+ loadNextItem();
+ };
+ http.onError = function(msg) {
callback({ duration : 0});
- return;
- }
- if(!data.atEnd) {
- _gthis.main.sortItemsForQueueNext(items);
- }
- var loadNextItem = null;
- loadNextItem = function() {
- var obj = { url : "https://youtu.be/" + items.shift().snippet.resourceId.videoId, atEnd : data.atEnd};
- _gthis.getVideoData(obj,function(data) {
- callback(data);
- if(items.length > 0) {
- loadNextItem();
- }
- });
};
- loadNextItem();
- };
- http.onError = function(msg) {
- callback({ duration : 0});
+ http.request();
};
- http.request();
+ loadJson(dataUrl);
}
,youtubeApiError: function(error) {
this.main.serverMessage(4,"Error " + error.code + ": " + error.message,false);
@@ -2632,7 +2643,7 @@ client_players_Youtube.prototype = {
}
callback({ duration : _gthis.tempYoutube.getDuration()});
}, onError : function(e) {
- haxe_Log.trace("Error " + e.data,{ fileName : "src/client/players/Youtube.hx", lineNumber : 192, className : "client.players.Youtube", methodName : "getRemoteDataFallback"});
+ haxe_Log.trace("Error " + e.data,{ fileName : "src/client/players/Youtube.hx", lineNumber : 201, className : "client.players.Youtube", methodName : "getRemoteDataFallback"});
if(_gthis.playerEl.contains(video)) {
_gthis.playerEl.removeChild(video);
}
diff --git a/src/client/players/Youtube.hx b/src/client/players/Youtube.hx
index 2061585..10064b6 100644
--- a/src/client/players/Youtube.hx
+++ b/src/client/players/Youtube.hx
@@ -21,7 +21,7 @@ class Youtube implements IPlayer {
final videosUrl = "https://www.googleapis.com/youtube/v3/videos";
final playlistUrl = "https://www.googleapis.com/youtube/v3/playlistItems";
final urlTitleDuration = "?part=snippet,contentDetails&fields=items(snippet/title,contentDetails/duration)";
- final urlVideoId = "?part=snippet&fields=items(snippet/resourceId/videoId)";
+ final urlVideoId = "?part=snippet&fields=nextPageToken,items(snippet/resourceId/videoId)";
final main:Main;
final player:Player;
final playerEl:Element = ge("#ytapiplayer");
@@ -125,38 +125,47 @@ class Youtube implements IPlayer {
function getPlaylistVideoData(data:VideoDataRequest, callback:(data:VideoData)->Void):Void {
final url = data.url;
final id = extractPlaylistId(url);
- final maxResults = main.getYoutubePlaylistLimit();
+ var maxResults = main.getYoutubePlaylistLimit();
final dataUrl = '$playlistUrl$urlVideoId&maxResults=$maxResults&playlistId=$id&key=$apiKey';
- final http = new Http(dataUrl);
- http.onData = text -> {
- final json = Json.parse(text);
- if (json.error != null) {
- youtubeApiError(json.error);
- callback({duration: 0});
- return;
- }
- final items:Array<Dynamic> = json.items;
- if (items == null || items.length == 0) {
- callback({duration: 0});
- return;
- }
- if (!data.atEnd) main.sortItemsForQueueNext(items);
- function loadNextItem():Void {
- final item = items.shift();
- final id:String = item.snippet.resourceId.videoId;
- final obj = {
- url: 'https://youtu.be/$id',
- atEnd: data.atEnd
- };
- getVideoData(obj, data -> {
- callback(data);
- if (items.length > 0) loadNextItem();
- });
+
+ function loadJson(url:String):Void {
+ final http = new Http(url);
+ http.onData = text -> {
+ final json = Json.parse(text);
+ if (json.error != null) {
+ youtubeApiError(json.error);
+ callback({duration: 0});
+ return;
+ }
+ final items:Array<Dynamic> = json.items;
+ if (items == null || items.length == 0) {
+ callback({duration: 0});
+ return;
+ }
+ if (!data.atEnd) main.sortItemsForQueueNext(items);
+ function loadNextItem():Void {
+ final item = items.shift();
+ final id:String = item.snippet.resourceId.videoId;
+ final obj = {
+ url: 'https://youtu.be/$id',
+ atEnd: data.atEnd
+ };
+ getVideoData(obj, data -> {
+ callback(data);
+ maxResults--;
+ if (maxResults <= 0) return;
+ if (items.length > 0) loadNextItem();
+ else if (json.nextPageToken != null) {
+ loadJson('$dataUrl&pageToken=${json.nextPageToken}');
+ }
+ });
+ }
+ loadNextItem();
}
- loadNextItem();
+ http.onError = msg -> callback({duration: 0});
+ http.request();
}
- http.onError = msg -> callback({duration: 0});
- http.request();
+ loadJson(dataUrl);
}
function youtubeApiError(error:Dynamic):Void {
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage