fix(android): download failing for permission issues #1015

This commit is contained in:
Kingkor Roy Tirtho 2024-01-05 20:26:57 +06:00
parent c203ac69ee
commit 5509cae91c
2 changed files with 19 additions and 4 deletions

View File

@ -2,7 +2,6 @@ import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart';
import 'package:spotube/models/logger.dart'; import 'package:spotube/models/logger.dart';
final logger = getLogger("ChunkedDownload"); final logger = getLogger("ChunkedDownload");

View File

@ -6,6 +6,8 @@ import 'package:collection/collection.dart';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:path/path.dart' as path;
import 'package:path_provider/path_provider.dart';
import 'package:spotube/models/logger.dart'; import 'package:spotube/models/logger.dart';
import 'package:spotube/services/download_manager/chunked_download.dart'; import 'package:spotube/services/download_manager/chunked_download.dart';
import 'package:spotube/services/download_manager/download_request.dart'; import 'package:spotube/services/download_manager/download_request.dart';
@ -77,7 +79,18 @@ class DownloadManager {
logger.d("[DownloadManager] $url"); logger.d("[DownloadManager] $url");
final file = File(savePath.toString()); final file = File(savePath.toString());
partialFilePath = savePath + partialExtension;
final tmpDirPath = await Directory(
path.join(
(await getTemporaryDirectory()).path,
"spotube-downloads",
),
).create(recursive: true);
partialFilePath = path.join(
tmpDirPath.path,
path.basename(savePath) + partialExtension,
);
partialFile = File(partialFilePath); partialFile = File(partialFilePath);
final fileExist = await file.exists(); final fileExist = await file.exists();
@ -111,7 +124,9 @@ class DownloadManager {
await ioSink.addStream(partialChunkFile.openRead()); await ioSink.addStream(partialChunkFile.openRead());
await partialChunkFile.delete(); await partialChunkFile.delete();
await ioSink.close(); await ioSink.close();
await partialFile.rename(savePath);
await partialFile.copy(savePath);
await partialFile.delete();
setStatus(task, DownloadStatus.completed); setStatus(task, DownloadStatus.completed);
} }
@ -125,7 +140,8 @@ class DownloadManager {
); );
if (response.statusCode == HttpStatus.ok) { if (response.statusCode == HttpStatus.ok) {
await partialFile.rename(savePath); await partialFile.copy(savePath);
await partialFile.delete();
setStatus(task, DownloadStatus.completed); setStatus(task, DownloadStatus.completed);
} }
} }