From 1556c651319e25784525fdd08f353965861258d9 Mon Sep 17 00:00:00 2001 From: Mathieu Moran Date: Wed, 12 Aug 2026 01:35:11 -0400 Subject: [PATCH] fix: delete uses @HTTP hasBody + JsonObject return type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Retrofit @DELETE doesn't support @Body — switched to @HTTP(method=DELETE, hasBody=true) - Return type changed from Map to JsonObject (kotlinx-serialization can't deserialize untyped maps) - Fixed double-slash in download URL (baseUrl trailing slash) - Cleaned up download progress tracking (emit outside withContext(IO)) --- .../src/main/java/com/yarisobd/app/DashcamViewModel.kt | 9 ++++++++- .../src/main/java/com/yarisobd/app/data/remote/PiApi.kt | 3 ++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/android/app/src/main/java/com/yarisobd/app/DashcamViewModel.kt b/android/app/src/main/java/com/yarisobd/app/DashcamViewModel.kt index dc142a3..399a8b7 100644 --- a/android/app/src/main/java/com/yarisobd/app/DashcamViewModel.kt +++ b/android/app/src/main/java/com/yarisobd/app/DashcamViewModel.kt @@ -144,7 +144,14 @@ class DashcamViewModel(application: Application) : AndroidViewModel(application) fun deleteVideo(video: VideoFile) { viewModelScope.launch { try { - api.deleteVideo(mapOf("path" to video.path)) + val result = api.deleteVideo(mapOf("path" to video.path)) + val status = result["status"]?.let { it.toString().trim('"') } ?: "unknown" + if (status == "ok") { + _downloadEvents.emit("✓ Deleted: ${video.path}") + } else { + val msg = result["message"]?.let { it.toString().trim('"') } ?: status + _downloadEvents.emit("✗ Delete: $msg") + } loadVideos() } catch (e: Exception) { _error.value = "Delete failed: ${e.message}" diff --git a/android/app/src/main/java/com/yarisobd/app/data/remote/PiApi.kt b/android/app/src/main/java/com/yarisobd/app/data/remote/PiApi.kt index 74e4e51..3b043a9 100644 --- a/android/app/src/main/java/com/yarisobd/app/data/remote/PiApi.kt +++ b/android/app/src/main/java/com/yarisobd/app/data/remote/PiApi.kt @@ -2,6 +2,7 @@ package com.yarisobd.app.data.remote import com.yarisobd.app.data.remote.dto.GpsStatus import com.yarisobd.app.data.remote.dto.VideoListResponse +import kotlinx.serialization.json.JsonObject import okhttp3.ResponseBody import retrofit2.http.Body import retrofit2.http.GET @@ -33,5 +34,5 @@ interface PiApi { /** Delete local copy only */ @HTTP(method = "DELETE", path = "/api/local-video", hasBody = true) - suspend fun deleteVideo(@Body body: Map): Map + suspend fun deleteVideo(@Body body: Map): JsonObject }