I couldn't trigger a mirror link status even with two identical files (same size, different host, different name but in advanced settings I turned off name matching).
Anyway, after experimenting I concluded that
myDownloadLink.getDownloadHost() is reliable to get a proper host name for the files that will contain the URLs.
I tried to see what I got with
myDownloadLink. +
getPluginURL() and
getProperty("LINKDUPEID");
For PluginURL, sometime I get
protocol://domain/(path/)?uid as
raztoki stated and sometime I got
domain://(path/)?uid.
And for LINKDUPEID I either get
domain://(path/)?uid or
(path/)?uid and sometime I get a format of
websitecom_(path/)?uid :
(protocol://)website.com/path/video/?quality=480 turned into :
websitecom_path_480p.
I never saw PluginURL with Domain first format without having LINKPUPEID being identical, but in case of I made the code so that it filter out domain and protocol anyway.
So I made this code which always return the (path/)?uid or LINKDUPEID version of it :
Code:
var myShortURL = Discombobulator(myDownloadLink.getPluginURL(), myDownloadLink.getProperty("LINKDUPEID"));
function Discombobulator(pluginURL, LINKDUPEID) {
var shortURL = ''; //Check if there is a LINKDUPEID and take LINKDUPEID or PluginURL depending
if (LINKDUPEID == null) {
shortURL = pluginURL;
} else {
shortURL = LINKDUPEID.toString();
}
var authority = shortURL.indexOf('://');
if (authority < 0) return shortURL; //Check if URL contain '://' if not return it as it is already the shortest
/*Check if there is a protocol before the '://' meaning it contain protocol and host.
If it contain protocol, remove protocol and host and return, otherwise remove host and return*/
var shorterURL = shortURL.substring(authority + ('://').length);
if (turboEncabulator(shortURL.substring(0, authority))) return shorterURL.substring(shorterURL.indexOf('/') + 1);
return shorterURL;
}
function turboEncabulator(bit) {
var protocols = ['http', 'https', 'ftp'];
for (var i = 0; i < protocols.length; i++)
if (bit == protocols[i]) return true;
return false;
}
Do you think this code is solid enough to deal with all possible cases or did I miss something ?