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
…#3016)

Co-authored-by: Yamil Medina <[email protected]>
  • Loading branch information
saleniuk and yamilmedina authored May 23, 2024
1 parent d26b742 commit 8f8b582
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 22 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
2 changes: 1 addition & 1 deletion kalium
Submodule kalium updated 29 files
+19 βˆ’0 .github/workflows/jira-lint-and-link.yml
+1 βˆ’1 gradle/libs.versions.toml
+1 βˆ’0 logic/src/androidMain/kotlin/com/wire/kalium/logic/data/asset/KaliumFileSystemImpl.kt
+10 βˆ’2 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/conversation/ConversationGroupRepository.kt
+18 βˆ’19 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/message/MessageRepository.kt
+69 βˆ’3 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/message/PersistMessageUseCase.kt
+54 βˆ’13 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/notification/NotificationEventsManagerImpl.kt
+8 βˆ’6 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/UserSessionScope.kt
+21 βˆ’8 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/message/GetNotificationsUseCase.kt
+3 βˆ’2 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/message/MessageScope.kt
+4 βˆ’4 ...c/src/commonMain/kotlin/com/wire/kalium/logic/sync/receiver/conversation/DeletedConversationEventHandler.kt
+18 βˆ’11 logic/src/commonMain/kotlin/com/wire/kalium/logic/sync/receiver/conversation/MemberJoinEventHandler.kt
+3 βˆ’3 logic/src/commonMain/kotlin/com/wire/kalium/logic/sync/receiver/handler/DeleteMessageHandler.kt
+3 βˆ’3 logic/src/commonMain/kotlin/com/wire/kalium/logic/sync/receiver/handler/LastReadContentHandler.kt
+4 βˆ’4 logic/src/commonMain/kotlin/com/wire/kalium/logic/sync/receiver/handler/MessageTextEditHandler.kt
+42 βˆ’1 logic/src/commonTest/kotlin/com/wire/kalium/logic/data/conversation/ConversationGroupRepositoryTest.kt
+11 βˆ’3 logic/src/commonTest/kotlin/com/wire/kalium/logic/data/message/MessageRepositoryTest.kt
+35 βˆ’22 logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/message/GetNotificationsUseCaseTest.kt
+4 βˆ’4 logic/src/commonTest/kotlin/com/wire/kalium/logic/sync/receiver/MessageTextEditHandlerTest.kt
+6 βˆ’6 ...c/commonTest/kotlin/com/wire/kalium/logic/sync/receiver/conversation/DeletedConversationEventHandlerTest.kt
+75 βˆ’99 logic/src/commonTest/kotlin/com/wire/kalium/logic/sync/receiver/conversation/MemberJoinEventHandlerTest.kt
+7 βˆ’7 logic/src/commonTest/kotlin/com/wire/kalium/logic/sync/receiver/handler/DeleteMessageHandlerTest.kt
+42 βˆ’0 logic/src/commonTest/kotlin/com/wire/kalium/logic/util/arrangement/eventHandler/LegalHoldHandlerArrangement.kt
+5 βˆ’0 ...rc/commonTest/kotlin/com/wire/kalium/logic/util/arrangement/repository/ConversationRepositoryArrangement.kt
+2 βˆ’3 logic/src/commonTest/kotlin/com/wire/kalium/logic/util/arrangement/repository/MessageRepositoryArrangement.kt
+13 βˆ’7 ...rc/commonTest/kotlin/com/wire/kalium/logic/util/arrangement/usecase/NotificationEventsManagerArrangement.kt
+7 βˆ’2 persistence/src/commonMain/kotlin/com/wire/kalium/persistence/dao/message/MessageDAO.kt
+11 βˆ’7 persistence/src/commonMain/kotlin/com/wire/kalium/persistence/dao/message/MessageDAOImpl.kt
+10 βˆ’24 persistence/src/commonTest/kotlin/com/wire/kalium/persistence/dao/message/MessageNotificationsTest.kt

0 comments on commit 8f8b582

Please sign in to comment.