fix: improve update manager button

This commit is contained in:
Alberto Ponces
2022-08-18 17:32:58 +01:00
parent 389eae1447
commit 6d3ea7a991
7 changed files with 90 additions and 41 deletions

View File

@ -8,9 +8,7 @@ import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:injectable/injectable.dart';
import 'package:revanced_manager/app/app.locator.dart';
import 'package:revanced_manager/app/app.router.dart';
import 'package:revanced_manager/constants.dart';
import 'package:revanced_manager/models/patched_application.dart';
import 'package:revanced_manager/services/github_api.dart';
import 'package:revanced_manager/services/manager_api.dart';
import 'package:revanced_manager/services/patcher_api.dart';
import 'package:revanced_manager/ui/views/patcher/patcher_viewmodel.dart';
@ -22,7 +20,6 @@ import 'package:stacked_services/stacked_services.dart';
class HomeViewModel extends BaseViewModel {
final NavigationService _navigationService = locator<NavigationService>();
final ManagerAPI _managerAPI = ManagerAPI();
final GithubAPI _githubAPI = GithubAPI();
final PatcherAPI _patcherAPI = locator<PatcherAPI>();
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
@ -56,7 +53,7 @@ class HomeViewModel extends BaseViewModel {
List<String> patchedApps = prefs.getStringList('patchedApps') ?? [];
for (String str in patchedApps) {
PatchedApplication app = PatchedApplication.fromJson(json.decode(str));
bool hasUpdates = await _githubAPI.hasUpdates(app, ghOrg, patchesRepo);
bool hasUpdates = await _managerAPI.hasAppUpdates(app.packageName);
if (hasUpdates == isUpdatable) {
list.add(app);
}
@ -64,6 +61,23 @@ class HomeViewModel extends BaseViewModel {
return list;
}
Future<bool> hasManagerUpdates() async {
String? latestVersion = await _managerAPI.getLatestManagerVersion();
String currentVersion = await _managerAPI.getCurrentManagerVersion();
if (latestVersion != null) {
try {
int latestVersionInt =
int.parse(latestVersion.replaceFirst('v', '').replaceAll('.', ''));
int currentVersionInt =
int.parse(currentVersion.replaceFirst('v', '').replaceAll('.', ''));
return latestVersionInt > currentVersionInt;
} on Exception {
return false;
}
}
return false;
}
void updateManager(BuildContext context) async {
File? managerApk = await _managerAPI.downloadManager();
if (managerApk != null) {

View File

@ -1,8 +1,7 @@
import 'package:flutter/material.dart';
import 'package:revanced_manager/app/app.locator.dart';
import 'package:revanced_manager/constants.dart';
import 'package:revanced_manager/models/patched_application.dart';
import 'package:revanced_manager/services/github_api.dart';
import 'package:revanced_manager/services/manager_api.dart';
import 'package:revanced_manager/ui/views/home/home_viewmodel.dart';
import 'package:revanced_manager/ui/widgets/application_item.dart';
@ -11,7 +10,7 @@ class AvailableUpdatesCard extends StatelessWidget {
Key? key,
}) : super(key: key);
final GithubAPI _githubAPI = GithubAPI();
final ManagerAPI _managerAPI = ManagerAPI();
@override
Widget build(BuildContext context) {
@ -28,10 +27,8 @@ class AvailableUpdatesCard extends StatelessWidget {
physics: const NeverScrollableScrollPhysics(),
itemCount: snapshot.data!.length,
itemBuilder: (context, index) => FutureBuilder<String>(
future: _githubAPI.getChangelog(
snapshot.data![index],
ghOrg,
patchesRepo,
future: _managerAPI.getAppChangelog(
snapshot.data![index].packageName,
),
initialData: '',
builder: (context, snapshot2) => ApplicationItem(

View File

@ -1,8 +1,7 @@
import 'package:flutter/material.dart';
import 'package:revanced_manager/app/app.locator.dart';
import 'package:revanced_manager/constants.dart';
import 'package:revanced_manager/models/patched_application.dart';
import 'package:revanced_manager/services/github_api.dart';
import 'package:revanced_manager/services/manager_api.dart';
import 'package:revanced_manager/ui/views/home/home_viewmodel.dart';
import 'package:revanced_manager/ui/widgets/application_item.dart';
@ -11,7 +10,7 @@ class InstalledAppsCard extends StatelessWidget {
Key? key,
}) : super(key: key);
final GithubAPI _githubAPI = GithubAPI();
final ManagerAPI _managerAPI = ManagerAPI();
@override
Widget build(BuildContext context) {
@ -28,10 +27,8 @@ class InstalledAppsCard extends StatelessWidget {
physics: const NeverScrollableScrollPhysics(),
itemCount: snapshot.data!.length,
itemBuilder: (context, index) => FutureBuilder<String>(
future: _githubAPI.getChangelog(
snapshot.data![index],
ghOrg,
patchesRepo,
future: _managerAPI.getAppChangelog(
snapshot.data![index].packageName,
),
initialData: '',
builder: (context, snapshot2) => ApplicationItem(

View File

@ -1,8 +1,10 @@
import 'package:flutter/material.dart';
import 'package:flutter_i18n/flutter_i18n.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:revanced_manager/app/app.locator.dart';
import 'package:revanced_manager/services/github_api.dart';
import 'package:revanced_manager/constants.dart';
import 'package:revanced_manager/ui/views/home/home_viewmodel.dart';
import 'package:revanced_manager/ui/widgets/patch_text_button.dart';
class LatestCommitCard extends StatefulWidget {
@ -96,14 +98,23 @@ class _LatestCommitCardState extends State<LatestCommitCard> {
),
],
),
PatchTextButton(
text: FlutterI18n.translate(
context,
'latestCommitCard.updateButton',
FutureBuilder<bool>(
future: locator<HomeViewModel>().hasManagerUpdates(),
initialData: false,
builder: (context, snapshot) => Opacity(
opacity: snapshot.hasData && snapshot.data! ? 1.0 : 0.5,
child: PatchTextButton(
text: FlutterI18n.translate(
context,
'latestCommitCard.updateButton',
),
onPressed: snapshot.hasData && snapshot.data!
? widget.onPressed
: () => {},
backgroundColor: Theme.of(context).colorScheme.secondary,
borderColor: Theme.of(context).colorScheme.secondary,
),
),
onPressed: widget.onPressed,
backgroundColor: Theme.of(context).colorScheme.secondary,
borderColor: Theme.of(context).colorScheme.secondary,
),
],
),