Statistics
| Branch: | Revision:

root / webodf / deflateinmozilla.txt @ 2fa2935f

History | View | Annotate | Download (2.5 kB)

1 5099c138 Jos van den Oever
Found this in a mozilla forum.
2 5099c138 Jos van den Oever
http://forums.mozillazine.org/viewtopic.php?f=27&t=313496&start=0#
3 5099c138 Jos van den Oever
4 5099c138 Jos van den Oever
Another implementation under MIT license can be found here:
5 5099c138 Jos van den Oever
http://www.codeproject.com/KB/scripting/Javascript_binaryenc.aspx
6 5099c138 Jos van den Oever
7 5099c138 Jos van den Oever
 //listener for the converted data
8 5099c138 Jos van den Oever
      var listener =
9 5099c138 Jos van den Oever
      {
10 5099c138 Jos van den Oever
         onDataAvailable : function(request, context, inputStream, offset, count)
11 5099c138 Jos van den Oever
         {
12 5099c138 Jos van den Oever
            //write the data
13 5099c138 Jos van den Oever
                 var output = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
14 5099c138 Jos van den Oever
15 5099c138 Jos van den Oever
                                //outputFile is a file which will contain the gunzipped data
16 5099c138 Jos van den Oever
            if(!outputFile.exists())
17 5099c138 Jos van den Oever
                     output.init(outputFile, 0x02 | 0x08, 0644, 0);
18 5099c138 Jos van den Oever
19 5099c138 Jos van den Oever
            else
20 5099c138 Jos van den Oever
                     output.init(outputFile, 0x02 | 0x10, 0644, 0);
21 5099c138 Jos van den Oever
22 5099c138 Jos van den Oever
                  var scriptable = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);
23 5099c138 Jos van den Oever
               scriptable.init(inputStream);
24 5099c138 Jos van den Oever
25 5099c138 Jos van den Oever
            var data = scriptable.read(inputStream.available());
26 5099c138 Jos van den Oever
            output.write(data, data.length);
27 5099c138 Jos van den Oever
28 5099c138 Jos van den Oever
            output.close();
29 5099c138 Jos van den Oever
         },
30 5099c138 Jos van den Oever
31 5099c138 Jos van den Oever
         onStartRequest : function(request, context)   
32 5099c138 Jos van den Oever
         {
33 5099c138 Jos van den Oever
         },
34 5099c138 Jos van den Oever
35 5099c138 Jos van den Oever
         onStopRequest : function(request, context)
36 5099c138 Jos van den Oever
         {
37 5099c138 Jos van den Oever
         }
38 5099c138 Jos van den Oever
      };
39 5099c138 Jos van den Oever
40 5099c138 Jos van den Oever
      //fake uri needed to create a channel
41 5099c138 Jos van den Oever
      var uri = Components.classes["@mozilla.org/network/simple-uri;1"].createInstance(Components.interfaces.nsIURI);
42 5099c138 Jos van den Oever
      uri.scheme = "http://gunzip";
43 5099c138 Jos van den Oever
44 5099c138 Jos van den Oever
      //fake channel needed to create a request
45 5099c138 Jos van den Oever
      var chan = Components.classes["@mozilla.org/network/input-stream-channel;1"].createInstance(Components.interfaces.nsIInputStreamChannel);
46 5099c138 Jos van den Oever
      chan.setURI(uri);
47 5099c138 Jos van den Oever
      chan.contentLength = decrypted.length;
48 5099c138 Jos van den Oever
      chan.contentType = "gzip";
49 5099c138 Jos van den Oever
      chan.contentStream = null;
50 5099c138 Jos van den Oever
51 5099c138 Jos van den Oever
      var request = chan.QueryInterface(Components.interfaces.nsIRequest);
52 5099c138 Jos van den Oever
53 5099c138 Jos van den Oever
            // Attempt to gunzip
54 5099c138 Jos van den Oever
      var conv = Components.classes["@mozilla.org/streamconv;1?from=gzip&to=uncompressed"].createInstance(Components.interfaces.nsIStreamConverter);
55 5099c138 Jos van den Oever
56 5099c138 Jos van den Oever
      conv.asyncConvertData("gzip", "uncompressed", listener, null);
57 5099c138 Jos van den Oever
58 5099c138 Jos van den Oever
      conv.onStartRequest(request, null);
59 5099c138 Jos van den Oever
60 5099c138 Jos van den Oever
                //input is an inputstream which contains the gzipped data
61 5099c138 Jos van den Oever
      var avail = input.available();
62 5099c138 Jos van den Oever
63 5099c138 Jos van den Oever
      //really do the conversion
64 5099c138 Jos van den Oever
      conv.onDataAvailable(request, null, input, 0, avail);
65 5099c138 Jos van den Oever
66 5099c138 Jos van den Oever
      var status = {};
67 5099c138 Jos van den Oever
      conv.onStopRequest(request, null, status);
68 5099c138 Jos van den Oever
69 5099c138 Jos van den Oever
      input.close();