1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

update components

This commit is contained in:
Luke Pulverenti 2016-12-30 15:15:30 -05:00
parent 1d176e480f
commit 0b4a2c0092
4 changed files with 205 additions and 18 deletions

View file

@ -14,12 +14,12 @@
}, },
"devDependencies": {}, "devDependencies": {},
"ignore": [], "ignore": [],
"version": "1.4.411", "version": "1.4.412",
"_release": "1.4.411", "_release": "1.4.412",
"_resolution": { "_resolution": {
"type": "version", "type": "version",
"tag": "1.4.411", "tag": "1.4.412",
"commit": "50fdd44728ec2a1faa1aaf44ccb16df821b8295f" "commit": "a3f1a92bdff2edcffb16833836c60613fba0e889"
}, },
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git", "_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
"_target": "^1.2.1", "_target": "^1.2.1",

View file

@ -0,0 +1,148 @@
define(['appSettings', 'pluginManager'], function (appSettings, pluginManager) {
'use strict';
function packageManager() {
var self = this;
var settingsKey = 'installedpackages1';
var packages = [];
self.packages = function () {
return packages.slice(0);
};
function addPackage(pkg) {
packages = packages.filter(function (p) {
return p.name !== pkg.name;
});
packages.push(pkg);
}
self.install = function (url) {
return loadPackage(url, true).then(function (pkg) {
var manifestUrls = JSON.parse(appSettings.get(settingsKey) || '[]');
if (manifestUrls.indexOf(url) === -1) {
manifestUrls.push(url);
appSettings.set(settingsKey, JSON.stringify(manifestUrls));
}
return pkg;
});
};
self.uninstall = function (name) {
var pkg = packages.filter(function (p) {
return p.name === name;
})[0];
if (pkg) {
packages = packages.filter(function (p) {
return p.name !== name;
});
removeUrl(pkg.url);
}
return Promise.resolve();
};
function removeUrl(url) {
var manifestUrls = JSON.parse(appSettings.get(settingsKey) || '[]');
manifestUrls = manifestUrls.filter(function (i) {
return i !== url;
});
appSettings.set(settingsKey, JSON.stringify(manifestUrls));
}
self.init = function () {
var manifestUrls = JSON.parse(appSettings.get(settingsKey) || '[]');
return Promise.all(manifestUrls.map(loadPackage)).then(function () {
return Promise.resolve();
}, function () {
return Promise.resolve();
});
};
function loadPackage(url, throwError) {
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
var originalUrl = url;
url += url.indexOf('?') === -1 ? '?' : '&';
url += 't=' + new Date().getTime();
xhr.open('GET', url, true);
var onError = function () {
if (throwError === true) {
reject();
} else {
removeUrl(originalUrl);
resolve();
}
};
xhr.onload = function (e) {
if (this.status < 400) {
var pkg = JSON.parse(this.response);
pkg.url = originalUrl;
addPackage(pkg);
var plugins = pkg.plugins || [];
if (pkg.plugin) {
plugins.push(pkg.plugin);
}
var promises = plugins.map(function (pluginUrl) {
return pluginManager.loadPlugin(self.mapPath(pkg, pluginUrl));
});
Promise.all(promises).then(resolve, resolve);
} else {
onError();
}
};
xhr.onerror = onError;
xhr.send();
});
}
self.mapPath = function (pkg, pluginUrl) {
var urlLower = pluginUrl.toLowerCase();
if (urlLower.indexOf('http:') === 0 || urlLower.indexOf('https:') === 0 || urlLower.indexOf('file:') === 0) {
return pluginUrl;
}
var packageUrl = pkg.url;
packageUrl = packageUrl.substring(0, packageUrl.lastIndexOf('/'));
packageUrl += '/';
packageUrl += pluginUrl;
return packageUrl;
};
}
return new packageManager();
});

View file

@ -1,6 +1,16 @@
define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'globalize', 'connectionManager', 'loading', 'serverNotifications'], function (events, datetime, appSettings, pluginManager, userSettings, globalize, connectionManager, loading, serverNotifications) { define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'globalize', 'connectionManager', 'loading', 'serverNotifications'], function (events, datetime, appSettings, pluginManager, userSettings, globalize, connectionManager, loading, serverNotifications) {
'use strict'; 'use strict';
function enableLocalPlaylistManagement(player) {
if (player.isLocalPlayer) {
return true;
}
return false;
}
function playbackManager() { function playbackManager() {
var self = this; var self = this;
@ -95,7 +105,11 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
currentPairingId = targetInfo.id; currentPairingId = targetInfo.id;
player.tryPair(targetInfo).then(function () { var promise = player.tryPair ?
player.tryPair(targetInfo) :
Promise.resolve();
promise.then(function () {
var previousPlayer = currentPlayer; var previousPlayer = currentPlayer;
@ -134,11 +148,36 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
}); });
}; };
function getSupportedCommands(player) {
if (player.isLocalPlayer) {
return Dashboard.getSupportedRemoteCommands();
}
throw new Error('player must define supported commands');
}
function getPlayerTargets(player) {
if (player.getTargets) {
return player.getTargets();
}
return Promise.resolve([{
name: player.name,
id: player.id,
playerName: player.name,
playableMediaTypes: ['Audio', 'Video', 'Game'].map(player.canPlayMediaType),
isLocalPlayer: player.isLocalPlayer,
supportedCommands: getSupportedCommands(player)
}]);
}
self.setDefaultPlayerActive = function () { self.setDefaultPlayerActive = function () {
var player = self.getDefaultPlayer(); var player = self.getDefaultPlayer();
player.getTargets().then(function (targets) { getPlayerTargets(player).then(function (targets) {
self.setActivePlayer(player, targets[0]); self.setActivePlayer(player, targets[0]);
}); });
@ -209,9 +248,7 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
self.getTargets = function () { self.getTargets = function () {
var promises = players.map(function (p) { var promises = players.map(getPlayerTargets);
return p.getTargets();
});
return Promise.all(promises).then(function (responses) { return Promise.all(promises).then(function (responses) {
@ -2161,7 +2198,7 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
}); });
} }
function initMediaPlayer(plugin) { function initMediaPlayer(player) {
players.push(player); players.push(player);
players.sort(function (a, b) { players.sort(function (a, b) {
@ -2173,10 +2210,12 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
player.isLocalPlayer = true; player.isLocalPlayer = true;
} }
plugin.currentState = {}; player.currentState = {};
events.on(plugin, 'error', onPlaybackError); if (enableLocalPlaylistManagement(player)) {
events.on(plugin, 'stopped', onPlaybackStopped); events.on(player, 'error', onPlaybackError);
events.on(player, 'stopped', onPlaybackStopped);
}
} }
events.on(pluginManager, 'registered', function (e, plugin) { events.on(pluginManager, 'registered', function (e, plugin) {

View file

@ -1,4 +1,4 @@
define(['events'], function (Events) { define(['events'], function (events) {
'use strict'; 'use strict';
function pluginManager() { function pluginManager() {
@ -13,7 +13,7 @@ define(['events'], function (Events) {
self.register = function (obj) { self.register = function (obj) {
plugins.push(obj); plugins.push(obj);
Events.trigger(self, 'registered', [obj]); events.trigger(self, 'registered', [obj]);
}; };
self.ofType = function (type) { self.ofType = function (type) {
@ -87,7 +87,7 @@ define(['events'], function (Events) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
require([url, 'globalize'], function (pluginFactory, globalize) { require([url, 'globalize', 'embyRouter'], function (pluginFactory, globalize, embyRouter) {
var plugin = new pluginFactory(); var plugin = new pluginFactory();
@ -105,9 +105,9 @@ define(['events'], function (Events) {
var urlLower = url.toLowerCase(); var urlLower = url.toLowerCase();
if (urlLower.indexOf('http:') === -1 && urlLower.indexOf('https:') === -1 && urlLower.indexOf('file:') === -1) { if (urlLower.indexOf('http:') === -1 && urlLower.indexOf('https:') === -1 && urlLower.indexOf('file:') === -1) {
if (url.indexOf(Emby.Page.baseUrl()) !== 0) { if (url.indexOf(embyRouter.baseUrl()) !== 0) {
url = Emby.Page.baseUrl() + '/' + url; url = embyRouter.baseUrl() + '/' + url;
} }
} }