diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..c5f3f6b9 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.configuration.updateBuildConfiguration": "interactive" +} \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle index 56793520..fd2b4f62 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -25,6 +25,7 @@ apply plugin: 'com.android.library' android { compileSdkVersion 31 + namespace 'vn.hunghd.flutterdownloader' defaultConfig { minSdkVersion 19 diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index 72e8c500..5f532159 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - + diff --git a/android/src/main/java/vn/hunghd/flutterdownloader/DownloadWorker.java b/android/src/main/java/vn/hunghd/flutterdownloader/DownloadWorker.java index 3882a19f..acc5fdbe 100644 --- a/android/src/main/java/vn/hunghd/flutterdownloader/DownloadWorker.java +++ b/android/src/main/java/vn/hunghd/flutterdownloader/DownloadWorker.java @@ -403,6 +403,10 @@ private void downloadFile(Context context, String fileURL, String savedDir, Stri outputStream = context.getContentResolver().openOutputStream(uri, "w"); } else { File file = createFileInAppSpecificDir(filename, savedDir); + if (file.getName() != filename) { + filename = file.getName(); + taskDao.updateTask(getId().toString(), filename, contentType); + } savedFilePath = file.getPath(); outputStream = new FileOutputStream(file, false); } @@ -499,6 +503,28 @@ private void downloadFile(Context context, String fileURL, String savedDir, Stri private File createFileInAppSpecificDir(String filename, String savedDir) { File newFile = new File(savedDir, filename); try { + int deduplicationFileNumber = 0; + while (newFile.exists()) { + deduplicationFileNumber++; + int fileNameExtensionIndex = filename.lastIndexOf("."); + String fileNameWithoutExtension; + String fileExtension; + if (fileNameExtensionIndex != -1) { + fileNameWithoutExtension = filename.substring(0, fileNameExtensionIndex); + if (fileNameExtensionIndex + 1 < filename.length()) { + fileExtension = "." + filename.substring(fileNameExtensionIndex + 1); + } else if (fileNameExtensionIndex + 1 == filename.length()) { + fileExtension = "."; + } else { + fileExtension = ""; + } + } else { + fileNameWithoutExtension = filename; + fileExtension = ""; + } + newFile = new File(savedDir, + fileNameWithoutExtension + "(" + deduplicationFileNumber + ")" + fileExtension); + } boolean rs = newFile.createNewFile(); if (rs) { return newFile;