diff --git a/src/open/clients/Fractal.js b/src/open/clients/Fractal.js index 882d1d7..b2c0637 100644 --- a/src/open/clients/Fractal.js +++ b/src/open/clients/Fractal.js @@ -24,11 +24,39 @@ export class Fractal { get name() { return "Fractal"; } get icon() { return "images/client-icons/fractal.svg"; } get author() { return "Daniel Garcia Moreno"; } - get homepage() { return "https://gitlab.gnome.org/GNOME/fractal"; } + get homepage() { return "https://gitlab.gnome.org/World/fractal"; } get platforms() { return [Platform.Linux]; } get description() { return 'GNOME client, suitable for desktop and mobile. Written in Rust.'; } getMaturity(platform) { return Maturity.Beta; } - getDeepLink(platform, link) {} + + getDeepLink(platform, link) { + if (platform === Platform.Linux) { + 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) {