mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
update components
This commit is contained in:
parent
1d176e480f
commit
0b4a2c0092
4 changed files with 205 additions and 18 deletions
|
@ -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",
|
||||||
|
|
148
dashboard-ui/bower_components/emby-webcomponents/packagemanager.js
vendored
Normal file
148
dashboard-ui/bower_components/emby-webcomponents/packagemanager.js
vendored
Normal 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();
|
||||||
|
});
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue