From 04235e097231d5c92642547fe81684ef5d228d6a Mon Sep 17 00:00:00 2001 From: klockky Date: Sat, 22 Aug 2026 13:46:00 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=BF=D0=B5=D1=80=D0=B5=D1=85=D0=BE?= =?UTF-8?q?=D0=B4=20=D0=BF=D0=BE=20komet://=20=D0=B2=D0=BD=D1=83=D1=82?= =?UTF-8?q?=D1=80=D0=B8=20=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/core/links/deep_link_service.dart | 2 ++ lib/core/utils/link_opener.dart | 10 ++++++++++ lib/frontend/widgets/link_text.dart | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/core/links/deep_link_service.dart b/lib/core/links/deep_link_service.dart index 33a56b8..7eb90b8 100644 --- a/lib/core/links/deep_link_service.dart +++ b/lib/core/links/deep_link_service.dart @@ -59,6 +59,8 @@ class DeepLinkService { _flushPending(); } + void handle(Uri uri) => _onUri(uri); + void _onUri(Uri uri) { if (_isLogExportLink(uri)) { _pendingLogExport = true; diff --git a/lib/core/utils/link_opener.dart b/lib/core/utils/link_opener.dart index 42ef5af..beb1a4b 100644 --- a/lib/core/utils/link_opener.dart +++ b/lib/core/utils/link_opener.dart @@ -3,6 +3,8 @@ import 'dart:io' show Platform; import 'package:flutter/widgets.dart'; import 'package:url_launcher/url_launcher.dart'; +import '../links/deep_link_service.dart'; + import '../../frontend/widgets/custom_notification.dart'; import '../../frontend/widgets/max_link_handler.dart'; @@ -21,7 +23,15 @@ bool leavesWebView(String? scheme) { return !_webViewSchemes.contains(scheme.toLowerCase()); } +const Set _appSchemes = {'komet', 'max'}; + Future openExternalUrl(BuildContext context, String url) async { + final appUri = Uri.tryParse(url.trim()); + if (appUri != null && _appSchemes.contains(appUri.scheme.toLowerCase())) { + DeepLinkService.instance.handle(appUri); + return; + } + if (await tryHandleMaxLink(context, url)) return; if (!context.mounted) return; diff --git a/lib/frontend/widgets/link_text.dart b/lib/frontend/widgets/link_text.dart index a9b3a0a..d2b88b8 100644 --- a/lib/frontend/widgets/link_text.dart +++ b/lib/frontend/widgets/link_text.dart @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; import '../../core/utils/link_opener.dart'; final RegExp linkPattern = RegExp( - r'(https?://[^\s<>]+' + r'((?:https?|komet|max)://[^\s<>]+' r'|www\.[^\s<>]+' r'|(?]*)?)', caseSensitive: false,