feat: Handle matrix: URIs as per MSC2312
This commit is contained in:
parent
c65066e127
commit
03058d44e6
15 changed files with 41 additions and 101 deletions
|
|
@ -1,33 +0,0 @@
|
|||
import '../app_config.dart';
|
||||
|
||||
extension MatrixIdentifierStringExtension on String {
|
||||
/// Separates room identifiers with an event id and possibly a query parameter into its components.
|
||||
MatrixIdentifierStringExtensionResults parseIdentifierIntoParts() {
|
||||
final isUrl = startsWith(AppConfig.inviteLinkPrefix);
|
||||
var s = this;
|
||||
if (isUrl) {
|
||||
// as we decode a component we may only call it on the url part *before* the "query" part
|
||||
final parts = replaceFirst(AppConfig.inviteLinkPrefix, '').split('?');
|
||||
s = Uri.decodeComponent(parts.removeAt(0)) + '?' + parts.join('?');
|
||||
}
|
||||
final match = RegExp(r'^([#!@+][^:]*:[^\/?]*)(?:\/(\$[^?]*))?(?:\?(.*))?$')
|
||||
.firstMatch(s);
|
||||
if (match == null) {
|
||||
return null;
|
||||
}
|
||||
return MatrixIdentifierStringExtensionResults(
|
||||
primaryIdentifier: match.group(1),
|
||||
secondaryIdentifier: match.group(2),
|
||||
queryString: match.group(3)?.isNotEmpty ?? false ? match.group(3) : null,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class MatrixIdentifierStringExtensionResults {
|
||||
final String primaryIdentifier;
|
||||
final String secondaryIdentifier;
|
||||
final String queryString;
|
||||
|
||||
MatrixIdentifierStringExtensionResults(
|
||||
{this.primaryIdentifier, this.secondaryIdentifier, this.queryString});
|
||||
}
|
||||
|
|
@ -8,7 +8,6 @@ import 'package:fluffychat/views/chat.dart';
|
|||
import 'package:fluffychat/views/discover_view.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
import 'matrix_identifier_string_extension.dart';
|
||||
|
||||
class UrlLauncher {
|
||||
final String url;
|
||||
|
|
@ -16,8 +15,9 @@ class UrlLauncher {
|
|||
const UrlLauncher(this.context, this.url);
|
||||
|
||||
void launchUrl() {
|
||||
if (url.startsWith(AppConfig.inviteLinkPrefix) ||
|
||||
{'#', '@', '!', '+', '\$'}.contains(url[0])) {
|
||||
if (url.toLowerCase().startsWith(AppConfig.inviteLinkPrefix) ||
|
||||
{'#', '@', '!', '+', '\$'}.contains(url[0]) ||
|
||||
url.toLowerCase().startsWith(AppConfig.schemePrefix)) {
|
||||
return openMatrixToUrl();
|
||||
}
|
||||
launch(url);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue