Don't include empty dirs in media backup
Otherwise, the directories would be treated as small files and we would try to backup their content which would fail.
This commit is contained in:
parent
09b7cabd99
commit
fd90be8776
2 changed files with 8 additions and 8 deletions
|
@ -22,7 +22,6 @@ import org.calyxos.backup.storage.scanner.FileScannerResult
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.security.GeneralSecurityException
|
import java.security.GeneralSecurityException
|
||||||
import kotlin.time.Duration
|
import kotlin.time.Duration
|
||||||
import kotlin.time.ExperimentalTime
|
|
||||||
|
|
||||||
internal class BackupResult(
|
internal class BackupResult(
|
||||||
val chunkIds: Set<String>,
|
val chunkIds: Set<String>,
|
||||||
|
@ -86,7 +85,6 @@ internal class Backup(
|
||||||
)
|
)
|
||||||
|
|
||||||
@Throws(IOException::class, GeneralSecurityException::class)
|
@Throws(IOException::class, GeneralSecurityException::class)
|
||||||
@OptIn(ExperimentalTime::class)
|
|
||||||
suspend fun runBackup(backupObserver: BackupObserver?) {
|
suspend fun runBackup(backupObserver: BackupObserver?) {
|
||||||
backupObserver?.onStartScanning()
|
backupObserver?.onStartScanning()
|
||||||
var duration: Duration? = null
|
var duration: Duration? = null
|
||||||
|
@ -121,7 +119,6 @@ internal class Backup(
|
||||||
}
|
}
|
||||||
|
|
||||||
@Throws(IOException::class, GeneralSecurityException::class)
|
@Throws(IOException::class, GeneralSecurityException::class)
|
||||||
@OptIn(ExperimentalTime::class)
|
|
||||||
private suspend fun backupFiles(
|
private suspend fun backupFiles(
|
||||||
filesResult: FileScannerResult,
|
filesResult: FileScannerResult,
|
||||||
availableChunkIds: HashSet<String>,
|
availableChunkIds: HashSet<String>,
|
||||||
|
|
|
@ -12,6 +12,7 @@ import android.database.Cursor
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
|
import android.provider.DocumentsContract.Document.MIME_TYPE_DIR
|
||||||
import android.provider.MediaStore
|
import android.provider.MediaStore
|
||||||
import android.provider.MediaStore.MediaColumns.IS_DOWNLOAD
|
import android.provider.MediaStore.MediaColumns.IS_DOWNLOAD
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
@ -57,15 +58,18 @@ public class MediaScanner(context: Context) {
|
||||||
|
|
||||||
internal fun scanMediaUri(uri: Uri, extraQuery: String? = null): List<MediaFile> {
|
internal fun scanMediaUri(uri: Uri, extraQuery: String? = null): List<MediaFile> {
|
||||||
val extras = Bundle().apply {
|
val extras = Bundle().apply {
|
||||||
val query = StringBuilder()
|
val query = StringBuilder().apply {
|
||||||
|
// don't include directories (if they are non-empty they will be in implicitly)
|
||||||
|
append("${MediaStore.MediaColumns.MIME_TYPE}!='$MIME_TYPE_DIR'")
|
||||||
|
}
|
||||||
if (uri != MediaType.Downloads.contentUri) {
|
if (uri != MediaType.Downloads.contentUri) {
|
||||||
query.append("$IS_DOWNLOAD=0")
|
query.append(" AND $IS_DOWNLOAD=0")
|
||||||
}
|
}
|
||||||
extraQuery?.let {
|
extraQuery?.let {
|
||||||
if (query.isNotEmpty()) query.append(" AND ")
|
query.append(" AND ")
|
||||||
query.append(it)
|
query.append(it)
|
||||||
}
|
}
|
||||||
if (query.isNotEmpty()) putString(QUERY_ARG_SQL_SELECTION, query.toString())
|
putString(QUERY_ARG_SQL_SELECTION, query.toString())
|
||||||
}
|
}
|
||||||
val cursor = contentResolver.query(uri, PROJECTION, extras, null)
|
val cursor = contentResolver.query(uri, PROJECTION, extras, null)
|
||||||
return ArrayList<MediaFile>(cursor?.count ?: 0).apply {
|
return ArrayList<MediaFile>(cursor?.count ?: 0).apply {
|
||||||
|
@ -106,7 +110,6 @@ public class MediaScanner(context: Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getRealSize(mediaFile: MediaFile): Long {
|
private fun getRealSize(mediaFile: MediaFile): Long {
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
val extDir = Environment.getExternalStorageDirectory()
|
val extDir = Environment.getExternalStorageDirectory()
|
||||||
val path = "$extDir/${mediaFile.dirPath}/${mediaFile.fileName}"
|
val path = "$extDir/${mediaFile.dirPath}/${mediaFile.fileName}"
|
||||||
return try {
|
return try {
|
||||||
|
|
Loading…
Reference in a new issue