Skip to content

Commit

Permalink
Issue #3 FileSystem API
Browse files Browse the repository at this point in the history
* fix too long script execution in FF
  • Loading branch information
birhoff committed Aug 19, 2013
1 parent ab4da94 commit 920c5b9
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 11 deletions.
46 changes: 46 additions & 0 deletions js/blobBuilder.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
var self = this;

self.addEventListener('message', function (e) {
debugger;
var data = e.data;

var blobs = [],
fullBlob = null,
url = null;

while (data.length) {
var dataItem = data.shift();
blobs.push(dataURLToBlob(dataItem));
dataItem = null;
}
fullBlob = new Blob(blobs);
url = URL.createObjectURL(fullBlob);

self.postMessage(url);

}, false);


dataURLToBlob = function (dataURL) {
var BASE64_MARKER = ';base64,';
if (dataURL.indexOf(BASE64_MARKER) == -1) {
var parts = dataURL.split(',');
var contentType = parts[0].split(':')[1];
var raw = parts[1];

return new Blob([raw], {type: contentType});
}

var parts = dataURL.split(BASE64_MARKER);
var contentType = parts[0].split(':')[1];
var raw = window.atob(parts[1]);
var rawLength = raw.length;

var uInt8Array = new Uint8Array(rawLength);

for (var i = 0; i < rawLength; ++i) {
uInt8Array[i] = raw.charCodeAt(i);
}

return new Blob([uInt8Array], {type: contentType});
};
47 changes: 36 additions & 11 deletions js/recipient.js
Original file line number Diff line number Diff line change
Expand Up @@ -224,31 +224,56 @@ FileSystemSaver.settings = {

function RamSaver() {
"use strict";
var self = this;

this._data = [];
this._url = null;
this._onSave = null;
this._blob = null;
this._state = "";

this._write = function () {
if (self._state === Saver.States.readyForWrite)
self._state = Saver.States.writing;

if (!self._data.length && self._state === Saver.States.downloadComplete) {
self._url = URL.createObjectURL(self._blob);
self._state = Saver.States.complete;
if (self._onSave) self._onSave(self._url);
return;
}
if (!self._data.length) {
setTimeout(self._write, FileSystemSaver.settings.writeTimeout)
return;
}

var blobs = [];

while (self._data.length) {
var dataItem = self._data.shift();
blobs.push(Saver.dataURLToBlob(dataItem));
dataItem = null;
}
if (blobs.length) {
if (self._blob) blobs.unshift(self._blob);
self._blob = new Blob(blobs);
blobs = null;
setTimeout(self._write, 2000);
}
};
};

RamSaver.prototype.start = function (info) {
"use strict";

setTimeout(this._write, 2000);
};

RamSaver.prototype.stop = function (callback) {
"use strict";
var self = this;
var blobs = [];

while (self._data.length) {
var dataItem = self._data.shift();
blobs.push(Saver.dataURLToBlob(dataItem));
dataItem = null;
}
self._blob = new Blob(blobs);
self._url = URL.createObjectURL(self._blob);
blobs = null;
callback(self._url);
self._state = Saver.States.downloadComplete;
self._onSave = callback;
};

RamSaver.prototype.add = function (data) {
Expand Down
1 change: 1 addition & 0 deletions recipient.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
<title></title>
<script src="/socket.io/socket.io.js"></script>
<script src="/js/recipient.js"></script>
<script src="/js/blobBuilder.js"></script>
<script src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
</head>
<body>
Expand Down

0 comments on commit 920c5b9

Please sign in to comment.