diff --git a/package-lock.json b/package-lock.json
index 35c410bc..0a35ca6c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "cinny",
- "version": "4.10.2",
+ "version": "4.10.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "cinny",
- "version": "4.10.2",
+ "version": "4.10.3",
"license": "AGPL-3.0-only",
"dependencies": {
"@atlaskit/pragmatic-drag-and-drop": "1.1.6",
diff --git a/package.json b/package.json
index 06e830c6..40e64554 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "cinny",
- "version": "4.10.2",
+ "version": "4.10.3",
"description": "Yet another matrix client",
"main": "index.js",
"type": "module",
diff --git a/src/app/components/BackRouteHandler.tsx b/src/app/components/BackRouteHandler.tsx
index fa3d7592..3b13e487 100644
--- a/src/app/components/BackRouteHandler.tsx
+++ b/src/app/components/BackRouteHandler.tsx
@@ -51,8 +51,12 @@ export function BackRouteHandler({ children }: BackRouteHandlerProps) {
},
location.pathname
);
- if (spaceMatch?.params.spaceIdOrAlias) {
- navigate(getSpacePath(spaceMatch.params.spaceIdOrAlias));
+ const encodedSpaceIdOrAlias = spaceMatch?.params.spaceIdOrAlias;
+ const decodedSpaceIdOrAlias =
+ encodedSpaceIdOrAlias && decodeURIComponent(encodedSpaceIdOrAlias);
+
+ if (decodedSpaceIdOrAlias) {
+ navigate(getSpacePath(decodedSpaceIdOrAlias));
return;
}
if (
diff --git a/src/app/features/settings/about/About.tsx b/src/app/features/settings/about/About.tsx
index f2cabf1d..7cf121d5 100644
--- a/src/app/features/settings/about/About.tsx
+++ b/src/app/features/settings/about/About.tsx
@@ -46,7 +46,7 @@ export function About({ requestClose }: AboutProps) {
Cinny
- v4.10.2
+ v4.10.3
Yet another matrix client.
diff --git a/src/app/pages/auth/AuthFooter.tsx b/src/app/pages/auth/AuthFooter.tsx
index d53ef9a6..124b0384 100644
--- a/src/app/pages/auth/AuthFooter.tsx
+++ b/src/app/pages/auth/AuthFooter.tsx
@@ -15,7 +15,7 @@ export function AuthFooter() {
target="_blank"
rel="noreferrer"
>
- v4.10.2
+ v4.10.3
Twitter
diff --git a/src/app/pages/client/WelcomePage.tsx b/src/app/pages/client/WelcomePage.tsx
index 6eb33a16..969a5cd4 100644
--- a/src/app/pages/client/WelcomePage.tsx
+++ b/src/app/pages/client/WelcomePage.tsx
@@ -24,7 +24,7 @@ export function WelcomePage() {
target="_blank"
rel="noreferrer noopener"
>
- v4.10.2
+ v4.10.3
}
diff --git a/src/app/utils/notifications.ts b/src/app/utils/notifications.ts
index edab9196..a23bd1a4 100644
--- a/src/app/utils/notifications.ts
+++ b/src/app/utils/notifications.ts
@@ -1,6 +1,6 @@
import { MatrixClient, ReceiptType } from 'matrix-js-sdk';
-export async function markAsRead(mx: MatrixClient, roomId: string, privateReceipt?: boolean) {
+export async function markAsRead(mx: MatrixClient, roomId: string, privateReceipt: boolean) {
const room = mx.getRoom(roomId);
if (!room) return;
@@ -19,15 +19,8 @@ export async function markAsRead(mx: MatrixClient, roomId: string, privateReceip
const latestEvent = getLatestValidEvent();
if (latestEvent === null) return;
- const latestEventId = latestEvent.getId();
- if (!latestEventId) return;
-
- // Set both the read receipt AND the fully_read marker
- // The fully_read marker is what persists your read position across sessions
- await mx.setRoomReadMarkers(
- roomId,
- latestEventId, // m.fully_read marker
- latestEvent, // m.read receipt event
- privateReceipt ? { receiptType: ReceiptType.ReadPrivate } : undefined
+ await mx.sendReadReceipt(
+ latestEvent,
+ privateReceipt ? ReceiptType.ReadPrivate : ReceiptType.Read
);
}
diff --git a/src/app/utils/sanitize.ts b/src/app/utils/sanitize.ts
index 985c47b1..28e0db59 100644
--- a/src/app/utils/sanitize.ts
+++ b/src/app/utils/sanitize.ts
@@ -100,7 +100,7 @@ const transformATag: Transformer = (tagName, attribs) => ({
tagName,
attribs: {
...attribs,
- rel: 'noopener',
+ rel: 'noreferrer noopener',
target: '_blank',
},
});
@@ -112,7 +112,7 @@ const transformImgTag: Transformer = (tagName, attribs) => {
tagName: 'a',
attribs: {
href: src,
- rel: 'noopener',
+ rel: 'noreferrer noopener',
target: '_blank',
},
text: attribs.alt || src,
diff --git a/src/index.tsx b/src/index.tsx
index 0019a224..71e723ab 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -27,10 +27,24 @@ if ('serviceWorker' in navigator) {
? `${trimTrailingSlash(import.meta.env.BASE_URL)}/sw.js`
: `/dev-sw.js?dev-sw`;
- navigator.serviceWorker.register(swUrl).then(() => {
+ const sendSessionToSW = () => {
const session = getFallbackSession();
pushSessionToSW(session?.baseUrl, session?.accessToken);
+ };
+
+ navigator.serviceWorker.register(swUrl).then(sendSessionToSW);
+ navigator.serviceWorker.ready.then(sendSessionToSW);
+ window.addEventListener('load', sendSessionToSW);
+
+ // When returning from background
+ document.addEventListener('visibilitychange', () => {
+ if (document.visibilityState === 'visible') {
+ sendSessionToSW();
+ }
});
+
+ // When restored from bfcache (important on iOS)
+ window.addEventListener('pageshow', sendSessionToSW);
}
const mountApp = () => {