1
0
Fork 0
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:
MrTimscampi 2020-08-01 03:51:44 +02:00
parent 1ef5529244
commit ca5f194ee6
3 changed files with 114 additions and 112 deletions

View file

@ -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",

View file

@ -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();

View file

@ -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);
}); });