diff --git a/src/js/background.js b/src/js/background.js
index d7c5d83..7bb6532 100644
--- a/src/js/background.js
+++ b/src/js/background.js
@@ -486,6 +486,14 @@ async function setupUpdateSchedule() {
// Event Listeners
browserAPI.runtime.onMessage.addListener((message, sender, sendResponse) => {
+ if (message.action === "forceUpdateFilterlist") {
+ fetchFilterLists().then(() => {
+ if (sendResponse) sendResponse({ status: "ok" });
+ }).catch((err) => {
+ if (sendResponse) sendResponse({ status: "error", error: err?.toString() });
+ });
+ return true; // Indicates async response
+ }
if (message.action === "checkSiteStatus") {
const { url, rootUrl } = message;
diff --git a/src/pub/settings-page.html b/src/pub/settings-page.html
index bda5e1f..98765fc 100644
--- a/src/pub/settings-page.html
+++ b/src/pub/settings-page.html
@@ -525,6 +525,9 @@
Next update scheduled for: Checking...
+
+
+
diff --git a/src/pub/settings-page.js b/src/pub/settings-page.js
index 5d3d904..0e9848e 100644
--- a/src/pub/settings-page.js
+++ b/src/pub/settings-page.js
@@ -1,4 +1,21 @@
document.addEventListener("DOMContentLoaded", () => {
+ if (forceRefreshButton) {
+ forceRefreshButton.addEventListener("click", async () => {
+ forceRefreshButton.disabled = true;
+ forceRefreshButton.textContent = "Updating...";
+ try {
+ await browserAPI.runtime.sendMessage({ action: "forceUpdateFilterlist" });
+ showNotification("Filterlist update started.");
+ } catch (error) {
+ showNotification("Failed to start update.", true);
+ } finally {
+ setTimeout(() => {
+ forceRefreshButton.disabled = false;
+ forceRefreshButton.textContent = "Force Update Filterlist";
+ }, 2000);
+ }
+ });
+ }
// Cross-browser compatibility shim
const browserAPI = typeof browser !== "undefined" ? browser : chrome;
// Load and display the extension version from manifest.json