1
0
mirror of https://github.com/chinchang/web-maker.git synced 2025-07-13 01:56:24 +02:00

port settings code to new db and refactors here n there

This commit is contained in:
Kushagra Gour
2018-01-08 00:11:24 +05:30
parent 3fe9f3f346
commit 97097f16c3
3 changed files with 128 additions and 127 deletions

View File

@ -8,11 +8,12 @@
if (dbPromise) { if (dbPromise) {
return dbPromise; return dbPromise;
} }
utils.log('Initializing firestore');
dbPromise = new Promise((resolve, reject) => { dbPromise = new Promise((resolve, reject) => {
if (db) { if (db) {
return resolve(db); return resolve(db);
} }
firebase return firebase
.firestore() .firestore()
.enablePersistence() .enablePersistence()
.then(function() { .then(function() {
@ -37,6 +38,14 @@
return dbPromise; 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 = { var local = {
get: (obj, cb) => { get: (obj, cb) => {
const retVal = {}; const retVal = {};
@ -58,13 +67,14 @@
}); });
setTimeout(() => { setTimeout(() => {
if (cb) { if (cb) {
cb(); return cb();
} }
}, FAUX_DELAY); }, FAUX_DELAY);
} }
}; };
window.db = { window.db = {
getDb, getDb,
getUser,
local: chrome && chrome.storage ? chrome.storage.local : local, local: chrome && chrome.storage ? chrome.storage.local : local,
sync: chrome && chrome.storage ? chrome.storage.sync : local sync: chrome && chrome.storage ? chrome.storage.sync : local
}; };

View File

@ -1,44 +1,45 @@
(() => { (() => {
window.itemService = { window.itemService = {
async getItem(id) { async getItem(id) {
var db = await window.db.getDb(); var remoteDb = await window.db.getDb();
return db.doc(`items/${id}`).get().then(doc => { return remoteDb.doc(`items/${id}`).get().then(doc => {
return doc.data(); 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() { async getAllItems() {
var d = deferred(); var d = deferred();
var remoteDb = await window.db.getDb(); let itemIds = await this.getUserItemIds();
itemIds = Object.getOwnPropertyNames(itemIds || {});
console.log('itemids', itemIds);
remoteDb if (!itemIds.length) {
.doc(`users/${window.user.uid}`) d.resolve([]);
.get() }
.then(doc => {
return doc.data().items;
})
.then(itemIdsObj => {
var itemIds = Object.getOwnPropertyNames(itemIdsObj || {});
console.log('itemids', itemIds);
if (!itemIds.length) { const items = [];
d.resolve([]); 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; return d.promise;
}, },
@ -83,7 +84,20 @@
}, },
async setItemForUser(itemId) { 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 return remoteDb
.collection('users') .collection('users')
.doc(window.user.uid) .doc(window.user.uid)

View File

@ -19,6 +19,28 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
window.scope = scope; 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 = { var HtmlModes = {
HTML: 'html', HTML: 'html',
MARKDOWN: 'markdown', MARKDOWN: 'markdown',
@ -301,8 +323,9 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
function saveSetting(setting, value) { function saveSetting(setting, value) {
const d = deferred(); const d = deferred();
var obj = {}; const obj = {
obj[setting] = value; [setting]: value
};
db.local.set(obj, d.resolve); db.local.set(obj, d.resolve);
return d.promise; return d.promise;
} }
@ -323,21 +346,7 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
}); });
// Push into the items hash if its a new item being saved // Push into the items hash if its a new item being saved
if (isNewItem) { if (isNewItem) {
if (!window.IS_EXTENSION) { itemService.setItemForUser(currentItem.id);
itemService.setItemForUser(currentItem.id);
return;
}
db.local.get(
{
items: {}
},
function(result) {
result.items[currentItem.id] = true;
db.local.set({
items: result.items
});
}
);
} }
} }
@ -1716,6 +1725,18 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
db.sync.set(obj, function() { db.sync.set(obj, function() {
alertsService.add('Setting saved'); 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]); trackEvent('ui', 'updatePref-' + settingName, prefs[settingName]);
} }
@ -2006,6 +2027,17 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
}; };
scope.login = function(e) { 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 = { var config = {
apiKey: 'AIzaSyBl8Dz7ZOE7aP75mipYl2zKdLSRzBU2fFc', apiKey: 'AIzaSyBl8Dz7ZOE7aP75mipYl2zKdLSRzBU2fFc',
authDomain: 'web-maker-app.firebaseapp.com', authDomain: 'web-maker-app.firebaseapp.com',
@ -2018,30 +2050,18 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
firebase.auth().onAuthStateChanged(function(user) { firebase.auth().onAuthStateChanged(function(user) {
if (user) { if (user) {
utils.log(user); utils.log('You are -> ', user);
scope.user = window.user = user; scope.user = window.user = user;
// itemService.setUser(); window.db.getUser(user.uid).then(() => {
// ... Object.assign(prefs, user.settings);
updateSettingsInUi();
scope.updateSetting();
});
} else { } else {
// User is signed out. // 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; var lastCode;
CodeMirror.modeURL = `lib/codemirror/mode/%N/%N.js`; 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). // Get synced `preserveLastCode` setting to get back last code (or not).
db.sync.get( db.sync.get(defaultSettings, function syncGetCallback(result) {
{ if (result.preserveLastCode && lastCode) {
preserveLastCode: true, unsavedEditCount = 0;
replaceNewTab: false, if (lastCode.id) {
htmlMode: 'html', db.local.get(lastCode.id, function(itemResult) {
jsMode: 'js', utils.log('Load item ', lastCode.id);
cssMode: 'css', currentItem = itemResult[lastCode.id];
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;
refreshEditor(); refreshEditor();
} });
} else { } else {
createNewItem(); utils.log('Load last unsaved item', lastCode);
currentItem = lastCode;
refreshEditor();
} }
prefs.preserveLastCode = result.preserveLastCode; } else {
prefs.replaceNewTab = result.replaceNewTab; createNewItem();
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();
} }
); Object.assign(prefs, result);
updateSettingsInUi();
scope.updateSetting();
});
// Check for new version notifications // Check for new version notifications
db.sync.get( db.sync.get(