Don't leak MediaFileHandle when downloading voice messages (#1748)

Uses the new `MediaFile.persist()` [API](https://github.com/matrix-org/matrix-rust-sdk/pull/2789) to cache voice messages.
This allows to close the `MediaFile` handle after use and keeping the file.
Also disables rust sdk caching for voice messages as we'll use the app's cache dir for that purpose.

Fixes: https://github.com/vector-im/element-meta/issues/2175
This commit is contained in:
Marco Romano 2023-11-09 15:15:11 +01:00 committed by GitHub
parent 9279420c7e
commit b83d8733e2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 44 additions and 13 deletions

View file

@ -25,6 +25,10 @@ class RustMediaFile(private val inner: MediaFileHandle) : MediaFile {
return inner.path()
}
override fun persist(path: String): Boolean {
return inner.persist(path)
}
override fun close() {
inner.close()
}

View file

@ -71,7 +71,12 @@ class RustMediaLoader(
}
}
override suspend fun downloadMediaFile(source: MediaSource, mimeType: String?, body: String?): Result<MediaFile> =
override suspend fun downloadMediaFile(
source: MediaSource,
mimeType: String?,
body: String?,
useCache: Boolean,
): Result<MediaFile> =
withContext(mediaDispatcher) {
runCatching {
source.toRustMediaSource().use { mediaSource ->
@ -79,7 +84,7 @@ class RustMediaLoader(
mediaSource = mediaSource,
body = body,
mimeType = mimeType ?: MimeTypes.OctetStream,
useCache = true,
useCache = useCache,
tempDir = cacheDirectory.path,
)
RustMediaFile(mediaFile)