From 98dd339fad2bd56905eb7be107798dbfb110a6c5 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Thu, 8 Apr 2021 19:30:45 +0200 Subject: [PATCH] Allow deeplinking into Nheko via matrix: scheme Signed-off-by: Nicolas Werner --- src/open/clients/Nheko.js | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/open/clients/Nheko.js b/src/open/clients/Nheko.js index fe25f34..06a4ddb 100644 --- a/src/open/clients/Nheko.js +++ b/src/open/clients/Nheko.js @@ -28,7 +28,33 @@ export class Nheko { get platforms() { return [Platform.Windows, Platform.macOS, Platform.Linux]; } get description() { return 'A native desktop app for Matrix that feels more like a mainstream chat app.'; } getMaturity(platform) { return Maturity.Beta; } - getDeepLink(platform, link) {} + getDeepLink(platform, link) { + if (platform === Platform.Linux || platform === Platform.Windows) { + let identifier = encodeURIComponent(link.identifier.substring(1)); + let isRoomid = link.identifier.substring(0, 1) === '!'; + let fragmentPath; + switch (link.kind) { + case LinkKind.User: + fragmentPath = `u/${identifier}?action=chat`; + break; + case LinkKind.Room: + case LinkKind.Event: + if (isRoomid) + fragmentPath = `roomid/${identifier}`; + else + fragmentPath = `r/${identifier}`; + + if (link.kind === LinkKind.Event) + fragmentPath += `/e/${encodeURIComponent(link.eventId.substring(1))}`; + fragmentPath += '?action=join'; + fragmentPath += link.servers.map(server => `&via=${encodeURIComponent(server)}`).join(''); + break; + case LinkKind.Group: + return; + } + return `matrix:${fragmentPath}`; + } + } canInterceptMatrixToLinks(platform) { return false; } getLinkInstructions(platform, link) {