blob: b166626c9627ea2402c6ea2d92d2db020aa1f851 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
var bookmarkService = require('./services/bookmarks/service');
var store = require('./lib/store');
var log = require('./lib/log')('onboarding');
module.exports = onboarding;
// When a new user visits the namespace browser, do a simple onboarding.
function onboarding(rt, appState) {
store.getValue('returning_user').then(function(returning) {
if (!returning) {
log.debug('Welcome to the Vanadium Namespace Browser!');
addDefaultBookmarks(rt);
// TODO(alexfandrianto): We can improve the onboarding experience
// By changing the appState variable, we can do other things to help a new
// user learn the Namespace Browser.
completeOnboarding();
}
}).catch(function(err) {
log.error('Failed to get "returning_user" flag', err);
});
}
// Add default bookmarks to the user's store.
function addDefaultBookmarks(rt) {
function bookmarkFail(err) {
log.warn('Could not add default bookmark', err);
}
var email = getEmailFromAccountName(rt.accountName);
// Determine the default bookmarks.
var globalMT = '/ns.dev.v.io:8101';
var personal;
if (email) {
// Point to their personal section of the global namespace.
personal = globalMT + '/users/' + email;
}
// If the bookmark already exists, then Mercury's observ-array will add it a
// 2nd time, so check if it's already bookmarked.
// Avoid racing bookmarks. Make sure to add them consecutively to the store.
bookmarkService.isBookmarked(globalMT).then(function(isGlobalMT) {
if (!isGlobalMT) {
bookmarkService.bookmark(globalMT, true);
}
}).catch(bookmarkFail).then(function() {
// Add a personal bookmark if present.
if (personal) {
bookmarkService.isBookmarked(personal).then(function(isPersonal) {
if (!isPersonal) {
bookmarkService.bookmark(personal, true);
}
});
}
}).catch(bookmarkFail);
}
function getEmailFromAccountName(accountName) {
// Use a regular expression to extract the email.
return /dev.v.io\/root\/users\/(.*?)\//.exec(accountName)[1];
}
// Set the returning_user flag to true.
function completeOnboarding() {
store.setValue('returning_user', true).catch(function(err) {
log.error('Failed to set "returning_user" flag', err);
});
}