Skip to content

Commit 954416b

Browse files
authoredJun 1, 2024··
Merge pull request #363 from sanemat/feat/data-migration
data migration from localStorage to browser.storage (chrome.storage)
2 parents b110256 + 551e95a commit 954416b

File tree

5 files changed

+70
-17
lines changed

5 files changed

+70
-17
lines changed
 

‎.jshintrc

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"smarttabs": true,
2121
"globals" : {
2222
"chrome": true,
23-
"jQuery": true
23+
"jQuery": true,
24+
"browser": true
2425
}
2526
}

‎app/manifest.json

+7-2
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,17 @@
77
"16": "images/icon2-16.png",
88
"128": "images/icon2-128.png"
99
},
10-
"permissions": [],
10+
"permissions": [
11+
"storage",
12+
"activeTab",
13+
"https://github.com/*/*/pull/*"
14+
],
1115
"default_locale": "en",
1216
"background": {
1317
"scripts": [
1418
"scripts/background.js"
15-
]
19+
],
20+
"persistent": true
1621
},
1722
"options_page": "options.html",
1823
"content_scripts": [

‎app/scripts/background.js

+42-5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,48 @@
11
'use strict';
22

3-
chrome.runtime.onInstalled.addListener(function (details) {
4-
console.log('previousVersion', details.previousVersion);
3+
// Define browser for cross-browser compatibility
4+
var browser = (typeof browser !== 'undefined') ? browser : chrome;
5+
6+
function migrateLocalStorageToBrowserStorage() {
7+
// Check if localStorage is not null and contains any keys
8+
if (!localStorage || Object.keys(localStorage).length === 0) {
9+
console.log('No localStorage data to migrate.');
10+
return;
11+
}
12+
13+
// Get all localStorage keys
14+
const localStorageKeys = Object.keys(localStorage);
15+
const dataToMigrate = {};
16+
17+
localStorageKeys.forEach((key) => {
18+
dataToMigrate[key] = localStorage.getItem(key);
19+
});
20+
21+
// Store data in broswer.storage
22+
browser.storage.local.set(dataToMigrate, () => {
23+
console.log('Data migrated to browser.storage', dataToMigrate);
24+
25+
// Clear localStorage after migration
26+
localStorage.clear();
27+
});
28+
}
29+
30+
browser.runtime.onInstalled.addListener(function (details) {
31+
if (details.reason === 'install') {
32+
// Handle installation logic
33+
console.log('Extension installed');
34+
} else if (details.reason === 'update') {
35+
console.log('previousVersion', details.previousVersion);
36+
// Handle update logic
37+
migrateLocalStorageToBrowserStorage();
38+
}
539
});
640

7-
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse){
8-
if (request.subject === 'localStorage') {
9-
sendResponse({localStorage: localStorage});
41+
browser.runtime.onMessage.addListener(function (request, sender, sendResponse) {
42+
if (request.subject === 'getStorage') {
43+
browser.storage.local.get(null, function (items) {
44+
sendResponse({ storageData: items });
45+
});
46+
return true; // Keep the message channel open for sendResponse
1047
}
1148
});

‎app/scripts/contentscript.js

+9-5
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,20 @@
22
'use strict';
33

44
function changeMergeButtonState() {
5+
// Define browser for cross-browser compatibility
6+
var browser = (typeof browser !== 'undefined') ? browser : chrome;
7+
58
let container = document.querySelector('#js-repo-pjax-container');
69
let issueTitle = container.querySelector('.js-issue-title')?.textContent;
710
let buttonMerges = container.querySelectorAll('.merge-message button[data-details-container]');
811
let buttonMergeOptions = container.querySelectorAll('.merge-message button[data-details-container] + .select-menu-button');
912
let disabled = false;
1013
let buttonHtml = '';
1114

12-
chrome.runtime.sendMessage({from: 'content', subject: 'localStorage'}, function(response){
15+
browser.runtime.sendMessage({ from: 'content', subject: 'getStorage' }, function (response) {
1316
if (!response) { return; }
1417

15-
let localStorage = response.localStorage;
18+
let storageData = response.storageData;
1619
const wipTitleRegex = /[\[(^](do\s*n[o']?t\s*merge|wip|dnm)[\]):]/i;
1720
const wipTagRegex = /(wip|do\s*not\s*merge|dnm)/i;
1821

@@ -32,8 +35,8 @@
3235

3336
let buttonMessage = '';
3437

35-
if (localStorage && localStorage.buttonMessage) {
36-
buttonMessage = localStorage.buttonMessage;
38+
if (storageData && storageData.buttonMessage) {
39+
buttonMessage = storageData.buttonMessage;
3740
} else {
3841
buttonMessage = 'WIP! You can\'t merge!';
3942
}
@@ -56,9 +59,10 @@
5659
buttonMergeOptions = null;
5760
buttonHtml = null;
5861
buttonMessage = null;
59-
localStorage = null;
62+
storageData = null;
6063
isSquashCommits = null;
6164
isWipTag = null;
65+
browser = null;
6266

6367
setTimeout(changeMergeButtonState, 1000);
6468
});

‎app/scripts/options.js

+10-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
(() => {
22
'use strict';
33

4+
// Define browser for cross-browser compatibility
5+
var browser = (typeof browser !== 'undefined') ? browser : chrome;
6+
47
window.addEventListener('DOMContentLoaded', () => {
5-
document.getElementById('buttonMessage').value = localStorage.buttonMessage;
8+
browser.storage.local.get('buttonMessage', function (result) {
9+
document.getElementById('buttonMessage').value = result.buttonMessage || '';
10+
});
611

712
document.getElementById('save_btn').closest('form').addEventListener('submit', e => {
813
e.preventDefault();
9-
localStorage.buttonMessage = e.target.buttonMessage.value;
10-
11-
window.alert('The options have been saved!');
14+
const buttonMessage = e.target.buttonMessage.value;
15+
browser.storage.local.set({ buttonMessage: buttonMessage }, function () {
16+
window.alert('The options have been saved!');
17+
});
1218
});
1319
});
1420
})();

0 commit comments

Comments
 (0)
Please sign in to comment.