Files
tubestation/addon-sdk/source/lib/sdk/test/tmp-file.js

74 lines
2.1 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
const { Cc, Ci } = require("chrome");
const system = require("sdk/system");
const file = require("sdk/io/file");
const unload = require("sdk/system/unload");
// Retrieve the path to the OS temporary directory:
const tmpDir = require("sdk/system").pathFor("TmpD");
// List of all tmp file created
let files = [];
// Remove all tmp files on addon disabling
unload.when(function () {
files.forEach(function (path){
// Catch exception in order to avoid leaking following files
try {
if (file.exists(path))
file.remove(path);
}
catch(e) {
console.exception(e);
}
});
});
// Utility function that synchronously reads local resource from the given
// `uri` and returns content string. Read in binary mode.
function readBinaryURI(uri) {
let ioservice = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
let channel = ioservice.newChannel(uri, "UTF-8", null);
let stream = Cc["@mozilla.org/binaryinputstream;1"].
createInstance(Ci.nsIBinaryInputStream);
stream.setInputStream(channel.open());
let data = "";
while (true) {
let available = stream.available();
if (available <= 0)
break;
data += stream.readBytes(available);
}
stream.close();
return data;
}
// Create a temporary file from a given string and returns its path
exports.createFromString = function createFromString(data, tmpName) {
let filename = (tmpName ? tmpName : "tmp-file") + "-" + (new Date().getTime());
let path = file.join(tmpDir, filename);
let tmpFile = file.open(path, "wb");
tmpFile.write(data);
tmpFile.close();
// Register tmp file path
files.push(path);
return path;
}
// Create a temporary file from a given URL and returns its path
exports.createFromURL = function createFromURL(url, tmpName) {
let data = readBinaryURI(url);
return exports.createFromString(data, tmpName);
}