@jjdenhertog/plex-music-search
Version:
Library to find tracks in your Plex Library
93 lines (92 loc) • 4.54 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = hubSearch;
/* eslint-disable unicorn/prefer-code-point */
/* eslint-disable prefer-template */
/* eslint-disable unicorn/prefer-string-replace-all */
var music_search_1 = require("@jjdenhertog/music-search");
var AxiosRequest_1 = require("../utils/AxiosRequest");
var getAPIUrl_1 = __importDefault(require("../utils/getAPIUrl"));
function hubSearch(uri, token, query, limit) {
if (limit === void 0) { limit = 5; }
return new Promise(function (resolve, reject) {
// Fix forbidden characters
var forbiddenCharacters = ['(', ')'];
for (var i = 0; i < forbiddenCharacters.length; i++) {
var element = forbiddenCharacters[i];
query = query.split(element).join('');
}
var url = (0, getAPIUrl_1.default)(uri, "/hubs/search?query=".concat(fixedEncodeURIComponent(query.trim()), "&limit=").concat(limit));
AxiosRequest_1.AxiosRequest.get(url, token)
.then(function (result) {
var response = [];
if (result.data.MediaContainer.Hub.length > 0) {
for (var i = 0; i < result.data.MediaContainer.Hub.length; i++) {
var hub = result.data.MediaContainer.Hub[i];
if (hub.type == "album" && hub.Metadata) {
for (var j = 0; j < hub.Metadata.length; j++) {
var metadata = hub.Metadata[j];
response.push({
type: "album",
id: metadata.key,
ratingKey: metadata.ratingKey,
guid: metadata.guid,
score: metadata.score,
image: metadata.thumb,
year: metadata.year,
title: metadata.title,
artist: {
guid: metadata.parentGuid,
id: metadata.parentKey,
title: (0, music_search_1.removeFeaturing)(metadata.parentTitle),
alternative_title: "",
image: metadata.parentThumb,
},
});
}
}
if (hub.type == "track" && hub.Metadata) {
for (var j = 0; j < hub.Metadata.length; j++) {
var metadata = hub.Metadata[j];
response.push({
type: "track",
id: metadata.key,
ratingKey: metadata.ratingKey,
guid: metadata.guid,
score: metadata.score,
image: metadata.thumb,
title: metadata.title,
album: {
id: metadata.parentKey,
guid: metadata.parentGuid,
title: metadata.parentTitle,
year: metadata.parentYear,
image: metadata.parentThumb,
},
artist: {
id: metadata.grandparentKey,
guid: metadata.grandparentGuid,
title: (0, music_search_1.removeFeaturing)(metadata.originalTitle || metadata.grandparentTitle),
image: metadata.grandparentThumb,
}
});
}
}
}
}
resolve(response);
})
.catch(function (_error) {
console.error("Plex API Request failed:\n".concat(url));
reject("Could not connect to server");
});
});
}
function fixedEncodeURIComponent(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
return '%' + c.charCodeAt(0).toString(16);
});
}