Fix pruning bug in web app (closes #186), release notes, remove local storage migration

This commit is contained in:
Philipp Heckel 2022-03-27 09:20:25 -04:00
parent d4fe2052c7
commit 182e21a9c3
5 changed files with 12 additions and 29 deletions

View file

@ -26,6 +26,7 @@ and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/release
* Spanish (thanks to [@rogeliodh](https://github.com/rogeliodh)) * Spanish (thanks to [@rogeliodh](https://github.com/rogeliodh))
* Turkish (thanks to [@ersen](https://ersen.moe/)) * Turkish (thanks to [@ersen](https://ersen.moe/))
* Norwegian (thanks to [@comradekingu](https://github.com/comradekingu)) * Norwegian (thanks to [@comradekingu](https://github.com/comradekingu))
* German (thanks to [@cmeis](https://github.com/cmeis))
**Thanks:** **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) * 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) * 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:** **Documentation:**

View file

@ -56,6 +56,4 @@ class Poller {
} }
const poller = new Poller(); const poller = new Poller();
poller.startWorker();
export default poller; export default poller;

View file

@ -1,7 +1,7 @@
import prefs from "./Prefs"; import prefs from "./Prefs";
import subscriptionManager from "./SubscriptionManager"; import subscriptionManager from "./SubscriptionManager";
const delayMillis = 15000; // 15 seconds const delayMillis = 25000; // 25 seconds
const intervalMillis = 1800000; // 30 minutes const intervalMillis = 1800000; // 30 minutes
class Pruner { class Pruner {
@ -35,6 +35,4 @@ class Pruner {
} }
const pruner = new Pruner(); const pruner = new Pruner();
pruner.startWorker();
export default pruner; export default pruner;

View file

@ -17,7 +17,7 @@ import {BrowserRouter, Outlet, Route, Routes, useOutletContext, useParams} from
import {expandUrl} from "../app/utils"; import {expandUrl} from "../app/utils";
import ErrorBoundary from "./ErrorBoundary"; import ErrorBoundary from "./ErrorBoundary";
import routes from "./routes"; import routes from "./routes";
import {useAutoSubscribe, useConnectionListeners, useLocalStorageMigration} from "./hooks"; import {useAutoSubscribe, useConnectionListeners, useBackgroundProcesses} from "./hooks";
// TODO add drag and drop // TODO add drag and drop
// TODO races when two tabs are open // TODO races when two tabs are open
@ -67,7 +67,7 @@ const Layout = () => {
}); });
useConnectionListeners(subscriptions, users); useConnectionListeners(subscriptions, users);
useLocalStorageMigration(); useBackgroundProcesses();
useEffect(() => updateTitle(newNotificationsCount), [newNotificationsCount]); useEffect(() => updateTitle(newNotificationsCount), [newNotificationsCount]);
return ( return (

View file

@ -6,6 +6,7 @@ import notifier from "../app/Notifier";
import routes from "./routes"; import routes from "./routes";
import connectionManager from "../app/ConnectionManager"; import connectionManager from "../app/ConnectionManager";
import poller from "../app/Poller"; import poller from "../app/Poller";
import pruner from "../app/Pruner";
/** /**
* Wire connectionManager and subscriptionManager so that subscriptions are updated when the connection * 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 * Start the poller and the pruner. This is done in a side effect as opposed to just in Pruner.js
* from the old web UI. * 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 = () => { export const useBackgroundProcesses = () => {
const [hasRun, setHasRun] = useState(false);
useEffect(() => { useEffect(() => {
if (hasRun) { poller.startWorker();
return; pruner.startWorker();
}
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);
}, []); }, []);
} }