Browse Source

Fix image id conversion; fix #933

Signed-off-by: Karlatemp <[email protected]>
Karlatemp 5 years ago
parent
commit
db5e54507a

+ 17 - 3
mirai-core-utils/src/commonMain/kotlin/Bytes.kt

@@ -27,11 +27,25 @@ public fun generateImageId(md5: ByteArray, format: String = "mirai"): String {
 
 @JvmOverloads
 public fun generateImageIdFromResourceId(resourceId: String, format: String = "mirai"): String? {
-    //  friend image id:  /1040400290-3666252994-EFF4427CE3D27DB6B1D9A8AB72E7A29C
-    //  friend image id:  /1040400290-3666252994-EFF4427C E3D2 7DB6 B1D9 A8AB72E7A29C
+    //  friend image id:  /f8f1ab55-bf8e-4236-b55e-955848d7069f
+    //  friend image id:  /                      f8f1ab55-bf8e-4236-b55e-955848d7069f
+
+    //  friend image id:  /0000000000-3666252994-EFF4427CE3D27DB6B1D9A8AB72E7A29C
+    //  friend image id:  /0000000000-3666252994-EFF4427C E3D2 7DB6 B1D9 A8AB72E7A29C
     //   group image id:                        {EF42A82D-8DB6-5D0F-4F11-68961D8DA5CB}.png
 
-    val md5String = resourceId.substringAfterLast("-").substringAfter("/").takeIf { it.length == 32 } ?: return null
+    if (resourceId.isNotEmpty()) {
+        if (resourceId[0] == '{') {
+            // {EF42A82D-8DB6-5D0F-4F11-68961D8DA5CB
+            if (resourceId.substringBefore('}', "").length == 37) {
+                return resourceId
+            }
+        }
+    }
+
+    val md5String = resourceId.substringAfterLast("-").substringAfter("/").takeIf { it.length == 32 }
+        ?: resourceId.replace("-", "").substringAfter('/').takeIf { it.length == 32 }
+        ?: return null
     return "{${generateUUID(md5String)}}.$format"
 }
 

+ 31 - 0
mirai-core-utils/src/commonTest/kotlin/net/mamoe/mirai/utils/ImageIdConversionTest.kt

@@ -0,0 +1,31 @@
+/*
+ * Copyright 2019-2021 Mamoe Technologies and contributors.
+ *
+ *  此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
+ *  Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
+ *
+ *  https://github.com/mamoe/mirai/blob/master/LICENSE
+ */
+
+package net.mamoe.mirai.utils
+
+import org.junit.jupiter.api.Test
+import kotlin.test.assertEquals
+
+internal class ImageIdConversionTest {
+    @Test
+    fun testConversions() {
+        assertEquals(
+            "{f8f1ab55-bf8e-4236-b55e-955848d7069f}.mirai",
+            generateImageIdFromResourceId("/f8f1ab55-bf8e-4236-b55e-955848d7069f"),
+        )
+        assertEquals(
+            "{EFF4427C-E3D2-7DB6-B1D9-A8AB72E7A29C}.mirai",
+            generateImageIdFromResourceId("/000000000-3666252994-EFF4427CE3D27DB6B1D9A8AB72E7A29C"),
+        )
+        assertEquals(
+            "{EF42A82D-8DB6-5D0F-4F11-68961D8DA5CB}.png",
+            generateImageIdFromResourceId("{EF42A82D-8DB6-5D0F-4F11-68961D8DA5CB}.png"),
+        )
+    }
+}

+ 2 - 2
mirai-core/src/commonMain/kotlin/message/imagesImpl.kt

@@ -138,7 +138,7 @@ internal fun ImMsgBody.NotOnlineImage.toCustomFace(): ImMsgBody.CustomFace {
         bigUrl = bigUrl,
         origUrl = origUrl,
         //_400Height = 235,
-        //_400Url = "/gchatpic_new/1040400290/1041235568-2195821338-01E9451B70EDEAE3B37C101F1EEBF5B5/400?term=2",
+        //_400Url = "/gchatpic_new/000000000/1041235568-2195821338-01E9451B70EDEAE3B37C101F1EEBF5B5/400?term=2",
         //_400Width = 351,
         oldData = this.oldVerSendFile
     )
@@ -182,7 +182,7 @@ internal fun OfflineGroupImage.toJceData(): ImMsgBody.CustomFace {
         picMd5 = this.md5,
         flag = ByteArray(4),
         //_400Height = 235,
-        //_400Url = "/gchatpic_new/1040400290/1041235568-2195821338-01E9451B70EDEAE3B37C101F1EEBF5B5/400?term=2",
+        //_400Url = "/gchatpic_new/000000000/1041235568-2195821338-01E9451B70EDEAE3B37C101F1EEBF5B5/400?term=2",
         //_400Width = 351,
         oldData = oldData
     )