X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;ds=sidebyside;f=doc%2Fwebdeveloper%2Fcommon%2Ffile.js;fp=doc%2Fwebdeveloper%2Fcommon%2Ffile.js;h=eb2df7795e07e79254865ddbc7fe56dfd517022b;hb=c3b0deb3d8c9f439739c79806e915c29bc1d4b84;hp=0000000000000000000000000000000000000000;hpb=cff6539539a79e014f6ac8df46716cafce2c8472;p=pompage.git diff --git a/doc/webdeveloper/common/file.js b/doc/webdeveloper/common/file.js new file mode 100644 index 0000000..eb2df77 --- /dev/null +++ b/doc/webdeveloper/common/file.js @@ -0,0 +1,251 @@ +// Gets the size of a file +function webdeveloper_getFileSize(url) +{ + var cacheService = Components.classes["@mozilla.org/network/cache-service;1"].getService(Components.interfaces.nsICacheService); + var cacheSession = null; + var file = null; + var fileSize = null; + var readAccess = Components.interfaces.nsICache.ACCESS_READ; + + // Try to get the file size from the HTTP cache + try + { + cacheSession = cacheService.createSession("HTTP", 0, true); + cacheSession.doomEntriesIfExpired = false; + file = cacheSession.openCacheEntry(url, readAccess, false); + + // If there is a file + if(file) + { + fileSize = file.dataSize; + } + } + catch(exception) + { + // Try to get the file size from the FTP cache + try + { + cacheSession = cacheService.createSession("FTP", 0, true); + cacheSession.doomEntriesIfExpired = false; + file = cacheSession.openCacheEntry(url, readAccess, false); + + // If there is a file + if(file) + { + fileSize = file.dataSize; + } + } + catch(exception) + { + fileSize = null; + } + } + + // If the file size could not be retrieved from the cache + if(!fileSize) + { + // Try to download the file + try + { + var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService); + + fileSize = ioService.newChannelFromURI(ioService.newURI(url, null, null)).open().available(); + } + catch(exception) + { + fileSize = null; + } + } + + return fileSize; +} + +// Gets the uncompressed size of a file +function webdeveloper_getUncompressedFileSize(url) +{ + var cacheService = Components.classes["@mozilla.org/network/cache-service;1"].getService(Components.interfaces.nsICacheService); + var cacheSession = null; + var file = null; + var fileCompressed = true; + var fileSize = null; + var readAccess = Components.interfaces.nsICache.ACCESS_READ; + + // Try to get the file size from the HTTP cache + try + { + cacheSession = cacheService.createSession("HTTP", 0, true); + cacheSession.doomEntriesIfExpired = false; + file = cacheSession.openCacheEntry(url, readAccess, false); + } + catch(exception) + { + // Try to get the file size from the FTP cache + try + { + cacheSession = cacheService.createSession("FTP", 0, true); + cacheSession.doomEntriesIfExpired = false; + file = cacheSession.openCacheEntry(url, readAccess, false); + } + catch(exception) + { + file = null; + } + } + + // If there is a file + if(file) + { + var encoding = null; + var responseHeaders = null; + + // Try to get the cache encoding + try + { + // Specific case-sensitive required + encoding = file.getMetaDataElement("request-Accept-Encoding"); + } + catch(exception) + { + encoding = null; + + // Try to get the response headers + try + { + // Specific case-sensitive required + responseHeaders = file.getMetaDataElement("response-head"); + } + catch(exception) + { + responseHeaders = null; + } + } + + // If the cache is not GZIP encoded + if((!encoding || encoding.indexOf("gzip") == -1) && (!responseHeaders || responseHeaders.indexOf("Content-Encoding: gzip") == -1)) + { + fileCompressed = false; + } + } + + // If the file is compressed + if(fileCompressed) + { + // Try to download the file + try + { + var request = new XMLHttpRequest(); + + request.open("get", url, false); + request.send(null); + + fileSize = request.responseText.length; + } + catch(exception) + { + fileSize = null; + } + } + + return fileSize; +} + +// Retrieves the source from the given URL +function webdeveloper_retrieveSource(url) +{ + var source = null; + + // If the URL is not entirely generated + if(url.indexOf("wyciwyg://") != 0) + { + var cacheService = Components.classes["@mozilla.org/network/cache-service;1"].getService(Components.interfaces.nsICacheService); + var cacheSession = null; + var file = null; + var readAccess = Components.interfaces.nsICache.ACCESS_READ; + + // Try to get the file size from the HTTP cache + try + { + cacheSession = cacheService.createSession("HTTP", 0, true); + cacheSession.doomEntriesIfExpired = false; + file = cacheSession.openCacheEntry(url, readAccess, false); + } + catch(exception) + { + // Try to get the file size from the FTP cache + try + { + cacheSession = cacheService.createSession("FTP", 0, true); + cacheSession.doomEntriesIfExpired = false; + file = cacheSession.openCacheEntry(url, readAccess, false); + } + catch(exception) + { + file = null; + } + } + + // If there is a file + if(file) + { + var encoding = null; + var responseHeaders = null; + + // Try to get the cache encoding + try + { + // Specific case-sensitive required + encoding = file.getMetaDataElement("request-Accept-Encoding"); + } + catch(exception) + { + encoding = null; + + // Try to get the response headers + try + { + // Specific case-sensitive required + responseHeaders = file.getMetaDataElement("response-head"); + } + catch(exception) + { + responseHeaders = null; + } + } + + // If the cache is not GZIP encoded + if((!encoding || encoding.indexOf("gzip") == -1) && (!responseHeaders || (responseHeaders.indexOf("Content-Encoding: deflate") == -1 && responseHeaders.indexOf("Content-Encoding: gzip") == -1))) + { + var inputStream = file.openInputStream(0); + var scriptableStream = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream); + + scriptableStream.init(inputStream); + + source = scriptableStream.read(scriptableStream.available()); + + scriptableStream.close(); + inputStream.close(); + } + } + + // If the source has not been loaded + if(!source) + { + // Try to load the URL + try + { + var request = new XMLHttpRequest(); + + request.open("get", url, false); + request.send(null); + + source = request.responseText; + } + catch(exception) + { + source = null; + } + } + } + + return source; +}