From 7f4b7bbd21c304c6c405aa9822bc01b0b6a58015 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Mon, 15 May 2023 09:22:15 +0300 Subject: [PATCH] Resolved #9391 - clicking locally-added mods no longer crashes --- .../pickerscreens/ModManagementScreen.kt | 72 +++++++++++-------- 1 file changed, 41 insertions(+), 31 deletions(-) diff --git a/core/src/com/unciv/ui/screens/pickerscreens/ModManagementScreen.kt b/core/src/com/unciv/ui/screens/pickerscreens/ModManagementScreen.kt index da46d5802d..9ba2b62cc3 100644 --- a/core/src/com/unciv/ui/screens/pickerscreens/ModManagementScreen.kt +++ b/core/src/com/unciv/ui/screens/pickerscreens/ModManagementScreen.kt @@ -365,7 +365,7 @@ class ModManagementScreen( ) } - val repoUrlToPreviewImage = HashMap() + private val repoUrlToPreviewImage = HashMap() private fun addModInfoToActionTable( repoUrl: String, @@ -380,36 +380,7 @@ class ModManagementScreen( val imageHolder = Table() - fun setTextureAsPreview(texture: Texture){ - val maxAllowedImageSize = 200f - val cell = imageHolder.add(Image(texture)) - val largestImageSize = max(texture.width, texture.height) - if (largestImageSize > maxAllowedImageSize) { - val resizeRatio = maxAllowedImageSize / largestImageSize - cell.size(texture.width * resizeRatio, texture.height * resizeRatio) - } - } - - if (!repoUrlToPreviewImage.containsKey(repoUrl)) { - Concurrency.run { - val imagePixmap = Github.tryGetPreviewImage(repoUrl, default_branch) - - if (imagePixmap == null) { - repoUrlToPreviewImage[repoUrl] = null - return@run - } - Concurrency.runOnGLThread { - val texture = Texture(imagePixmap) - imagePixmap.dispose() - repoUrlToPreviewImage[repoUrl] = texture - setTextureAsPreview(texture) - } - } - } - else { - val texture = repoUrlToPreviewImage[repoUrl] - if (texture!=null) setTextureAsPreview(texture) - } + addPreviewImage(imageHolder, repoUrl, default_branch) modActionTable.add(imageHolder).row() @@ -438,6 +409,45 @@ class ModManagementScreen( } } + private fun addPreviewImage( + imageHolder: Table, + repoUrl: String, + default_branch: String + ) { + if (!repoUrl.startsWith("http")) return // invalid url + + fun setTextureAsPreview(texture: Texture) { + val maxAllowedImageSize = 200f + val cell = imageHolder.add(Image(texture)) + val largestImageSize = max(texture.width, texture.height) + if (largestImageSize > maxAllowedImageSize) { + val resizeRatio = maxAllowedImageSize / largestImageSize + cell.size(texture.width * resizeRatio, texture.height * resizeRatio) + } + } + + if (repoUrlToPreviewImage.containsKey(repoUrl)) { + val texture = repoUrlToPreviewImage[repoUrl] + if (texture != null) setTextureAsPreview(texture) + return + } + + Concurrency.run { + val imagePixmap = Github.tryGetPreviewImage(repoUrl, default_branch) + + if (imagePixmap == null) { + repoUrlToPreviewImage[repoUrl] = null + return@run + } + Concurrency.runOnGLThread { + val texture = Texture(imagePixmap) + imagePixmap.dispose() + repoUrlToPreviewImage[repoUrl] = texture + setTextureAsPreview(texture) + } + } + } + /** Create the special "Download from URL" button */ private fun getDownloadFromUrlButton(): TextButton { val downloadButton = "Download mod from URL".toTextButton()