Skip to content
Snippets Groups Projects
Commit 975514bc authored by Taras's avatar Taras
Browse files

Add delete media file api

parent 7e271805
No related branches found
No related tags found
No related merge requests found
......@@ -52,4 +52,10 @@ interface MediaService {
//Added for Circles
suspend fun getMediaUsage(): MediaUsageInfo?
//Added for Circles
suspend fun deleteMediaFile(mcxUrl: String)
//Added for Circles
suspend fun deleteMediaFile(server: String, mediaId: String)
}
......@@ -31,7 +31,8 @@ internal class DefaultMediaService @Inject constructor(
private val getPreviewUrlTask: GetPreviewUrlTask,
private val getRawPreviewUrlTask: GetRawPreviewUrlTask,
private val urlsExtractor: UrlsExtractor,
private val getMediaUsageTask: GetMediaUsageTask
private val getMediaUsageTask: GetMediaUsageTask,
private val deleteMediaFileTask: DeleteMediaFileTask
) : MediaService {
// Cache of extracted URLs
private val extractedUrlsCache = LruCache<String, List<String>>(1_000)
......@@ -56,6 +57,23 @@ internal class DefaultMediaService @Inject constructor(
return getMediaUsageTask.execute(Unit)
}
//Added for Circles
override suspend fun deleteMediaFile(mcxUrl: String) {
val mcxPrefix = "mcx://"
if (mcxUrl.startsWith(mcxPrefix)) {
mcxUrl.removePrefix(mcxPrefix).split("/").takeIf { it.size == 2 }?.let {
val server = it.getOrNull(0) ?: return
val mediaId = it.getOrNull(1) ?: return
deleteMediaFile(server, mediaId)
}
}
}
//Added for Circles
override suspend fun deleteMediaFile(server: String, mediaId: String) {
deleteMediaFileTask.execute(DeleteMediaFileTask.Params(server, mediaId))
}
override suspend fun clearCache() {
extractedUrlsCache.evictAll()
clearPreviewUrlCacheTask.execute(Unit)
......
package org.matrix.android.sdk.internal.session.media
import org.matrix.android.sdk.internal.network.GlobalErrorReceiver
import org.matrix.android.sdk.internal.network.executeRequest
import org.matrix.android.sdk.internal.network.token.HomeserverAccessTokenProvider
import org.matrix.android.sdk.internal.task.Task
import javax.inject.Inject
//Created for Circles
internal interface DeleteMediaFileTask : Task<DeleteMediaFileTask.Params, Unit> {
data class Params(
val server: String,
val mediaId: String
)
}
internal class DefaultDeleteMediaFileTask @Inject constructor(
private val mediaAPI: MediaAPI,
private val globalErrorReceiver: GlobalErrorReceiver,
private val accessTokenProvider: HomeserverAccessTokenProvider
) : DeleteMediaFileTask {
override suspend fun execute(params: DeleteMediaFileTask.Params) {
return executeRequest(globalErrorReceiver) {
val token = accessTokenProvider.getToken() ?: throw IllegalArgumentException("invalid token")
mediaAPI.deleteMediaFile(params.server, params.mediaId, token)
}
}
}
......@@ -19,6 +19,8 @@ package org.matrix.android.sdk.internal.session.media
import org.matrix.android.sdk.api.util.JsonDict
import org.matrix.android.sdk.internal.network.NetworkConstants
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Path
import retrofit2.http.Query
internal interface MediaAPI {
......@@ -40,7 +42,15 @@ internal interface MediaAPI {
@GET(NetworkConstants.URI_API_MEDIA_PREFIX_PATH_R0 + "preview_url")
suspend fun getPreviewUrlData(@Query("url") url: String, @Query("ts") ts: Long?): JsonDict
//Created for Circles
//Added for Circles
@GET("_matrix/media/unstable/org.matrix.msc4034/" + "usage")
suspend fun getMediaUsage(): GetMediaUsageResult
//Added for Circles
@POST("_matrix/media/unstable/admin/purge/{server}/{media_id}?access_token={token}")
suspend fun deleteMediaFile(
@Path("server") server: String,
@Path("media_id") mediaId: String,
@Path("token") token: String,
): Unit
}
......@@ -47,4 +47,7 @@ internal abstract class MediaModule {
@Binds
abstract fun bindClearMediaCacheTask(task: DefaultClearPreviewUrlCacheTask): ClearPreviewUrlCacheTask
@Binds
abstract fun bindDeleteMediaFileTask(task: DefaultDeleteMediaFileTask): DeleteMediaFileTask
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment