Last active
April 2, 2020 17:45
-
-
Save iwalton3/8f47cd6021d8bb76ba1cc1c937c5069f 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