From 97097f16c351266a6dfbd32d192ae0d5b515b11e Mon Sep 17 00:00:00 2001 From: Kushagra Gour Date: Mon, 8 Jan 2018 00:11:24 +0530 Subject: [PATCH] port settings code to new db and refactors here n there --- src/db.js | 14 +++- src/itemService.js | 72 +++++++++++-------- src/script.js | 169 ++++++++++++++++++++------------------------- 3 files changed, 128 insertions(+), 127 deletions(-) diff --git a/src/db.js b/src/db.js index 7b2742b..ad655b8 100644 --- a/src/db.js +++ b/src/db.js @@ -8,11 +8,12 @@ if (dbPromise) { return dbPromise; } + utils.log('Initializing firestore'); dbPromise = new Promise((resolve, reject) => { if (db) { return resolve(db); } - firebase + return firebase .firestore() .enablePersistence() .then(function() { @@ -37,6 +38,14 @@ return dbPromise; } + async function getUser(userId) { + const remoteDb = await getDb(); + return remoteDb.doc(`users/${userId}`).get().then(doc => { + const user = doc.data(); + Object.assign(window.user, user); + }); + } + var local = { get: (obj, cb) => { const retVal = {}; @@ -58,13 +67,14 @@ }); setTimeout(() => { if (cb) { - cb(); + return cb(); } }, FAUX_DELAY); } }; window.db = { getDb, + getUser, local: chrome && chrome.storage ? chrome.storage.local : local, sync: chrome && chrome.storage ? chrome.storage.sync : local }; diff --git a/src/itemService.js b/src/itemService.js index 6e4e132..7685c98 100644 --- a/src/itemService.js +++ b/src/itemService.js @@ -1,44 +1,45 @@ (() => { window.itemService = { async getItem(id) { - var db = await window.db.getDb(); - return db.doc(`items/${id}`).get().then(doc => { + var remoteDb = await window.db.getDb(); + return remoteDb.doc(`items/${id}`).get().then(doc => { return doc.data(); }); }, + async getUserItemIds() { + if (window.user && window.user.items) { + return new Promise(resolve => { + resolve(window.user.items); + }); + } + var remoteDb = await window.db.getDb(); + return remoteDb.doc(`users/${window.user.uid}`).get().then(doc => { + return doc.data().items; + }); + }, async getAllItems() { var d = deferred(); - var remoteDb = await window.db.getDb(); + let itemIds = await this.getUserItemIds(); + itemIds = Object.getOwnPropertyNames(itemIds || {}); + console.log('itemids', itemIds); - remoteDb - .doc(`users/${window.user.uid}`) - .get() - .then(doc => { - return doc.data().items; - }) - .then(itemIdsObj => { - var itemIds = Object.getOwnPropertyNames(itemIdsObj || {}); - console.log('itemids', itemIds); + if (!itemIds.length) { + d.resolve([]); + } - if (!itemIds.length) { - d.resolve([]); + const items = []; + for (let i = 0; i < itemIds.length; i++) { + const id = itemIds[i]; + utils.log('Starting to fetch item ', id); + this.getItem(id).then(item => { + items.push(item); + // Check if we have all items now. + if (itemIds.length === items.length) { + d.resolve(items); } - - var items = []; - for (let i = 0; i < itemIds.length; i++) { - const id = itemIds[i]; - utils.log('Starting to fetch item ', id); - this.getItem(id).then(item => { - items.push(item); - // Check if we have all items now. - if (itemIds.length === items.length) { - d.resolve(items); - } - }); - } - return items; }); + } return d.promise; }, @@ -83,7 +84,20 @@ }, async setItemForUser(itemId) { - var remoteDb = await window.db.getDb(); + if (window.IS_EXTENSION) { + return window.db.local.get( + { + items: {} + }, + function(result) { + result.items[itemId] = true; + window.db.local.set({ + items: result.items + }); + } + ); + } + const remoteDb = await window.db.getDb(); return remoteDb .collection('users') .doc(window.user.uid) diff --git a/src/script.js b/src/script.js index 905b3f7..8a75386 100644 --- a/src/script.js +++ b/src/script.js @@ -19,6 +19,28 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal window.scope = scope; } + const defaultSettings = { + preserveLastCode: true, + replaceNewTab: false, + htmlMode: 'html', + jsMode: 'js', + cssMode: 'css', + isCodeBlastOn: false, + indentWith: 'spaces', + indentSize: 2, + editorTheme: 'monokai', + keymap: 'sublime', + fontSize: 16, + refreshOnResize: false, + autoPreview: true, + editorFont: 'FiraCode', + editorCustomFont: '', + autoSave: true, + autoComplete: true, + preserveConsoleLogs: true, + lightVersion: false, + lineWrap: true + }; var HtmlModes = { HTML: 'html', MARKDOWN: 'markdown', @@ -301,8 +323,9 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal function saveSetting(setting, value) { const d = deferred(); - var obj = {}; - obj[setting] = value; + const obj = { + [setting]: value + }; db.local.set(obj, d.resolve); return d.promise; } @@ -323,21 +346,7 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal }); // Push into the items hash if its a new item being saved if (isNewItem) { - if (!window.IS_EXTENSION) { - itemService.setItemForUser(currentItem.id); - return; - } - db.local.get( - { - items: {} - }, - function(result) { - result.items[currentItem.id] = true; - db.local.set({ - items: result.items - }); - } - ); + itemService.setItemForUser(currentItem.id); } } @@ -1716,6 +1725,18 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal db.sync.set(obj, function() { alertsService.add('Setting saved'); }); + window.db.getDb(remoteDb => { + remoteDb + .collection('users') + .doc(window.user.uid) + .update({ + [`settings.${settingName}`]: prefs[settingName] + }) + .then(arg => { + console.log(`Setting "${settingName}" for user`, arg); + }) + .catch(error => console.log(error)); + }); trackEvent('ui', 'updatePref-' + settingName, prefs[settingName]); } @@ -2006,6 +2027,17 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal }; scope.login = function(e) { + firebase.auth().signInAnonymously().then().catch(function(error) { + // Handle Errors here. + utils.log(error); + }); + + if (e) { + e.preventDefault(); + } + }; + + function init() { var config = { apiKey: 'AIzaSyBl8Dz7ZOE7aP75mipYl2zKdLSRzBU2fFc', authDomain: 'web-maker-app.firebaseapp.com', @@ -2018,30 +2050,18 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal firebase.auth().onAuthStateChanged(function(user) { if (user) { - utils.log(user); + utils.log('You are -> ', user); scope.user = window.user = user; - // itemService.setUser(); - // ... + window.db.getUser(user.uid).then(() => { + Object.assign(prefs, user.settings); + updateSettingsInUi(); + scope.updateSetting(); + }); } else { // User is signed out. - // ... } - // ... }); - firebase.auth().signInAnonymously().then().catch(function(error) { - // Handle Errors here. - utils.log(error); - }); - - if (e) { - e.preventDefault(); - } - }; - - function init() { - scope.login(); - var lastCode; CodeMirror.modeURL = `lib/codemirror/mode/%N/%N.js`; @@ -2376,71 +2396,28 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal ); // Get synced `preserveLastCode` setting to get back last code (or not). - db.sync.get( - { - preserveLastCode: true, - replaceNewTab: false, - htmlMode: 'html', - jsMode: 'js', - cssMode: 'css', - isCodeBlastOn: false, - indentWith: 'spaces', - indentSize: 2, - editorTheme: 'monokai', - keymap: 'sublime', - fontSize: 16, - refreshOnResize: false, - autoPreview: true, - editorFont: 'FiraCode', - editorCustomFont: '', - autoSave: true, - autoComplete: true, - preserveConsoleLogs: true, - lightVersion: false, - lineWrap: true - }, - function syncGetCallback(result) { - if (result.preserveLastCode && lastCode) { - unsavedEditCount = 0; - if (lastCode.id) { - db.local.get(lastCode.id, function(itemResult) { - utils.log('Load item ', lastCode.id); - currentItem = itemResult[lastCode.id]; - refreshEditor(); - }); - } else { - utils.log('Load last unsaved item', lastCode); - currentItem = lastCode; + db.sync.get(defaultSettings, function syncGetCallback(result) { + if (result.preserveLastCode && lastCode) { + unsavedEditCount = 0; + if (lastCode.id) { + db.local.get(lastCode.id, function(itemResult) { + utils.log('Load item ', lastCode.id); + currentItem = itemResult[lastCode.id]; refreshEditor(); - } + }); } else { - createNewItem(); + utils.log('Load last unsaved item', lastCode); + currentItem = lastCode; + refreshEditor(); } - prefs.preserveLastCode = result.preserveLastCode; - prefs.replaceNewTab = result.replaceNewTab; - prefs.htmlMode = result.htmlMode; - prefs.cssMode = result.cssMode; - prefs.jsMode = result.jsMode; - prefs.isCodeBlastOn = result.isCodeBlastOn; - prefs.indentSize = result.indentSize; - prefs.indentWith = result.indentWith; - prefs.editorTheme = result.editorTheme; - prefs.keymap = result.keymap; - prefs.fontSize = result.fontSize; - prefs.refreshOnResize = result.refreshOnResize; - prefs.autoPreview = result.autoPreview; - prefs.editorFont = result.editorFont; - prefs.editorCustomFont = result.editorCustomFont; - prefs.autoSave = result.autoSave; - prefs.autoComplete = result.autoComplete; - prefs.preserveConsoleLogs = result.preserveConsoleLogs; - prefs.lightVersion = result.lightVersion; - prefs.lineWrap = result.lineWrap; - - updateSettingsInUi(); - scope.updateSetting(); + } else { + createNewItem(); } - ); + Object.assign(prefs, result); + + updateSettingsInUi(); + scope.updateSetting(); + }); // Check for new version notifications db.sync.get(