import 'dart:convert'; 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/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/app_selector/app_selector_viewmodel.dart'; import 'package:revanced_manager/ui/views/patches_selector/patches_selector_viewmodel.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:stacked/stacked.dart'; import 'package:stacked_services/stacked_services.dart'; @lazySingleton class HomeViewModel extends BaseViewModel { final _navigationService = locator(); final GithubAPI githubAPI = GithubAPI(); final PatcherAPI patcherAPI = locator(); bool showUpdatableApps = true; Future initialize() async { await patcherAPI.loadPatches(); } void toggleUpdatableApps(bool value) { showUpdatableApps = value; notifyListeners(); } Future downloadPatches() => locator().downloadPatches(); Future downloadIntegrations() => locator().downloadIntegrations(); void navigateToInstaller(PatchedApplication app) async { locator().selectedApp = app; locator().selectedPatches = await patcherAPI.getAppliedPatches(app); _navigationService.navigateTo(Routes.installerView); } Future> getPatchedApps(bool isUpdatable) async { List list = []; SharedPreferences prefs = await SharedPreferences.getInstance(); List patchedApps = prefs.getStringList('patchedApps') ?? []; for (String str in patchedApps) { PatchedApplication app = PatchedApplication.fromJson(json.decode(str)); bool hasUpdates = await githubAPI.hasUpdates( app, 'revanced', 'revanced-patches', ); if (hasUpdates == isUpdatable) { list.add(app); } } return list; } }