Rewrite 'Preferences' to make it async

This commit is contained in:
Jonas Jenwald 2014-03-16 22:33:39 +01:00
parent bd11111465
commit c920372ff2
3 changed files with 173 additions and 92 deletions

View file

@ -140,6 +140,8 @@ var PDFView = {
this.watchScroll(thumbnailContainer, this.thumbnailViewScroll,
this.renderHighestPriority.bind(this));
Preferences.initialize();
PDFFindBar.initialize({
bar: document.getElementById('findbar'),
toggleButton: document.getElementById('viewFind'),
@ -583,6 +585,9 @@ var PDFView = {
pdfDataRangeTransport, args) {
if (this.pdfDocument) {
this.close();
// Reload the preferences if a document was previously opened.
Preferences.reload();
}
var parameters = {password: password};
@ -904,7 +909,6 @@ var PDFView = {
mozL10n.get('page_of', {pageCount: pagesCount}, 'of {{pageCount}}');
document.getElementById('pageNumber').max = pagesCount;
var prefs = PDFView.prefs = new Preferences();
PDFView.documentFingerprint = id;
var store = PDFView.store = new ViewHistory(id);
@ -973,15 +977,26 @@ var PDFView = {
PDFView.loadingBar.setWidth(container);
PDFFindController.resolveFirstPage();
// Initialize the browsing history.
PDFHistory.initialize(self.documentFingerprint);
});
var prefsPromise = prefs.initializedPromise;
var storePromise = store.initializedPromise;
Promise.all([firstPagePromise, prefsPromise, storePromise]).
then(function() {
var showPreviousViewOnLoad = prefs.get('showPreviousViewOnLoad');
var defaultZoomValue = prefs.get('defaultZoomValue');
// Fetch the necessary preference values.
var showPreviousViewOnLoad;
var showPreviousViewOnLoadPromise =
Preferences.get('showPreviousViewOnLoad').then(function (prefValue) {
showPreviousViewOnLoad = prefValue;
});
var defaultZoomValue;
var defaultZoomValuePromise =
Preferences.get('defaultZoomValue').then(function (prefValue) {
defaultZoomValue = prefValue;
});
var storePromise = store.initializedPromise;
Promise.all([firstPagePromise, storePromise, showPreviousViewOnLoadPromise,
defaultZoomValuePromise]).then(function resolved() {
var storedHash = null;
if (showPreviousViewOnLoad && store.get('exists', false)) {
var pageNum = store.get('page', '1');
@ -994,9 +1009,6 @@ var PDFView = {
} else if (defaultZoomValue) {
storedHash = 'page=1&zoom=' + defaultZoomValue;
}
// Initialize the browsing history.
PDFHistory.initialize(self.documentFingerprint);
self.setInitialView(storedHash, scale);
// Make all navigation keys work on document load,
@ -1007,6 +1019,12 @@ var PDFView = {
// self.container.blur();
//#endif
}
}, function rejected(errorMsg) {
console.error(errorMsg);
firstPagePromise.then(function () {
self.setInitialView(null, scale);
});
});
pagesPromise.then(function() {
@ -1045,11 +1063,16 @@ var PDFView = {
self.outline = new DocumentOutlineView(outline);
document.getElementById('viewOutline').disabled = !outline;
if (outline && prefs.get('ifAvailableShowOutlineOnLoad')) {
if (!self.sidebarOpen) {
document.getElementById('sidebarToggle').click();
}
self.switchSidebarView('outline');
if (outline) {
Preferences.get('ifAvailableShowOutlineOnLoad').then(
function (prefValue) {
if (prefValue) {
if (!self.sidebarOpen) {
document.getElementById('sidebarToggle').click();
}
self.switchSidebarView('outline');
}
});
}
});
});