File: source/data-process.js
- /**
- * <blockquote class="info">
- * Currently, we do not support Blob or ArrayBuffer data type of transfers, but we
- * will look into implementing it in the future.
- * </blockquote>
- * The list of supported data transfer data types.
- * @attribute DATA_TRANSFER_DATA_TYPE
- * @param {String} BINARY_STRING <small>Value <code>"binaryString"</code></small>
- * The value of the transfer type that sends all data packets as string
- * (or converts them into string) when transferring data over the Datachannel connection.
- * @type JSON
- * @readOnly
- * @for Skylink
- * @since 0.1.0
- */
- Skylink.prototype.DATA_TRANSFER_DATA_TYPE = {
- BINARY_STRING: 'binaryString',
- ARRAY_BUFFER: 'arrayBuffer',
- BLOB: 'blob'
- };
-
- /**
- * Stores the data chunk size for Blob transfers.
- * @attribute _CHUNK_FILE_SIZE
- * @type Number
- * @private
- * @readOnly
- * @for Skylink
- * @since 0.5.2
- */
- Skylink.prototype._CHUNK_FILE_SIZE = 49152;
-
- /**
- * Stores the data chunk size for Blob transfers transferring from/to
- * Firefox browsers due to limitation tested in the past in some PCs (linx predominatly).
- * @attribute _MOZ_CHUNK_FILE_SIZE
- * @type Number
- * @private
- * @readOnly
- * @for Skylink
- * @since 0.5.2
- */
- Skylink.prototype._MOZ_CHUNK_FILE_SIZE = 12288;
-
- /**
- * Stores the data chunk size for data URI string transfers.
- * @attribute _CHUNK_DATAURL_SIZE
- * @type Number
- * @private
- * @readOnly
- * @for Skylink
- * @since 0.5.2
- */
- Skylink.prototype._CHUNK_DATAURL_SIZE = 1212;
-
- /**
- * Function that converts Base64 string into Blob object.
- * This is referenced from devnull69@stackoverflow.com #6850276.
- * @method _base64ToBlob
- * @private
- * @for Skylink
- * @since 0.1.0
- */
- Skylink.prototype._base64ToBlob = function(dataURL) {
- var byteString = atob(dataURL.replace(/\s\r\n/g, ''));
- // write the bytes of the string to an ArrayBuffer
- var ab = new ArrayBuffer(byteString.length);
- var ia = new Uint8Array(ab);
- for (var j = 0; j < byteString.length; j++) {
- ia[j] = byteString.charCodeAt(j);
- }
- // write the ArrayBuffer to a blob, and you're done
- return new Blob([ab]);
- };
-
- /**
- * Function that converts a Blob object into Base64 string.
- * @method _blobToBase64
- * @private
- * @for Skylink
- * @since 0.1.0
- */
- Skylink.prototype._blobToBase64 = function(data, callback) {
- var fileReader = new FileReader();
- fileReader.onload = function() {
- // Load Blob as dataurl base64 string
- var base64BinaryString = fileReader.result.split(',')[1];
- callback(base64BinaryString);
- };
- fileReader.readAsDataURL(data);
- };
-
- /**
- * Function that chunks Blob object based on the data chunk size provided.
- * If provided Blob object size is lesser than or equals to the chunk size, it should return an array
- * of length of <code>1</code>.
- * @method _chunkBlobData
- * @private
- * @for Skylink
- * @since 0.5.2
- */
- Skylink.prototype._chunkBlobData = function(blob, chunkSize) {
- var chunksArray = [];
- var startCount = 0;
- var endCount = 0;
- var blobByteSize = blob.size;
-
- if (blobByteSize > chunkSize) {
- // File Size greater than Chunk size
- while ((blobByteSize - 1) > endCount) {
- endCount = startCount + chunkSize;
- chunksArray.push(blob.slice(startCount, endCount));
- startCount += chunkSize;
- }
- if ((blobByteSize - (startCount + 1)) > 0) {
- chunksArray.push(blob.slice(startCount, blobByteSize - 1));
- }
- } else {
- // File Size below Chunk size
- chunksArray.push(blob);
- }
- return chunksArray;
- };
-
- /**
- * Function that chunks large string into string chunks based on the data chunk size provided.
- * If provided string length is lesser than or equals to the chunk size, it should return an array
- * of length of <code>1</code>.
- * @method _chunkDataURL
- * @private
- * @for Skylink
- * @since 0.6.1
- */
- Skylink.prototype._chunkDataURL = function(dataURL, chunkSize) {
- var outputStr = dataURL; //encodeURIComponent(dataURL);
- var dataURLArray = [];
- var startCount = 0;
- var endCount = 0;
- var dataByteSize = dataURL.size || dataURL.length;
-
- if (dataByteSize > chunkSize) {
- // File Size greater than Chunk size
- while ((dataByteSize - 1) > endCount) {
- endCount = startCount + chunkSize;
- dataURLArray.push(outputStr.slice(startCount, endCount));
- startCount += chunkSize;
- }
- if ((dataByteSize - (startCount + 1)) > 0) {
- chunksArray.push(outputStr.slice(startCount, dataByteSize - 1));
- }
- } else {
- // File Size below Chunk size
- dataURLArray.push(outputStr);
- }
-
- return dataURLArray;
- };
-
- /**
- * Function that assembles the data string chunks into a large string.
- * @method _assembleDataURL
- * @private
- * @for Skylink
- * @since 0.6.1
- */
- Skylink.prototype._assembleDataURL = function(dataURLArray) {
- var outputStr = '';
-
- for (var i = 0; i < dataURLArray.length; i++) {
- try {
- outputStr += dataURLArray[i];
- } catch (error) {
- console.error('Malformed', i, dataURLArray[i]);
- }
- }
-
- return outputStr;
- };
-