Skip to content

Commit

Permalink
add download service
Browse files Browse the repository at this point in the history
  • Loading branch information
LiquidatorCoder committed Nov 25, 2021
1 parent 8d3fc58 commit 4691008
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 0 deletions.
45 changes: 45 additions & 0 deletions lib/services/download_service.dart
@@ -0,0 +1,45 @@
import 'dart:io';

import 'package:dio/dio.dart';
import 'package:odin/services/locator.dart';
import 'package:odin/services/logger.dart';
import 'package:odin/services/random_service.dart';
import 'package:path_provider/path_provider.dart';

class DownloadService {
final RandomService _randomService = locator<RandomService>();
String progress = '0%';
bool downloading = false;

Dio dio = Dio();
Future<String> _getFilePath() async {
final fileName = _randomService.getRandomString(10);
Directory? dir;
if (Platform.isAndroid) {
dir = await getExternalStorageDirectory();
} else if (Platform.isIOS) {
dir = await getTemporaryDirectory();
} else {
dir = await getDownloadsDirectory();
}
String path = '${dir?.path}/$fileName.odin';
logger.d("File path : $path");
return path;
}

Future<File> downloadFile(String url) async {
final filePath = await _getFilePath();
progress = '0%';
downloading = true;
await dio.download(
url,
filePath,
onReceiveProgress: (rcv, total) {
progress = ((rcv / total) * 100).toStringAsFixed(0) + "%";
},
deleteOnError: true,
);
downloading = false;
return File(filePath);
}
}
2 changes: 2 additions & 0 deletions lib/services/locator.dart
@@ -1,4 +1,5 @@
import 'package:get_it/get_it.dart';
import 'package:odin/services/download_service.dart';
import 'package:odin/services/encryption_service.dart';
import 'package:odin/services/file_service.dart';
import 'package:odin/services/github_service.dart';
Expand All @@ -23,6 +24,7 @@ void setupLocator() {
locator.registerLazySingleton<ToastService>(() => ToastService());
locator.registerLazySingleton<PreferencesService>(() => PreferencesService());
locator.registerLazySingleton<EncryptionService>(() => EncryptionService());
locator.registerLazySingleton<DownloadService>(() => DownloadService());
logger.d('Locator setup in ${stopwatch.elapsed}');
stopwatch.stop();
}

0 comments on commit 4691008

Please sign in to comment.