1
0
mirror of https://github.com/chinchang/web-maker.git synced 2025-05-08 19:45:17 +02:00

port merge items code to new db

This commit is contained in:
Kushagra Gour 2018-01-08 01:39:18 +05:30
parent 97097f16c3
commit 71141ec934

View File

@ -1431,10 +1431,56 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
e.preventDefault();
};
/**
* Saves the passed items in the database.
* @param {Array} items to be saved in DB
*/
function saveItemsToBeMerged(items) {
var d = deferred();
if (window.IS_EXTENSION) {
// save new items
db.local.set(items, d.resolve);
// Push in new item IDs
db.local.get(
{
items: {}
},
function(result) {
/* eslint-disable guard-for-in */
for (var id in items) {
result.items[id] = true;
}
db.local.set({
items: result.items
});
/* eslint-enable guard-for-in */
}
);
} else {
window.db.getDb().then(remoteDb => {
const batch = remoteDb.batch();
/* eslint-disable guard-for-in */
for (var id in items) {
batch.set(remoteDb.doc(`items/${id}`), items[id]);
batch.update(remoteDb.doc(`users/${window.user.uid}`), {
[`items.${id}`]: true
});
// Set these items on out cached user object too
window.user.items[id] = true;
}
batch.commit().then(d.resolve);
/* eslint-enable guard-for-in */
});
}
return d.promise;
}
function mergeImportedItems(items) {
var existingItemIds = [];
var toMergeItems = {};
items.forEach(item => {
// We can access `savedItems` here because this gets set when user
// opens the saved creations panel. And import option is available
// inside the saved items panel.
if (savedItems[item.id]) {
// Item already exists
existingItemIds.push(item.id);
@ -1458,31 +1504,12 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
}
}
if (mergedItemCount) {
// save new items
db.local.set(toMergeItems, function() {
saveItemsToBeMerged(toMergeItems).then(() => {
alertsService.add(
mergedItemCount + ' creations imported successfully.'
);
trackEvent('fn', 'itemsImported', mergedItemCount);
});
// Push in new item IDs
db.local.get(
{
items: {}
},
function(result) {
/* eslint-disable guard-for-in */
for (var id in toMergeItems) {
result.items[id] = true;
}
db.local.set({
items: result.items
});
trackEvent('fn', 'itemsImported', mergedItemCount);
/* eslint-enable guard-for-in */
}
);
alertsService.add(mergedItemCount + ' creations imported successfully.');
}
// FIXME: Move from here
toggleSavedItemsPane(false);
@ -1501,7 +1528,8 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
items = JSON.parse(progressEvent.target.result);
utils.log(items);
mergeImportedItems(items);
} catch (ex) {
} catch (exception) {
utils.log(exception);
alert(
'Oops! Selected file is corrupted. Please select a file that was generated by clicking the "Export" button.'
);
@ -2439,22 +2467,8 @@ globalConsoleContainerEl, externalLibrarySearchInput, keyboardShortcutsModal
function() {}
);
// set some initial preferences on closing the onboard modal
utils.once(document, 'overlaysClosed', function() {
db.sync.set(
{
replaceNewTab: onboardShowInTabOptionBtn.classList.contains(
'selected'
)
},
function() {
trackEvent(
'fn',
'setReplaceNewTabFromOnboard',
onboardShowInTabOptionBtn.classList.contains('selected')
);
}
);
});
// Old onboarding.
// utils.once(document, 'overlaysClosed', function() {});
}
if (
!result.lastSeenVersion ||