diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 45cfba3c0..eee43a7b7 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -1566,6 +1566,8 @@ "quickConnectPostFailed": "Failed to get quick connect code", "quickConnectLoginUsingCode": "Using quick connect", "quickConnectEnterCodeDescription": "Enter the code below to login", + "openJellyfinQuickConnect": "Open Jellyfin QuickConnect", + "@openJellyfinQuickConnect": {}, "showMore": "Show more", "showLess": "Show less", "itemColorsTitle": "Item colors", diff --git a/lib/screens/login/login_code_dialog.dart b/lib/screens/login/login_code_dialog.dart index 61121ce01..4365a353b 100644 --- a/lib/screens/login/login_code_dialog.dart +++ b/lib/screens/login/login_code_dialog.dart @@ -4,11 +4,13 @@ import 'package:async/async.dart'; import 'package:fladder/jellyfin/jellyfin_open_api.swagger.dart'; import 'package:fladder/providers/api_provider.dart'; import 'package:fladder/providers/auth_provider.dart'; +import 'package:fladder/screens/shared/media/external_urls.dart' as ext; import 'package:fladder/util/clipboard_helper.dart'; import 'package:fladder/util/list_padding.dart'; import 'package:fladder/util/localization_helper.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:iconsax_plus/iconsax_plus.dart'; Future openLoginCodeDialog( BuildContext context, { @@ -120,6 +122,23 @@ class _LoginCodeDialogState extends ConsumerState { ), ), ), + TextButton.icon( + onPressed: () async { + final baseUrl = ref.read(serverUrlProvider); + if (baseUrl == null || baseUrl.isEmpty) return; + final url = buildServerUriFromBase( + baseUrl, + pathSegments: ['web'], + relativeUrl: '#/quickconnect', + )?.toString(); + if (url != null && url.isNotEmpty) { + await ext.launchUrl(context, url); + timer?.reset(); + } + }, + icon: const Icon(IconsaxPlusLinear.export_1), + label: Text(context.localized.openJellyfinQuickConnect), + ), ], FilledButton( onPressed: () async {