Skip to content

Commit 6baa083

Browse files
committed
Fix for versioning and updating
Check if the version is major, minor or patch and keep settings accordingly. Major = reset settings && show changelog && persist new version Major = show changelog && persist new version Patch = persist new version
1 parent 4281758 commit 6baa083

File tree

1 file changed

+58
-60
lines changed

1 file changed

+58
-60
lines changed

src/factories/ChromeFactory.js

+58-60
Original file line numberDiff line numberDiff line change
@@ -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-Za-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

Comments
 (0)