@@ -153,34 +153,75 @@ angular.module('cardboard.factories')
153
153
settings = DefaultSettings ;
154
154
settings . status = "new" ;
155
155
}
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
+ }
165
184
}
166
185
167
- // If nothing special settings are the one saved in storage
168
- else
169
- settings = storage ;
170
-
171
186
return [ settings , cache , settings . status ] ;
172
187
} ) ;
173
188
174
189
return Chrome ;
175
190
176
191
} ] ) ;
177
192
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
180
195
if ( typeof oldVersion !== 'string' )
181
- return true ;
196
+ return { isNew : true , release : "major" } ;
182
197
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 ;
184
225
}
185
226
186
227
// see https://github.com/petkaantonov/bluebird/blob/master/API.md#option-promisifier
@@ -236,46 +277,3 @@ function isNestedAPI(api){
236
277
return true ;
237
278
return false ;
238
279
}
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