diff --git a/web/src/app/Api.js b/web/src/app/Api.js index f126bcf..8bb7770 100644 --- a/web/src/app/Api.js +++ b/web/src/app/Api.js @@ -8,7 +8,7 @@ class Api { for await (let line of fetchLinesIterator(url)) { messages.push(JSON.parse(line)); } - return messages.sort((a, b) => { return a.time < b.time ? 1 : -1; }); // Newest first + return messages; } async publish(baseUrl, topic, message) { diff --git a/web/src/app/Connection.js b/web/src/app/Connection.js index 7625290..9e479f9 100644 --- a/web/src/app/Connection.js +++ b/web/src/app/Connection.js @@ -40,7 +40,7 @@ class Connection { console.log(`[Connection, ${this.shortUrl}] Message irrelevant or invalid. Ignoring.`); return; } - this.since = data.time; + this.since = data.time + 1; // Sigh. This works because on reconnect, we wait 5+ seconds anyway. this.onNotification(this.subscriptionId, data); } catch (e) { console.log(`[Connection, ${this.shortUrl}] Error handling message: ${e}`); diff --git a/web/src/app/Subscription.js b/web/src/app/Subscription.js index 8f4af1f..8b19a18 100644 --- a/web/src/app/Subscription.js +++ b/web/src/app/Subscription.js @@ -6,14 +6,15 @@ export default class Subscription { this.baseUrl = baseUrl; this.topic = topic; this.notifications = new Map(); // notification ID -> notification object - this.deleted = new Set(); // notification IDs + this.last = 0; } addNotification(notification) { - if (this.notifications.has(notification.id) || this.deleted.has(notification.id)) { + if (this.notifications.has(notification.id) || notification.time < this.last) { return this; } this.notifications.set(notification.id, notification); + this.last = notification.time; return this; } @@ -24,14 +25,11 @@ export default class Subscription { deleteNotification(notificationId) { this.notifications.delete(notificationId); - this.deleted.add(notificationId); return this; } deleteAllNotifications() { - console.log(this.notifications); for (const [id] of this.notifications) { - console.log(`delete ${id}`); this.deleteNotification(id); } return this; diff --git a/web/src/components/App.js b/web/src/components/App.js index 80743a9..7f91e4e 100644 --- a/web/src/components/App.js +++ b/web/src/components/App.js @@ -20,7 +20,7 @@ import SettingsIcon from "@mui/icons-material/Settings"; import AddIcon from "@mui/icons-material/Add"; import AddDialog from "./AddDialog"; import NotificationList from "./NotificationList"; -import DetailSettingsIcon from "./DetailSettingsIcon"; +import SubscriptionSettings from "./SubscriptionSettings"; import theme from "./theme"; import api from "../app/Api"; import repository from "../app/Repository"; @@ -184,7 +184,7 @@ const App = () => { > {(selectedSubscription !== null) ? selectedSubscription.shortUrl() : "ntfy"} - {selectedSubscription !== null && { +const SubscriptionSettings = (props) => { const [open, setOpen] = useState(false); const anchorRef = useRef(null); @@ -39,7 +39,7 @@ const DetailSettingsIcon = (props) => { const handleSendTestMessage = () => { const baseUrl = props.subscription.baseUrl; const topic = props.subscription.topic; - api.publish(baseUrl, topic, `This is a test notification sent by the ntfy.sh Web UI at ${new Date().toString()}.`); // FIXME result ignored + api.publish(baseUrl, topic, `This is a test notification sent by the ntfy Web UI at ${new Date().toString()}.`); // FIXME result ignored setOpen(false); } @@ -114,4 +114,4 @@ const DetailSettingsIcon = (props) => { ); } -export default DetailSettingsIcon; +export default SubscriptionSettings;