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:
Mapp/src/main/kotlin/me/rhunk/snapenhance/ui/manager/sections/social/LoggedStories.kt | 41+++++++++++++++++++++++++----------------
Mapp/src/main/kotlin/me/rhunk/snapenhance/ui/manager/sections/social/MessagingPreview.kt | 45+++++++++++++++++++++++++--------------------
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