Skip to content

Commit 20d94ca

Browse files
authored
feat(newsletter): implement image fetching from WordPress storage (#32)
1 parent 95abcc2 commit 20d94ca

File tree

4 files changed

+42
-22
lines changed

4 files changed

+42
-22
lines changed

app/src/main/java/com/xpeho/xpeapp/data/service/FirebaseService.kt

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
package com.xpeho.xpeapp.data.service
22

3-
import android.graphics.BitmapFactory
43
import android.util.Log
5-
import androidx.compose.ui.graphics.ImageBitmap
6-
import androidx.compose.ui.graphics.asImageBitmap
74
import com.google.firebase.FirebaseException
85
import com.google.firebase.auth.FirebaseAuth
96
import com.google.firebase.firestore.FirebaseFirestore
10-
import com.google.firebase.storage.FirebaseStorage
117
import com.xpeho.xpeapp.data.FEATURE_FLIPPING_COLLECTION
128
import com.xpeho.xpeapp.data.NEWSLETTERS_COLLECTION
139
import com.xpeho.xpeapp.data.model.FeatureFlipping
@@ -84,20 +80,4 @@ class FirebaseService {
8480
return newslettersList.sortedByDescending { it.date }
8581
}
8682

87-
suspend fun getLastNewsletterPreview(previewPath: String?): ImageBitmap? {
88-
var imageBitmap: ImageBitmap? = null
89-
90-
if (previewPath != null) {
91-
try {
92-
val storageRef = FirebaseStorage.getInstance().reference.child(previewPath)
93-
val bytes = storageRef.getBytes(Long.MAX_VALUE).await()
94-
val bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.size)
95-
imageBitmap = bitmap.asImageBitmap()
96-
} catch (e: FirebaseException) {
97-
Log.e("getLastNewsletterPreview", "Error fetching image: ", e)
98-
}
99-
}
100-
101-
return imageBitmap
102-
}
10383
}

app/src/main/java/com/xpeho/xpeapp/data/service/WordpressRepository.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,26 @@ class WordpressRepository(
325325
)
326326
}
327327

328+
/// Storage features methods
329+
// getImage
330+
suspend fun getImage(imageName: String): ByteArray? {
331+
return handleServiceExceptions(
332+
tryBody = {
333+
val response = api.fetchImageStorage(imageName)
334+
if (response.isSuccessful) {
335+
response.body()?.bytes()
336+
} else {
337+
null
338+
}
339+
},
340+
catchBody = { e ->
341+
Log.e("WordpressRepository: getImage", "Network error: ${e.message}")
342+
null
343+
}
344+
)
345+
}
346+
347+
328348
// Exceptions handling
329349

330350
@Suppress("ReturnCount")

app/src/main/java/com/xpeho/xpeapp/data/service/WordpressService.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,5 +107,10 @@ interface WordpressService {
107107
@Query("page") page: String = "",
108108
): List<AgendaBirthday>
109109

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

app/src/main/java/com/xpeho/xpeapp/ui/viewModel/newsletter/NewslettersViewModel.kt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.xpeho.xpeapp.ui.viewModel.newsletter
22

3+
import android.graphics.BitmapFactory.decodeByteArray
4+
import android.util.Log
5+
import androidx.compose.ui.graphics.asImageBitmap
36
import androidx.compose.runtime.MutableState
47
import androidx.compose.runtime.mutableStateOf
58
import androidx.compose.ui.graphics.ImageBitmap
@@ -12,6 +15,7 @@ import kotlinx.coroutines.launch
1215
class NewsletterViewModel : ViewModel() {
1316

1417
private val firebaseService = XpeApp.appModule.firebaseService
18+
private val wordpressRepository = XpeApp.appModule.wordpressRepository
1519

1620
val state = mutableStateOf(
1721
listOf<Newsletter>()
@@ -24,12 +28,23 @@ class NewsletterViewModel : ViewModel() {
2428
getNewsletters()
2529
}
2630

31+
// Get the newsletters from Firestore and the preview image from WordPress
2732
private fun getNewsletters() {
2833
isLoading.value = true
2934
viewModelScope.launch {
3035
state.value = firebaseService.fetchNewsletters()
3136
lastNewsletter.value = state.value.firstOrNull()
32-
lastNewsletterPreview.value = firebaseService.getLastNewsletterPreview(lastNewsletter.value?.picture)
37+
val previewPath = lastNewsletter.value?.picture
38+
var imageBitmap: ImageBitmap? = null
39+
if (previewPath != null) {
40+
val imageBytes = wordpressRepository.getImage(previewPath)
41+
if (imageBytes != null) {
42+
imageBitmap = decodeByteArray(imageBytes, 0, imageBytes.size).asImageBitmap()
43+
} else {
44+
Log.e("Newsletters WordPress Image", "getImage a retourné null pour le chemin $previewPath")
45+
}
46+
}
47+
lastNewsletterPreview.value = imageBitmap
3348
isLoading.value = false
3449
}
3550
}

0 commit comments

Comments
 (0)