Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 0 additions & 20 deletions app/src/main/java/com/xpeho/xpeapp/data/service/FirebaseService.kt
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
package com.xpeho.xpeapp.data.service

import android.graphics.BitmapFactory
import android.util.Log
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.asImageBitmap
import com.google.firebase.FirebaseException
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.firestore.FirebaseFirestore
import com.google.firebase.storage.FirebaseStorage
import com.xpeho.xpeapp.data.FEATURE_FLIPPING_COLLECTION
import com.xpeho.xpeapp.data.NEWSLETTERS_COLLECTION
import com.xpeho.xpeapp.data.model.FeatureFlipping
Expand Down Expand Up @@ -84,20 +80,4 @@ class FirebaseService {
return newslettersList.sortedByDescending { it.date }
}

suspend fun getLastNewsletterPreview(previewPath: String?): ImageBitmap? {
var imageBitmap: ImageBitmap? = null

if (previewPath != null) {
try {
val storageRef = FirebaseStorage.getInstance().reference.child(previewPath)
val bytes = storageRef.getBytes(Long.MAX_VALUE).await()
val bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.size)
imageBitmap = bitmap.asImageBitmap()
} catch (e: FirebaseException) {
Log.e("getLastNewsletterPreview", "Error fetching image: ", e)
}
}

return imageBitmap
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,26 @@ class WordpressRepository(
)
}

/// Storage features methods
// getImage
suspend fun getImage(imageName: String): ByteArray? {
return handleServiceExceptions(
tryBody = {
val response = api.fetchImageStorage(imageName)
if (response.isSuccessful) {
response.body()?.bytes()
} else {
null
}
},
catchBody = { e ->
Log.e("WordpressRepository: getImage", "Network error: ${e.message}")
null
}
)
}


// Exceptions handling

@Suppress("ReturnCount")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,5 +107,10 @@ interface WordpressService {
@Query("page") page: String = "",
): List<AgendaBirthday>

// Storage Feature
// Fetch images from storage
@GET("xpeho/v1/image-storage/{imageName}")
suspend fun fetchImageStorage(
@Path("imageName", encoded = true) imageName: String,
): Response<okhttp3.ResponseBody>
}

Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.xpeho.xpeapp.ui.viewModel.newsletter

import android.graphics.BitmapFactory.decodeByteArray
import android.util.Log
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.graphics.ImageBitmap
Expand All @@ -12,6 +15,7 @@ import kotlinx.coroutines.launch
class NewsletterViewModel : ViewModel() {

private val firebaseService = XpeApp.appModule.firebaseService
private val wordpressRepository = XpeApp.appModule.wordpressRepository

val state = mutableStateOf(
listOf<Newsletter>()
Expand All @@ -24,12 +28,23 @@ class NewsletterViewModel : ViewModel() {
getNewsletters()
}

// Get the newsletters from Firestore and the preview image from WordPress
private fun getNewsletters() {
isLoading.value = true
viewModelScope.launch {
state.value = firebaseService.fetchNewsletters()
lastNewsletter.value = state.value.firstOrNull()
lastNewsletterPreview.value = firebaseService.getLastNewsletterPreview(lastNewsletter.value?.picture)
val previewPath = lastNewsletter.value?.picture
var imageBitmap: ImageBitmap? = null
if (previewPath != null) {
val imageBytes = wordpressRepository.getImage(previewPath)
if (imageBytes != null) {
imageBitmap = decodeByteArray(imageBytes, 0, imageBytes.size).asImageBitmap()
} else {
Log.e("Newsletters WordPress Image", "getImage a retourné null pour le chemin $previewPath")
}
}
lastNewsletterPreview.value = imageBitmap
isLoading.value = false
}
}
Expand Down
Loading