mirror of
https://github.com/Rafostar/clapper.git
synced 2025-08-30 07:42:23 +02:00
Move YT related functions from player to youtube script
This commit is contained in:
@@ -1,8 +1,6 @@
|
|||||||
const { Gdk, Gio, GObject, Gst, GstClapper, Gtk } = imports.gi;
|
const { Gdk, Gio, GObject, Gst, GstClapper, Gtk } = imports.gi;
|
||||||
const ByteArray = imports.byteArray;
|
const ByteArray = imports.byteArray;
|
||||||
const Dash = imports.src.dash;
|
|
||||||
const Debug = imports.src.debug;
|
const Debug = imports.src.debug;
|
||||||
const FileOps = imports.src.fileOps;
|
|
||||||
const Misc = imports.src.misc;
|
const Misc = imports.src.misc;
|
||||||
const YouTube = imports.src.youtube;
|
const YouTube = imports.src.youtube;
|
||||||
const { PlayerBase } = imports.src.playerBase;
|
const { PlayerBase } = imports.src.playerBase;
|
||||||
@@ -53,8 +51,14 @@ class ClapperPlayer extends PlayerBase
|
|||||||
if(!isYouTubeUri)
|
if(!isYouTubeUri)
|
||||||
return super.set_uri(uri);
|
return super.set_uri(uri);
|
||||||
|
|
||||||
this.getYouTubeUriAsync(videoId)
|
if(!this.ytClient)
|
||||||
.then(ytUri => super.set_uri(ytUri))
|
this.ytClient = new YouTube.YouTubeClient();
|
||||||
|
|
||||||
|
this.ytClient.getPlaybackDataAsync(videoId)
|
||||||
|
.then(data => {
|
||||||
|
this.customVideoTitle = data.title;
|
||||||
|
super.set_uri(data.uri);
|
||||||
|
})
|
||||||
.catch(debug);
|
.catch(debug);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@@ -76,48 +80,6 @@ class ClapperPlayer extends PlayerBase
|
|||||||
super.set_uri(uri);
|
super.set_uri(uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
async getYouTubeUriAsync(videoId)
|
|
||||||
{
|
|
||||||
if(!this.ytClient)
|
|
||||||
this.ytClient = new YouTube.YouTubeClient();
|
|
||||||
|
|
||||||
const info = await this.ytClient.getVideoInfoPromise(videoId).catch(debug);
|
|
||||||
|
|
||||||
if(!info)
|
|
||||||
throw new Error('no YouTube video info');
|
|
||||||
|
|
||||||
let videoUri = null;
|
|
||||||
const dashInfo = await this.ytClient.getDashInfoAsync(info).catch(debug);
|
|
||||||
|
|
||||||
if(dashInfo) {
|
|
||||||
debug('parsed video info to dash info');
|
|
||||||
const dash = Dash.generateDash(dashInfo);
|
|
||||||
|
|
||||||
if(dash) {
|
|
||||||
debug('got dash');
|
|
||||||
|
|
||||||
const dashFile = await FileOps.saveFilePromise(
|
|
||||||
'tmp', null, 'clapper.mpd', dash
|
|
||||||
).catch(debug);
|
|
||||||
|
|
||||||
if(dashFile)
|
|
||||||
videoUri = dashFile.get_uri();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!videoUri)
|
|
||||||
videoUri = this.ytClient.getBestCombinedUri(info);
|
|
||||||
|
|
||||||
if(!videoUri)
|
|
||||||
throw new Error('no YouTube video URI');
|
|
||||||
|
|
||||||
this.customVideoTitle = (info.videoDetails && info.videoDetails.title)
|
|
||||||
? Misc.decodeURIPlus(info.videoDetails.title)
|
|
||||||
: videoId;
|
|
||||||
|
|
||||||
return videoUri;
|
|
||||||
}
|
|
||||||
|
|
||||||
load_playlist_file(file)
|
load_playlist_file(file)
|
||||||
{
|
{
|
||||||
const stream = new Gio.DataInputStream({
|
const stream = new Gio.DataInputStream({
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
const { GObject, Gst, Soup } = imports.gi;
|
const { GObject, Gst, Soup } = imports.gi;
|
||||||
|
const Dash = imports.src.dash;
|
||||||
const Debug = imports.src.debug;
|
const Debug = imports.src.debug;
|
||||||
const FileOps = imports.src.fileOps;
|
const FileOps = imports.src.fileOps;
|
||||||
const Misc = imports.src.misc;
|
const Misc = imports.src.misc;
|
||||||
@@ -302,6 +303,51 @@ var YouTubeClient = GObject.registerClass({
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async getPlaybackDataAsync(videoId)
|
||||||
|
{
|
||||||
|
const info = await this.getVideoInfoPromise(videoId).catch(debug);
|
||||||
|
|
||||||
|
if(!info)
|
||||||
|
throw new Error('no YouTube video info');
|
||||||
|
|
||||||
|
let uri = null;
|
||||||
|
const dashInfo = await this.getDashInfoAsync(info).catch(debug);
|
||||||
|
|
||||||
|
if(dashInfo) {
|
||||||
|
debug('parsed video info to dash info');
|
||||||
|
const dash = Dash.generateDash(dashInfo);
|
||||||
|
|
||||||
|
if(dash) {
|
||||||
|
debug('got dash data');
|
||||||
|
|
||||||
|
const dashFile = await FileOps.saveFilePromise(
|
||||||
|
'tmp', null, 'clapper.mpd', dash
|
||||||
|
).catch(debug);
|
||||||
|
|
||||||
|
if(dashFile)
|
||||||
|
uri = dashFile.get_uri();
|
||||||
|
|
||||||
|
debug('got dash file');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!uri)
|
||||||
|
uri = this.ytClient.getBestCombinedUri(info);
|
||||||
|
|
||||||
|
if(!uri)
|
||||||
|
throw new Error('no YouTube video URI');
|
||||||
|
|
||||||
|
debug(`final URI: ${uri}`);
|
||||||
|
|
||||||
|
const title = (info.videoDetails && info.videoDetails.title)
|
||||||
|
? Misc.decodeURIPlus(info.videoDetails.title)
|
||||||
|
: videoId;
|
||||||
|
|
||||||
|
debug(`title: ${title}`);
|
||||||
|
|
||||||
|
return { uri, title };
|
||||||
|
}
|
||||||
|
|
||||||
async getDashInfoAsync(info)
|
async getDashInfoAsync(info)
|
||||||
{
|
{
|
||||||
if(
|
if(
|
||||||
|
Reference in New Issue
Block a user