mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
Migrate packageManager to ES6
This commit is contained in:
parent
1ef5529244
commit
ca5f194ee6
3 changed files with 114 additions and 112 deletions
|
@ -137,6 +137,7 @@
|
||||||
"src/components/metadataEditor/personEditor.js",
|
"src/components/metadataEditor/personEditor.js",
|
||||||
"src/components/multiSelect/multiSelect.js",
|
"src/components/multiSelect/multiSelect.js",
|
||||||
"src/components/nowPlayingBar/nowPlayingBar.js",
|
"src/components/nowPlayingBar/nowPlayingBar.js",
|
||||||
|
"src/components/packageManager.js",
|
||||||
"src/components/playback/brightnessosd.js",
|
"src/components/playback/brightnessosd.js",
|
||||||
"src/components/playback/mediasession.js",
|
"src/components/playback/mediasession.js",
|
||||||
"src/components/playback/nowplayinghelper.js",
|
"src/components/playback/nowplayinghelper.js",
|
||||||
|
|
|
@ -1,136 +1,137 @@
|
||||||
define(['appSettings', 'pluginManager'], function (appSettings, pluginManager) {
|
import appSettings from 'appSettings';
|
||||||
'use strict';
|
import pluginManager from 'pluginManager';
|
||||||
|
/* eslint-disable indent */
|
||||||
|
|
||||||
pluginManager = pluginManager.default || pluginManager;
|
class PackageManager {
|
||||||
|
#packagesList = [];
|
||||||
|
#settingsKey = 'installedpackages1';
|
||||||
|
|
||||||
var settingsKey = 'installedpackages1';
|
init() {
|
||||||
|
console.groupCollapsed('loading packages');
|
||||||
|
var manifestUrls = JSON.parse(appSettings.get(this.#settingsKey) || '[]');
|
||||||
|
|
||||||
function addPackage(packageManager, pkg) {
|
var instance = this;
|
||||||
packageManager.packagesList = packageManager.packagesList.filter(function (p) {
|
return Promise.all(manifestUrls.map((u) => {
|
||||||
return p.name !== pkg.name;
|
return this.loadPackage(instance, u);
|
||||||
});
|
})).then(() => {
|
||||||
|
console.groupEnd('loading packages');
|
||||||
|
return Promise.resolve();
|
||||||
|
}, () => {
|
||||||
|
return Promise.resolve();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
packageManager.packagesList.push(pkg);
|
get packages() {
|
||||||
}
|
return this.#packagesList.slice(0);
|
||||||
|
}
|
||||||
|
|
||||||
function removeUrl(url) {
|
install(url) {
|
||||||
var manifestUrls = JSON.parse(appSettings.get(settingsKey) || '[]');
|
return this.loadPackage(this, url, true).then((pkg) => {
|
||||||
|
var manifestUrls = JSON.parse(appSettings.get(this.#settingsKey) || '[]');
|
||||||
|
|
||||||
manifestUrls = manifestUrls.filter(function (i) {
|
if (!manifestUrls.includes(url)) {
|
||||||
return i !== url;
|
manifestUrls.push(url);
|
||||||
});
|
appSettings.set(this.#settingsKey, JSON.stringify(manifestUrls));
|
||||||
|
|
||||||
appSettings.set(settingsKey, JSON.stringify(manifestUrls));
|
|
||||||
}
|
|
||||||
|
|
||||||
function loadPackage(packageManager, 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) {
|
return pkg;
|
||||||
if (this.status < 400) {
|
});
|
||||||
var pkg = JSON.parse(this.response);
|
}
|
||||||
pkg.url = originalUrl;
|
|
||||||
|
|
||||||
addPackage(packageManager, pkg);
|
uninstall(name) {
|
||||||
|
var pkg = this.#packagesList.filter((p) => {
|
||||||
|
return p.name === name;
|
||||||
|
})[0];
|
||||||
|
|
||||||
var plugins = pkg.plugins || [];
|
if (pkg) {
|
||||||
if (pkg.plugin) {
|
this.#packagesList = this.#packagesList.filter((p) => {
|
||||||
plugins.push(pkg.plugin);
|
return p.name !== name;
|
||||||
}
|
});
|
||||||
var promises = plugins.map(function (pluginUrl) {
|
|
||||||
return pluginManager.loadPlugin(packageManager.mapPath(pkg, pluginUrl));
|
|
||||||
});
|
|
||||||
Promise.all(promises).then(resolve, resolve);
|
|
||||||
} else {
|
|
||||||
onError();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
xhr.onerror = onError;
|
this.removeUrl(pkg.url);
|
||||||
|
|
||||||
xhr.send();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function PackageManager() {
|
|
||||||
this.packagesList = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
PackageManager.prototype.init = function () {
|
|
||||||
var manifestUrls = JSON.parse(appSettings.get(settingsKey) || '[]');
|
|
||||||
|
|
||||||
var instance = this;
|
|
||||||
return Promise.all(manifestUrls.map(function (u) {
|
|
||||||
return loadPackage(instance, u);
|
|
||||||
})).then(function () {
|
|
||||||
return Promise.resolve();
|
|
||||||
}, function () {
|
|
||||||
return Promise.resolve();
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
PackageManager.prototype.packages = function () {
|
|
||||||
return this.packagesList.slice(0);
|
|
||||||
};
|
|
||||||
|
|
||||||
PackageManager.prototype.install = function (url) {
|
|
||||||
return loadPackage(this, 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;
|
return Promise.resolve();
|
||||||
});
|
}
|
||||||
};
|
|
||||||
|
|
||||||
PackageManager.prototype.uninstall = function (name) {
|
mapPath(pkg, pluginUrl) {
|
||||||
var pkg = this.packagesList.filter(function (p) {
|
var urlLower = pluginUrl.toLowerCase();
|
||||||
return p.name === name;
|
if (urlLower.startsWith('http:') || urlLower.startsWith('https:') || urlLower.startsWith('file:')) {
|
||||||
})[0];
|
return pluginUrl;
|
||||||
|
}
|
||||||
|
|
||||||
if (pkg) {
|
var packageUrl = pkg.url;
|
||||||
this.packagesList = this.packagesList.filter(function (p) {
|
packageUrl = packageUrl.substring(0, packageUrl.lastIndexOf('/'));
|
||||||
return p.name !== name;
|
|
||||||
|
packageUrl += '/';
|
||||||
|
packageUrl += pluginUrl;
|
||||||
|
|
||||||
|
return packageUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
addPackage(packageManager, pkg) {
|
||||||
|
packageManager.packagesList = packageManager.packagesList.filter((p) => {
|
||||||
|
return p.name !== pkg.name;
|
||||||
});
|
});
|
||||||
|
|
||||||
removeUrl(pkg.url);
|
packageManager.packagesList.push(pkg);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Promise.resolve();
|
removeUrl(url) {
|
||||||
};
|
var manifestUrls = JSON.parse(appSettings.get(this.#settingsKey) || '[]');
|
||||||
|
|
||||||
PackageManager.prototype.mapPath = function (pkg, pluginUrl) {
|
manifestUrls = manifestUrls.filter((i) => {
|
||||||
var urlLower = pluginUrl.toLowerCase();
|
return i !== url;
|
||||||
if (urlLower.indexOf('http:') === 0 || urlLower.indexOf('https:') === 0 || urlLower.indexOf('file:') === 0) {
|
});
|
||||||
return pluginUrl;
|
|
||||||
|
appSettings.set(this.#settingsKey, JSON.stringify(manifestUrls));
|
||||||
}
|
}
|
||||||
|
|
||||||
var packageUrl = pkg.url;
|
loadPackage(packageManager, url, throwError) {
|
||||||
packageUrl = packageUrl.substring(0, packageUrl.lastIndexOf('/'));
|
return new Promise((resolve, reject) => {
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
var originalUrl = url;
|
||||||
|
url += url.indexOf('?') === -1 ? '?' : '&';
|
||||||
|
url += 't=' + new Date().getTime();
|
||||||
|
|
||||||
packageUrl += '/';
|
xhr.open('GET', url, true);
|
||||||
packageUrl += pluginUrl;
|
|
||||||
|
|
||||||
return packageUrl;
|
var onError = () => {
|
||||||
};
|
if (throwError === true) {
|
||||||
|
reject();
|
||||||
|
} else {
|
||||||
|
this.removeUrl(originalUrl);
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return new PackageManager();
|
xhr.onload = (e) => {
|
||||||
});
|
if (this.status < 400) {
|
||||||
|
var pkg = JSON.parse(this.response);
|
||||||
|
pkg.url = originalUrl;
|
||||||
|
|
||||||
|
this.addPackage(packageManager, pkg);
|
||||||
|
|
||||||
|
var plugins = pkg.plugins || [];
|
||||||
|
if (pkg.plugin) {
|
||||||
|
plugins.push(pkg.plugin);
|
||||||
|
}
|
||||||
|
var promises = plugins.map((pluginUrl) => {
|
||||||
|
return pluginManager.loadPlugin(packageManager.mapPath(pkg, pluginUrl));
|
||||||
|
});
|
||||||
|
Promise.all(promises).then(resolve, resolve);
|
||||||
|
} else {
|
||||||
|
onError();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
xhr.onerror = onError;
|
||||||
|
|
||||||
|
xhr.send();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* eslint-enable indent */
|
||||||
|
|
||||||
|
export default new PackageManager();
|
||||||
|
|
|
@ -497,7 +497,7 @@ function initClient() {
|
||||||
Promise.all(list.map(loadPlugin)).then(function () {
|
Promise.all(list.map(loadPlugin)).then(function () {
|
||||||
console.groupEnd('loading installed plugins');
|
console.groupEnd('loading installed plugins');
|
||||||
require(['packageManager'], function (packageManager) {
|
require(['packageManager'], function (packageManager) {
|
||||||
packageManager.init().then(resolve, reject);
|
packageManager.default.init().then(resolve, reject);
|
||||||
});
|
});
|
||||||
}, reject);
|
}, reject);
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue