From efd20249a91b4d1922e03726894ef19009e9a318 Mon Sep 17 00:00:00 2001 From: Jagandeep Brar Date: Tue, 10 May 2022 21:16:46 -0400 Subject: [PATCH] chore(browsers): remove support for setting browser (rely on iOS 15 native functionality) [skip ci] --- lib/core/database/luna_database.dart | 16 +--- lib/core/extensions.dart | 1 - lib/core/extensions/string.dart | 59 ------------ lib/core/models/types/browser.dart | 96 +------------------ lib/core/modules.dart | 5 +- lib/extensions/string_links.dart | 51 ++++++++-- .../external_modules/widgets/module_tile.dart | 3 +- lib/modules/lidarr/routes/add_details.dart | 3 +- lib/modules/lidarr/routes/lidarr.dart | 4 +- .../widgets/add_search_result_tile.dart | 3 +- .../lidarr/widgets/details_overview.dart | 10 +- lib/modules/nzbget/routes/nzbget.dart | 4 +- .../radarr/core/types/settings_global.dart | 6 +- .../widgets/discovery_results_tile.dart | 3 +- .../widgets/search_results_tile.dart | 3 +- .../movie_details/widgets/cast_crew_tile.dart | 3 +- .../widgets/overview_movie_links_section.dart | 6 +- .../system_status/widgets/health_tile.dart | 3 +- lib/modules/sabnzbd/routes/sabnzbd.dart | 4 +- lib/modules/settings/core/dialogs.dart | 27 ------ .../settings/routes/configuration/route.dart | 16 ---- .../settings/routes/notifications/route.dart | 3 +- .../sonarr/core/types/settings_global.dart | 5 +- .../widgets/search_results_tile.dart | 3 +- .../overview_series_links_section.dart | 10 +- .../tautulli/core/types/settings_global.dart | 5 +- lib/system/environment.dart | 4 +- lib/widgets/table/table_content.dart | 3 +- 28 files changed, 97 insertions(+), 262 deletions(-) delete mode 100644 lib/core/extensions/string.dart diff --git a/lib/core/database/luna_database.dart b/lib/core/database/luna_database.dart index 52173b0c..9c06d3bc 100644 --- a/lib/core/database/luna_database.dart +++ b/lib/core/database/luna_database.dart @@ -9,7 +9,6 @@ enum LunaDatabaseValue { THEME_AMOLED, THEME_AMOLED_BORDER, THEME_IMAGE_BACKGROUND_OPACITY, - SELECTED_BROWSER, QUICK_ACTIONS_LIDARR, QUICK_ACTIONS_RADARR, QUICK_ACTIONS_SONARR, @@ -26,11 +25,13 @@ enum LunaDatabaseValue { class LunaDatabase extends LunaModuleDatabase { @override void registerAdapters() { + // Deprecated + Hive.registerAdapter(DeprecatedLunaBrowserAdapter()); + // Active Hive.registerAdapter(ExternalModuleHiveObjectAdapter()); Hive.registerAdapter(IndexerHiveObjectAdapter()); Hive.registerAdapter(ProfileHiveObjectAdapter()); Hive.registerAdapter(LunaLogHiveObjectAdapter()); - Hive.registerAdapter(LunaBrowserAdapter()); Hive.registerAdapter(LunaIndexerIconAdapter()); Hive.registerAdapter(LunaLogTypeAdapter()); Hive.registerAdapter(LunaModuleAdapter()); @@ -43,10 +44,6 @@ class LunaDatabase extends LunaModuleDatabase { for (LunaDatabaseValue value in LunaDatabaseValue.values) { switch (value) { // Non-primitive values - case LunaDatabaseValue.SELECTED_BROWSER: - data[value.key] = - (LunaDatabaseValue.SELECTED_BROWSER.data as LunaBrowser?).key; - break; case LunaDatabaseValue.DEFAULT_LAUNCH_MODULE: data[value.key] = (LunaDatabaseValue.DEFAULT_LAUNCH_MODULE.data as LunaModule).key; @@ -72,9 +69,6 @@ class LunaDatabase extends LunaModuleDatabase { if (value != null) switch (value) { // Non-primitive values - case LunaDatabaseValue.SELECTED_BROWSER: - value.put(LunaBrowser.APPLE_SAFARI.fromKey(config[key])); - break; case LunaDatabaseValue.DEFAULT_LAUNCH_MODULE: value.put(LunaModule.DASHBOARD.fromKey(config[key])); break; @@ -149,8 +143,6 @@ extension LunaDatabaseValueExtension on LunaDatabaseValue { return value is bool; case LunaDatabaseValue.THEME_IMAGE_BACKGROUND_OPACITY: return value is int; - case LunaDatabaseValue.SELECTED_BROWSER: - return value is LunaBrowser; case LunaDatabaseValue.QUICK_ACTIONS_LIDARR: return value is bool; case LunaDatabaseValue.QUICK_ACTIONS_RADARR: @@ -186,8 +178,6 @@ extension LunaDatabaseValueExtension on LunaDatabaseValue { return true; case LunaDatabaseValue.DRAWER_MANUAL_ORDER: return null; - case LunaDatabaseValue.SELECTED_BROWSER: - return LunaBrowser.APPLE_SAFARI; case LunaDatabaseValue.THEME_AMOLED: return false; case LunaDatabaseValue.THEME_AMOLED_BORDER: diff --git a/lib/core/extensions.dart b/lib/core/extensions.dart index d2ecd848..f7168a8a 100644 --- a/lib/core/extensions.dart +++ b/lib/core/extensions.dart @@ -7,4 +7,3 @@ export 'extensions/int.dart'; export 'extensions/navigator_state.dart'; export 'extensions/page_controller.dart'; export 'extensions/scroll_controller.dart'; -export 'extensions/string.dart'; diff --git a/lib/core/extensions/string.dart b/lib/core/extensions/string.dart deleted file mode 100644 index 043b6471..00000000 --- a/lib/core/extensions/string.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'package:lunasea/core.dart'; -import 'package:url_launcher/url_launcher.dart'; - -extension StringLinksExtension on String { - Future _openLink(String url, {Map? headers}) async { - try { - //Attempt to launch the link forced as a universal link - if (await _launchUniversalLink(url)) return; - //If that fails and we're using a custom browser, format the link for the correct browser and attempt to launch - LunaBrowser? _browser = LunaDatabaseValue.SELECTED_BROWSER.data; - if (_browser != LunaBrowser.APPLE_SAFARI && - await _launchCustomBrowser(_browser.formatted(url))) return; - //If all else fails, just launch it in Safari/stock browser - await _launch(url, headers: headers ?? {}); - } catch (error, stack) { - LunaLogger().error('Unable to open link: $url', error, stack); - } - } - - Future _launchUniversalLink(String url) async => - await launch(url, forceSafariVC: false, universalLinksOnly: true); - Future _launchCustomBrowser(String url) async => - await launch(url, forceSafariVC: false); - Future _launch(String url, - {required Map headers}) async => - await launch(url, headers: headers); - - /// Attempt to open this string as a URL in a browser. - Future lunaOpenGenericLink({Map? headers}) async => - await _openLink(this, headers: headers?.cast()); - - /// Attach this string as an ID/title to IMDB and attempt to launch it as a URL. - Future lunaOpenIMDB() async => - await _openLink('https://www.imdb.com/title/$this'); - - /// Attach this string as a movie ID to TheMovieDB and attempt to launch it as a URL. - Future lunaOpenTheMovieDBMovie() async => - await _openLink('https://www.themoviedb.org/movie/$this'); - - /// Attach this string as a person ID to TheMovieDB and attempt to launch it as a URL. - Future lunaOpenTheMovieDBCredits() async => - await _openLink('https://www.themoviedb.org/person/$this'); - - /// Attach this string as a series ID to TheTVDB and attempt to launch it as a URL. - Future lunaOpenTheTVDB() async => - await _openLink('https://www.thetvdb.com/?id=$this&tab=series'); - - /// Attach this string as a TVDB ID to Trakt and attempt to launch it as a URL. - Future lunaOpenTraktSeries() async => - await _openLink('http://trakt.tv/search/tvdb/$this?id_type=show'); - - /// Attach this string as a TMDB ID to Trakt and attempt to launch it as a URL. - Future lunaOpenTraktMovie() async => - await _openLink('https://trakt.tv/search/tmdb/$this?id_type=movie'); - - /// Attach this string as a series ID to TVMaze and attempt to launch it as a URL. - Future lunaOpenTVMaze() async => - await _openLink('https://www.tvmaze.com/shows/$this'); -} diff --git a/lib/core/models/types/browser.dart b/lib/core/models/types/browser.dart index 1a4ec031..a3deb76a 100644 --- a/lib/core/models/types/browser.dart +++ b/lib/core/models/types/browser.dart @@ -1,10 +1,9 @@ -import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; part 'browser.g.dart'; -@HiveType(typeId: 11, adapterName: 'LunaBrowserAdapter') -enum LunaBrowser { +@HiveType(typeId: 11, adapterName: 'DeprecatedLunaBrowserAdapter') +enum DeprecatedLunaBrowser { @HiveField(0) APPLE_SAFARI, @HiveField(1) @@ -16,94 +15,3 @@ enum LunaBrowser { @HiveField(4) MOZILLA_FIREFOX, } - -extension LunaBrowserExtension on LunaBrowser? { - String? get name { - switch (this) { - case LunaBrowser.APPLE_SAFARI: - return 'Apple Safari'; - case LunaBrowser.BRAVE_BROWSER: - return 'Brave Browser'; - case LunaBrowser.GOOGLE_CHROME: - return 'Google Chrome'; - case LunaBrowser.MICROSOFT_EDGE: - return 'Microsoft Edge'; - case LunaBrowser.MOZILLA_FIREFOX: - return 'Mozilla Firefox'; - default: - return null; - } - } - - String? get key { - switch (this) { - case LunaBrowser.APPLE_SAFARI: - return 'applesafari'; - case LunaBrowser.BRAVE_BROWSER: - return 'bravebrowser'; - case LunaBrowser.GOOGLE_CHROME: - return 'googlechrome'; - case LunaBrowser.MICROSOFT_EDGE: - return 'microsoftedge'; - case LunaBrowser.MOZILLA_FIREFOX: - return 'mozillafirefox'; - default: - return null; - } - } - - LunaBrowser? fromKey(String? key) { - switch (key) { - case 'applesafari': - return LunaBrowser.APPLE_SAFARI; - case 'bravebrowser': - return LunaBrowser.BRAVE_BROWSER; - case 'googlechrome': - return LunaBrowser.GOOGLE_CHROME; - case 'microsoftedge': - return LunaBrowser.MICROSOFT_EDGE; - case 'mozillafirefox': - return LunaBrowser.MOZILLA_FIREFOX; - default: - return null; - } - } - - IconData? get icon { - switch (this) { - case LunaBrowser.APPLE_SAFARI: - return LunaBrandIcons.safari; - case LunaBrowser.BRAVE_BROWSER: - return LunaBrandIcons.bravebrowser; - case LunaBrowser.GOOGLE_CHROME: - return LunaBrandIcons.chrome; - case LunaBrowser.MICROSOFT_EDGE: - return LunaBrandIcons.microsoftedge; - case LunaBrowser.MOZILLA_FIREFOX: - return LunaBrandIcons.firefox; - default: - return null; - } - } - - String formatted(String url) { - bool isHttps = url.substring(0, min(8, url.length)) == 'https://'; - switch (this) { - case LunaBrowser.BRAVE_BROWSER: - return 'brave://open-url?url=$url'; - case LunaBrowser.GOOGLE_CHROME: - return isHttps - ? url.replaceFirst('https://', 'googlechromes://') - : url.replaceFirst('http://', 'googlechrome://'); - case LunaBrowser.MICROSOFT_EDGE: - return isHttps - ? url.replaceFirst('https://', 'microsoft-edge-https://') - : url.replaceFirst('http://', 'microsoft-edge-http://'); - case LunaBrowser.MOZILLA_FIREFOX: - return 'firefox://open-url?url=$url'; - case LunaBrowser.APPLE_SAFARI: - default: - return url; - } - } -} diff --git a/lib/core/modules.dart b/lib/core/modules.dart index 0ee45452..42352611 100644 --- a/lib/core/modules.dart +++ b/lib/core/modules.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:lunasea/extensions/string_links.dart'; import 'package:quick_actions/quick_actions.dart'; import 'package:lunasea/core.dart'; @@ -621,13 +622,13 @@ extension LunaModuleExtension on LunaModule { LunaButton.text( text: 'GitHub', icon: LunaBrandIcons.github, - onTap: this.github!.lunaOpenGenericLink, + onTap: this.github!.openLink, ), if (this.website != null) LunaButton.text( text: 'lunasea.Website'.tr(), icon: Icons.home_rounded, - onTap: this.website!.lunaOpenGenericLink, + onTap: this.website!.openLink, ), ], ); diff --git a/lib/extensions/string_links.dart b/lib/extensions/string_links.dart index ea7b55e9..5fc9dd5e 100644 --- a/lib/extensions/string_links.dart +++ b/lib/extensions/string_links.dart @@ -2,17 +2,27 @@ import 'package:lunasea/system/logger.dart'; import 'package:url_launcher/url_launcher.dart'; extension StringAsLinksExtension on String { - Future _launchUniversal(Uri uri, Map? headers) async { - print(await canLaunchUrl(uri)); - return await launchUrl(uri, mode: LaunchMode.externalNonBrowserApplication); + Future _launchUniversal(uri) async { + return await launchUrl( + uri, + webOnlyWindowName: '_blank', + mode: LaunchMode.externalNonBrowserApplication, + ); } - Future openLink({ - Map? headers, - }) async { + Future _launchDefault(uri) async { + return await launchUrl( + uri, + webOnlyWindowName: '_blank', + mode: LaunchMode.platformDefault, + ); + } + + Future openLink() async { try { Uri uri = Uri.parse(this); - if (await _launchUniversal(uri, headers)) return; + if (await _launchUniversal(uri)) return; + await _launchDefault(uri); } catch (error, stack) { LunaLogger().error( 'Unable to open URL', @@ -22,6 +32,33 @@ extension StringAsLinksExtension on String { } } + Future openImdb() async => + await 'https://www.imdb.com/title/$this'.openLink(); + + Future openTmdbMovie() async { + await 'https://www.themoviedb.org/movie/$this'.openLink(); + } + + Future openTmdbPerson() async { + await 'https://www.themoviedb.org/person/$this'.openLink(); + } + + Future openTraktMovie() async { + await 'https://trakt.tv/search/tmdb/$this?id_type=movie'.openLink(); + } + + Future openTraktSeries() async { + await 'http://trakt.tv/search/tvdb/$this?id_type=show'.openLink(); + } + + Future openTvMaze() async { + await 'https://www.tvmaze.com/shows/$this'.openLink(); + } + + Future openTvdbSeries() async { + await 'https://www.thetvdb.com/?id=$this&tab=series'.openLink(); + } + Future openYouTube() async { await 'https://www.youtube.com/watch?v=$this'.openLink(); } diff --git a/lib/modules/external_modules/routes/external_modules/widgets/module_tile.dart b/lib/modules/external_modules/routes/external_modules/widgets/module_tile.dart index ee44443b..31d64756 100644 --- a/lib/modules/external_modules/routes/external_modules/widgets/module_tile.dart +++ b/lib/modules/external_modules/routes/external_modules/widgets/module_tile.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; +import 'package:lunasea/extensions/string_links.dart'; class ExternalModulesModuleTile extends StatelessWidget { final ExternalModuleHiveObject? module; @@ -15,7 +16,7 @@ class ExternalModulesModuleTile extends StatelessWidget { title: module!.displayName, body: [TextSpan(text: module!.host)], trailing: const LunaIconButton.arrow(), - onTap: () async => module!.host!.lunaOpenGenericLink(), + onTap: module!.host!.openLink, ); } } diff --git a/lib/modules/lidarr/routes/add_details.dart b/lib/modules/lidarr/routes/add_details.dart index 375a48e4..fdb65af5 100644 --- a/lib/modules/lidarr/routes/add_details.dart +++ b/lib/modules/lidarr/routes/add_details.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:lunasea/core.dart'; +import 'package:lunasea/extensions/string_links.dart'; import 'package:lunasea/modules/lidarr.dart'; class LidarrAddDetailsArguments { @@ -161,7 +162,7 @@ class _State extends State with LunaScrollControllerMixin { title: 'No Discogs Page Available', message: 'No Discogs URL is available', ); - _arguments!.data.discogsLink!.lunaOpenGenericLink(); + _arguments!.data.discogsLink!.openLink(); }, ), ValueListenableBuilder( diff --git a/lib/modules/lidarr/routes/lidarr.dart b/lib/modules/lidarr/routes/lidarr.dart index 0bcb85a9..e949aadc 100644 --- a/lib/modules/lidarr/routes/lidarr.dart +++ b/lib/modules/lidarr/routes/lidarr.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; +import 'package:lunasea/extensions/string_links.dart'; import 'package:lunasea/modules/lidarr.dart'; class Lidarr extends StatefulWidget { @@ -144,8 +145,7 @@ class _State extends State { switch (values[1]) { case 'web_gui': ProfileHiveObject profile = LunaProfile.current; - await profile.lidarrHost - ?.lunaOpenGenericLink(headers: profile.lidarrHeaders); + await profile.lidarrHost?.openLink(); break; case 'update_library': await _api diff --git a/lib/modules/lidarr/widgets/add_search_result_tile.dart b/lib/modules/lidarr/widgets/add_search_result_tile.dart index 11e25c2d..8a3711e1 100644 --- a/lib/modules/lidarr/widgets/add_search_result_tile.dart +++ b/lib/modules/lidarr/widgets/add_search_result_tile.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; +import 'package:lunasea/extensions/string_links.dart'; import 'package:lunasea/modules/lidarr.dart'; class LidarrAddSearchResultTile extends StatelessWidget { @@ -32,7 +33,7 @@ class LidarrAddSearchResultTile extends StatelessWidget { title: 'No Discogs Page Available', message: 'No Discogs URL is available', ); - data.discogsLink!.lunaOpenGenericLink(); + data.discogsLink!.openLink(); }, ); diff --git a/lib/modules/lidarr/widgets/details_overview.dart b/lib/modules/lidarr/widgets/details_overview.dart index 88270930..2abba027 100644 --- a/lib/modules/lidarr/widgets/details_overview.dart +++ b/lib/modules/lidarr/widgets/details_overview.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; +import 'package:lunasea/extensions/string_links.dart'; import 'package:lunasea/modules/lidarr.dart'; class LidarrDetailsOverview extends StatefulWidget { @@ -46,8 +47,7 @@ class _State extends State padding: const EdgeInsets.all(12.0), ), borderRadius: BorderRadius.circular(LunaUI.BORDER_RADIUS), - onTap: () async => - widget.data.bandsintownURI!.lunaOpenGenericLink(), + onTap: () async => widget.data.bandsintownURI!.openLink(), ), height: 50.0, margin: @@ -62,8 +62,7 @@ class _State extends State padding: const EdgeInsets.all(12.0), ), borderRadius: BorderRadius.circular(LunaUI.BORDER_RADIUS), - onTap: () async => - widget.data.discogsURI!.lunaOpenGenericLink(), + onTap: () async => widget.data.discogsURI!.openLink(), ), height: 50.0, margin: @@ -78,8 +77,7 @@ class _State extends State padding: const EdgeInsets.all(12.0), ), borderRadius: BorderRadius.circular(LunaUI.BORDER_RADIUS), - onTap: () async => - widget.data.lastfmURI!.lunaOpenGenericLink(), + onTap: () async => widget.data.lastfmURI!.openLink(), ), height: 50.0, margin: diff --git a/lib/modules/nzbget/routes/nzbget.dart b/lib/modules/nzbget/routes/nzbget.dart index 2ba99dc3..2cb814d9 100644 --- a/lib/modules/nzbget/routes/nzbget.dart +++ b/lib/modules/nzbget/routes/nzbget.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; +import 'package:lunasea/extensions/string_links.dart'; import 'package:lunasea/modules/nzbget.dart'; import 'package:lunasea/system/filesystem/file.dart'; @@ -113,8 +114,7 @@ class _State extends State { switch (values[1]) { case 'web_gui': ProfileHiveObject profile = LunaProfile.current; - await profile.nzbgetHost - ?.lunaOpenGenericLink(headers: profile.nzbgetHeaders); + await profile.nzbgetHost?.openLink(); break; case 'add_nzb': _addNZB(); diff --git a/lib/modules/radarr/core/types/settings_global.dart b/lib/modules/radarr/core/types/settings_global.dart index 46c94f91..6d7f38bc 100644 --- a/lib/modules/radarr/core/types/settings_global.dart +++ b/lib/modules/radarr/core/types/settings_global.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; +import 'package:lunasea/extensions/string_links.dart'; import 'package:lunasea/modules/radarr.dart'; enum RadarrGlobalSettingsType { @@ -57,10 +58,7 @@ extension RadarrGlobalSettingsTypeExtension on RadarrGlobalSettingsType { } Future _webGUI(BuildContext context) async { - context - .read() - .host - .lunaOpenGenericLink(headers: context.read().headers); + context.read().host.openLink(); } Future _backupDatabase(BuildContext context) async { diff --git a/lib/modules/radarr/routes/add_movie/widgets/discovery_results_tile.dart b/lib/modules/radarr/routes/add_movie/widgets/discovery_results_tile.dart index 1528920d..79b3635d 100644 --- a/lib/modules/radarr/routes/add_movie/widgets/discovery_results_tile.dart +++ b/lib/modules/radarr/routes/add_movie/widgets/discovery_results_tile.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; import 'package:lunasea/extensions/string.dart'; +import 'package:lunasea/extensions/string_links.dart'; import 'package:lunasea/modules/radarr.dart'; class RadarrAddMovieDiscoveryResultTile extends StatefulWidget { @@ -82,5 +83,5 @@ class _State extends State { } Future? _onLongPress() async => - widget.movie.tmdbId.toString().lunaOpenTheMovieDBMovie(); + widget.movie.tmdbId.toString().openTmdbMovie(); } diff --git a/lib/modules/radarr/routes/add_movie/widgets/search_results_tile.dart b/lib/modules/radarr/routes/add_movie/widgets/search_results_tile.dart index f5ad7c28..45eb7b54 100644 --- a/lib/modules/radarr/routes/add_movie/widgets/search_results_tile.dart +++ b/lib/modules/radarr/routes/add_movie/widgets/search_results_tile.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; import 'package:lunasea/extensions/string.dart'; +import 'package:lunasea/extensions/string_links.dart'; import 'package:lunasea/modules/radarr.dart'; class RadarrAddMovieSearchResultTile extends StatefulWidget { @@ -90,5 +91,5 @@ class _State extends State { } Future? _onLongPress() async => - widget.movie.tmdbId?.toString().lunaOpenTheMovieDBMovie(); + widget.movie.tmdbId?.toString().openTmdbMovie(); } diff --git a/lib/modules/radarr/routes/movie_details/widgets/cast_crew_tile.dart b/lib/modules/radarr/routes/movie_details/widgets/cast_crew_tile.dart index e394e640..0201baca 100644 --- a/lib/modules/radarr/routes/movie_details/widgets/cast_crew_tile.dart +++ b/lib/modules/radarr/routes/movie_details/widgets/cast_crew_tile.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; +import 'package:lunasea/extensions/string_links.dart'; import 'package:lunasea/modules/radarr.dart'; class RadarrMovieDetailsCastCrewTile extends StatelessWidget { @@ -28,7 +29,7 @@ class RadarrMovieDetailsCastCrewTile extends StatelessWidget { ), ), ], - onTap: credits.personTmdbId?.toString().lunaOpenTheMovieDBCredits, + onTap: credits.personTmdbId?.toString().openTmdbPerson, ); } diff --git a/lib/modules/radarr/routes/movie_details/widgets/overview_movie_links_section.dart b/lib/modules/radarr/routes/movie_details/widgets/overview_movie_links_section.dart index dfe7d8e3..b439e865 100644 --- a/lib/modules/radarr/routes/movie_details/widgets/overview_movie_links_section.dart +++ b/lib/modules/radarr/routes/movie_details/widgets/overview_movie_links_section.dart @@ -25,7 +25,7 @@ class RadarrMovieDetailsOverviewLinksSection extends StatelessWidget { padding: const EdgeInsets.all(12.0), ), borderRadius: BorderRadius.circular(LunaUI.BORDER_RADIUS), - onTap: () async => await movie?.imdbId?.lunaOpenIMDB(), + onTap: () async => await movie?.imdbId?.openImdb(), ), height: 50.0, margin: const EdgeInsets.symmetric(horizontal: 6.0, vertical: 6.0), @@ -40,7 +40,7 @@ class RadarrMovieDetailsOverviewLinksSection extends StatelessWidget { ), borderRadius: BorderRadius.circular(LunaUI.BORDER_RADIUS), onTap: () async => - await movie?.tmdbId?.toString().lunaOpenTheMovieDBMovie(), + await movie?.tmdbId?.toString().openTmdbMovie(), ), height: 50.0, margin: const EdgeInsets.symmetric(horizontal: 6.0, vertical: 6.0), @@ -55,7 +55,7 @@ class RadarrMovieDetailsOverviewLinksSection extends StatelessWidget { ), borderRadius: BorderRadius.circular(LunaUI.BORDER_RADIUS), onTap: () async => - await movie?.tmdbId?.toString().lunaOpenTraktMovie(), + await movie?.tmdbId?.toString().openTraktMovie(), ), height: 50.0, margin: const EdgeInsets.symmetric(horizontal: 6.0, vertical: 6.0), diff --git a/lib/modules/radarr/routes/system_status/widgets/health_tile.dart b/lib/modules/radarr/routes/system_status/widgets/health_tile.dart index ccff7327..b7c5e769 100644 --- a/lib/modules/radarr/routes/system_status/widgets/health_tile.dart +++ b/lib/modules/radarr/routes/system_status/widgets/health_tile.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; +import 'package:lunasea/extensions/string_links.dart'; import 'package:lunasea/modules/radarr.dart'; class RadarrHealthCheckTile extends StatelessWidget { @@ -20,7 +21,7 @@ class RadarrHealthCheckTile extends StatelessWidget { ], expandedTableContent: expandedTable(), expandedHighlightedNodes: highlightedNodes(), - onLongPress: healthCheck.wikiUrl!.lunaOpenGenericLink, + onLongPress: healthCheck.wikiUrl!.openLink, ); } diff --git a/lib/modules/sabnzbd/routes/sabnzbd.dart b/lib/modules/sabnzbd/routes/sabnzbd.dart index 4f7f6060..c60c9ab3 100644 --- a/lib/modules/sabnzbd/routes/sabnzbd.dart +++ b/lib/modules/sabnzbd/routes/sabnzbd.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; +import 'package:lunasea/extensions/string_links.dart'; import 'package:lunasea/modules/sabnzbd.dart'; import 'package:lunasea/system/filesystem/file.dart'; import 'package:lunasea/system/filesystem/filesystem.dart'; @@ -112,8 +113,7 @@ class _State extends State { switch (values[1]) { case 'web_gui': ProfileHiveObject profile = LunaProfile.current; - await profile.sabnzbdHost - ?.lunaOpenGenericLink(headers: profile.sabnzbdHeaders); + await profile.sabnzbdHost?.openLink(); break; case 'add_nzb': _addNZB(); diff --git a/lib/modules/settings/core/dialogs.dart b/lib/modules/settings/core/dialogs.dart index df165523..15f96891 100644 --- a/lib/modules/settings/core/dialogs.dart +++ b/lib/modules/settings/core/dialogs.dart @@ -861,33 +861,6 @@ class SettingsDialogs { return Tuple2(_flag, _profile); } - Future> changeBrowser(BuildContext context) async { - bool _flag = false; - LunaBrowser? _browser; - - void _setValues(bool flag, LunaBrowser browser) { - _flag = flag; - _browser = browser; - Navigator.of(context).pop(); - } - - await LunaDialog.dialog( - context: context, - title: 'settings.OpenLinksIn'.tr(), - content: List.generate( - LunaBrowser.values.length, - (index) => LunaDialog.tile( - icon: LunaBrowser.values[index].icon, - iconColor: LunaColours().byListIndex(index), - text: LunaBrowser.values[index].name!, - onTap: () => _setValues(true, LunaBrowser.values[index]), - ), - ), - contentPadding: LunaDialog.listDialogContentPadding(), - ); - return Tuple2(_flag, _browser); - } - Future> changeLanguage( BuildContext context, ) async { diff --git a/lib/modules/settings/routes/configuration/route.dart b/lib/modules/settings/routes/configuration/route.dart index 772c912d..1b40abc2 100644 --- a/lib/modules/settings/routes/configuration/route.dart +++ b/lib/modules/settings/routes/configuration/route.dart @@ -89,22 +89,6 @@ class _State extends State<_Widget> with LunaScrollControllerMixin { onTap: () async => SettingsConfigurationNetworkRouter().navigateTo(context), ), - if (LunaPlatform().isIOS) - LunaDatabaseValue.SELECTED_BROWSER.listen( - builder: (context, box, widget) { - LunaDatabaseValue _db = LunaDatabaseValue.SELECTED_BROWSER; - return LunaBlock( - title: 'settings.OpenLinksIn'.tr(), - body: [TextSpan(text: (_db.data as LunaBrowser?).name)], - trailing: LunaIconButton(icon: (_db.data as LunaBrowser?).icon), - onTap: () async { - Tuple2 result = - await SettingsDialogs().changeBrowser(context); - if (result.item1) _db.put(result.item2); - }, - ); - }, - ), if (LunaQuickActions.isSupported) LunaBlock( title: 'settings.QuickActions'.tr(), diff --git a/lib/modules/settings/routes/notifications/route.dart b/lib/modules/settings/routes/notifications/route.dart index 397bb1e8..9a480483 100644 --- a/lib/modules/settings/routes/notifications/route.dart +++ b/lib/modules/settings/routes/notifications/route.dart @@ -61,8 +61,7 @@ class _State extends State<_Widget> with LunaScrollControllerMixin { title: 'Getting Started', body: const [TextSpan(text: 'Information & Setup Instructions')], trailing: const LunaIconButton.arrow(), - onTap: - LunaLinks.NOTIFICATIONS_GETTING_STARTED.url.lunaOpenGenericLink, + onTap: LunaLinks.NOTIFICATIONS_GETTING_STARTED.launch, ), LunaDivider(), ..._modules(), diff --git a/lib/modules/sonarr/core/types/settings_global.dart b/lib/modules/sonarr/core/types/settings_global.dart index 5bba24dd..2a5804fd 100644 --- a/lib/modules/sonarr/core/types/settings_global.dart +++ b/lib/modules/sonarr/core/types/settings_global.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; +import 'package:lunasea/extensions/string_links.dart'; import 'package:lunasea/modules/sonarr.dart'; enum SonarrGlobalSettingsType { @@ -57,9 +58,7 @@ extension SonarrGlobalSettingsTypeExtension on SonarrGlobalSettingsType { } Future _webGUI(BuildContext context) async => - context.read().host.lunaOpenGenericLink( - headers: context.read().headers, - ); + context.read().host.openLink(); Future _backupDatabase(BuildContext context) async => SonarrAPIController().backupDatabase(context: context); Future _searchAllMissing(BuildContext context) async { diff --git a/lib/modules/sonarr/routes/add_series/widgets/search_results_tile.dart b/lib/modules/sonarr/routes/add_series/widgets/search_results_tile.dart index 3b9961e2..6f1379c3 100644 --- a/lib/modules/sonarr/routes/add_series/widgets/search_results_tile.dart +++ b/lib/modules/sonarr/routes/add_series/widgets/search_results_tile.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; import 'package:lunasea/extensions/string.dart'; +import 'package:lunasea/extensions/string_links.dart'; import 'package:lunasea/modules/sonarr.dart'; class SonarrSeriesAddSearchResultTile extends StatefulWidget { @@ -94,5 +95,5 @@ class _State extends State { } Future? _onLongPress() async => - widget.series.tvdbId?.toString().lunaOpenTheTVDB(); + widget.series.tvdbId?.toString().openTvdbSeries(); } diff --git a/lib/modules/sonarr/routes/series_details/widgets/overview_series_links_section.dart b/lib/modules/sonarr/routes/series_details/widgets/overview_series_links_section.dart index cf4d8f76..81117e0a 100644 --- a/lib/modules/sonarr/routes/series_details/widgets/overview_series_links_section.dart +++ b/lib/modules/sonarr/routes/series_details/widgets/overview_series_links_section.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; +import 'package:lunasea/extensions/string_links.dart'; import 'package:lunasea/modules/sonarr.dart'; class SonarrSeriesDetailsOverviewLinksSection extends StatelessWidget { @@ -24,7 +25,7 @@ class SonarrSeriesDetailsOverviewLinksSection extends StatelessWidget { padding: const EdgeInsets.all(12.0), ), borderRadius: BorderRadius.circular(LunaUI.BORDER_RADIUS), - onTap: () async => await series.imdbId!.lunaOpenIMDB(), + onTap: () async => await series.imdbId!.openImdb(), ), height: 50.0, margin: const EdgeInsets.symmetric(horizontal: 6.0, vertical: 6.0), @@ -39,7 +40,7 @@ class SonarrSeriesDetailsOverviewLinksSection extends StatelessWidget { ), borderRadius: BorderRadius.circular(LunaUI.BORDER_RADIUS), onTap: () async => - await series.tvdbId!.toString().lunaOpenTraktSeries(), + await series.tvdbId!.toString().openTraktSeries(), ), height: 50.0, margin: const EdgeInsets.symmetric(horizontal: 6.0, vertical: 6.0), @@ -54,7 +55,7 @@ class SonarrSeriesDetailsOverviewLinksSection extends StatelessWidget { ), borderRadius: BorderRadius.circular(LunaUI.BORDER_RADIUS), onTap: () async => - await series.tvdbId!.toString().lunaOpenTheTVDB(), + await series.tvdbId!.toString().openTvdbSeries(), ), height: 50.0, margin: const EdgeInsets.symmetric(horizontal: 6.0, vertical: 6.0), @@ -68,8 +69,7 @@ class SonarrSeriesDetailsOverviewLinksSection extends StatelessWidget { padding: const EdgeInsets.all(12.0), ), borderRadius: BorderRadius.circular(LunaUI.BORDER_RADIUS), - onTap: () async => - await series.tvMazeId!.toString().lunaOpenTVMaze(), + onTap: () async => await series.tvMazeId!.toString().openTvMaze(), ), height: 50.0, margin: const EdgeInsets.symmetric(horizontal: 6.0, vertical: 6.0), diff --git a/lib/modules/tautulli/core/types/settings_global.dart b/lib/modules/tautulli/core/types/settings_global.dart index 58a35e6f..ac59ce54 100644 --- a/lib/modules/tautulli/core/types/settings_global.dart +++ b/lib/modules/tautulli/core/types/settings_global.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; +import 'package:lunasea/extensions/string_links.dart'; import 'package:lunasea/modules/tautulli.dart'; enum TautulliGlobalSettingsType { @@ -64,9 +65,7 @@ extension TautulliGlobalSettingsTypeExtension on TautulliGlobalSettingsType { } Future _webGUI(BuildContext context) async => - context.read().host!.lunaOpenGenericLink( - headers: context.read().headers, - ); + context.read().host!.openLink(); Future _backupConfig(BuildContext context) async => TautulliAPIHelper().backupConfiguration(context: context); Future _backupDatabase(BuildContext context) async => diff --git a/lib/system/environment.dart b/lib/system/environment.dart index 3674f039..6b623ae9 100644 --- a/lib/system/environment.dart +++ b/lib/system/environment.dart @@ -1,5 +1,5 @@ import 'package:envify/envify.dart'; -import 'package:lunasea/core/extensions.dart'; +import 'package:lunasea/extensions/string_links.dart'; import 'package:lunasea/vendor.dart'; import 'package:lunasea/system/flavor.dart'; @@ -16,7 +16,7 @@ class LunaEnvironment { Future openCommitHistory() async { String _base = 'https://github.com/JagandeepBrar/LunaSea/commits'; - return '$_base/$commit'.lunaOpenGenericLink(); + return '$_base/$commit'.openLink(); } /// Returns if the given flavor is "lower" than the given environment. diff --git a/lib/widgets/table/table_content.dart b/lib/widgets/table/table_content.dart index b5d91ad0..11205bee 100644 --- a/lib/widgets/table/table_content.dart +++ b/lib/widgets/table/table_content.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:lunasea/core.dart'; import 'package:lunasea/extensions/string.dart'; +import 'package:lunasea/extensions/string_links.dart'; enum _Type { CONTENT, @@ -114,7 +115,7 @@ class LunaTableContent extends StatelessWidget { left: LunaUI.DEFAULT_MARGIN_SIZE / 2, ), ), - onTap: !bodyIsUrl ? null : body!.lunaOpenGenericLink, + onTap: !bodyIsUrl ? null : body!.openLink, onLongPress: !bodyIsUrl ? null : () => body!.copyToClipboard(), borderRadius: BorderRadius.circular(LunaUI.BORDER_RADIUS), ),