Refactor task completion image handling

- Simplify image parameter passing in task completion ViewModels
- Pass ImageData objects directly instead of separate bytes and filenames

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Trey t
2025-11-11 21:45:12 -06:00
parent 22949d18a7
commit 1a4b5d07bf
4 changed files with 21 additions and 11 deletions

View File

@@ -278,8 +278,7 @@ fun AllTasksScreen(
if (images.isNotEmpty()) {
taskCompletionViewModel.createTaskCompletionWithImages(
request = request,
images = images.map { it.bytes },
imageFileNames = images.map { it.fileName }
images = images
)
} else {
taskCompletionViewModel.createTaskCompletion(request)

View File

@@ -155,8 +155,7 @@ fun ResidenceDetailScreen(
if (images.isNotEmpty()) {
taskCompletionViewModel.createTaskCompletionWithImages(
request = request,
images = images.map { it.bytes },
imageFileNames = images.map { it.fileName }
images = images
)
} else {
taskCompletionViewModel.createTaskCompletion(request)

View File

@@ -264,8 +264,7 @@ fun TasksScreen(
if (images.isNotEmpty()) {
taskCompletionViewModel.createTaskCompletionWithImages(
request = request,
images = images.map { it.bytes },
imageFileNames = images.map { it.fileName }
images = images
)
} else {
taskCompletionViewModel.createTaskCompletion(request)

View File

@@ -7,6 +7,7 @@ import com.mycrib.shared.models.TaskCompletionCreateRequest
import com.mycrib.shared.network.ApiResult
import com.mycrib.shared.network.TaskCompletionApi
import com.mycrib.storage.TokenStorage
import com.mycrib.util.ImageCompressor
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
@@ -33,22 +34,34 @@ class TaskCompletionViewModel : ViewModel() {
* Create task completion with images.
*
* @param request The completion request data
* @param images List of image data as ByteArray (from platform-specific image pickers)
* @param imageFileNames Optional list of file names for the images
* @param images List of ImageData (from platform-specific image pickers)
*/
fun createTaskCompletionWithImages(
request: TaskCompletionCreateRequest,
images: List<ByteArray> = emptyList(),
imageFileNames: List<String> = emptyList()
images: List<com.mycrib.platform.ImageData> = emptyList()
) {
viewModelScope.launch {
_createCompletionState.value = ApiResult.Loading
val token = TokenStorage.getToken()
if (token != null) {
// Compress images and prepare for upload
val compressedImages = images.map { ImageCompressor.compressImage(it) }
val imageFileNames = images.mapIndexed { index, image ->
// Always use .jpg extension since we compress to JPEG
val baseName = image.fileName.ifBlank { "completion_$index" }
if (baseName.endsWith(".jpg", ignoreCase = true) ||
baseName.endsWith(".jpeg", ignoreCase = true)) {
baseName
} else {
// Remove any existing extension and add .jpg
baseName.substringBeforeLast('.', baseName) + ".jpg"
}
}
_createCompletionState.value = taskCompletionApi.createCompletionWithImages(
token = token,
request = request,
images = images,
images = compressedImages,
imageFileNames = imageFileNames
)
} else {