diff --git a/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/image/AndroidShareProvider.kt b/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/image/AndroidShareProvider.kt index 24e531dc4..7ae1c5a67 100644 --- a/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/image/AndroidShareProvider.kt +++ b/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/image/AndroidShareProvider.kt @@ -24,6 +24,7 @@ import android.net.Uri import android.webkit.MimeTypeMap import androidx.core.content.FileProvider import androidx.core.net.toUri +import com.t8rin.logger.makeLog import dagger.Lazy import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.withContext @@ -241,7 +242,7 @@ internal class AndroidShareProvider @Inject constructor( ) } } - }.getOrNull()?.toString() + }.onFailure { it.makeLog("cacheData") }.getOrNull()?.toString() } override suspend fun shareData( diff --git a/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/saving/AndroidFileController.kt b/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/saving/AndroidFileController.kt index 2577f57b5..dc57cb7ae 100644 --- a/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/saving/AndroidFileController.kt +++ b/core/data/src/main/java/ru/tech/imageresizershrinker/core/data/saving/AndroidFileController.kt @@ -395,6 +395,31 @@ internal class AndroidFileController @Inject constructor( } ) + override suspend fun transferBytes( + fromUri: String, + to: Writeable + ): SaveResult = withContext(ioDispatcher) { + runSuspendCatching { + context.contentResolver.openInputStream(fromUri.toUri())?.buffered()?.use { input -> + val buffer = ByteArray(DEFAULT_BUFFER_SIZE) + while (input.read(buffer) != -1) { + to.writeBytes(buffer) + } + } ?: throw IllegalAccessException("File inaccessible") + }.onSuccess { + return@withContext SaveResult.Success( + message = null, + savingPath = "" + ) + }.onFailure { + to.makeLog("File Controller write") + it.makeLog("File Controller write") + return@withContext SaveResult.Error.Exception(it) + } + + return@withContext SaveResult.Error.Exception(IllegalStateException()) + } + override suspend fun saveObject( key: String, value: O, diff --git a/core/domain/src/main/kotlin/ru/tech/imageresizershrinker/core/domain/saving/FileController.kt b/core/domain/src/main/kotlin/ru/tech/imageresizershrinker/core/domain/saving/FileController.kt index fd81cb0b7..ac611ed88 100644 --- a/core/domain/src/main/kotlin/ru/tech/imageresizershrinker/core/domain/saving/FileController.kt +++ b/core/domain/src/main/kotlin/ru/tech/imageresizershrinker/core/domain/saving/FileController.kt @@ -50,6 +50,11 @@ interface FileController { toUri: String ): SaveResult + suspend fun transferBytes( + fromUri: String, + to: Writeable + ): SaveResult + suspend fun saveObject( key: String, value: O, diff --git a/feature/audio-cover-extractor/src/main/java/ru/tech/imageresizershrinker/feature/audio_cover_extractor/data/AndroidAudioCoverRetriever.kt b/feature/audio-cover-extractor/src/main/java/ru/tech/imageresizershrinker/feature/audio_cover_extractor/data/AndroidAudioCoverRetriever.kt index fb22f4460..a1a4ae318 100644 --- a/feature/audio-cover-extractor/src/main/java/ru/tech/imageresizershrinker/feature/audio_cover_extractor/data/AndroidAudioCoverRetriever.kt +++ b/feature/audio-cover-extractor/src/main/java/ru/tech/imageresizershrinker/feature/audio_cover_extractor/data/AndroidAudioCoverRetriever.kt @@ -94,14 +94,15 @@ internal class AndroidAudioCoverRetriever @Inject constructor( override suspend fun loadCover( audioData: ByteArray ): Result { + val audioUri = shareProvider.cacheData( + writeData = { + it.writeBytes(audioData) + }, + filename = "Audio_data_${System.currentTimeMillis()}.mp3" + ) ?: return Result.failure(NullPointerException(getString(R.string.filename_is_not_set))) + return loadCover( - shareProvider.cacheData( - writeData = { - it.writeBytes(audioData) - }, - filename = "Audio_data_${System.currentTimeMillis()}.mp3" - ) - ?: return Result.failure(NullPointerException(getString(R.string.filename_is_not_set))) + audioUri = audioUri ) }