Skip to content

Commit

Permalink
feat(settings): ability to check for updates
Browse files Browse the repository at this point in the history
  • Loading branch information
JagandeepBrar committed May 24, 2022
1 parent 8b559e0 commit b3caf34
Show file tree
Hide file tree
Showing 27 changed files with 301 additions and 119 deletions.
1 change: 1 addition & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
FLAVOR=edge
COMMIT=master
BUILD=9999999999
7 changes: 7 additions & 0 deletions assets/localization/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
"lunasea.BuyMeASoda": "Buy Me A Soda",
"lunasea.Cancel": "Cancel",
"lunasea.Candidate": "Candidate",
"lunasea.Changelog": "Changelog",
"lunasea.ChangeProfiles": "Change Profiles",
"lunasea.CheckLogsMessage": "Check the logs for more details",
"lunasea.Clear": "Clear",
Expand Down Expand Up @@ -313,9 +314,11 @@
"settings.BroadcastAddressHint2": "Typically this is the IP address of your machine with the last octet set to 255",
"settings.BroadcastAddressHint3": "Given an example machine IP address of 192.168.1.111, the resulting broadcast IP address is 192.168.1.255",
"settings.BroadcastAddressValidation": "Invalid Broadcast Address",
"settings.Build": "Build",
"settings.BuildChannels": "Build Channels",
"settings.BuildChannelsDescription": "Learn About Additional Build Channels",
"settings.CalendarSettings": "Calendar Settings",
"settings.Channel": "Channel",
"settings.ClearConfiguration": "Clear Configuration",
"settings.ClearConfigurationHint1": "Are you sure you want to clear your configuration?",
"settings.ClearConfigurationHint2": "You will be starting from a clean slate, please ensure you backup your current configuration first!",
Expand Down Expand Up @@ -378,6 +381,7 @@
"settings.DocumentationDescription": "View the Documentation",
"settings.Donations": "Donations",
"settings.DonationsDescription": "Donate to the Developer",
"settings.DownloadUpdate": "Download Update",
"settings.Drawer": "Drawer",
"settings.DrawerDescription": "Customize the Drawer",
"settings.EditModule": "Edit Module",
Expand Down Expand Up @@ -450,6 +454,7 @@
"settings.PasswordValidation": "Password Required",
"settings.PastDays": "Past Days",
"settings.PastDaysInScheduleView": "Past Days In Schedule View",
"settings.Platform": "Platform",
"settings.PleaseSignInAgain": "Please sign in again",
"settings.Profiles": "Profiles",
"settings.ProfilesBannerLine1": "Profiles allow you to add multiple instances of modules into LunaSea. You can switch between profiles in the main navigation drawer.",
Expand Down Expand Up @@ -502,10 +507,12 @@
"settings.TLSCertificateValidationDescription": "Validate Certificates in TLS Connections",
"settings.UpdateEmail": "Update Email",
"settings.UpdatePassword": "Update Password",
"settings.UpToDate": "Up To Date",
"settings.Use24HourTime": "Use 24 Hour Time",
"settings.Use24HourTimeDescription": "Show Timestamps in 24 Hour Style",
"settings.Username": "Username",
"settings.UsernameValidation": "Username Required",
"settings.Version": "Version",
"settings.ViewRecentChanges": "View Recent Changes",
"settings.WeblateDescription": "Help Localize LunaSea",
"settings.Website": "Website",
Expand Down
3 changes: 1 addition & 2 deletions lib/core/cache/image_cache/platform/image_cache_io.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ import 'package:lunasea/system/platform.dart';
import '../image_cache.dart';

bool isPlatformSupported() {
final platform = LunaPlatform();
return platform.isMobile || platform.isMacOS;
return LunaPlatform.isMobile || LunaPlatform.isMacOS;
}

LunaImageCache getImageCache() {
Expand Down
3 changes: 1 addition & 2 deletions lib/core/database/database.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ class Database {
static late _BoxManager<ProfileHiveObject> profiles;

String get _databasePath {
final platform = LunaPlatform();
if (platform.isWindows || platform.isLinux)
if (LunaPlatform.isWindows || LunaPlatform.isLinux)
return _DATABASE_PATH;
else
return _DATABASE_LEGACY_PATH;
Expand Down
3 changes: 1 addition & 2 deletions lib/core/models/logs/log_type.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:lunasea/core.dart';
import 'package:lunasea/system/environment.dart';
import 'package:lunasea/system/flavor.dart';

part 'log_type.g.dart';
Expand Down Expand Up @@ -54,7 +53,7 @@ extension LunaLogTypeExtension on LunaLogType {
case LunaLogType.CRITICAL:
return true;
case LunaLogType.DEBUG:
return LunaEnvironment().isFlavorSupported(LunaFlavor.CANDIDATE);
return LunaFlavor.CANDIDATE.isRunningFlavor();
}
}

Expand Down
3 changes: 1 addition & 2 deletions lib/core/modules.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import 'package:lunasea/modules/dashboard/core/state.dart' as dashboard_state;
import 'package:lunasea/modules/dashboard/routes/dashboard/route.dart'
as dashboard_home;
import 'package:lunasea/modules/wake_on_lan/api/wake_on_lan.dart';
import 'package:lunasea/system/environment.dart';
import 'package:lunasea/system/flavor.dart';

part 'modules.g.dart';
Expand Down Expand Up @@ -79,7 +78,7 @@ extension LunaModuleExtension on LunaModule {
case LunaModule.NZBGET:
return true;
case LunaModule.OVERSEERR:
return LunaEnvironment().isFlavorSupported(LunaFlavor.EDGE);
return LunaFlavor.EDGE.isRunningFlavor();
case LunaModule.RADARR:
return true;
case LunaModule.SABNZBD:
Expand Down
2 changes: 1 addition & 1 deletion lib/core/system/in_app_purchases.dart
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class LunaInAppPurchases {
static List<ProductDetails> donationIAPs = [];
static bool isAvailable = false;

static bool get isSupported => LunaPlatform().isMobile;
static bool get isSupported => LunaPlatform.isMobile;

/// Callback function for [purchaseStream].
static Future<void> _purchasedCallback(
Expand Down
6 changes: 3 additions & 3 deletions lib/core/utilities/changelog.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:lunasea/core.dart';
import 'package:lunasea/extensions/string.dart';
import 'package:lunasea/system/environment.dart';
import 'package:lunasea/system/build.dart';
import 'package:lunasea/system/flavor.dart';

class LunaChangelogSheet extends LunaBottomModalSheet {
Expand All @@ -28,8 +28,8 @@ class LunaChangelogSheet extends LunaBottomModalSheet {
bool showCommitHistory = false,
}) async {
// Do not show unless it is a prod release
if (LunaEnvironment().isFlavorSupported(LunaFlavor.CANDIDATE)) {
if (showCommitHistory) LunaEnvironment().openCommitHistory();
if (LunaFlavor.CANDIDATE.isRunningFlavor()) {
if (showCommitHistory) LunaBuild().openCommitHistory();
return;
}

Expand Down
3 changes: 1 addition & 2 deletions lib/firebase/core.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ import 'options.dart';

class LunaFirebase {
static bool get isSupported {
final platform = LunaPlatform();
if (platform.isMobile || platform.isMacOS || platform.isWeb) {
if (LunaPlatform.isMobile || LunaPlatform.isMacOS || LunaPlatform.isWeb) {
// Validate that the firebase config exists by trying to load it
try {
DefaultFirebaseOptions.currentPlatform;
Expand Down
3 changes: 1 addition & 2 deletions lib/firebase/messaging.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@ class LunaFirebaseMessaging {
'BGCP2BO8JOTuvagaYl41btXiiC_XszsGCDduq6C-escc4xb2UMglX3RDojCY1YuGMAx2lXGVF-VYmTN3LQGvhYc';

static bool get isSupported {
final platform = LunaPlatform();
if (LunaFirebase.isSupported && !platform.isWeb) return true;
if (LunaFirebase.isSupported && !LunaPlatform.isWeb) return true;
return false;
}

Expand Down
2 changes: 1 addition & 1 deletion lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class LunaBIOS extends StatelessWidget {

return ProviderScope(
child: DevicePreview(
enabled: kDebugMode && LunaPlatform().isDesktop,
enabled: kDebugMode && LunaPlatform.isDesktop,
builder: (context) => EasyLocalization(
supportedLocales: LunaLocalization().supportedLocales(),
path: LunaLocalization.fileDirectory,
Expand Down
3 changes: 1 addition & 2 deletions lib/modules/settings/routes/settings/route.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import 'package:lunasea/core.dart';
import 'package:lunasea/firebase/core.dart';
import 'package:lunasea/firebase/messaging.dart';
import 'package:lunasea/modules/settings.dart';
import 'package:lunasea/system/environment.dart';
import 'package:lunasea/system/flavor.dart';

class SettingsHomeRouter extends SettingsPageRouter {
Expand Down Expand Up @@ -96,7 +95,7 @@ class _State extends State<_Widget> with LunaScrollControllerMixin {
trailing: const LunaIconButton(icon: Icons.settings_rounded),
onTap: () async => SettingsSystemRouter().navigateTo(context),
),
if (LunaEnvironment().isFlavorSupported(LunaFlavor.EDGE))
if (LunaFlavor.CANDIDATE.isRunningFlavor())
LunaBlock(
title: 'settings.DebugMenu'.tr(),
body: [TextSpan(text: 'settings.DebugMenuDescription'.tr())],
Expand Down
42 changes: 6 additions & 36 deletions lib/modules/settings/routes/system/route.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import 'package:lunasea/firebase/auth.dart';
import 'package:lunasea/firebase/core.dart';
import 'package:lunasea/modules/settings.dart';
import 'package:lunasea/core/cache/image_cache/image_cache.dart';
import 'package:lunasea/system/environment.dart';
import 'package:lunasea/system/flavor.dart';
import 'package:lunasea/modules/settings/routes/system/widgets/build_details.dart';
import 'package:lunasea/system/build.dart';

class SettingsSystemRouter extends SettingsPageRouter {
SettingsSystemRouter() : super('/settings/system');
Expand All @@ -25,6 +25,8 @@ class _Widget extends StatefulWidget {

class _State extends State<_Widget> with LunaScrollControllerMixin {
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
final packageInfo = PackageInfo.fromPlatform();
final checkForUpdates = LunaBuild().checkForUpdates();

@override
Widget build(BuildContext context) {
Expand All @@ -46,50 +48,18 @@ class _State extends State<_Widget> with LunaScrollControllerMixin {
return LunaListView(
controller: scrollController,
children: <Widget>[
_versionInformation(),
_logs(),
const BuildDetails(),
LunaDivider(),
const SettingsSystemBackupRestoreBackupTile(),
const SettingsSystemBackupRestoreRestoreTile(),
LunaDivider(),
_logs(),
if (LunaImageCache.isSupported) _clearImageCache(),
_clearConfiguration(),
],
);
}

Widget _versionInformation() {
LunaEnvironment _env = LunaEnvironment();
LunaFlavor _flavor = LunaFlavor.EDGE.from(LunaEnvironment.flavor);

return FutureBuilder(
future: PackageInfo.fromPlatform(),
builder: (context, AsyncSnapshot<PackageInfo> snapshot) {
String version = 'Loading${LunaUI.TEXT_ELLIPSIS}';
if (snapshot.hasError) version = 'Unknown';
if (snapshot.hasData) version = snapshot.data!.version;
return LunaBlock(
title: 'Version: $version',
body: [
TextSpan(
text: _env.isFlavorSupported(LunaFlavor.CANDIDATE)
? '${_flavor.name} (${_env.getShortCommit()})'
: 'settings.ViewRecentChanges'.tr(),
style: TextStyle(
fontWeight: LunaUI.FONT_WEIGHT_BOLD,
color: _flavor.color,
),
),
],
trailing: const LunaIconButton(icon: Icons.system_update_rounded),
onTap: () async => LunaChangelogSheet().show(
context: context,
showCommitHistory: true,
),
);
});
}

Widget _logs() {
return LunaBlock(
title: 'Logs',
Expand Down
100 changes: 100 additions & 0 deletions lib/modules/settings/routes/system/widgets/build_details.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
import 'package:flutter/material.dart';
import 'package:lunasea/core/utilities/changelog.dart';
import 'package:lunasea/extensions/string_links.dart';
import 'package:lunasea/system/build.dart';
import 'package:lunasea/system/environment.dart';
import 'package:lunasea/system/flavor.dart';
import 'package:lunasea/system/platform.dart';
import 'package:lunasea/vendor.dart';
import 'package:lunasea/widgets/ui.dart';

class BuildDetails extends ConsumerStatefulWidget {
const BuildDetails({Key? key}) : super(key: key);

@override
ConsumerState<BuildDetails> createState() => _State();
}

class _State extends ConsumerState<BuildDetails> {
Future<PackageInfo> packageInfo = PackageInfo.fromPlatform();
Future<bool> checkForUpdates = LunaBuild().checkForUpdates();

@override
Widget build(BuildContext context) {
return FutureBuilder(
future: packageInfo,
builder: (context, AsyncSnapshot<PackageInfo> package) {
return FutureBuilder(
future: checkForUpdates,
builder: (context, AsyncSnapshot<bool> updates) {
return LunaTableCard(
content: [
LunaTableContent(
title: 'settings.Version'.tr(),
body: package.data?.version ?? 'lunasea.Unknown'.tr(),
),
LunaTableContent(
title: 'settings.Platform'.tr(),
body: LunaPlatform.current.name,
),
LunaTableContent(
title: 'settings.Channel'.tr(),
body: LunaFlavor.current.name,
),
LunaTableContent(
title: 'settings.Build'.tr(),
body: '${LunaEnvironment.build} (${LunaBuild().shortCommit})',
),
],
buttons: [
_changesButton(context),
_updatesButton(updates),
],
);
},
);
},
);
}

LunaButton _changesButton(BuildContext context) {
return LunaButton.text(
icon: LunaIcons.CHANGELOG,
text: 'lunasea.Changelog'.tr(),
onTap: () async => LunaChangelogSheet().show(
context: context,
showCommitHistory: true,
),
);
}

LunaButton _updatesButton(AsyncSnapshot<bool> updates) {
if (updates.hasError) {
return LunaButton.text(
icon: LunaIcons.ERROR,
text: 'Error',
);
}
if (updates.connectionState == ConnectionState.done && updates.hasData) {
if (updates.data!) {
return LunaButton.text(
icon: LunaIcons.DOWNLOAD,
color: LunaColours.orange,
text: 'settings.DownloadUpdate'.tr(),
onTap: LunaFlavor.current.downloadLink.openLink,
);
} else {
return LunaButton.text(
icon: LunaIcons.CHECK_MARK,
color: LunaColours.accent,
text: 'settings.UpToDate'.tr(),
onTap: () => setState(() {
checkForUpdates = LunaBuild().checkForUpdates();
}),
);
}
}

return LunaButton.loader();
}
}
Loading

0 comments on commit b3caf34

Please sign in to comment.