revanced-manager/lib/services/manager_api.dart

53 lines
1.5 KiB
Dart
Raw Normal View History

2022-08-01 21:05:11 +02:00
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:injectable/injectable.dart';
2022-08-01 21:05:11 +02:00
import 'package:path_provider/path_provider.dart' as p;
2022-08-06 23:35:35 +02:00
import 'package:revanced_manager/constants.dart';
2022-08-09 01:01:06 +02:00
import 'package:revanced_manager/services/github_api.dart';
@lazySingleton
2022-08-02 10:06:35 +02:00
class ManagerAPI {
2022-08-14 20:40:34 +02:00
final Dio dio = Dio();
final GithubAPI githubAPI = GithubAPI();
2022-08-02 10:06:35 +02:00
Future<String?> getPath() async {
final path = await p.getApplicationSupportDirectory();
2022-08-07 02:13:27 +02:00
Directory('${path.path}/revanced').createSync();
2022-08-07 01:37:12 +02:00
final workDirPath = '${path.path}/revanced';
2022-08-02 10:06:35 +02:00
return workDirPath;
}
Future<File?> downloadAssets(String repo) async {
try {
final workDir = await getPath();
final dlUrl = await githubAPI.latestRelease(ghOrg, repo);
final name = dlUrl
?.split('/')
.lastWhere((element) => element.contains('revanced'));
final assetFile = File('$workDir/$name');
final response = await dio.get(
dlUrl!,
options: Options(
responseType: ResponseType.bytes,
followRedirects: true,
receiveTimeout: 0,
),
);
final raf = assetFile.openSync(mode: FileMode.write);
raf.writeFromSync(response.data);
raf.closeSync();
return assetFile;
} catch (e) {
return null;
}
}
Future<void> downloadPatches() async {
await downloadAssets(patchesRepo);
}
2022-08-02 10:06:35 +02:00
Future<void> downloadIntegrations() async {
await downloadAssets(integrationsRepo);
}
2022-08-01 21:05:11 +02:00
}