From 48977818489ded9c8983758ed9bddb0a236a5577 Mon Sep 17 00:00:00 2001 From: Jon Kazama Date: Sun, 14 Jun 2026 14:17:46 +0200 Subject: [PATCH] =?UTF-8?q?fix(quick-save):=20Opera-Worker=20=E2=80=94=20i?= =?UTF-8?q?nterne-URL-Filter,=20kurzer=20Fehler-Badge,=20Re-Entry-Schutz?= =?UTF-8?q?=20gegen=20Lost-Update?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/js/opera/background.js | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/js/opera/background.js b/src/js/opera/background.js index 2e24644..8498d56 100644 --- a/src/js/opera/background.js +++ b/src/js/opera/background.js @@ -38,12 +38,26 @@ chrome.tabs.onActivated.addListener((activeInfo) => { // Pfad ist relativ zu DIESER Datei (src/js/opera/), daher ../quicksave-core.js. importScripts('../quicksave-core.js'); +// Interne/nicht speicherbare Seiten (Browser-UI, Extension-Seiten) — kein sinnvolles Bookmark. +const UNSAVEABLE_URL = /^(chrome|chrome-extension|about|edge|opera|moz-extension|brave|vivaldi|view-source|devtools):/i; + +// Re-Entry-Schutz: ein zweiter Quick-Save waehrend der erste laeuft wuerde read-modify-write +// rennen (lost update). Bei aktivem Save den zweiten Druck verwerfen. +let qsBusy = false; + function quickSaveActiveTab() { + if (qsBusy) return; + qsBusy = true; chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { const tab = tabs && tabs[0]; - if (!tab || !tab.url) { - chrome.action.setBadgeText({ text: chrome.i18n.getMessage('quickSaveNoTab') }); + if (!tab || !tab.url || UNSAVEABLE_URL.test(tab.url)) { + // Kein speicherbarer Tab: kurzer roter Marker (langer Text wird im Badge abgeschnitten). + chrome.action.setBadgeText({ text: '×' }); + if (chrome.action.setBadgeBackgroundColor) { + chrome.action.setBadgeBackgroundColor({ color: '#c0392b' }); + } setTimeout(() => chrome.action.setBadgeText({ text: '' }), 2000); + qsBusy = false; return; } // read-modify-write: aktuellen boards-Stand frisch holen, anhaengen, zurueckschreiben. @@ -54,6 +68,7 @@ function quickSaveActiveTab() { chrome.storage.local.set({ boards }, () => { if (chrome.runtime.lastError) { console.error('Quick-Save fehlgeschlagen:', chrome.runtime.lastError.message); + qsBusy = false; return; } chrome.action.setBadgeText({ text: chrome.i18n.getMessage('quickSaveBadge') }); @@ -61,6 +76,7 @@ function quickSaveActiveTab() { chrome.action.setBadgeBackgroundColor({ color: '#1f9d55' }); } setTimeout(() => chrome.action.setBadgeText({ text: '' }), 2000); + qsBusy = false; }); }); });