Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
126 lines
3.2 KiB
JavaScript
Executable file
126 lines
3.2 KiB
JavaScript
Executable file
'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
|
|
|
|
};
|
|
|
|
}();
|