Started setup for delete by visitCount
This commit is contained in:
parent
582936eab4
commit
2bc552565b
4 changed files with 115 additions and 22 deletions
|
@ -1,16 +1,62 @@
|
||||||
browser.idle.onStateChanged.addListener((state) => {
|
async function filterByVisits(visitCount, end) {
|
||||||
|
// brute force history items with visitCount or less visits
|
||||||
|
let search = 1000;
|
||||||
|
while (true) {
|
||||||
|
const history = await browser.history.search({text: "", maxResults: search, startTime: 0, endTime: end});
|
||||||
|
if (search > history.length) {
|
||||||
|
return history.filter(item => item.visitCount <= visitCount);
|
||||||
|
} else {
|
||||||
|
search += 1000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function deleteByVisits(visitCount, end) {
|
||||||
|
let history = await filterByVisits(visitCount, end);
|
||||||
|
for (let item of history) {
|
||||||
|
browser.history.deleteURL({url: item.url});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function deleteOlderThan(state) {
|
||||||
if (state === "idle") {
|
if (state === "idle") {
|
||||||
browser.storage.local.get("days").then((res) => {
|
const res = await browser.storage.local.get();
|
||||||
var days = parseInt(res.days) || 0;
|
const days = parseInt(res.days) || 0;
|
||||||
if (days !== 0) {
|
if (days !== 0) {
|
||||||
var end = new Date();
|
let end = new Date();
|
||||||
end.setHours(0);
|
end.setHours(0);
|
||||||
end.setMinutes(0);
|
end.setMinutes(0);
|
||||||
end.setSeconds(0);
|
end.setSeconds(0);
|
||||||
end.setMilliseconds(0);
|
end.setMilliseconds(0);
|
||||||
end.setDate(end.getDate() - days);
|
end.setDate(end.getDate() - days);
|
||||||
browser.history.deleteRange({startTime: 0, endTime: end.getTime()});
|
let endDate = end.getTime();
|
||||||
|
if (mode === "days") {
|
||||||
|
if (res.visitCount === 0) {
|
||||||
|
browser.history.deleteRange({startTime: 0, endTime: endDate});
|
||||||
|
} else {
|
||||||
|
deleteByVisits(res.visitCount, endDate);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (mode === "visits") {
|
||||||
|
deleteByVisits(res.visitCount, new Date().getTime());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async function setup() {
|
||||||
|
let res = await browser.storage.local.get();
|
||||||
|
res = defaultValues(res, {
|
||||||
|
days: 0,
|
||||||
|
visitCount: 0,
|
||||||
|
deleteMode: "days"
|
||||||
});
|
});
|
||||||
|
if (typeof res.days === "string") {
|
||||||
|
res.days = parseInt(res.days);
|
||||||
}
|
}
|
||||||
});
|
browser.storage.local.set(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
browser.idle.onStateChanged.addListener(deleteOlderThan);
|
||||||
|
browser.runtime.onInstalled.addListener(setup);
|
||||||
|
|
|
@ -7,12 +7,20 @@
|
||||||
<body>
|
<body>
|
||||||
<div id="box">
|
<div id="box">
|
||||||
<div id="labels">
|
<div id="labels">
|
||||||
<span>Number of days to keep history (set to 0 to disable)</span>
|
<span>Number of days to keep history (set to 0 to disable)</span><br>
|
||||||
|
<span>Maximum no of visits</span><br>
|
||||||
|
<span>Delete Mode</span>
|
||||||
</div>
|
</div>
|
||||||
<div id="settings">
|
<div id="settings">
|
||||||
<input id="days" type="number" min="0">
|
<input id="days" type="number" min="0">
|
||||||
|
<input id="visitCount" type="number" min="0">
|
||||||
|
<select id="mode">
|
||||||
|
<option value="days">Delete older than X days</option>
|
||||||
|
<option value="visits">Delete sites with < X visits</option>
|
||||||
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<script src="webext_utilities.js"></script>
|
||||||
<script src="options.js"></script>
|
<script src="options.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -1,11 +1,25 @@
|
||||||
|
const DOM = generateElementsVariable([
|
||||||
|
"days",
|
||||||
|
"visitCount",
|
||||||
|
"mode",
|
||||||
|
"settings"
|
||||||
|
]);
|
||||||
|
|
||||||
function updateDays(e) {
|
function updateDays(e) {
|
||||||
browser.storage.local.set({days: document.querySelector("#days").value});
|
browser.storage.local.set({
|
||||||
|
days: parseInt(DOM.days.value),
|
||||||
|
visitCount: parseInt(DOM.visitCount.value),
|
||||||
|
mode: DOM.mode.value
|
||||||
|
});
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
}
|
}
|
||||||
function restoreOptions() {
|
|
||||||
browser.storage.local.get().then((res) => {
|
async function restoreOptions() {
|
||||||
document.querySelector("#days").value = res.days || 0;
|
const res = await browser.storage.local.get();
|
||||||
});
|
DOM.days.value = res.days || 0;
|
||||||
|
DOM.visitCount.value = res.visitCount || 0;
|
||||||
|
DOM.mode.value = res.mode || "days";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DOM.settings.addEventListener("input", updateDays);
|
||||||
document.addEventListener("DOMContentLoaded", restoreOptions);
|
document.addEventListener("DOMContentLoaded", restoreOptions);
|
||||||
document.getElementById("days").addEventListener("input", updateDays);
|
|
||||||
|
|
25
extension/webext_utilities.js
Normal file
25
extension/webext_utilities.js
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
function generateElementsVariable(list) {
|
||||||
|
// generate an object with elements based on a list of ids
|
||||||
|
let dom = {};
|
||||||
|
for (let item of list) {
|
||||||
|
dom[item] = document.getElementById(item);
|
||||||
|
}
|
||||||
|
return dom;
|
||||||
|
}
|
||||||
|
|
||||||
|
function defaultValues(object, settings) {
|
||||||
|
// initialize object with values.
|
||||||
|
for (let key in settings) {
|
||||||
|
if (!object.hasOwnProperty(key)) {
|
||||||
|
object[key] = settings[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getContext() {
|
||||||
|
// return the context of the current view
|
||||||
|
return browser.extension.getViews({type: "popup"}).indexOf(window) > -1 ? "popup" :
|
||||||
|
browser.extension.getViews({type: "sidebar"}).indexOf(window) > -1 ? "sidebar" :
|
||||||
|
browser.extension.getViews({type: "tab"}).indexOf(window) > -1 ? "tab" : undefined;
|
||||||
|
}
|
Loading…
Reference in a new issue