Skip to content

Commit e1dcb9a

Browse files
committed
Fixed bug in bookmarks.isSeparator where error occurs with titleless bookmarks.
If error occurs when creating local bookmarks, process is now cancelled preventing further bookmarks being created. If error occurs when populating local bookmarks during sync, synced data is no longer updated. Restore form is now displayed during restore process.
1 parent 56749a1 commit e1dcb9a

File tree

4 files changed

+83
-50
lines changed

4 files changed

+83
-50
lines changed

js/app.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,10 @@ xBrowserSync.App.Controller = function ($scope, $q, $timeout, platform, globals,
281281
return;
282282
}
283283

284+
// Hide restore confirmation
285+
vm.settings.displayRestoreConfirmation = false;
286+
vm.settings.displayRestoreForm = true;
287+
284288
// Start restore
285289
restoreData(JSON.parse(vm.settings.dataToRestore));
286290
};
@@ -837,7 +841,7 @@ xBrowserSync.App.Controller = function ($scope, $q, $timeout, platform, globals,
837841
var syncId = data[1][globals.CacheKeys.SyncId];
838842
var serviceUrl = data[2];
839843
var backupData = utility.CreateBackupData(bookmarksData, syncEnabled ? syncId : null, syncEnabled ? serviceUrl : null);
840-
844+
841845
// Beautify json and download data
842846
var beautifiedJson = JSON.stringify(backupData, null, 2);
843847
platform.DownloadFile(utility.GetBackupFileName(), beautifiedJson, 'backupLink');
@@ -1335,7 +1339,6 @@ xBrowserSync.App.Controller = function ($scope, $q, $timeout, platform, globals,
13351339
.then(displayDataUsage)
13361340
.then(function () {
13371341
vm.settings.displayRestoreForm = false;
1338-
vm.settings.displayRestoreConfirmation = false;
13391342
vm.settings.dataToRestore = '';
13401343
vm.settings.restoreCompletedMessage = platform.GetConstant(globals.Constants.Settings_BackupRestore_RestoreSuccess_Message);
13411344

@@ -1802,7 +1805,7 @@ xBrowserSync.App.Controller = function ($scope, $q, $timeout, platform, globals,
18021805
});
18031806
$timeout(setNewTabLinks);
18041807
}
1805-
1808+
18061809
vm.settings.service.status = serviceInfo.status;
18071810
vm.settings.service.statusMessage = message;
18081811
vm.settings.service.maxSyncSize = serviceInfo.maxSyncSize / 1024;

js/bookmarks.js

+14-10
Original file line numberDiff line numberDiff line change
@@ -312,9 +312,12 @@ xBrowserSync.App.Bookmarks = function ($q, $timeout, platform, globals, api, uti
312312
// or type is separator (in FF)
313313
var separatorRegex = new RegExp('^[-─]{1,}$');
314314
return bookmark.type === 'separator' ||
315-
((separatorRegex.test(bookmark.title) || bookmark.title.indexOf(globals.Bookmarks.HorizontalSeparatorTitle) >= 0 || bookmark.title === globals.Bookmarks.VerticalSeparatorTitle) &&
315+
bookmark.title && (
316+
(separatorRegex.test(bookmark.title) || bookmark.title.indexOf(globals.Bookmarks.HorizontalSeparatorTitle) >= 0 ||
317+
bookmark.title === globals.Bookmarks.VerticalSeparatorTitle) &&
316318
(!bookmark.url || bookmark.url === platform.GetNewTabUrl()) &&
317-
(!bookmark.children || bookmark.children.length === 0));
319+
(!bookmark.children || bookmark.children.length === 0)
320+
);
318321
};
319322

320323
var queueSync = function (syncData) {
@@ -952,18 +955,19 @@ xBrowserSync.App.Bookmarks = function ($q, $timeout, platform, globals, api, uti
952955
// Update cached bookmarks
953956
return updateCache(bookmarks, encryptedBookmarks)
954957
.then(function () {
955-
// Sync provided bookmarks and set local bookmarks
956-
return $q.all([
957-
api.UpdateBookmarks(encryptedBookmarks),
958-
syncData.command === globals.Commands.RestoreBookmarks ?
959-
refreshLocalBookmarks(bookmarks) :
960-
updateLocalBookmarks(updateLocalBookmarksInfo)
961-
]);
958+
// Update local bookmarks
959+
return syncData.command === globals.Commands.RestoreBookmarks ?
960+
refreshLocalBookmarks(bookmarks) :
961+
updateLocalBookmarks(updateLocalBookmarksInfo)
962+
})
963+
.then(function () {
964+
// Update synced bookmarks
965+
return api.UpdateBookmarks(encryptedBookmarks);
962966
});
963967
})
964968
.then(function (data) {
965969
// Update cached last updated date and return decrypted bookmarks
966-
return platform.LocalStorage.Set(globals.CacheKeys.LastUpdated, data[0].lastUpdated)
970+
return platform.LocalStorage.Set(globals.CacheKeys.LastUpdated, data.lastUpdated)
967971
.then(function () {
968972
return bookmarks;
969973
});

platform/chrome/js/platformImplementation.js

+31-18
Original file line numberDiff line numberDiff line change
@@ -1175,24 +1175,37 @@ xBrowserSync.App.PlatformImplementation = function ($interval, $q, $timeout, pla
11751175
};
11761176

11771177
var createLocalBookmarksFromXBookmarks = function (parentId, xBookmarks, localToolbarContainerId) {
1178-
var createChildBookmarksPromises = [];
1179-
1180-
// Create bookmarks at the top level of the supplied array
1181-
return xBookmarks.reduce(function (p, xBookmark) {
1182-
return p.then(function () {
1183-
return bookmarks.IsSeparator(xBookmark) ?
1184-
createLocalSeparator(parentId, localToolbarContainerId) : createLocalBookmark(parentId, xBookmark.title, xBookmark.url)
1185-
.then(function (newLocalBookmark) {
1186-
// If the bookmark has children, recurse
1187-
if (xBookmark.children && xBookmark.children.length > 0) {
1188-
createChildBookmarksPromises.push(createLocalBookmarksFromXBookmarks(newLocalBookmark.id, xBookmark.children), localToolbarContainerId);
1189-
}
1190-
});
1191-
});
1192-
}, $q.resolve())
1193-
.then(function () {
1194-
return $q.all(createChildBookmarksPromises);
1195-
});
1178+
var processError;
1179+
var createRecursive = function (parentId, xBookmarks, localToolbarContainerId) {
1180+
var createChildBookmarksPromises = [];
1181+
1182+
// Create bookmarks at the top level of the supplied array
1183+
return xBookmarks.reduce(function (p, xBookmark) {
1184+
return p.then(function () {
1185+
// If an error occurred during the recursive process, prevent any more bookmarks being created
1186+
if (processError) {
1187+
return $q.resolve();
1188+
}
1189+
1190+
return bookmarks.IsSeparator(xBookmark) ?
1191+
createLocalSeparator(parentId, localToolbarContainerId) : createLocalBookmark(parentId, xBookmark.title, xBookmark.url)
1192+
.then(function (newLocalBookmark) {
1193+
// If the bookmark has children, recurse
1194+
if (xBookmark.children && xBookmark.children.length > 0) {
1195+
createChildBookmarksPromises.push(createRecursive(newLocalBookmark.id, xBookmark.children, localToolbarContainerId));
1196+
}
1197+
});
1198+
});
1199+
}, $q.resolve())
1200+
.then(function () {
1201+
return $q.all(createChildBookmarksPromises);
1202+
})
1203+
.catch(function (err) {
1204+
processError = err;
1205+
throw err;
1206+
});
1207+
};
1208+
return createRecursive(parentId, xBookmarks, localToolbarContainerId);
11961209
};
11971210

11981211
var createLocalSeparator = function (parentId, localToolbarContainerId) {

platform/firefox/js/platformImplementation.js

+32-19
Original file line numberDiff line numberDiff line change
@@ -1079,25 +1079,38 @@ xBrowserSync.App.PlatformImplementation = function ($interval, $q, $timeout, pla
10791079
});
10801080
};
10811081

1082-
var createLocalBookmarksFromXBookmarks = function (parentId, xBookmarks) {
1083-
var createChildBookmarksPromises = [];
1084-
1085-
// Create bookmarks at the top level of the supplied array
1086-
return xBookmarks.reduce(function (p, xBookmark) {
1087-
return p.then(function () {
1088-
return bookmarks.IsSeparator(xBookmark) ?
1089-
createLocalSeparator(parentId) : createLocalBookmark(parentId, xBookmark.title, xBookmark.url)
1090-
.then(function (newLocalBookmark) {
1091-
// If the bookmark has children, recurse
1092-
if (xBookmark.children && xBookmark.children.length > 0) {
1093-
createChildBookmarksPromises.push(createLocalBookmarksFromXBookmarks(newLocalBookmark.id, xBookmark.children));
1094-
}
1095-
});
1096-
});
1097-
}, $q.resolve())
1098-
.then(function () {
1099-
return $q.all(createChildBookmarksPromises);
1100-
});
1082+
var createLocalBookmarksFromXBookmarks = function (parentId, xBookmarks, localToolbarContainerId) {
1083+
var processError;
1084+
var createRecursive = function (parentId, xBookmarks, localToolbarContainerId) {
1085+
var createChildBookmarksPromises = [];
1086+
1087+
// Create bookmarks at the top level of the supplied array
1088+
return xBookmarks.reduce(function (p, xBookmark) {
1089+
return p.then(function () {
1090+
// If an error occurred during the recursive process, prevent any more bookmarks being created
1091+
if (processError) {
1092+
return $q.resolve();
1093+
}
1094+
1095+
return bookmarks.IsSeparator(xBookmark) ?
1096+
createLocalSeparator(parentId, localToolbarContainerId) : createLocalBookmark(parentId, xBookmark.title, xBookmark.url)
1097+
.then(function (newLocalBookmark) {
1098+
// If the bookmark has children, recurse
1099+
if (xBookmark.children && xBookmark.children.length > 0) {
1100+
createChildBookmarksPromises.push(createRecursive(newLocalBookmark.id, xBookmark.children, localToolbarContainerId));
1101+
}
1102+
});
1103+
});
1104+
}, $q.resolve())
1105+
.then(function () {
1106+
return $q.all(createChildBookmarksPromises);
1107+
})
1108+
.catch(function (err) {
1109+
processError = err;
1110+
throw err;
1111+
});
1112+
};
1113+
return createRecursive(parentId, xBookmarks, localToolbarContainerId);
11011114
};
11021115

11031116
var createLocalSeparator = function (parentId) {

0 commit comments

Comments
 (0)