more fixes on file scanning and importing

This commit is contained in:
Denis Çerri 2023-03-07 11:33:30 +01:00
parent c3730c46dc
commit 2669f2e44f
No known key found for this signature in database
GPG key ID: 95C43D517D830350

View file

@ -1,12 +1,15 @@
package com.deniscerri.ytdlnis.util package com.deniscerri.ytdlnis.util
import android.Manifest
import android.content.Context import android.content.Context
import android.content.pm.PackageManager
import android.media.MediaScannerConnection import android.media.MediaScannerConnection
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
import android.provider.DocumentsContract import android.provider.DocumentsContract
import android.util.Log import android.util.Log
import android.webkit.MimeTypeMap import android.webkit.MimeTypeMap
import androidx.core.app.ActivityCompat
import androidx.documentfile.provider.DocumentFile import androidx.documentfile.provider.DocumentFile
import com.deniscerri.ytdlnis.R import com.deniscerri.ytdlnis.R
import okhttp3.internal.closeQuietly import okhttp3.internal.closeQuietly
@ -67,13 +70,9 @@ class FileUtil() {
return formattedPath.toString() return formattedPath.toString()
} }
private fun scanMedia(destDir: String, context: Context) : String { private fun scanMedia(files: List<File>, context: Context) : String {
val path = File(formatPath(destDir))
try { try {
var files = path.listFiles()!!
files = files.filter { it.lastModified() > System.currentTimeMillis() - 5000}.toTypedArray()
Arrays.sort(files) { p0, p1 -> p0!!.lastModified().compareTo(p1!!.lastModified()) }
val paths = files.map { it.absolutePath }.toTypedArray() val paths = files.map { it.absolutePath }.toTypedArray()
MediaScannerConnection.scanFile(context, paths, null, null) MediaScannerConnection.scanFile(context, paths, null, null)
return files.reduce(Compare::max).absolutePath return files.reduce(Compare::max).absolutePath
@ -85,50 +84,60 @@ class FileUtil() {
} }
@Throws(Exception::class) @Throws(Exception::class)
fun moveFile(originDir: File, context: Context, destDir: String, progress: (p: Int) -> Unit) : String { fun moveFile(originDir: File, context: Context, destDir: String, progress: (p: Int) -> Unit) : String {
val fileList = mutableListOf<File>()
originDir.listFiles()?.forEach { originDir.listFiles()?.forEach {
if (it.name.equals("rList")){
it.delete()
return@forEach
}
val mimeType =
MimeTypeMap.getSingleton().getMimeTypeFromExtension(it.extension) ?: "*/*"
val dest = Uri.parse(destDir).run {
DocumentsContract.buildDocumentUriUsingTree(
this,
DocumentsContract.getTreeDocumentId(this)
)
}
val destFile = File(formatPath(destDir) + "/${it.name}") val destFile = File(formatPath(destDir) + "/${it.name}")
if (destFile.absolutePath.contains("/storage/emulated/0/Download")
|| destFile.absolutePath.contains("/storage/emulated/0/Documents") try {
){ if (it.name.equals("rList")){
if (Build.VERSION.SDK_INT >= 26 ){ it.delete()
Files.move(it.toPath(), destFile.toPath(), StandardCopyOption.REPLACE_EXISTING) return@forEach
}else{ }
it.renameTo(destFile)
val mimeType =
MimeTypeMap.getSingleton().getMimeTypeFromExtension(it.extension) ?: "*/*"
val dest = Uri.parse(destDir).run {
DocumentsContract.buildDocumentUriUsingTree(
this,
DocumentsContract.getTreeDocumentId(this)
)
}
val destUri = DocumentsContract.createDocument(
context.contentResolver,
dest,
mimeType,
it.name
) ?: return@forEach
val inputStream = it.inputStream()
val outputStream =
context.contentResolver.openOutputStream(destUri) ?: return@forEach
inputStream.copyTo(outputStream)
inputStream.closeQuietly()
outputStream.closeQuietly()
fileList.add(destFile)
}catch (e: java.lang.Exception) {
if (destFile.absolutePath.contains("/storage/emulated/0/Download")
|| destFile.absolutePath.contains("/storage/emulated/0/Documents")
){
if (Build.VERSION.SDK_INT >= 26 ){
Files.move(it.toPath(), destFile.toPath(), StandardCopyOption.REPLACE_EXISTING)
}else{
it.renameTo(destFile)
}
fileList.add(destFile)
} }
return@forEach return@forEach
}catch(e : Exception){
return@forEach
} }
val destUri = DocumentsContract.createDocument(
context.contentResolver,
dest,
mimeType,
it.name
) ?: return@forEach
val inputStream = it.inputStream()
val outputStream =
context.contentResolver.openOutputStream(destUri) ?: return@forEach
inputStream.copyTo(outputStream)
inputStream.closeQuietly()
outputStream.closeQuietly()
} }
originDir.delete() originDir.delete()
return scanMedia(destDir, context) return scanMedia(fileList, context)
} }
fun convertFileSize(s: Long): String{ fun convertFileSize(s: Long): String{