From 182e21a9c367d17c85a288c925ebbaefca4aed92 Mon Sep 17 00:00:00 2001 From: Philipp Heckel Date: Sun, 27 Mar 2022 09:20:25 -0400 Subject: [PATCH] Fix pruning bug in web app (closes #186), release notes, remove local storage migration --- docs/releases.md | 2 ++ web/src/app/Poller.js | 2 -- web/src/app/Pruner.js | 4 +--- web/src/components/App.js | 4 ++-- web/src/components/hooks.js | 29 +++++++---------------------- 5 files changed, 12 insertions(+), 29 deletions(-) diff --git a/docs/releases.md b/docs/releases.md index 5b6f2594..7105f442 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -26,6 +26,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release * Spanish (thanks to [@rogeliodh](https://github.com/rogeliodh)) * Turkish (thanks to [@ersen](https://ersen.moe/)) * Norwegian (thanks to [@comradekingu](https://github.com/comradekingu)) +* German (thanks to [@cmeis](https://github.com/cmeis)) **Thanks:** @@ -38,6 +39,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release * Do not allow comma in topic name in publish via GET endpoint (no ticket) * Add "Access-Control-Allow-Origin: *" for attachments (no ticket, thanks to @FrameXX) +* Make pruning run again in web app ([#186](https://github.com/binwiederhier/ntfy/issues/186)) **Documentation:** diff --git a/web/src/app/Poller.js b/web/src/app/Poller.js index 9de417a5..ec284eaf 100644 --- a/web/src/app/Poller.js +++ b/web/src/app/Poller.js @@ -56,6 +56,4 @@ class Poller { } const poller = new Poller(); -poller.startWorker(); - export default poller; diff --git a/web/src/app/Pruner.js b/web/src/app/Pruner.js index 9fac28e0..45948057 100644 --- a/web/src/app/Pruner.js +++ b/web/src/app/Pruner.js @@ -1,7 +1,7 @@ import prefs from "./Prefs"; import subscriptionManager from "./SubscriptionManager"; -const delayMillis = 15000; // 15 seconds +const delayMillis = 25000; // 25 seconds const intervalMillis = 1800000; // 30 minutes class Pruner { @@ -35,6 +35,4 @@ class Pruner { } const pruner = new Pruner(); -pruner.startWorker(); - export default pruner; diff --git a/web/src/components/App.js b/web/src/components/App.js index 4782a26c..5be7ec9f 100644 --- a/web/src/components/App.js +++ b/web/src/components/App.js @@ -17,7 +17,7 @@ import {BrowserRouter, Outlet, Route, Routes, useOutletContext, useParams} from import {expandUrl} from "../app/utils"; import ErrorBoundary from "./ErrorBoundary"; import routes from "./routes"; -import {useAutoSubscribe, useConnectionListeners, useLocalStorageMigration} from "./hooks"; +import {useAutoSubscribe, useConnectionListeners, useBackgroundProcesses} from "./hooks"; // TODO add drag and drop // TODO races when two tabs are open @@ -67,7 +67,7 @@ const Layout = () => { }); useConnectionListeners(subscriptions, users); - useLocalStorageMigration(); + useBackgroundProcesses(); useEffect(() => updateTitle(newNotificationsCount), [newNotificationsCount]); return ( diff --git a/web/src/components/hooks.js b/web/src/components/hooks.js index bc88cef8..3714a9d0 100644 --- a/web/src/components/hooks.js +++ b/web/src/components/hooks.js @@ -6,6 +6,7 @@ import notifier from "../app/Notifier"; import routes from "./routes"; import connectionManager from "../app/ConnectionManager"; import poller from "../app/Poller"; +import pruner from "../app/Pruner"; /** * Wire connectionManager and subscriptionManager so that subscriptions are updated when the connection @@ -67,29 +68,13 @@ export const useAutoSubscribe = (subscriptions, selected) => { }; /** - * Migrate the 'topics' item in localStorage to the subscriptionManager. This is only done once to migrate away - * from the old web UI. + * Start the poller and the pruner. This is done in a side effect as opposed to just in Pruner.js + * and Poller.js, because side effect imports are not a thing in JS, and "Optimize imports" cleans + * up "unused" imports. See https://github.com/binwiederhier/ntfy/issues/186. */ -export const useLocalStorageMigration = () => { - const [hasRun, setHasRun] = useState(false); +export const useBackgroundProcesses = () => { useEffect(() => { - if (hasRun) { - return; - } - const topicsStr = localStorage.getItem("topics"); - if (topicsStr) { - const topics = JSON.parse(topicsStr).filter(topic => topic !== ""); - if (topics.length > 0) { - (async () => { - for (const topic of topics) { - const baseUrl = window.location.origin; - const subscription = await subscriptionManager.add(baseUrl, topic); - poller.pollInBackground(subscription); // Dangle! - } - localStorage.removeItem("topics"); - })(); - } - } - setHasRun(true); + poller.startWorker(); + pruner.startWorker(); }, []); }