From dacf6c3cff023f5508d09edde2e5432592abd6af Mon Sep 17 00:00:00 2001 From: Andy Gup Date: Fri, 15 Aug 2014 11:31:57 -0600 Subject: [PATCH] switched to deferred promises in _parseInMemFiles() --- lib/tpk/TPKLayer.js | 47 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/lib/tpk/TPKLayer.js b/lib/tpk/TPKLayer.js index ae82b1f..cf27c45 100644 --- a/lib/tpk/TPKLayer.js +++ b/lib/tpk/TPKLayer.js @@ -11,8 +11,9 @@ define([ "dojo/_base/declare","esri/geometry/Extent","dojo/query","esri/SpatialReference", "esri/layers/TileInfo","esri/layers/TiledMapServiceLayer","tiles/TilesStore","tiles/tilingScheme", - "tpk/zip","tpk/xml2json","tpk/autoCenterMap","dojo/Evented"], - function(declare,Extent,query,SpatialReference,TileInfo,TiledMapServiceLayer,TilesStore,TilingScheme,zip,X2JS,autoCenter,Evented){ + "tpk/zip","tpk/xml2json","tpk/autoCenterMap","dojo/Deferred","dojo/promise/all","dojo/Evented"], + function(declare,Extent,query,SpatialReference,TileInfo,TiledMapServiceLayer,TilesStore, + TilingScheme,zip,X2JS,autoCenter,Deferred,all,Evented){ return declare("esri.TPKLayer",[TiledMapServiceLayer,Evented],{ // @@ -232,12 +233,16 @@ define([ * @private */ _parseInMemFiles: function(files,callback){ + var inMemTilesLength = this._fileEntriesLength; this._zeroLengthFileCounter = 0; + var promises = []; for(var i=0;i < inMemTilesLength;i++){ - var name = files[i].filename.toLocaleUpperCase(); console.log("name: " + name) + var deferred = new Deferred(); + var name = files[i].filename.toLocaleUpperCase(); + var index = name.indexOf("_ALLLAYERS",0); if(index != -1){ this.TILE_PATH = name.slice(0,index); @@ -247,13 +252,33 @@ define([ var indexCDI = name.indexOf("CONF.CDI",0); var indexXML = name.indexOf("CONF.XML",0); + var indexBUNDLE = name.indexOf("BUNDLE",0); + var indexBUNDLX = name.indexOf("BUNDLX",0); + if(indexCDI != -1 || indexXML != -1){ - this._unzipConfFiles(files,i,callback); + this._unzipConfFiles(files,i,deferred,function(/* deferred */ d, /* token */ t){ console.log("CONF FILE") + d.resolve(t); + return d.promise; + }); + } + else if(indexBUNDLE != -1 || indexBUNDLX != -1){ + this._unzipTileFiles(files,i,deferred,function(/* deferred */ d, /* token */ t){ + d.resolve(t); + return d.promise; + }); } else{ - this._unzipTileFiles(files,i,callback); + deferred.resolve(i); } + promises.push(deferred); } + + all(promises).then( function(results) + { + callback && callback(results); + }); + + return promises; }, /** @@ -279,14 +304,14 @@ define([ * @param callback * @private */ - _unzipConfFiles: function(files,token,callback){ + _unzipConfFiles: function(files,token,deferred,callback){ files[token].getData(new zip.TextWriter(token),function(data){ this._inMemTilesIndex.push("blank"); var name = files[data.token].filename.toLocaleUpperCase(); this._inMemTilesObject[name]= data.string; var size = this.ObjectSize(this._inMemTilesObject); - if(size == this._fileEntriesLength - this._zeroLengthFileCounter - 1){ - callback(); + if(size > 0){ + callback(deferred,data.token); } }.bind(this)); }, @@ -298,7 +323,7 @@ define([ * @param callback * @private */ - _unzipTileFiles: function(files,token,callback){ + _unzipTileFiles: function(files,token,deferred,callback){ var that = this; files[token].getData(new zip.BlobWriter(token),function(data){ if(data.size != 0){ @@ -314,8 +339,8 @@ define([ var name = files[this.token].filename.toLocaleUpperCase(); that._inMemTilesObject[name]= this.result; var size = that.ObjectSize(that._inMemTilesObject); - if(size == that._fileEntriesLength - that._zeroLengthFileCounter - 1){ - callback(); + if(size > 0){ + callback(deferred,data.token); } } });