diff options
Diffstat (limited to 'MobileCydia.app/storage.js')
-rw-r--r-- | MobileCydia.app/storage.js | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/MobileCydia.app/storage.js b/MobileCydia.app/storage.js new file mode 100644 index 0000000..ae8cb85 --- /dev/null +++ b/MobileCydia.app/storage.js @@ -0,0 +1,88 @@ +var colors = ["#9090e0", "#4d4d70", "#7d7da0", "#7da0e0", "#d0d0f0", "#7070e0"]; + +var list = function (legend, color, name, value) { + legend.append('<div class="key">' + + '<div class="color" style="background-color: ' + color + '"><div></div></div>' + + '<div class="name">' + name + ' (' + Math.round(value * 1000) / 10 + '%)</div>' + + '</div>'); +}; + +console.log(cydia.statfs("/")); + +var cut = function (parent, color, fraction, z) { + var deg = Math.round(360 * fraction); + if (deg < 2) + deg = 2; + parent.append('<div class="xslice" style="' + + 'background-color: ' + color + ';' + + '-webkit-transform: rotate(' + deg + 'deg);' + + 'z-index: ' + z + ';' + + '"></div>'); +}; + +var chart = function (right, left, slices) { + var total = 0; + for (var i = 0; i != slices.length; ++i) { + var slice = slices[i]; + var z = slices.length - i; + if (slice[1] > 0.5) + cut(right, slice[0], total + 0.5, z); + total += slice[1]; + cut(total > 0.5 ? left : right, slice[0], total, z); + } +}; + +var setup = function (name, root, folders) { + var size = $("#" + name + "-size"); + var statfs = cydia.statfs(root); + var kb = statfs[0] * statfs[1] / 1024; + var total = kb / 1024; + + var unit; + if (total < 1000) + unit = 'M'; + else { + total = total / 1024; + unit = 'G' + } + + size.html(Math.round(total * 10) / 10 + " " + unit); + + var legend = $("#" + name + "-legend"); + var used = 0; + + var slices = []; + + if (folders != null) + for (var i = 0; i != folders.length; ++i) { + var folder = folders[i]; + var usage = cydia.du(folder[1]); + if (usage == null) + usage = 0; + var color = colors[i + 2]; + var percent = usage / kb; + list(legend, color, folder[0], percent); + slices.push([color, percent]); + used += usage; + } + + var free = statfs[0] * statfs[2] / 1024; + var other = (kb - free - used) / kb; + + slices.push([colors[0], other]); + chart($("#" + name + "-right"), $("#" + name + "-left"), slices); + + list(legend, colors[0], folders == null ? "Used" : "Other", other); + list(legend, colors[1], "Free", statfs[2] / statfs[1]); +}; + +$(function () { + setup("system", "/", null); + + setup("private", "/private/var", [ + ["Themes", "/Library/Themes/"], + ["iTunes", "/var/mobile/Media/iTunes_Control/"], + ["App Store", "/var/mobile/Applications/"], + ["Camera", "/var/mobile/Media/DCIM/"] + ]); +}); |