diff --git a/web/viewer-snippet-b2g.html b/web/viewer-snippet-b2g.html index 86a09d255..be2c883bd 100644 --- a/web/viewer-snippet-b2g.html +++ b/web/viewer-snippet-b2g.html @@ -2,6 +2,7 @@ <link rel="resource" type="application/l10n" href="locale.properties"/> <script type="text/javascript" src="l10n.js"></script> <script type="text/javascript" src="../build/pdf.js"></script> +<script type="text/javascript" src="/shared/js/async_storage.js"></script> <script type="text/javascript"> // This specifies the location of the pdf.js file. PDFJS.workerSrc = "../build/pdf.js"; diff --git a/web/viewer.js b/web/viewer.js index e9de32196..f90eebb73 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -135,6 +135,7 @@ var ProgressBar = (function ProgressBarClosure() { // Settings Manager - This is a utility for saving settings // First we see if localStorage is available // If not, we use FUEL in FF +// Use asyncStorage for B2G var Settings = (function SettingsClosure() { var isLocalStorageEnabled = (function localStorageEnabledTest() { // Feature test as per http://diveintohtml5.info/storage.html @@ -149,39 +150,52 @@ var Settings = (function SettingsClosure() { })(); function Settings(fingerprint) { - var database = null; - var index; -//#if !(FIREFOX || MOZCENTRAL) - if (isLocalStorageEnabled) - database = localStorage.getItem('database') || '{}'; - else - return; -//#else -// database = FirefoxCom.requestSync('getDatabase', null) || '{}'; + this.fingerprint = fingerprint; + this.initializedPromise = new PDFJS.Promise(); + + var resolvePromise = (function settingsResolvePromise(db) { + this.initialize(db || '{}'); + this.initializedPromise.resolve(); + }).bind(this); + +//#if B2G +// asyncStorage.getItem('database', resolvePromise); //#endif - database = JSON.parse(database); - if (!('files' in database)) - database.files = []; - if (database.files.length >= kSettingsMemory) - database.files.shift(); - for (var i = 0, length = database.files.length; i < length; i++) { - var branch = database.files[i]; - if (branch.fingerprint == fingerprint) { - index = i; - break; - } - } - if (typeof index != 'number') - index = database.files.push({fingerprint: fingerprint}) - 1; - this.file = database.files[index]; - this.database = database; +//#if FIREFOX || MOZCENTRAL +// resolvePromise(FirefoxCom.requestSync('getDatabase', null)); +//#endif + +//#if !(FIREFOX || MOZCENTRAL || B2G) + if (isLocalStorageEnabled) + resolvePromise(localStorage.getItem('database')); +//#endif } Settings.prototype = { + initialize: function settingsInitialize(database) { + database = JSON.parse(database); + if (!('files' in database)) + database.files = []; + if (database.files.length >= kSettingsMemory) + database.files.shift(); + var index; + for (var i = 0, length = database.files.length; i < length; i++) { + var branch = database.files[i]; + if (branch.fingerprint == this.fingerprint) { + index = i; + break; + } + } + if (typeof index != 'number') + index = database.files.push({fingerprint: this.fingerprint}) - 1; + this.file = database.files[index]; + this.database = database; + }, + set: function settingsSet(name, val) { - if (!('file' in this)) - return false; + if (!this.initializedPromise.isResolved) + return; var file = this.file; file[name] = val; @@ -195,7 +209,7 @@ var Settings = (function SettingsClosure() { }, get: function settingsGet(name, defaultValue) { - if (!('file' in this)) + if (!this.initializedPromise.isResolved) return defaultValue; return this.file[name] || defaultValue; @@ -697,20 +711,12 @@ var PDFView = { var pagesCount = pdfDocument.numPages; var id = pdfDocument.fingerprint; - var storedHash = null; document.getElementById('numPages').textContent = mozL10n.get('page_of', {pageCount: pagesCount}, 'of {{pageCount}}'); document.getElementById('pageNumber').max = pagesCount; PDFView.documentFingerprint = id; var store = PDFView.store = new Settings(id); - if (store.get('exists', false)) { - var page = store.get('page', '1'); - var zoom = store.get('zoom', PDFView.currentScale); - var left = store.get('scrollLeft', '0'); - var top = store.get('scrollTop', '0'); - - storedHash = 'page=' + page + '&zoom=' + zoom + ',' + left + ',' + top; - } + var storePromise = store.initializedPromise; this.pageRotation = 0; @@ -747,11 +753,22 @@ var PDFView = { }); // outline and initial view depends on destinations and pagesRefMap - PDFJS.Promise.all([pagesPromise, destinationsPromise]).then(function() { + var promises = [pagesPromise, destinationsPromise, storePromise]; + PDFJS.Promise.all(promises).then(function() { pdfDocument.getOutline().then(function(outline) { self.outline = new DocumentOutlineView(outline); }); + var storedHash = null; + if (store.get('exists', false)) { + var page = store.get('page', '1'); + var zoom = store.get('zoom', PDFView.currentScale); + var left = store.get('scrollLeft', '0'); + var top = store.get('scrollTop', '0'); + + storedHash = 'page=' + page + '&zoom=' + zoom + ',' + left + ',' + top; + } + self.setInitialView(storedHash, scale); }); @@ -2198,11 +2215,13 @@ function updateViewarea() { pdfOpenParams += ',' + Math.round(topLeft[0]) + ',' + Math.round(topLeft[1]); var store = PDFView.store; - store.set('exists', true); - store.set('page', pageNumber); - store.set('zoom', normalizedScaleValue); - store.set('scrollLeft', Math.round(topLeft[0])); - store.set('scrollTop', Math.round(topLeft[1])); + store.initializedPromise.then(function() { + store.set('exists', true); + store.set('page', pageNumber); + store.set('zoom', normalizedScaleValue); + store.set('scrollLeft', Math.round(topLeft[0])); + store.set('scrollTop', Math.round(topLeft[1])); + }); var href = PDFView.getAnchorUrl(pdfOpenParams); document.getElementById('viewBookmark').href = href; }