summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ui/routes/(app)/c/[conversation]/+page.svelte8
-rw-r--r--ui/service-worker.js17
2 files changed, 20 insertions, 5 deletions
diff --git a/ui/routes/(app)/c/[conversation]/+page.svelte b/ui/routes/(app)/c/[conversation]/+page.svelte
index 24baa47..5a832ee 100644
--- a/ui/routes/(app)/c/[conversation]/+page.svelte
+++ b/ui/routes/(app)/c/[conversation]/+page.svelte
@@ -56,6 +56,14 @@
if (!!at) {
session.local.updateLastReadAt(conversationId, at);
}
+
+ navigator.serviceWorker.ready.then((registration) => {
+ registration.active.postMessage({
+ type: 'CONVERSATION_READ',
+ conversationId,
+ at,
+ });
+ });
}
$effect(() => {
diff --git a/ui/service-worker.js b/ui/service-worker.js
index 56bfca9..67391f7 100644
--- a/ui/service-worker.js
+++ b/ui/service-worker.js
@@ -34,9 +34,11 @@ self.addEventListener('push', (event) => {
body: event.data.text(),
}),
);
+
+ const data = event.data?.json();
// Now we can do slower things that might fail:
- conversationReadStatus[event.conversationId] ||= { lastRead: null, lastMessage: null };
- conversationReadStatus[event.conversationId].lastMessage = new Date();
+ conversationReadStatus[data.conversationId] ||= { lastRead: null, lastMessage: null };
+ conversationReadStatus[data.conversationId].lastMessage = new Date();
event.waitUntil(
(async () => {
if (navigator.setAppBadge) {
@@ -48,10 +50,15 @@ self.addEventListener('push', (event) => {
// The client has to tell us when it has read a conversation:
self.addEventListener('message', (event) => {
- switch (event.data?.type) {
+ const data = event.data;
+ switch (data.type) {
case 'CONVERSATION_READ':
- conversationReadStatus[event.data.conversationId] ||= { lastRead: null, lastMessage: null };
- conversationReadStatus[event.data.conversationId].lastMessage = event.data.at || new Date();
+ conversationReadStatus[data.conversationId] ||= { lastRead: null, lastMessage: null };
+ if (data.at) {
+ conversationReadStatus[data.conversationId].lastRead = new Date(data.at.ts);
+ } else {
+ conversationReadStatus[data.conversationId].lastRead = new Date();
+ }
event.waitUntil(
(async () => {
if (navigator.setAppBadge) {