Skip to content

Commit

Permalink
perf: Reduce amount of network requests
Browse files Browse the repository at this point in the history
  • Loading branch information
oSumAtrIX committed Sep 29, 2023
1 parent 8661d72 commit 8ce266b
Show file tree
Hide file tree
Showing 12 changed files with 77 additions and 271 deletions.
4 changes: 1 addition & 3 deletions assets/i18n/en_US.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,7 @@
"updatesDisabled": "Updating a patched app is currently disabled. Repatch the app again."
},
"applicationItem": {
"patchButton": "Patch",
"infoButton": "Info",
"changelogLabel": "Changelog"
"infoButton": "Info"
},
"latestCommitCard": {
"loadingLabel": "Loading...",
Expand Down
1 change: 0 additions & 1 deletion lib/models/patch.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:revanced_manager/utils/string.dart';

part 'patch.g.dart';

Expand Down
4 changes: 0 additions & 4 deletions lib/models/patched_application.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,7 @@ class PatchedApplication {
required this.patchDate,
this.isRooted = false,
this.isFromStorage = false,
this.hasUpdates = false,
this.appliedPatches = const [],
this.changelog = const [],
});

factory PatchedApplication.fromJson(Map<String, dynamic> json) =>
Expand All @@ -36,9 +34,7 @@ class PatchedApplication {
DateTime patchDate;
bool isRooted;
bool isFromStorage;
bool hasUpdates;
List<String> appliedPatches;
List<String> changelog;

Map<String, dynamic> toJson() => _$PatchedApplicationToJson(this);

Expand Down
59 changes: 1 addition & 58 deletions lib/services/github_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ class GithubAPI {
Future<void> clearAllCache() async {
try {
await _cacheOptions.store!.clean();
await DefaultCacheManager().emptyCache();
} on Exception catch (e) {
if (kDebugMode) {
print(e);
Expand Down Expand Up @@ -142,38 +143,6 @@ class GithubAPI {
}
}

Future<List<String>> getCommits(
String packageName,
String repoName,
DateTime since,
) async {
final String path =
'src/main/kotlin/app/revanced/patches/${repoAppPath[packageName]}';
try {
final response = await _dio.get(
'/repos/$repoName/commits',
queryParameters: {
'path': path,
'since': since.toIso8601String(),
},
);
final List<dynamic> commits = response.data;
return commits
.map(
(commit) => commit['commit']['message'].split('\n')[0] +
' - ' +
commit['commit']['author']['name'] +
'\n' as String,
)
.toList();
} on Exception catch (e) {
if (kDebugMode) {
print(e);
}
}
return [];
}

Future<File?> getLatestReleaseFile(
String extension,
String repoName,
Expand Down Expand Up @@ -237,30 +206,4 @@ class GithubAPI {
}
return null;
}

Future<List<Patch>> getPatches(
String repoName,
String version,
String url,
) async {
List<Patch> patches = [];
try {
final File? f = await getPatchesReleaseFile(
'.json',
repoName,
version,
url,
);
if (f != null) {
final List<dynamic> list = jsonDecode(f.readAsStringSync());
patches = list.map((patch) => Patch.fromJson(patch)).toList();
}
} on Exception catch (e) {
if (kDebugMode) {
print(e);
}
}

return patches;
}
}
68 changes: 3 additions & 65 deletions lib/services/manager_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -616,39 +616,6 @@ class ManagerAPI {
);
}

Future<void> reAssessSavedApps() async {
final List<PatchedApplication> patchedApps = getPatchedApps();
final List<PatchedApplication> unsavedApps =
await getUnsavedApps(patchedApps);
patchedApps.addAll(unsavedApps);
final List<PatchedApplication> toRemove =
await getAppsToRemove(patchedApps);
patchedApps.removeWhere((a) => toRemove.contains(a));
for (final PatchedApplication app in patchedApps) {
app.hasUpdates =
await hasAppUpdates(app.originalPackageName, app.patchDate);
app.changelog =
await getAppChangelog(app.originalPackageName, app.patchDate);
if (!app.hasUpdates) {
final String? currentInstalledVersion =
(await DeviceApps.getApp(app.packageName))?.versionName;
if (currentInstalledVersion != null) {
final String currentSavedVersion = app.version;
final int currentInstalledVersionInt = int.parse(
currentInstalledVersion.replaceAll(RegExp('[^0-9]'), ''),
);
final int currentSavedVersionInt = int.parse(
currentSavedVersion.replaceAll(RegExp('[^0-9]'), ''),
);
if (currentInstalledVersionInt > currentSavedVersionInt) {
app.hasUpdates = true;
}
}
}
}
await setPatchedApps(patchedApps);
}

Future<bool> isAppUninstalled(PatchedApplication app) async {
bool existsRoot = false;
final bool existsNonRoot = await DeviceApps.isAppInstalled(app.packageName);
Expand All @@ -662,37 +629,6 @@ class ManagerAPI {
return !existsNonRoot;
}

Future<bool> hasAppUpdates(
String packageName,
DateTime patchDate,
) async {
final List<String> commits = await _githubAPI.getCommits(
packageName,
getPatchesRepo(),
patchDate,
);
return commits.isNotEmpty;
}

Future<List<String>> getAppChangelog(
String packageName,
DateTime patchDate,
) async {
List<String> newCommits = await _githubAPI.getCommits(
packageName,
getPatchesRepo(),
patchDate,
);
if (newCommits.isEmpty) {
newCommits = await _githubAPI.getCommits(
packageName,
getPatchesRepo(),
patchDate,
);
}
return newCommits;
}

Future<bool> isSplitApk(PatchedApplication patchedApp) async {
Application? app;
if (patchedApp.isFromStorage) {
Expand Down Expand Up @@ -760,6 +696,8 @@ class ManagerAPI {

Future<void> resetLastSelectedPatches() async {
final File selectedPatchesFile = File(storedPatchesFile);
selectedPatchesFile.deleteSync();
if (selectedPatchesFile.existsSync()) {
selectedPatchesFile.deleteSync();
}
}
}
34 changes: 20 additions & 14 deletions lib/services/revanced_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,15 @@ import 'package:dio_cache_interceptor/dio_cache_interceptor.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
import 'package:injectable/injectable.dart';
import 'package:synchronized/synchronized.dart';
import 'package:timeago/timeago.dart';

@lazySingleton
class RevancedAPI {
late Dio _dio = Dio();

final Lock getToolsLock = Lock();

final _cacheOptions = CacheOptions(
store: MemCacheStore(),
maxStale: const Duration(days: 1),
Expand All @@ -38,6 +41,7 @@ class RevancedAPI {
Future<void> clearAllCache() async {
try {
await _cacheOptions.store!.clean();
await DefaultCacheManager().emptyCache();
} on Exception catch (e) {
if (kDebugMode) {
print(e);
Expand Down Expand Up @@ -66,21 +70,23 @@ class RevancedAPI {
Future<Map<String, dynamic>?> _getLatestRelease(
String extension,
String repoName,
) async {
try {
final response = await _dio.get('/tools');
final List<dynamic> tools = response.data['tools'];
return tools.firstWhereOrNull(
(t) =>
t['repository'] == repoName &&
(t['name'] as String).endsWith(extension),
);
} on Exception catch (e) {
if (kDebugMode) {
print(e);
) {
return getToolsLock.synchronized(() async {
try {
final response = await _dio.get('/tools');
final List<dynamic> tools = response.data['tools'];
return tools.firstWhereOrNull(
(t) =>
t['repository'] == repoName &&
(t['name'] as String).endsWith(extension),
);
} on Exception catch (e) {
if (kDebugMode) {
print(e);
}
return null;
}
return null;
}
});
}

Future<String?> getLatestReleaseVersion(
Expand Down
9 changes: 2 additions & 7 deletions lib/ui/views/home/home_viewmodel.dart
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,15 @@ class HomeViewModel extends BaseViewModel {
DateTime? _lastUpdate;
bool showUpdatableApps = false;
List<PatchedApplication> patchedInstalledApps = [];
List<PatchedApplication> patchedUpdatableApps = [];
String? _latestManagerVersion = '';
File? downloadedApk;

Future<void> initialize(BuildContext context) async {
_latestManagerVersion = await _managerAPI.getLatestManagerVersion();
if (!_managerAPI.getPatchesConsent()) {
await showPatchesConsent(context);
}

_latestManagerVersion = await _managerAPI.getLatestManagerVersion();
await _patcherAPI.initialize();
await flutterLocalNotificationsPlugin.initialize(
const InitializationSettings(
Expand Down Expand Up @@ -83,7 +83,6 @@ class HomeViewModel extends BaseViewModel {
}
}
_getPatchedApps();
_managerAPI.reAssessSavedApps().then((_) => _getPatchedApps());
}

void navigateToAppInfo(PatchedApplication app) {
Expand All @@ -108,10 +107,6 @@ class HomeViewModel extends BaseViewModel {

void _getPatchedApps() {
patchedInstalledApps = _managerAPI.getPatchedApps().toList();
patchedUpdatableApps = _managerAPI
.getPatchedApps()
.where((app) => app.hasUpdates == true)
.toList();
notifyListeners();
}

Expand Down
4 changes: 2 additions & 2 deletions lib/ui/views/navigation/navigation_viewmodel.dart
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,9 @@ class NavigationViewModel extends IndexTrackingViewModel {

// Force disable Material You on Android 11 and below
if (dynamicTheme.themeId.isOdd) {
const int ANDROID_12_SDK_VERSION = 31;
const int android12SdkVersion = 31;
final AndroidDeviceInfo info = await DeviceInfoPlugin().androidInfo;
if (info.version.sdkInt < ANDROID_12_SDK_VERSION) {
if (info.version.sdkInt < android12SdkVersion) {
await prefs.setInt('themeMode', 0);
await prefs.setBool('useDynamicTheme', false);
await dynamicTheme.setTheme(0);
Expand Down
2 changes: 0 additions & 2 deletions lib/ui/widgets/homeView/installed_apps_card.dart
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,6 @@ class InstalledAppsCard extends StatelessWidget {
icon: app.icon,
name: app.name,
patchDate: app.patchDate,
changelog: app.changelog,
isUpdatableApp: false,
onPressed: () =>
locator<HomeViewModel>().navigateToAppInfo(app),
),
Expand Down
2 changes: 1 addition & 1 deletion lib/ui/widgets/settingsView/settings_advanced_section.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import 'package:flutter_i18n/widgets/I18nText.dart';
import 'package:revanced_manager/ui/views/settings/settingsFragment/settings_manage_api_url.dart';
import 'package:revanced_manager/ui/views/settings/settingsFragment/settings_manage_sources.dart';
import 'package:revanced_manager/ui/views/settings/settings_viewmodel.dart';
import 'package:revanced_manager/ui/widgets/settingsView/settings_enable_patches_selection.dart';
import 'package:revanced_manager/ui/widgets/settingsView/settings_auto_update_patches.dart';
import 'package:revanced_manager/ui/widgets/settingsView/settings_enable_patches_selection.dart';
import 'package:revanced_manager/ui/widgets/settingsView/settings_experimental_patches.dart';
import 'package:revanced_manager/ui/widgets/settingsView/settings_experimental_universal_patches.dart';
import 'package:revanced_manager/ui/widgets/settingsView/settings_section.dart';
Expand Down

0 comments on commit 8ce266b

Please sign in to comment.