'use strict'; /* global MockVCFReader */ /* exported MockSdCard */ var MockSdCard = function MockSdCard() { var observers = {}; var mock_sdcard_vcf = 'BEGIN:VCARD\n' + 'VERSION:2.1\n' + 'N:Gump;Forrest\n' + 'FN:Forrest Gump\n' + 'ORG:Bubba Gump Shrimp Co.\n' + 'TITLE:Shrimp Man\n' + 'PHOTO;GIF:http://www.example.com/dir_photos/my_photo.gif\n' + 'TEL;WORK;VOICE:(111) 555-1212\n' + 'TEL;HOME;VOICE:(404) 555-1212\n' + 'ADR;WORK:;;100 Waters Edge;Baytown;LA;30314;United States of America\n' + 'LABEL;WORK;ENCODING=QUOTED-PRINTABLE:100 Waters Edge=0D=0ABaytown, ' + 'LA 30314=0D=0AUnited States of America\n' + 'ADR;HOME:;;42 Plantation St.;Baytown;LA;30314;United States of America\n' + 'LABEL;HOME;ENCODING=QUOTED-PRINTABLE:42 Plantation St.=0D=0ABaytown, ' + 'LA 30314=0D=0AUnited States of America\n' + 'EMAIL;PREF;INTERNET:forrestgump@example.com\n' + 'REV:20080424T195243Z\n' + 'END:VCARD'; var failOnRetrieveFiles = false; var STATUSES = { NOT_INITIALIZED: 0, NOT_AVAILABLE: 1, AVAILABLE: 2, SHARED: 3 }; var status = STATUSES.AVAILABLE; var updateStorageState = function updateStorageState(state) { switch (state) { case 'available': status = STATUSES.AVAILABLE; break; case 'shared': status = STATUSES.SHARED; break; case 'unavailable': case 'deleted': status = STATUSES.NOT_AVAILABLE; break; } }; var deviceStorage = null; var subscribeToChanges = function subscribeToChanges(name, func, force) { if (observers[name] !== undefined && !force) { return false; } observers[name] = func; return true; }; var unsubscribeToChanges = function unsubscribeToChanges(name) { if (observers[name]) { delete observers[name]; return true; } else { return false; } }; return { NOT_INITIALIZED: STATUSES.NOT_INITIALIZED, NOT_AVAILABLE: STATUSES.NOT_AVAILABLE, AVAILABLE: STATUSES.AVAILABLE, SHARED: STATUSES.SHARED, set failOnRetrieveFiles(value) { failOnRetrieveFiles = value; }, getStatus: function(cb) { cb(status); }, get status() { return status; }, set status(value) { status = value; // Trigger the status change to any observer Object.keys(observers).forEach(function onStatus(name) { if (typeof(observers[name]) === 'function') { observers[name].call(null, value); } }); }, get deviceStorage() { return deviceStorage; }, set deviceStorage(storage) { deviceStorage = storage; }, 'updateStorageState': updateStorageState, 'checkStorageCard': function checkStorageCard() { return status === STATUSES.AVAILABLE; }, 'retrieveFiles': function retrieveFiles(mimes, ext, cb) { cb(failOnRetrieveFiles, [ { name: 'vcf1.vcf', type: 'text/vcard' } ]); }, 'getTextFromFile': function getTextFromFile(fileArray, cb) { return cb(mock_sdcard_vcf).then(() => { return Promise.resolve(MockVCFReader.prototype.numDuplicated); }); }, 'subscribeToChanges': subscribeToChanges, 'unsubscribeToChanges': unsubscribeToChanges }; }();