mirror of
https://github.com/jagandeepbrar/lunasea.git
synced 2026-08-31 04:32:32 +00:00
chore(browsers): remove support for setting browser (rely on iOS 15 native functionality)
[skip ci]
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
import 'package:lunasea/core.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
extension StringLinksExtension on String {
|
||||
Future<void> _openLink(String url, {Map<String, String>? 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<bool> _launchUniversalLink(String url) async =>
|
||||
await launch(url, forceSafariVC: false, universalLinksOnly: true);
|
||||
Future<bool> _launchCustomBrowser(String url) async =>
|
||||
await launch(url, forceSafariVC: false);
|
||||
Future<bool> _launch(String url,
|
||||
{required Map<String, String> headers}) async =>
|
||||
await launch(url, headers: headers);
|
||||
|
||||
/// Attempt to open this string as a URL in a browser.
|
||||
Future<void> lunaOpenGenericLink({Map<dynamic, dynamic>? headers}) async =>
|
||||
await _openLink(this, headers: headers?.cast<String, String>());
|
||||
|
||||
/// Attach this string as an ID/title to IMDB and attempt to launch it as a URL.
|
||||
Future<void> 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<void> 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<void> 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<void> 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<void> 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<void> 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<void> lunaOpenTVMaze() async =>
|
||||
await _openLink('https://www.tvmaze.com/shows/$this');
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
),
|
||||
],
|
||||
);
|
||||
|
||||
@@ -2,17 +2,27 @@ import 'package:lunasea/system/logger.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
extension StringAsLinksExtension on String {
|
||||
Future<bool> _launchUniversal(Uri uri, Map<String, String>? headers) async {
|
||||
print(await canLaunchUrl(uri));
|
||||
return await launchUrl(uri, mode: LaunchMode.externalNonBrowserApplication);
|
||||
Future<bool> _launchUniversal(uri) async {
|
||||
return await launchUrl(
|
||||
uri,
|
||||
webOnlyWindowName: '_blank',
|
||||
mode: LaunchMode.externalNonBrowserApplication,
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> openLink({
|
||||
Map<String, String>? headers,
|
||||
}) async {
|
||||
Future<bool> _launchDefault(uri) async {
|
||||
return await launchUrl(
|
||||
uri,
|
||||
webOnlyWindowName: '_blank',
|
||||
mode: LaunchMode.platformDefault,
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> 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<void> openImdb() async =>
|
||||
await 'https://www.imdb.com/title/$this'.openLink();
|
||||
|
||||
Future<void> openTmdbMovie() async {
|
||||
await 'https://www.themoviedb.org/movie/$this'.openLink();
|
||||
}
|
||||
|
||||
Future<void> openTmdbPerson() async {
|
||||
await 'https://www.themoviedb.org/person/$this'.openLink();
|
||||
}
|
||||
|
||||
Future<void> openTraktMovie() async {
|
||||
await 'https://trakt.tv/search/tmdb/$this?id_type=movie'.openLink();
|
||||
}
|
||||
|
||||
Future<void> openTraktSeries() async {
|
||||
await 'http://trakt.tv/search/tvdb/$this?id_type=show'.openLink();
|
||||
}
|
||||
|
||||
Future<void> openTvMaze() async {
|
||||
await 'https://www.tvmaze.com/shows/$this'.openLink();
|
||||
}
|
||||
|
||||
Future<void> openTvdbSeries() async {
|
||||
await 'https://www.thetvdb.com/?id=$this&tab=series'.openLink();
|
||||
}
|
||||
|
||||
Future<void> openYouTube() async {
|
||||
await 'https://www.youtube.com/watch?v=$this'.openLink();
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<LidarrAddDetails> with LunaScrollControllerMixin {
|
||||
title: 'No Discogs Page Available',
|
||||
message: 'No Discogs URL is available',
|
||||
);
|
||||
_arguments!.data.discogsLink!.lunaOpenGenericLink();
|
||||
_arguments!.data.discogsLink!.openLink();
|
||||
},
|
||||
),
|
||||
ValueListenableBuilder(
|
||||
|
||||
@@ -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<Lidarr> {
|
||||
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
|
||||
|
||||
@@ -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();
|
||||
},
|
||||
);
|
||||
|
||||
|
||||
@@ -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<LidarrDetailsOverview>
|
||||
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<LidarrDetailsOverview>
|
||||
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<LidarrDetailsOverview>
|
||||
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:
|
||||
|
||||
@@ -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<NZBGet> {
|
||||
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();
|
||||
|
||||
@@ -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<void> _webGUI(BuildContext context) async {
|
||||
context
|
||||
.read<RadarrState>()
|
||||
.host
|
||||
.lunaOpenGenericLink(headers: context.read<RadarrState>().headers);
|
||||
context.read<RadarrState>().host.openLink();
|
||||
}
|
||||
|
||||
Future<void> _backupDatabase(BuildContext context) async {
|
||||
|
||||
@@ -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<RadarrAddMovieDiscoveryResultTile> {
|
||||
}
|
||||
|
||||
Future<void>? _onLongPress() async =>
|
||||
widget.movie.tmdbId.toString().lunaOpenTheMovieDBMovie();
|
||||
widget.movie.tmdbId.toString().openTmdbMovie();
|
||||
}
|
||||
|
||||
@@ -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<RadarrAddMovieSearchResultTile> {
|
||||
}
|
||||
|
||||
Future<void>? _onLongPress() async =>
|
||||
widget.movie.tmdbId?.toString().lunaOpenTheMovieDBMovie();
|
||||
widget.movie.tmdbId?.toString().openTmdbMovie();
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -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<SABnzbd> {
|
||||
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();
|
||||
|
||||
@@ -861,33 +861,6 @@ class SettingsDialogs {
|
||||
return Tuple2(_flag, _profile);
|
||||
}
|
||||
|
||||
Future<Tuple2<bool, LunaBrowser?>> 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<Tuple2<bool, LunaLanguage?>> changeLanguage(
|
||||
BuildContext context,
|
||||
) async {
|
||||
|
||||
@@ -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<bool, LunaBrowser?> result =
|
||||
await SettingsDialogs().changeBrowser(context);
|
||||
if (result.item1) _db.put(result.item2);
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
if (LunaQuickActions.isSupported)
|
||||
LunaBlock(
|
||||
title: 'settings.QuickActions'.tr(),
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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<void> _webGUI(BuildContext context) async =>
|
||||
context.read<SonarrState>().host.lunaOpenGenericLink(
|
||||
headers: context.read<SonarrState>().headers,
|
||||
);
|
||||
context.read<SonarrState>().host.openLink();
|
||||
Future<void> _backupDatabase(BuildContext context) async =>
|
||||
SonarrAPIController().backupDatabase(context: context);
|
||||
Future<void> _searchAllMissing(BuildContext context) async {
|
||||
|
||||
@@ -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<SonarrSeriesAddSearchResultTile> {
|
||||
}
|
||||
|
||||
Future<void>? _onLongPress() async =>
|
||||
widget.series.tvdbId?.toString().lunaOpenTheTVDB();
|
||||
widget.series.tvdbId?.toString().openTvdbSeries();
|
||||
}
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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<void> _webGUI(BuildContext context) async =>
|
||||
context.read<TautulliState>().host!.lunaOpenGenericLink(
|
||||
headers: context.read<TautulliState>().headers,
|
||||
);
|
||||
context.read<TautulliState>().host!.openLink();
|
||||
Future<void> _backupConfig(BuildContext context) async =>
|
||||
TautulliAPIHelper().backupConfiguration(context: context);
|
||||
Future<void> _backupDatabase(BuildContext context) async =>
|
||||
|
||||
@@ -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<void> 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.
|
||||
|
||||
@@ -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),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user