From e9304a7a4e5b7e16ff61240db3acbb583a64167f Mon Sep 17 00:00:00 2001 From: erik-everardo Date: Sun, 24 Dec 2023 01:43:05 -0600 Subject: [PATCH] WIP eliminar imagenes --- .../data/remote/DeleteImagesResultDto.kt | 6 ---- .../images/common/data/remote/ImagesApi.kt | 13 +++----- .../data/repository/ImagesRepositoryImpl.kt | 31 +++++++++++++------ .../presentation/ImageListViewModel.kt | 16 +++++++++- .../images/image_list/ui/ImagesFragment.kt | 6 ++-- 5 files changed, 46 insertions(+), 26 deletions(-) delete mode 100644 app/src/main/java/com/isolaatti/images/common/data/remote/DeleteImagesResultDto.kt diff --git a/app/src/main/java/com/isolaatti/images/common/data/remote/DeleteImagesResultDto.kt b/app/src/main/java/com/isolaatti/images/common/data/remote/DeleteImagesResultDto.kt deleted file mode 100644 index 8a1c4c3..0000000 --- a/app/src/main/java/com/isolaatti/images/common/data/remote/DeleteImagesResultDto.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.isolaatti.images.common.data.remote - -data class DeleteImagesResultDto( - val success: Boolean, - val unSuccessIds: List -) \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/images/common/data/remote/ImagesApi.kt b/app/src/main/java/com/isolaatti/images/common/data/remote/ImagesApi.kt index 81f48e8..adf57d0 100644 --- a/app/src/main/java/com/isolaatti/images/common/data/remote/ImagesApi.kt +++ b/app/src/main/java/com/isolaatti/images/common/data/remote/ImagesApi.kt @@ -21,15 +21,12 @@ interface ImagesApi { @POST("images/create") @Multipart fun postImage(@Part file: MultipartBody.Part, - @Part("name") name: String, - @Part("setAsProfile") setAsProfile: Boolean? = null, - @Part("squadId") squadId: String? = null): Call + @Part name: MultipartBody.Part, + @Part setAsProfile: MultipartBody.Part? = null, + @Part squadId: MultipartBody.Part? = null): Call - @DELETE("images/{imageId}") - fun deleteImage(@Path("imageId") imageId: String): Call - - @DELETE("images/delete_many") - fun deleteImages(@Body deleteImagesDto: DeleteImagesDto): Call + @POST("images/delete_many") + fun deleteImages(@Body deleteImagesDto: DeleteImagesDto): Call @GET("images/of_squad/{squadId}") fun getImagesOfSquad(@Path("squadId") squadId: String, diff --git a/app/src/main/java/com/isolaatti/images/common/data/repository/ImagesRepositoryImpl.kt b/app/src/main/java/com/isolaatti/images/common/data/repository/ImagesRepositoryImpl.kt index ca174d6..137ec28 100644 --- a/app/src/main/java/com/isolaatti/images/common/data/repository/ImagesRepositoryImpl.kt +++ b/app/src/main/java/com/isolaatti/images/common/data/repository/ImagesRepositoryImpl.kt @@ -3,12 +3,10 @@ package com.isolaatti.images.common.data.repository import android.content.ContentResolver import android.graphics.Bitmap import android.graphics.BitmapFactory -import android.graphics.Picture import android.net.Uri import android.os.Build -import android.os.MemoryFile -import android.os.SharedMemory import android.util.Log +import com.isolaatti.images.common.data.remote.DeleteImagesDto import com.isolaatti.images.common.data.remote.ImagesApi import com.isolaatti.images.common.domain.entity.Image import com.isolaatti.images.common.domain.repository.ImagesRepository @@ -16,18 +14,18 @@ import com.isolaatti.utils.Resource import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow import okhttp3.MultipartBody -import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import retrofit2.awaitResponse import java.io.ByteArrayOutputStream -import java.io.File import java.io.InputStream -import java.io.OutputStream -import java.io.OutputStreamWriter import javax.inject.Inject class ImagesRepositoryImpl @Inject constructor(private val imagesApi: ImagesApi, private val contentResolver: ContentResolver) : ImagesRepository { + + companion object { + const val TAG = "ImagesRepositoryImpl" + } override fun getImagesOfUser(userId: Int, lastId: String?): Flow>> = flow { emit(Resource.Loading()) try { @@ -47,7 +45,19 @@ class ImagesRepositoryImpl @Inject constructor(private val imagesApi: ImagesApi, } override fun deleteImages(images: List): Flow> = flow { - + emit(Resource.Loading()) + val dto = DeleteImagesDto(images.map { it.imageUrl }) + try { + val response = imagesApi.deleteImages(dto).awaitResponse() + if(response.isSuccessful) { + emit(Resource.Success(true)) + } else { + emit(Resource.Error(Resource.Error.mapErrorCode(response.code()))) + } + } catch (e: Exception) { + Log.e(TAG, e.message.toString()) + emit(Resource.Error(Resource.Error.ErrorType.NetworkError)) + } } override fun uploadImage(name: String, imageUri: Uri, squadId: String?): Flow> = flow { @@ -71,7 +81,10 @@ class ImagesRepositoryImpl @Inject constructor(private val imagesApi: ImagesApi, } - val response = imagesApi.postImage(MultipartBody.Part.createFormData("file", name,outputStream.toByteArray().toRequestBody()), name).awaitResponse() + val response = imagesApi.postImage( + MultipartBody.Part.createFormData("file", name,outputStream.toByteArray().toRequestBody()), + MultipartBody.Part.createFormData("name", name) + ).awaitResponse() if(response.isSuccessful) { val imageDto = response.body() if(imageDto == null) { diff --git a/app/src/main/java/com/isolaatti/images/image_list/presentation/ImageListViewModel.kt b/app/src/main/java/com/isolaatti/images/image_list/presentation/ImageListViewModel.kt index f761c35..d26c6d0 100644 --- a/app/src/main/java/com/isolaatti/images/image_list/presentation/ImageListViewModel.kt +++ b/app/src/main/java/com/isolaatti/images/image_list/presentation/ImageListViewModel.kt @@ -33,6 +33,10 @@ class ImageListViewModel @Inject constructor(private val imagesRepository: Image return list.lastOrNull()?.id } + fun addImageAtTheBeginning(image: Image) { + liveList.value = listOf(image) + list + } + fun loadNext() { viewModelScope.launch { @@ -67,6 +71,16 @@ class ImageListViewModel @Inject constructor(private val imagesRepository: Image } fun removeImages(images: List) { - + viewModelScope.launch { + imagesRepository.deleteImages(images).onEach { + when(it) { + is Resource.Error -> {} + is Resource.Loading -> {} + is Resource.Success -> { + liveList.value = list.filterNot { image -> images.contains(image) } + } + } + }.flowOn(Dispatchers.IO).launchIn(this) + } } } \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/images/image_list/ui/ImagesFragment.kt b/app/src/main/java/com/isolaatti/images/image_list/ui/ImagesFragment.kt index 2ca4de7..cb0d6dc 100644 --- a/app/src/main/java/com/isolaatti/images/image_list/ui/ImagesFragment.kt +++ b/app/src/main/java/com/isolaatti/images/image_list/ui/ImagesFragment.kt @@ -49,8 +49,10 @@ class ImagesFragment : Fragment() { PictureViewerActivity.startActivityWithImages(requireContext(), images.toTypedArray(), position) } - private val imageMakerLauncher = registerForActivityResult(ImageMakerContract()) { - Toast.makeText(requireContext(), "se subio la imagen ${it?.id}", Toast.LENGTH_SHORT).show() + private val imageMakerLauncher = registerForActivityResult(ImageMakerContract()) { image -> + image?.also { + viewModel.addImageAtTheBeginning(it) + } } private val choosePictureLauncher = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) {