Last active
August 29, 2015 14:03
-
-
Save marshall/1bb4ee1aee30ec723fc6 to your computer and use it in GitHub Desktop.
All FxOS apps as JSON
This file contains hidden or 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
var schemes = { | |
"app:": "A", | |
"http:": "H", | |
"https:": "S", | |
"file:": "F" | |
}; | |
var domains = { | |
".gaiamobile.org": "G" | |
}; | |
var groupRegexes = { | |
"gaia": /app:\/\/([^\.]+).gaiamobile.org\/manifest.webapp/ | |
}; | |
var apps = { | |
others: [] | |
}; | |
function addApp(app) { | |
var url = app.manifestURL; | |
var hasMatch = false; | |
Object.keys(groupRegexes).forEach(function(key) { | |
var regex = groupRegexes[key]; | |
var matches = regex.exec(url); | |
if (matches) { | |
if (!apps.hasOwnProperty(key)) { | |
apps[key] = []; | |
} | |
apps[key].push(matches[1]); | |
hasMatch = true; | |
} | |
}); | |
if (!hasMatch) { | |
apps.others.push(miniURL(url)); | |
} | |
} | |
function miniURL(url) { | |
// Obviously this isn't robust | |
var parts = url.split(/\/+/); | |
var scheme = parts[0]; | |
if (!schemes.hasOwnProperty(scheme)) { | |
return url; | |
} | |
var mini = "$" + schemes[scheme] + "/"; | |
var miniDomain = parts[1]; | |
Object.keys(domains).forEach(function(domain) { | |
miniDomain = miniDomain.replace(domain, "$" + domains[domain]); | |
}); | |
mini += miniDomain; | |
if (parts.length == 3 && parts[2] == "manifest.webapp") { | |
mini += "/$M"; | |
} else { | |
var pathParts = parts.slice(2); | |
mini += "/" + pathParts.join("/"); | |
} | |
return mini; | |
} | |
navigator.mozApps.mgmt.getAll().onsuccess = function() { | |
var urls = []; | |
var miniURLs = []; | |
this.result.forEach(function(app) { | |
urls.push(app.manifestURL); | |
miniURLs.push(miniURL(app.manifestURL)); | |
addApp(app); | |
}); | |
var json = JSON.stringify(urls); | |
var miniJSON = JSON.stringify(miniURLs); | |
var appsJSON = JSON.stringify(apps); | |
console.log("Original JSON", json); | |
console.log("Bytes", json.length); | |
console.log("Mini JSON", miniJSON); | |
console.log("Mini Bytes", miniJSON.length); | |
console.log("Apps JSON", appsJSON); | |
console.log("Apps Bytes", appsJSON.length); | |
console.log("App count", urls.length); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Example result from FxOS 2.1 simulator: