platypush/platypush/backend/http/static/js/plugins/media/handlers/youtube.js

98 lines
2.5 KiB
JavaScript

MediaHandlers.youtube = MediaHandlers.base.extend({
props: {
iconClass: {
type: String,
default: 'fab fa-youtube',
},
},
computed: {
dropdownItems: function() {
return [
{
text: 'Play',
icon: 'play',
action: this.play,
},
{
text: 'Download (on server)',
icon: 'download',
action: this.downloadServer,
},
{
text: 'Download (on client)',
icon: 'download',
action: this.downloadClient,
},
{
text: 'View info',
icon: 'info',
action: this.info,
},
];
},
},
methods: {
matchesUrl: function(url) {
return !!(url.match('^https?://(www\.)?youtube.com/') || url.match('^https?://youtu.be/') || url.match('^https?://.*googlevideo.com/'));
},
getMetadata: function(item) {
return {};
},
_getRawUrl: async function(url) {
if (url.indexOf('.googlevideo.com') < 0) {
url = await request('media.get_youtube_url', {url: url});
}
return url;
},
play: async function(item) {
if (typeof item === 'string')
item = {url: item};
let url = await this._getRawUrl(item.url);
this.bus.$emit('play', {...item, url:url});
},
downloadServer: async function(item) {
createNotification({
text: 'Downloading video',
image: {
icon: 'download',
},
});
let url = await this._getRawUrl(item.url);
let args = {
url: url,
}
if (item.title) {
args.filename = item.title + '.webm';
}
let path = await request('media.download', args);
createNotification({
text: 'Video downloaded to ' + path,
image: {
icon: 'check',
},
});
},
downloadClient: async function(item) {
let url = await this._getRawUrl(item.url);
window.open(url, '_blank');
},
},
});