From: Pawel Andruszkiewicz Date: Tue, 3 Nov 2015 12:35:57 +0000 (+0100) Subject: [File] Implementation of FileReader. X-Git-Tag: submit/tizen/20151221.111205^2~65 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=94cbc2d97705856f250dab139e1f18510c9d99f6;p=platform%2Fcore%2Fapi%2Fcordova-plugins.git [File] Implementation of FileReader. [Verification] Manually tested, unit tests require the rest of the implementation to be finished. Change-Id: I748147045e18d12b0dd6740972a4e6fe85c89497 Signed-off-by: Pawel Andruszkiewicz --- diff --git a/src/file/js/FileReader.js b/src/file/js/FileReader.js index 5a90dad..df12a4f 100644 --- a/src/file/js/FileReader.js +++ b/src/file/js/FileReader.js @@ -18,11 +18,57 @@ cordova.define('cordova-plugin-file.tizen.FileReader', function(require, exports, module) { // TODO: remove -> end +function read(operation, url, start, end, successCallback, errorCallback, encoding) { + var fail = function(e) { + errorCallback && errorCallback(ConvErrorCode(e.code)); + } + try { + tizen.filesystem.resolve(url, function(file) { + try { + file.openStream('r', function(stream) { + try { + stream.position = start; + var r = stream[operation](end - start); + stream.close(); + successCallback && successCallback(r); + } catch (e) { + fail(e); + } + }, fail, encoding); + } catch (e) { + fail(e); + } + }, fail, 'r'); + } catch (e) { + fail(e); + } +} + module.exports = { - readAsText: function(successCallback, errorCallback, args) {}, - readAsDataURL: function(successCallback, errorCallback, args) {}, - readAsBinaryString: function(successCallback, errorCallback, args) {}, - readAsArrayBuffer: function(successCallback, errorCallback, args) {}, + readAsText: function(successCallback, errorCallback, args) { + read('read', args[0], args[2], args[3], successCallback, errorCallback, args[1]); + }, + readAsDataURL: function(successCallback, errorCallback, args) { + read('readBase64', args[0], args[1], args[2], function(r) { + r = 'data:;base64,' + r; // MIME is missing because it's not passed to exec() + successCallback && successCallback(r); + }, errorCallback); + }, + readAsBinaryString: function(successCallback, errorCallback, args) { + read('readBytes', args[0], args[1], args[2], function(r) { + var str = ''; + // this may be not so efficient, but + // String.fromCharCode.apply(null, r); + // may throw if r.length is large enough + for (var i = 0; i < r.length; ++i) { + str += String.fromCharCode(r[i]); + } + successCallback && successCallback(str); + }, errorCallback); + }, + readAsArrayBuffer: function(successCallback, errorCallback, args) { + read('readBytes', args[0], args[1], args[2], successCallback, errorCallback); + }, }; //TODO: remove when added to public cordova repository -> begin