Skip to content

Commit

Permalink
fix: recreate cache directories in case cache is cleared [WPB-7368]
Browse files Browse the repository at this point in the history
  • Loading branch information
saleniuk committed May 20, 2024
1 parent f096658 commit dcf4b5c
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import com.wire.android.ui.home.conversations.usecase.HandleUriAssetUseCase
import com.wire.android.ui.home.messagecomposer.model.ComposableMessageBundle
import com.wire.android.ui.home.messagecomposer.model.MessageBundle
import com.wire.android.ui.home.messagecomposer.model.Ping
import com.wire.android.util.AUDIO_MIME_TYPE
import com.wire.android.util.ImageUtil
import com.wire.android.util.dispatchers.DispatcherProvider
import com.wire.android.util.getAudioLengthInMs
Expand Down Expand Up @@ -67,8 +68,6 @@ import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import okio.Path
import okio.Path.Companion.toPath
import javax.inject.Inject

@Suppress("LongParameterList", "TooManyFunctions")
Expand Down Expand Up @@ -165,8 +164,8 @@ class SendMessageViewModel @Inject constructor(
is ComposableMessageBundle.AudioMessageBundle -> {
handleAssetMessageBundle(
attachmentUri = messageBundle.attachmentUri,
audioPath = messageBundle.attachmentUri.uri.path?.toPath(),
conversationId = messageBundle.conversationId
conversationId = messageBundle.conversationId,
specifiedMimeType = AUDIO_MIME_TYPE,
)
}

Expand Down Expand Up @@ -208,12 +207,12 @@ class SendMessageViewModel @Inject constructor(
private suspend fun handleAssetMessageBundle(
conversationId: ConversationId,
attachmentUri: UriAsset,
audioPath: Path? = null
specifiedMimeType: String? = null, // specify a particular mimetype, otherwise it will be taken from the uri / file extension
) {
when (val result = handleUriAsset.invoke(
uri = attachmentUri.uri,
saveToDeviceIfInvalid = attachmentUri.saveToDeviceIfInvalid,
audioPath = audioPath
specifiedMimeType = specifiedMimeType
)) {
is HandleUriAssetUseCase.Result.Failure.AssetTooLarge -> {
assetTooLargeDialogState = AssetTooLargeDialogState.Visible(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import com.wire.kalium.logic.data.asset.AttachmentType
import com.wire.kalium.logic.data.asset.KaliumFileSystem
import com.wire.kalium.logic.feature.asset.GetAssetSizeLimitUseCase
import kotlinx.coroutines.withContext
import okio.Path
import java.util.UUID
import javax.inject.Inject

class HandleUriAssetUseCase @Inject constructor(
Expand All @@ -38,14 +38,13 @@ class HandleUriAssetUseCase @Inject constructor(
suspend fun invoke(
uri: Uri,
saveToDeviceIfInvalid: Boolean = false,
audioPath: Path? = null,
specifiedMimeType: String? = null, // specify a particular mimetype, otherwise it will be taken from the uri / file extension
): Result = withContext(dispatchers.io()) {

val tempCachePath = kaliumFileSystem.rootCachePath
val tempAssetPath = kaliumFileSystem.tempFilePath(UUID.randomUUID().toString())
val assetBundle = fileManager.getAssetBundleFromUri(
attachmentUri = uri,
tempCachePath = tempCachePath,
audioPath = audioPath
assetDestinationPath = tempAssetPath,
specifiedMimeType = specifiedMimeType,
)
if (assetBundle != null) {
// The max limit for sending assets changes between user and asset types.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -414,7 +414,7 @@ class ImportMediaAuthenticatedViewModel @Inject constructor(
}

private suspend fun handleImportedAsset(uri: Uri): ImportedMediaAsset? = withContext(dispatchers.io()) {
when (val result = handleUriAsset.invoke(uri, saveToDeviceIfInvalid = false, audioPath = null)) {
when (val result = handleUriAsset.invoke(uri, saveToDeviceIfInvalid = false)) {
is HandleUriAssetUseCase.Result.Failure.AssetTooLarge -> mapToImportedAsset(result.assetBundle, result.maxLimitInMB)

HandleUriAssetUseCase.Result.Failure.Unknown -> null
Expand Down
14 changes: 6 additions & 8 deletions app/src/main/kotlin/com/wire/android/util/FileManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -108,28 +108,26 @@ class FileManager @Inject constructor(@ApplicationContext private val context: C
@Suppress("TooGenericExceptionCaught")
suspend fun getAssetBundleFromUri(
attachmentUri: Uri,
tempCachePath: Path,
audioPath: Path? = null,
assetDestinationPath: Path,
specifiedMimeType: String? = null, // specify a particular mimetype, otherwise it will be taken from the uri / file extension
dispatcher: DispatcherProvider = DefaultDispatcherProvider(),
): AssetBundle? = withContext(dispatcher.io()) {
try {
val assetKey = UUID.randomUUID().toString()
val assetFileName = context.getFileName(attachmentUri)
?: throw IOException("The selected asset has an invalid name")
val fullTempAssetPath = "$tempCachePath/${UUID.randomUUID()}".toPath()
val assetPath = audioPath ?: fullTempAssetPath
val mimeType = if (audioPath != null) AUDIO_MIME_TYPE else attachmentUri
val mimeType = specifiedMimeType ?: attachmentUri
.getMimeType(context)
.orDefault(DEFAULT_FILE_MIME_TYPE)
val attachmentType = AttachmentType.fromMimeTypeString(mimeType)
val assetSize = if (attachmentType == AttachmentType.IMAGE) {
attachmentUri.resampleImageAndCopyToTempPath(context, fullTempAssetPath)
attachmentUri.resampleImageAndCopyToTempPath(context, assetDestinationPath)
} else {
// TODO: We should add also a video resampling logic soon, that way we could drastically reduce as well the number
// of video assets hitting the max limit.
copyToPath(attachmentUri, fullTempAssetPath)
copyToPath(attachmentUri, assetDestinationPath)
}
AssetBundle(assetKey, mimeType, assetPath, assetSize, assetFileName, attachmentType)
AssetBundle(assetKey, mimeType, assetDestinationPath, assetSize, assetFileName, attachmentType)
} catch (e: IOException) {
appLogger.e("There was an error while obtaining the file from disk", e)
null
Expand Down

0 comments on commit dcf4b5c

Please sign in to comment.