Skip to content
This repository has been archived by the owner on Nov 3, 2021. It is now read-only.

Commit

Permalink
Bug 1159474 - merge pull request #29797 from gaye:bug-1159474-db.js-i…
Browse files Browse the repository at this point in the history
…n-worker to mozilla-b2g:master
  • Loading branch information
mozilla-autolander-deprecated committed Apr 30, 2015
2 parents 4e2ff35 + c38bf5a commit 77a0421
Show file tree
Hide file tree
Showing 141 changed files with 5,250 additions and 256 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Expand Up @@ -9,7 +9,7 @@
*~
manifest.appcache

/apps/calendar/js/presets.js
/apps/calendar/js/common/presets.js
/apps/camera/js/config.js
/apps/gallery/js/config.js
/apps/findmydevice/js/config.js
Expand Down
2 changes: 1 addition & 1 deletion .jshintignore
Expand Up @@ -15,7 +15,7 @@ build/esomin/escodegen.js
build/esomin/esprima.js
build/jsmin.js
apps/communications/contacts/oauth2/js/parameters.js
apps/calendar/js/presets.js
apps/calendar/js/common/presets.js
apps/email/js/alameda.js
apps/email/js/tmpl_builder.js
apps/clock/js/alameda.js
Expand Down
2 changes: 1 addition & 1 deletion apps/calendar/build/build.js
Expand Up @@ -4,7 +4,7 @@ var r = require('r-wrapper');
var utils = require('utils');

function createPresetsFile(options) {
var presetsFile = utils.getFile(options.APP_DIR, 'js', 'presets.js');
var presetsFile = utils.getFile(options.APP_DIR, 'js/common', 'presets.js');

var config = JSON.parse(
utils.getFileContent(
Expand Down
4 changes: 2 additions & 2 deletions apps/calendar/js/app.js
Expand Up @@ -11,9 +11,9 @@ var ServiceController = require('controllers/service');
var SyncController = require('controllers/sync');
var TimeController = require('controllers/time');
var dayObserver = require('day_observer');
var debug = require('debug')('app');
var debug = require('common/debug')('app');
var messageHandler = require('message_handler');
var nextTick = require('next_tick');
var nextTick = require('common/next_tick');
var notificationsController = require('controllers/notifications');
var performance = require('performance');
var periodicSyncController = require('controllers/periodic_sync');
Expand Down
247 changes: 175 additions & 72 deletions apps/calendar/js/backend/calendar_service.js
@@ -1,88 +1,191 @@
define(function(require, exports, module) {
'use strict';
importScripts('../ext/alameda.js');

require.config({
baseUrl: '/js/backend',
paths: {
ext: '/js/ext'
}
});

require(['ext/threads'], threads => {
var service = threads.service('calendar');
var Db = require('db');
var co = require('ext/co');
//var object = require('common/object');
var threads = require('ext/threads');

service.method('start', () => {
// TODO
console.log('start');
});

service.method('accounts/create', details => {
// TODO
console.log('accounts/create', details);
});
var db = new Db('b2g-calendar');
var service = threads.service('calendar');
var loadDb;

service.method('accounts/update', details => {
// TODO
console.log('accounts/update', details);
});

service.method('accounts/remove', account => {
// TODO
console.log('accounts/remove', account);
});

service.method('accounts/sync', account => {
// TODO
console.log('accounts/sync', account);
});

service.method('events/create', (calendarId, details) => {
// TODO
console.log('events/create', calendarId, details);
});

service.method('events/update', event => {
// TODO
console.log('events/update', event);
});
function start() {
if (loadDb != null) {
return loadDb;
}

service.method('events/remove', event => {
// TODO
console.log('events/remove', event);
loadDb = db.load();
return loadDb;
}

function method(endpoint, handler) {
service.method(endpoint, () => {
var args = Array.slice(arguments);
return co(function *() {
yield start();
return handler.apply(null, args);
});
});
}

service.method('settings/set', (start, end) => {
// TODO
console.log('settings/set', start, end);
function stream(endpoint, handler) {
service.stream(endpoint, function *() {
var args = Array.slice(arguments);
yield start();
handler.apply(null, args);
});

service.stream('accounts/list', stream => {
// TODO
console.log('accounts/list', stream);
}

function echo() {
return Array.slice(arguments);
}

/**
* This will not work until the sync controller
* (1) is not a class anymore
* (2) doesn't need the app ns/object
*/
function saveAccount(details) {
return co(function *() {
var store = db.getStore('Account');
var account;
try {
account = yield store.verifyAndPersist(details);
} catch (error) {
return Promise.reject(error);
}

yield syncAccount(account);
return account;
});
}

service.stream('accounts/get', (stream, id) => {
// TODO
console.log('accounts/get', stream, id);
function removeAccount(id) {
return co(function *() {
var store = db.getStore('Account');
yield store.remove(id);
});

service.stream('calendars/list', stream => {
// TODO
console.log('calendars/list', stream);
}

/**
* This will not work until the sync controller
* (1) is not a class anymore
* (2) doesn't need the app ns/object
*/
function syncAccount(account) {
console.log('syncAccount', account);
/*
return co(function *() {
var store = db.getStore('Calendar');
var calendars;
try {
calendars = yield store.remotesByAccount(account._id);
} catch (error) {
return Promise.reject(error);
}
var syncCalendar = syncController.calendar.bind(null, account);
yield Promise.all(object.map(calendars, syncCalendar));
});

service.stream('events/get', (stream, id) => {
// TODO
console.log('events/get', stream, id);
*/
}

function saveEvent(exists, event) {
return co(function *() {
var store = db.getStore('Event');
var provider = yield store.providerFor(event);
var capabilities;
try {
capabilities = yield provider.eventCapabilities(event.data);
} catch (error) {
return Promise.reject(error);
}

var capability = exists ? 'canUpdate' : 'canCreate';
if (!capabilities[capability]) {
return Promise.reject(new Error('User not allowed to perform operation'));
}

var method = exists ? 'updateEvent' : 'createEvent';
try {
yield provider[method](event.data);
} catch (error) {
return Promise.reject(error);
}
});

service.stream('busytimes/list', (stream, day) => {
// TODO
console.log('busytimes/list', stream, day);
}

function removeEvent(event) {
return co(function *() {
var store = db.getStore('Event');
var provider = yield store.providerFor(event);
var capabilities;
try {
yield provider.eventCapabilities(event.data);
} catch (error) {
return Promise.reject(error);
}

if (!capabilities.canDelete) {
return Promise.reject(new Error('User not allowed to perform operation'));
}

yield provider.deleteEvent(event.data);
});
}

function setSetting(key, value) {
var store = db.getStore('Setting');
return store.set(key, value);
}

function listAccounts(stream) {
// TODO
console.log('accounts/list', stream);
}

function getAccount(stream, id) {
// TODO
console.log('accounts/get', stream, id);
}

function listCalendars(stream) {
// TODO
console.log('calendars/list', stream);
}

function getEvent(stream, id) {
// TODO
console.log('events/get', stream, id);
}

function listBusytimes(stream, day) {
// TODO
console.log('busytimes/list', stream, day);
}

function getSetting(stream, key) {
// TODO
console.log('settings/set', stream, key);
}

method('echo', echo);
method('accounts/create', saveAccount);
method('accounts/update', saveAccount);
method('accounts/remove', removeAccount);
method('accounts/sync', syncAccount);
method('events/create', saveEvent.bind(null, true));
method('events/update', saveEvent.bind(null, true));
method('events/remove', removeEvent);
method('settings/set', setSetting);
stream('accounts/list', listAccounts);
stream('accounts/get', getAccount);
stream('calendars/list', listCalendars);
stream('events/get', getEvent);
stream('busytimes/list', listBusytimes);
stream('settings/get', getSetting);

exports.start = start;

service.stream('settings/get', (stream, key) => {
// TODO
console.log('settings/set', stream, key);
});
});
12 changes: 12 additions & 0 deletions apps/calendar/js/backend/calendar_worker.js
@@ -0,0 +1,12 @@
'use strict';
importScripts('../ext/alameda.js');

require.config({
baseUrl: '/js/backend',
paths: {
common: '/js/common',
ext: '/js/ext'
}
});

require(['calendar_service'], service => service.start());

0 comments on commit 77a0421

Please sign in to comment.