@@ -153,34 +153,75 @@ angular.module('cardboard.factories')
153153 settings = DefaultSettings ;
154154 settings . status = "new" ;
155155 }
156-
157- // We compare versions. If new version we update the settings
158- else if ( storage . version && isNewerVersion ( info . version , storage . version ) ) {
159- Chrome . cache . clearAsync ( ) ;
160- Chrome . storage . clearAsync ( ) . then ( function ( ) {
161- Chrome . storage . setAsync ( DefaultSettings ) ;
162- } ) ;
163- settings = DefaultSettings ;
164- settings . status = "updated" ;
156+ // Else we compare versions (new, old)
157+ else {
158+ var v = semver ( info . version , storage . version ) ;
159+
160+ // If new major version we update/reset the settings
161+ if ( v . isNew == true ) {
162+ if ( v . release == "major" ) {
163+ Chrome . cache . clearAsync ( ) ;
164+ Chrome . storage . clearAsync ( ) . then ( function ( ) {
165+ Chrome . storage . setAsync ( DefaultSettings ) ;
166+ } ) ;
167+ settings = DefaultSettings ;
168+ }
169+ else
170+ settings = storage ;
171+
172+ // Persist the new version in storage and settings
173+ Chrome . storage . setAsync ( { version : info . version } ) ;
174+ settings . version = info . version ;
175+
176+ if ( v . release != "patch" )
177+ settings . status = "updated" ;
178+ }
179+ // If not new or minor version settings are the one saved in storage
180+ else {
181+ settings = storage ;
182+ delete settings . status ;
183+ }
165184 }
166185
167- // If nothing special settings are the one saved in storage
168- else
169- settings = storage ;
170-
171186 return [ settings , cache , settings . status ] ;
172187 } ) ;
173188
174189 return Chrome ;
175190
176191} ] ) ;
177192
178- function isNewerVersion ( newVersion , oldVersion ) {
179- // if version is not even a string we know it's a new version
193+ function semver ( newVersion , oldVersion ) {
194+ // if version is not even a string we know it's a new major version
180195 if ( typeof oldVersion !== 'string' )
181- return true ;
196+ return { isNew : true , release : "major" } ;
182197
183- return versionCompare ( newVersion , oldVersion ) > 0 ;
198+ var result = {
199+ isNew : false
200+ } ;
201+
202+ var newV = newVersion . split ( '.' ) ;
203+ var oldV = oldVersion . split ( '.' ) ;
204+
205+ for ( var i in newV ) {
206+ // if number is greater it's a new version
207+ if ( newV [ i ] > oldV [ i ] ) {
208+ result . isNew = true ;
209+
210+ // if it's the first iteration it's a major
211+ if ( i == 0 )
212+ result . release = "major" ;
213+ // if it's the second iteration it's a minor
214+ else if ( i == 1 )
215+ result . release = "minor" ;
216+ // if it's the third or more iteration it's a patch
217+ else
218+ result . release = "patch" ;
219+ // we can stop here
220+ break ;
221+ }
222+ }
223+
224+ return result ;
184225}
185226
186227// see https://github.com/petkaantonov/bluebird/blob/master/API.md#option-promisifier
@@ -236,46 +277,3 @@ function isNestedAPI(api){
236277 return true ;
237278 return false ;
238279}
239-
240-
241- // from https://gist.github.com/TheDistantSea/8021359
242- function versionCompare ( v1 , v2 , options ) {
243- var lexicographical = options && options . lexicographical ,
244- zeroExtend = options && options . zeroExtend ,
245- v1parts = v1 . split ( '.' ) ,
246- v2parts = v2 . split ( '.' ) ;
247-
248- function isValidPart ( x ) {
249- return ( lexicographical ? / ^ \d + [ A - Z a - z ] * $ / : / ^ \d + $ / ) . test ( x ) ;
250- }
251-
252- if ( ! v1parts . every ( isValidPart ) || ! v2parts . every ( isValidPart ) )
253- return NaN ;
254-
255- if ( zeroExtend ) {
256- while ( v1parts . length < v2parts . length ) v1parts . push ( "0" ) ;
257- while ( v2parts . length < v1parts . length ) v2parts . push ( "0" ) ;
258- }
259-
260- if ( ! lexicographical ) {
261- v1parts = v1parts . map ( Number ) ;
262- v2parts = v2parts . map ( Number ) ;
263- }
264-
265- for ( var i = 0 ; i < v1parts . length ; ++ i ) {
266- if ( v2parts . length == i )
267- return 1 ;
268-
269- if ( v1parts [ i ] == v2parts [ i ] )
270- continue ;
271- else if ( v1parts [ i ] > v2parts [ i ] )
272- return 1 ;
273- else
274- return - 1 ;
275- }
276-
277- if ( v1parts . length != v2parts . length )
278- return - 1 ;
279-
280- return 0 ;
281- }
0 commit comments