Last active
April 2, 2020 17:46
-
-
Save iwalton3/ecc71e7a156650b62a13a2af7ca6f07b to your computer and use it in GitHub Desktop.
Please Go Here: https://github.com/iwalton3/media-scripts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function getMediaTitle(media) { | |
let parts = media.Part; | |
for (let k = 0; k < parts.length; k++) { | |
if (!parts[k].hasOwnProperty("file")) continue; | |
const format = parts[k].file.match(".*[\\\\/]+([^\\\\/]\+)$"); | |
if (format != null) return format[1]; | |
} | |
return "Unknown"; | |
} | |
function intercept(url, responseText) { | |
if (url.indexOf("/library/metadata/") == -1 ) return responseText; | |
let response = JSON.parse(responseText); | |
if (!response.hasOwnProperty("MediaContainer") || | |
!response.MediaContainer.hasOwnProperty("Metadata")) return responseText; | |
const meta = response.MediaContainer.Metadata; | |
for (let i = 0; i < meta.length; i++) { | |
if (!meta[i].hasOwnProperty("Media")) continue; | |
let medias = meta[i].Media; | |
for (let j = 0; j < medias.length; j++) { | |
if (!medias[j].hasOwnProperty("Part")) continue; | |
if (!medias[j].hasOwnProperty("title")) medias[j].title = getMediaTitle(medias[j]); | |
let parts = medias[j].Part; | |
for (let k = 0; k < parts.length; k++) { | |
if (!parts[k].hasOwnProperty("Stream")) continue; | |
let streams = parts[k].Stream; | |
for (let l = 0; l < streams.length; l++) { | |
if (!streams[l].hasOwnProperty("displayTitle") || !streams[l].hasOwnProperty("title")) continue; | |
streams[l].displayTitle = streams[l].displayTitle + " (" + streams[l].title + ")"; | |
} | |
} | |
} | |
} | |
return JSON.stringify(response); | |
} | |
// From https://stackoverflow.com/questions/26447335/ | |
(function() { | |
// create XMLHttpRequest proxy object | |
var oldXMLHttpRequest = XMLHttpRequest; | |
// define constructor for my proxy object | |
XMLHttpRequest = function() { | |
var actual = new oldXMLHttpRequest(); | |
var self = this; | |
this.onreadystatechange = null; | |
// this is the actual handler on the real XMLHttpRequest object | |
actual.onreadystatechange = function() { | |
if (this.readyState == 4 && (actual.responseType == '' || actual.responseType == 'text')) { | |
try { | |
self.responseText = intercept(actual.responseURL, actual.responseText); | |
} catch (err) { | |
console.error(err); | |
self.responseText = actual.responseText; | |
} | |
} | |
if (self.onreadystatechange) { | |
return self.onreadystatechange(); | |
} | |
}; | |
// add all proxy getters/setters | |
["status", "statusText", "responseType", "response", "readyState", "responseXML", | |
"upload", "ontimeout, timeout", "withCredentials", "onload", "onerror", "onprogress"].forEach(function(item) { | |
Object.defineProperty(self, item, { | |
get: function() {return actual[item];}, | |
set: function(val) {actual[item] = val;} | |
}); | |
}); | |
// add all pure proxy pass-through methods | |
["addEventListener", "send", "open", "abort", "getAllResponseHeaders", | |
"getResponseHeader", "overrideMimeType", "setRequestHeader"].forEach(function(item) { | |
Object.defineProperty(self, item, { | |
value: function() {return actual[item].apply(actual, arguments);} | |
}); | |
}); | |
} | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment