Skip to content

Commit 6d7c145

Browse files
committed
Backup and restore data
1 parent 9c2c905 commit 6d7c145

File tree

3 files changed

+67
-7
lines changed

3 files changed

+67
-7
lines changed

src/options.html

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,20 @@
8282
<div class="margin-top-10">
8383
<input type="button" value="Export to CSV" id='exportToCsv'>
8484
</div>
85+
<div class="margin-top-10">
86+
<input type="button" value="Backup" id='backup'>
87+
<input type="button" value="Restore" id='restore'>
88+
<input id="file-input-backup" class="hidden" type="file" name="backupFile" />
89+
</div>
90+
<div class="notify" id='notify-backup' hidden>
91+
Backup completed successfully
92+
</div>
93+
<div class="notify" id='notify-restore' hidden>
94+
Restore completed successfully
95+
</div>
96+
<div class="notify warning" id='notify-restore-failed' hidden>
97+
Backup file is not valid
98+
</div>
8599
<!-- YouTube -->
86100
<div class="margin-top-10">
87101
<label class="block">Web Activity Time Tracker tracks your activity, if you active in browser

src/scripts/settings.js

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,15 @@ document.addEventListener('DOMContentLoaded', function () {
2525
document.getElementById('exportToCsv').addEventListener('click', function () {
2626
exportToCSV();
2727
});
28+
document.getElementById('backup').addEventListener('click', function () {
29+
backup();
30+
});
31+
document.getElementById('restore').addEventListener('click', function () {
32+
restoreDataClick();
33+
});
34+
document.getElementById('file-input-backup').addEventListener('change', function (e) {
35+
restore(e);
36+
});
2837
document.getElementById('addBlackSiteBtn').addEventListener('click', function () {
2938
addNewSiteClickHandler('addBlackSiteLbl', null, actionAddBlackSiteToList, 'notifyForBlackList');
3039
});
@@ -88,6 +97,9 @@ function loadSettings() {
8897
storage.getMemoryUse(STORAGE_TABS, function (integer) {
8998
document.getElementById('memoryUse').innerHTML = (integer / 1024).toFixed(2) + 'Kb';
9099
});
100+
storage.getValue(STORAGE_TABS, function (item) {
101+
let s = item;
102+
});
91103
storage.getValue(STORAGE_BLACK_LIST, function (items) {
92104
if (items !== undefined)
93105
blackList = items;
@@ -234,20 +246,54 @@ function exportToCSV() {
234246
});
235247
}
236248

249+
function backup() {
250+
storage.getValue(STORAGE_TABS, function (item) {
251+
let tabs = JSON.stringify(item);
252+
createFile(tabs, "application/json", 'backup.json');
253+
viewNotify('notify-backup');
254+
});
255+
}
256+
257+
function restoreDataClick() {
258+
document.getElementById('file-input-backup').click();
259+
}
260+
261+
function restore(e) {
262+
let file = e.target.files[0];
263+
if (file.type === "application/json") {
264+
var reader = new FileReader();
265+
reader.readAsText(file, 'UTF-8');
266+
267+
reader.onload = readerEvent => {
268+
let content = readerEvent.target.result;
269+
let tabs = JSON.parse(content);
270+
chrome.extension.getBackgroundPage().tabs = tabs;
271+
storage.saveTabs(tabs, allDataDeletedSuccess);
272+
viewNotify('notify-restore');
273+
}
274+
} else {
275+
viewNotify('notify-restore-failed');
276+
}
277+
}
278+
237279
function toCsv(tabsData) {
238280
var str = 'domain,date,time(sec)\r\n';
239281
for (var i = 0; i < tabsData.length; i++) {
240282
for (var y = 0; y < tabsData[i].days.length; y++) {
241-
var line = tabsData[i].url + ',' + tabsData[i].days[y].date + ',' + tabsData[i].days[y].summary;
283+
var line = tabsData[i].url + ',' + tabsData[i].days[y].date + ',' + tabsData[i].days[y].summary;
242284
str += line + '\r\n';
243285
}
244286
}
245287

246-
var csvFile = new Blob([str], { type: "text/csv" });
288+
createFile(str, "text/csv", 'domains.csv');
289+
}
290+
291+
function createFile(data, type, fileName) {
292+
var file = new Blob([data], { type: type });
247293
var downloadLink;
248294
downloadLink = document.createElement("a");
249-
downloadLink.download = 'domains.csv';
250-
downloadLink.href = window.URL.createObjectURL(csvFile);
295+
downloadLink.download = fileName;
296+
downloadLink.href = window.URL.createObjectURL(file);
251297
downloadLink.style.display = "none";
252298
document.body.appendChild(downloadLink);
253299
downloadLink.click();

src/style/settings.css

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -249,11 +249,11 @@ input[type="button"]:hover {
249249
}
250250

251251
.notify{
252-
width: 200px;
252+
width: 220px;
253253
height: 27px;
254254
margin: auto;
255-
background-color: rgb(118, 219, 93);
256-
color: rgb(0, 0, 0);
255+
background-color: rgb(21, 104, 0);
256+
color: rgb(255, 255, 255);
257257
text-align: center;
258258
font-weight: 600;
259259
border-radius: 5px;

0 commit comments

Comments
 (0)