diff --git a/lib/services/manager_api.dart b/lib/services/manager_api.dart index e8a4767757..aa70ed81bd 100644 --- a/lib/services/manager_api.dart +++ b/lib/services/manager_api.dart @@ -44,7 +44,7 @@ class ManagerAPI { String keystoreFile = '/sdcard/Android/data/app.revanced.manager.flutter/files/revanced-manager.keystore'; String defaultKeystorePassword = 's3cur3p@ssw0rd'; - String defaultApiUrl = 'https://api.revanced.app/'; + String defaultApiUrl = 'https://api.revanced.app/v3'; String defaultRepoUrl = 'https://api.github.com'; String defaultPatcherRepo = 'revanced/revanced-patcher'; String defaultPatchesRepo = 'revanced/revanced-patches'; @@ -71,7 +71,9 @@ class ManagerAPI { _prefs.getBool('migratedToNewApiUrl') ?? false; if (!hasMigratedToNewApi) { final String apiUrl = getApiUrl().toLowerCase(); - if (apiUrl.contains('releases.revanced.app')) { + if (apiUrl.contains('releases.revanced.app') || + (apiUrl.contains('api.revanced.app') && + !apiUrl.contains('v3'))) { await setApiUrl(''); // Reset to default. _prefs.setBool('migratedToNewApiUrl', true); } @@ -344,7 +346,8 @@ class ManagerAPI { ) async { deleteLastPatchedApp(); final Directory appCache = await getApplicationSupportDirectory(); - app.patchedFilePath = outFile.copySync('${appCache.path}/lastPatchedApp.apk').path; + app.patchedFilePath = + outFile.copySync('${appCache.path}/lastPatchedApp.apk').path; app.fileSize = outFile.lengthSync(); await _prefs.setString( 'lastPatchedApp', @@ -454,21 +457,14 @@ class ManagerAPI { } Future downloadManager() async { - return await _revancedAPI.getLatestReleaseFile( - '.apk', - defaultManagerRepo, - ); + return await _revancedAPI.getLatestReleaseFile('manager'); } Future getLatestPatchesReleaseTime() async { if (!isUsingAlternativeSources()) { - return await _revancedAPI.getLatestReleaseTime( - '.json', - defaultPatchesRepo, - ); + return await _revancedAPI.getLatestReleaseTime('patches'); } else { - final release = - await _githubAPI.getLatestRelease(getPatchesRepo()); + final release = await _githubAPI.getLatestRelease(getPatchesRepo()); if (release != null) { final DateTime timestamp = DateTime.parse(release['created_at'] as String); @@ -481,27 +477,23 @@ class ManagerAPI { Future getLatestManagerReleaseTime() async { return await _revancedAPI.getLatestReleaseTime( - '.apk', - defaultManagerRepo, + 'manager', ); } Future getLatestManagerVersion() async { return await _revancedAPI.getLatestReleaseVersion( - '.apk', - defaultManagerRepo, + 'manager', ); } Future getLatestPatchesVersion() async { if (!isUsingAlternativeSources()) { return await _revancedAPI.getLatestReleaseVersion( - '.json', - defaultPatchesRepo, + 'patches', ); } else { - final release = - await _githubAPI.getLatestRelease(getPatchesRepo()); + final release = await _githubAPI.getLatestRelease(getPatchesRepo()); if (release != null) { return release['tag_name']; } else { diff --git a/lib/services/revanced_api.dart b/lib/services/revanced_api.dart index cc62f0d592..020922824e 100644 --- a/lib/services/revanced_api.dart +++ b/lib/services/revanced_api.dart @@ -1,7 +1,5 @@ import 'dart:async'; import 'dart:io'; - -import 'package:collection/collection.dart'; import 'package:dio/dio.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_cache_manager/flutter_cache_manager.dart'; @@ -31,7 +29,7 @@ class RevancedAPI { final Map> contributors = {}; try { final response = await _dio.get('/contributors'); - final List repositories = response.data['repositories']; + final List repositories = response.data; for (final Map repo in repositories) { final String name = repo['name']; contributors[name] = repo['contributors']; @@ -46,21 +44,15 @@ class RevancedAPI { } Future?> _getLatestRelease( - String extension, - String repoName, + String toolName, ) { if (!locator().getDownloadConsent()) { return Future(() => null); } return getToolsLock.synchronized(() async { try { - final response = await _dio.get('/tools'); - final List tools = response.data['tools']; - return tools.firstWhereOrNull( - (t) => - (t['repository'] as String) == repoName && - (t['name'] as String).endsWith(extension), - ); + final response = await _dio.get('/$toolName/latest'); + return response.data; } on Exception catch (e) { if (kDebugMode) { print(e); @@ -71,13 +63,11 @@ class RevancedAPI { } Future getLatestReleaseVersion( - String extension, - String repoName, + String toolName, ) async { try { final Map? release = await _getLatestRelease( - extension, - repoName, + toolName, ); if (release != null) { return release['version']; @@ -92,16 +82,14 @@ class RevancedAPI { } Future getLatestReleaseFile( - String extension, - String repoName, + String toolName, ) async { try { final Map? release = await _getLatestRelease( - extension, - repoName, + toolName, ); if (release != null) { - final String url = release['browser_download_url']; + final String url = release['assets'][0]['download_url']; return await _downloadManager.getSingleFile(url); } } on Exception catch (e) { @@ -129,13 +117,10 @@ class RevancedAPI { } Future downloadManager() async { - final Map? release = await _getLatestRelease( - '.apk', - 'revanced/revanced-manager', - ); + final Map? release = await _getLatestRelease('manager'); File? outputFile; await for (final result in _downloadManager.getFileStream( - release!['browser_download_url'] as String, + release!['download_url'] as String, )) { if (result is DownloadProgress) { final totalSize = result.totalSize ?? 10000000; @@ -152,17 +137,15 @@ class RevancedAPI { } Future getLatestReleaseTime( - String extension, - String repoName, + String toolName, ) async { try { final Map? release = await _getLatestRelease( - extension, - repoName, + toolName, ); if (release != null) { final DateTime timestamp = - DateTime.parse(release['timestamp'] as String); + DateTime.parse(release['created_at'] as String); return format(timestamp, locale: 'en_short'); } } on Exception catch (e) { diff --git a/lib/ui/views/contributors/contributors_viewmodel.dart b/lib/ui/views/contributors/contributors_viewmodel.dart index dfb35d6cae..0272232202 100644 --- a/lib/ui/views/contributors/contributors_viewmodel.dart +++ b/lib/ui/views/contributors/contributors_viewmodel.dart @@ -9,13 +9,15 @@ class ContributorsViewModel extends BaseViewModel { List cliContributors = []; List managerContributors = []; + String repoName(String repo) => repo.split('/').last; + Future getContributors() async { final Map> contributors = await _managerAPI.getContributors(); - patcherContributors = contributors[_managerAPI.defaultPatcherRepo] ?? []; - patchesContributors = contributors[_managerAPI.defaultPatchesRepo] ?? []; - cliContributors = contributors[_managerAPI.defaultCliRepo] ?? []; - managerContributors = contributors[_managerAPI.defaultManagerRepo] ?? []; + patcherContributors = contributors[repoName(_managerAPI.defaultPatcherRepo)] ?? []; + patchesContributors = contributors[repoName(_managerAPI.defaultPatchesRepo)] ?? []; + cliContributors = contributors[repoName(_managerAPI.defaultCliRepo)] ?? []; + managerContributors = contributors[repoName(_managerAPI.defaultManagerRepo)] ?? []; notifyListeners(); } }