Skip to content

Commit

Permalink
Merge pull request #97 from richardfrost/better_version_updates
Browse files Browse the repository at this point in the history
Better version updates
  • Loading branch information
richardfrost authored Aug 27, 2018
2 parents 8fb4fa0 + 1b1fab3 commit 41cde98
Show file tree
Hide file tree
Showing 7 changed files with 203 additions and 62 deletions.
66 changes: 38 additions & 28 deletions dist/eventPage.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { arrayContains } from './helper.js';
import { arrayContains, getVersion, isVersionOlder } from './helper.js';
import Config from './config.js';
import Domain from './domain.js';
////
Expand All @@ -22,7 +22,7 @@ chrome.runtime.onInstalled.addListener(function (details) {
// Open options page to show new features
// chrome.runtime.openOptionsPage();
// Run any data migrations on update
updateMigrations();
updateMigrations(details.previousVersion);
// Display update notification
chrome.notifications.create('extensionUpdate', {
'type': 'basic',
Expand Down Expand Up @@ -98,33 +98,43 @@ function toggleDomain(domain, key) {
Domain.domainMatch(domain, cfg[key]) ? enableDomain(cfg, domain, key) : disableDomain(cfg, domain, key);
});
}
function updateMigrations() {
// This will look at the version (from before the update) and perform data migrations if necessary
// Only append so the order stays the same (oldest first).
function updateMigrations(previousVersion) {
return __awaiter(this, void 0, void 0, function* () {
// [1.0.16] - Downcase and trim each word in the list (NOTE: This MAY result in losing some words)
let cfg = yield Config.build();
cfg.sanitizeWords();
cfg.save();
// // [1.0.13] - updateRemoveWordsFromStorage - transition from previous words structure under the hood
// Note: Not async function
// chrome.storage.sync.get({'words': null}, function(oldWords) {
// // console.log('Old words for migration:', oldWords.words);
// if (oldWords.words) {
// chrome.storage.sync.set({'_words0': oldWords.words}, function() {
// if (!chrome.runtime.lastError) {
// chrome.storage.sync.remove('words', function() {
// // Split words if necessary
// var wordsPromise = new Promise(function(resolve, reject) {
// resolve(Config.build());
// });
// wordsPromise
// .then(function(response: Config) {
// response.save();
// });
// });
// }
// });
// }
// });
let old = getVersion(previousVersion);
// let current = chrome.runtime.getManifest().version
// [1.0.13] - updateRemoveWordsFromStorage - transition from previous words structure under the hood
if (isVersionOlder(getVersion('1.0.13'), old)) {
console.log('not in herer');
// Note: using promise instead of async/await
chrome.storage.sync.get({ 'words': null }, function (oldWords) {
// console.log('Old words for migration:', oldWords.words);
if (oldWords.words) {
chrome.storage.sync.set({ '_words0': oldWords.words }, function () {
if (!chrome.runtime.lastError) {
chrome.storage.sync.remove('words', function () {
// Split words if necessary
var wordsPromise = new Promise(function (resolve, reject) {
resolve(Config.build());
});
wordsPromise
.then(function (response) {
response.save();
});
});
}
});
}
});
}
// [1.1.0] - Downcase and trim each word in the list (NOTE: This MAY result in losing some words)
if (isVersionOlder(getVersion('1.1.0'), old)) {
console.log('in version update');
let cfg = yield Config.build();
cfg.sanitizeWords();
cfg.save();
}
});
}
////
Expand Down
25 changes: 22 additions & 3 deletions dist/filter.bundle.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
////
//src/helper.ts
//
function arrayContains(array, element) {
return (array.indexOf(element) > -1);
}
Expand All @@ -22,6 +19,28 @@ function dynamicList(list, selectEm, title) {
}
document.getElementById(selectEm).innerHTML = options;
}
// /^\d+\.\d+\.\d+$/
function getVersion(version) {
let versionValues = version.split('.');
return {
major: parseInt(versionValues[0]),
minor: parseInt(versionValues[1]),
patch: parseInt(versionValues[2])
};
}
// Is the provided version lower than the minimum version?
function isVersionOlder(minimum, version) {
if (version.major < minimum.major) {
return true;
}
else if (version.major == minimum.major && version.minor < minimum.minor) {
return true;
}
else if (version.major == minimum.major && version.minor == minimum.minor && version.patch < minimum.patch) {
return true;
}
return false;
}
function removeFromArray(array, element) {
return array.filter(e => e !== element);
}
Expand Down
22 changes: 22 additions & 0 deletions dist/helper.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,28 @@ export function dynamicList(list, selectEm, title) {
}
document.getElementById(selectEm).innerHTML = options;
}
// /^\d+\.\d+\.\d+$/
export function getVersion(version) {
let versionValues = version.split('.');
return {
major: parseInt(versionValues[0]),
minor: parseInt(versionValues[1]),
patch: parseInt(versionValues[2])
};
}
// Is the provided version lower than the minimum version?
export function isVersionOlder(minimum, version) {
if (version.major < minimum.major) {
return true;
}
else if (version.major == minimum.major && version.minor < minimum.minor) {
return true;
}
else if (version.major == minimum.major && version.minor == minimum.minor && version.patch < minimum.patch) {
return true;
}
return false;
}
export function removeFromArray(array, element) {
return array.filter(e => e !== element);
}
2 changes: 2 additions & 0 deletions package.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@ const path = require('path');
const AdmZip = require('adm-zip');

function buildChromeExtension(zip) {
console.log('Building ./extension-chrome.zip');
// try { fs.unlinkSync('./dist/filter.js'); } catch {}; // Remove filter.js as its only used for testing
zip.deleteFile('filter.js'); // Remove filter.js as its only used for testing
zip.writeZip('./extension-chrome.zip');
}

// Firefox Extension
function buildFirefox(manifest, zip) {
console.log('Building ./extension-firefox.zip');
let firefoxManifest = {
"applications": {
"gecko": {
Expand Down
75 changes: 46 additions & 29 deletions src/eventPage.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
import { arrayContains } from './helper.js';
import { arrayContains, getVersion, isVersionOlder } from './helper.js';
import Config from './config.js';
import Domain from './domain.js';

interface Version {
major: number,
minor: number,
patch: number
}

////
// Actions and messaging

Expand All @@ -17,7 +23,7 @@ chrome.runtime.onInstalled.addListener(function(details){
// chrome.runtime.openOptionsPage();

// Run any data migrations on update
updateMigrations();
updateMigrations(details.previousVersion);

// Display update notification
chrome.notifications.create('extensionUpdate', {
Expand Down Expand Up @@ -89,33 +95,44 @@ async function toggleDomain(domain: string, key: string) {
Domain.domainMatch(domain, cfg[key]) ? enableDomain(cfg, domain, key) : disableDomain(cfg, domain, key);
}

async function updateMigrations() {
// [1.0.16] - Downcase and trim each word in the list (NOTE: This MAY result in losing some words)
let cfg = await Config.build();
cfg.sanitizeWords();
cfg.save();

// // [1.0.13] - updateRemoveWordsFromStorage - transition from previous words structure under the hood
// Note: Not async function
// chrome.storage.sync.get({'words': null}, function(oldWords) {
// // console.log('Old words for migration:', oldWords.words);
// if (oldWords.words) {
// chrome.storage.sync.set({'_words0': oldWords.words}, function() {
// if (!chrome.runtime.lastError) {
// chrome.storage.sync.remove('words', function() {
// // Split words if necessary
// var wordsPromise = new Promise(function(resolve, reject) {
// resolve(Config.build());
// });
// wordsPromise
// .then(function(response: Config) {
// response.save();
// });
// });
// }
// });
// }
// });
// This will look at the version (from before the update) and perform data migrations if necessary
// Only append so the order stays the same (oldest first).
async function updateMigrations(previousVersion) {
let old = getVersion(previousVersion) as Version;
// let current = chrome.runtime.getManifest().version

// [1.0.13] - updateRemoveWordsFromStorage - transition from previous words structure under the hood
if (isVersionOlder(getVersion('1.0.13'), old)) {
console.log('not in herer');
// Note: using promise instead of async/await
chrome.storage.sync.get({'words': null}, function(oldWords) {
// console.log('Old words for migration:', oldWords.words);
if (oldWords.words) {
chrome.storage.sync.set({'_words0': oldWords.words}, function() {
if (!chrome.runtime.lastError) {
chrome.storage.sync.remove('words', function() {
// Split words if necessary
var wordsPromise = new Promise(function(resolve, reject) {
resolve(Config.build());
});
wordsPromise
.then(function(response: Config) {
response.save();
});
});
}
});
}
});
}

// [1.1.0] - Downcase and trim each word in the list (NOTE: This MAY result in losing some words)
if (isVersionOlder(getVersion('1.1.0'), old)) {
console.log('in version update');
let cfg = await Config.build();
cfg.sanitizeWords();
cfg.save();
}
}

////
Expand Down
31 changes: 30 additions & 1 deletion src/helper.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
interface Version {
major: number,
minor: number,
patch: number
}

export function arrayContains(array: string[], element: string) {
return (array.indexOf(element) > -1);
}
Expand All @@ -14,6 +20,29 @@ export function dynamicList(list, selectEm, title?: string) {
document.getElementById(selectEm).innerHTML = options;
}

// /^\d+\.\d+\.\d+$/
export function getVersion(version: string): Version {
let versionValues = version.split('.');
return {
major: parseInt(versionValues[0]),
minor: parseInt(versionValues[1]),
patch: parseInt(versionValues[2])
};
}

// Is the provided version lower than the minimum version?
export function isVersionOlder(minimum: Version, version: Version): boolean {
if (version.major < minimum.major) {
return true;
} else if (version.major == minimum.major && version.minor < minimum.minor) {
return true;
} else if (version.major == minimum.major && version.minor == minimum.minor && version.patch < minimum.patch) {
return true;
}

return false;
}

export function removeFromArray(array: string[], element: string) {
return array.filter(e => e !== element);
}
}
44 changes: 43 additions & 1 deletion test/helper.spec.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const expect = require('chai').expect;
import { arrayContains, dynamicContains, removeFromArray } from '../dist/helper';
import { arrayContains, dynamicContains, getVersion, isVersionOlder, removeFromArray } from '../dist/helper';

const array = ['a', 'needle', 'in', 'a', 'large', 'haystack'];

Expand Down Expand Up @@ -30,4 +30,46 @@ describe('Helper', function() {
expect(removeFromArray(array, 'pin')).to.eql(array);
});
});

describe('isVersionOlder()', function() {
it('should return true when provided version is older than minimum', function() {
let minimum = getVersion('1.2.15');
let version = getVersion('1.1.10');
expect(isVersionOlder(minimum, version)).to.equal(true);

minimum = getVersion('1.2.15');
version = getVersion('1.1.0');
expect(isVersionOlder(minimum, version)).to.equal(true);

minimum = getVersion('4.6.15');
version = getVersion('1.4.0');
expect(isVersionOlder(minimum, version)).to.equal(true);

minimum = getVersion('2.3.10');
version = getVersion('1.5.15');
expect(isVersionOlder(minimum, version)).to.equal(true);
});

it('should return false when provided version is not older than minimum', function() {
let minimum = getVersion('1.2.15');
let version = getVersion('1.5.10');
expect(isVersionOlder(minimum, version)).to.equal(false);

minimum = getVersion('1.0.15');
version = getVersion('1.1.0');
expect(isVersionOlder(minimum, version)).to.equal(false);

minimum = getVersion('1.0.13');
version = getVersion('1.0.15');
expect(isVersionOlder(minimum, version)).to.equal(false);

minimum = getVersion('1.0.13');
version = getVersion('3.2.15');
expect(isVersionOlder(minimum, version)).to.equal(false);

minimum = getVersion('1.2.12');
version = getVersion('1.3.0');
expect(isVersionOlder(minimum, version)).to.equal(false);
});
});
});

0 comments on commit 41cde98

Please sign in to comment.