diff --git a/.env.example b/.env.example index af1b481f..17a74877 100644 --- a/.env.example +++ b/.env.example @@ -4,4 +4,9 @@ PASSWORD= # The format: # SPOTIFY_SECRETS=clintId1:clientSecret1,clientId2:clientSecret2 -SPOTIFY_SECRETS= \ No newline at end of file +SPOTIFY_SECRETS= + +# 0 or 1 +# 0 = disable +# 1 = enable +ENABLE_UPDATE_CHECK= \ No newline at end of file diff --git a/lib/collections/assets.gen.dart b/lib/collections/assets.gen.dart index 80c82050..3c8530e2 100644 --- a/lib/collections/assets.gen.dart +++ b/lib/collections/assets.gen.dart @@ -35,6 +35,7 @@ class Assets { AssetGenImage('assets/placeholder.png'); static const AssetGenImage spotubeLogoForeground = AssetGenImage('assets/spotube-logo-foreground.jpg'); + static const String spotubeLogoIco = 'assets/spotube-logo.ico'; static const AssetGenImage spotubeLogoPng = AssetGenImage('assets/spotube-logo.png'); static const String spotubeLogoSvg = 'assets/spotube-logo.svg'; @@ -53,6 +54,7 @@ class Assets { emptyBox, placeholder, spotubeLogoForeground, + spotubeLogoIco, spotubeLogoPng, spotubeLogoSvg, spotubeScreenshot, diff --git a/lib/collections/env.dart b/lib/collections/env.dart index 8748d921..9a06dbda 100644 --- a/lib/collections/env.dart +++ b/lib/collections/env.dart @@ -21,4 +21,9 @@ abstract class Env { "clientSecret": secrets.last, }; }).toList(); + + @EnviedField(varName: 'ENABLE_UPDATE_CHECK', defaultValue: "1") + static final _enableUpdateChecker = _Env._enableUpdateChecker; + + static bool get enableUpdateChecker => _enableUpdateChecker == "1"; } diff --git a/lib/hooks/use_update_checker.dart b/lib/hooks/use_update_checker.dart index 9a4ccb9d..b348909e 100644 --- a/lib/hooks/use_update_checker.dart +++ b/lib/hooks/use_update_checker.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:http/http.dart' as http; +import 'package:spotube/collections/env.dart'; import 'package:spotube/components/shared/links/anchor_button.dart'; import 'package:spotube/hooks/use_package_info.dart'; @@ -29,10 +30,9 @@ void useUpdateChecker(WidgetRef ref) { (jsonDecode(value.body)["tag_name"] as String).replaceAll("v", ""); final currentVersion = packageInfo.version == "Unknown" ? null - : Version.parse( - packageInfo.version, - ); - final latestVersion = Version.parse(tagName); + : Version.parse(packageInfo.version); + final latestVersion = + tagName == "nightly" ? null : Version.parse(tagName); return [currentVersion, latestVersion]; }, [packageInfo.version], @@ -46,6 +46,7 @@ void useUpdateChecker(WidgetRef ref) { ); useEffect(() { + if (!Env.enableUpdateChecker) return; if (!isCheckUpdateEnabled) return null; checkUpdate().then((value) { final currentVersion = value.first; diff --git a/lib/pages/settings/settings.dart b/lib/pages/settings/settings.dart index 832305cb..2e28204e 100644 --- a/lib/pages/settings/settings.dart +++ b/lib/pages/settings/settings.dart @@ -5,6 +5,7 @@ import 'package:flutter_desktop_tools/flutter_desktop_tools.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:spotube/collections/env.dart'; import 'package:spotube/collections/spotube_icons.dart'; import 'package:spotube/components/settings/color_scheme_picker_dialog.dart'; @@ -401,13 +402,14 @@ class SettingsPage extends HookConsumerWidget { ), ), ), - SwitchListTile( - secondary: const Icon(SpotubeIcons.update), - title: const Text("Check for Update"), - value: preferences.checkUpdate, - onChanged: (checked) => - preferences.setCheckUpdate(checked), - ), + if (Env.enableUpdateChecker) + SwitchListTile( + secondary: const Icon(SpotubeIcons.update), + title: const Text("Check for Update"), + value: preferences.checkUpdate, + onChanged: (checked) => + preferences.setCheckUpdate(checked), + ), ListTile( leading: const Icon(SpotubeIcons.info), title: const Text("About Spotube"),