commit 1241d68d3cacb114540b0624612ca4f0855a5bf9
parent 0b0220ce848afee9a65dc225d8b47909816031ef
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Wed, 3 Jan 2024 01:48:30 +0100
fix(app/ui): error handling
Diffstat:
2 files changed, 50 insertions(+), 36 deletions(-)
diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/ui/manager/sections/social/LoggedStories.kt b/app/src/main/kotlin/me/rhunk/snapenhance/ui/manager/sections/social/LoggedStories.kt
@@ -18,6 +18,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.asImageBitmap
+import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.core.content.FileProvider
import coil.annotation.ExperimentalCoilApi
@@ -161,6 +162,10 @@ fun LoggedStories(
}
}
+ if (stories.isEmpty()) {
+ Text(text = "No stories found", Modifier.fillMaxWidth(), textAlign = TextAlign.Center)
+ }
+
LazyVerticalGrid(
columns = GridCells.Adaptive(100.dp),
contentPadding = PaddingValues(8.dp),
@@ -203,25 +208,29 @@ fun LoggedStories(
return@withTimeout
}
- val response = httpClient.newCall(Request(
- url = story.url.toHttpUrl()
- )).execute()
- response.body.byteStream().use {
- val decrypted = story.key?.let { _ ->
- val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
- cipher.init(Cipher.DECRYPT_MODE, SecretKeySpec(story.key, "AES"), IvParameterSpec(story.iv))
- CipherInputStream(it, cipher)
- } ?: it
+ runCatching {
+ val response = httpClient.newCall(Request(
+ url = story.url.toHttpUrl()
+ )).execute()
+ response.body.byteStream().use {
+ val decrypted = story.key?.let { _ ->
+ val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
+ cipher.init(Cipher.DECRYPT_MODE, SecretKeySpec(story.key, "AES"), IvParameterSpec(story.iv))
+ CipherInputStream(it, cipher)
+ } ?: it
- context.imageLoader.diskCache?.openEditor(uniqueHash)?.apply {
- data.toFile().outputStream().use { fos ->
- decrypted.copyTo(fos)
- }
- commitAndOpenSnapshot()?.use { snapshot ->
- openDiskCacheSnapshot(snapshot)
- snapshot.close()
+ context.imageLoader.diskCache?.openEditor(uniqueHash)?.apply {
+ data.toFile().outputStream().use { fos ->
+ decrypted.copyTo(fos)
+ }
+ commitAndOpenSnapshot()?.use { snapshot ->
+ openDiskCacheSnapshot(snapshot)
+ snapshot.close()
+ }
}
}
+ }.onFailure {
+ context.log.error("Failed to load story", it)
}
}
}
diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/ui/manager/sections/social/MessagingPreview.kt b/app/src/main/kotlin/me/rhunk/snapenhance/ui/manager/sections/social/MessagingPreview.kt
@@ -423,29 +423,34 @@ class MessagingPreview(
}
private fun onMessagingBridgeReady() {
- messagingBridge = context.bridgeService!!.messagingBridge!!
- conversationId = if (scope == SocialScope.FRIEND) messagingBridge.getOneToOneConversationId(scopeId) else scopeId
- if (conversationId == null) {
- context.longToast("Failed to fetch conversation id")
- return
- }
- if (!messagingBridge.isSessionStarted) {
- context.androidContext.packageManager.getLaunchIntentForPackage(
- Constants.SNAPCHAT_PACKAGE_NAME
- )?.let {
- val mainIntent = Intent.makeRestartActivityTask(it.component).apply {
- putExtra(ReceiversConfig.MESSAGING_PREVIEW_EXTRA, true)
- }
- context.androidContext.startActivity(mainIntent)
+ runCatching {
+ messagingBridge = context.bridgeService!!.messagingBridge!!
+ conversationId = if (scope == SocialScope.FRIEND) messagingBridge.getOneToOneConversationId(scopeId) else scopeId
+ if (conversationId == null) {
+ context.longToast("Failed to fetch conversation id")
+ return
}
- messagingBridge.registerSessionStartListener(object: SessionStartListener.Stub() {
- override fun onConnected() {
- fetchNewMessages()
+ if (!messagingBridge.isSessionStarted) {
+ context.androidContext.packageManager.getLaunchIntentForPackage(
+ Constants.SNAPCHAT_PACKAGE_NAME
+ )?.let {
+ val mainIntent = Intent.makeRestartActivityTask(it.component).apply {
+ putExtra(ReceiversConfig.MESSAGING_PREVIEW_EXTRA, true)
+ }
+ context.androidContext.startActivity(mainIntent)
}
- })
- return
+ messagingBridge.registerSessionStartListener(object: SessionStartListener.Stub() {
+ override fun onConnected() {
+ fetchNewMessages()
+ }
+ })
+ return
+ }
+ fetchNewMessages()
+ }.onFailure {
+ context.longToast("Failed to initialize messaging bridge")
+ context.log.error("Failed to initialize messaging bridge", it)
}
- fetchNewMessages()
}
@Composable