From 379443408596ee772d2c28bfe2d9eaf4bbf33bfe Mon Sep 17 00:00:00 2001 From: Mark Gillespie Date: Sat, 21 Jan 2017 13:08:07 +0000 Subject: [PATCH] Use uniqueID in the filenames. This appears to help with some file corruption problems I have been seeing (wrong tracks, or 0 byte files). Some more testing to see if this is truly fixed. Treat 0 byte as garbage that needs overwriting. --- .../arcus/playmusiclib/PlayMusicManager.java | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/playmusiclib/src/main/java/de/arcus/playmusiclib/PlayMusicManager.java b/playmusiclib/src/main/java/de/arcus/playmusiclib/PlayMusicManager.java index b5274ae..e8a2fe9 100644 --- a/playmusiclib/src/main/java/de/arcus/playmusiclib/PlayMusicManager.java +++ b/playmusiclib/src/main/java/de/arcus/playmusiclib/PlayMusicManager.java @@ -25,6 +25,7 @@ package de.arcus.playmusiclib; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; +import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; @@ -32,6 +33,7 @@ import android.net.Uri; import android.os.Build; import android.os.Environment; import android.os.ParcelFileDescriptor; +import android.support.v4.content.FileProvider; import android.support.v4.provider.DocumentFile; import android.text.TextUtils; import android.util.Log; @@ -52,6 +54,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.UUID; import de.arcus.framework.logger.Logger; import de.arcus.framework.superuser.SuperUser; @@ -499,10 +502,12 @@ public class PlayMusicManager { // Could not find the source file if (srcFile == null) return false; + String uniqueID = UUID.randomUUID().toString(); + if ( forceOverwrite || !isAlreadyThere(uri, path) ) { - String fileTmp = getTempPath() + "tmp.mp3"; + String fileTmp = getTempPath() + uniqueID +"_tmp.mp3"; // Copy to temp path failed if (!SuperUserTools.fileCopy(srcFile, fileTmp)) @@ -510,7 +515,7 @@ public class PlayMusicManager { // Encrypt the file if (musicTrack.isEncoded()) { - String fileTmpCrypt = getTempPath() + "crypt.mp3"; + String fileTmpCrypt = getTempPath() + uniqueID +"_crypt.mp3"; // Encrypts the file if (trackEncrypt(musicTrack, fileTmp, fileTmpCrypt)) { @@ -536,7 +541,7 @@ public class PlayMusicManager { FileTools.directoryCreate(parentDirectory); } else { // Complex uri (Lollipop) - dest = getTempPath() + "final.mp3"; + dest = getTempPath() + uniqueID +"_final.mp3"; // The root DocumentFile document = DocumentFile.fromTreeUri(mContext, uri); @@ -647,7 +652,7 @@ public class PlayMusicManager { } // Delete temp files - cleanUp(); + cleanUp(uniqueID); // Adds the file to the media system //new MediaScanner(mContext, dest); @@ -676,6 +681,11 @@ public class PlayMusicManager { for (String lDisplayName : pPath.split("/")) { if (lDocumentFile.findFile(lDisplayName) != null) { lDocumentFile = lDocumentFile.findFile(lDisplayName); + if ( lDocumentFile.length() == 0 ) { + if ( !lDocumentFile.isDirectory() ) { + Logger.getInstance().logInfo("isAlreadyThere", pPath + " File exists, but is 0 bytes in size."); + } + } } else { Logger.getInstance().logInfo("isAlreadyThere", pPath + " does not exist yet."); return false; @@ -830,9 +840,9 @@ public class PlayMusicManager { /** * Deletes all cache files */ - private void cleanUp() { - FileTools.fileDelete(getTempPath() + "final.mp3"); - FileTools.fileDelete(getTempPath() + "tmp.mp3"); - FileTools.fileDelete(getTempPath() + "crypt.mp3"); + private void cleanUp(String theUniqueID) { + FileTools.fileDelete( getTempPath() + theUniqueID +"_final.mp3"); + FileTools.fileDelete( getTempPath() + theUniqueID +"_tmp.mp3"); + FileTools.fileDelete( getTempPath() + theUniqueID +"_crypt.mp3"); } }