mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-04 15:40:13 +08:00
Fix imageType sent from macOS client, fix #1111
This commit is contained in:
parent
05aa3c8026
commit
90deacb692
@ -19,8 +19,8 @@ import kotlin.contracts.contract
|
|||||||
|
|
||||||
|
|
||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
public fun generateImageId(md5: ByteArray, format: String = "mirai"): String {
|
public fun generateImageId(md5: ByteArray, format: String? = null): String {
|
||||||
return """{${generateUUID(md5)}}.$format"""
|
return """{${generateUUID(md5)}}.${format ?: "mirai"}"""
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmOverloads
|
@JvmOverloads
|
||||||
|
@ -120,7 +120,7 @@ internal sealed class AbstractUser(
|
|||||||
},
|
},
|
||||||
width = fileWidth,
|
width = fileWidth,
|
||||||
height = fileHeight,
|
height = fileHeight,
|
||||||
imageType = getImageTypeById(fileType),
|
imageType = getImageTypeById(fileType) ?: ImageType.UNKNOWN,
|
||||||
size = resource.size
|
size = resource.size
|
||||||
)
|
)
|
||||||
}.also {
|
}.also {
|
||||||
|
@ -241,7 +241,7 @@ internal class GroupImpl constructor(
|
|||||||
imageId = resourceId,
|
imageId = resourceId,
|
||||||
height = fileHeight,
|
height = fileHeight,
|
||||||
width = fileWidth,
|
width = fileWidth,
|
||||||
imageType = getImageTypeById(fileType),
|
imageType = getImageTypeById(fileType) ?: ImageType.UNKNOWN,
|
||||||
size = resource.size
|
size = resource.size
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -26,8 +26,6 @@ internal sealed class AbstractImage : Image {
|
|||||||
get() = 0
|
get() = 0
|
||||||
override val height: Int
|
override val height: Int
|
||||||
get() = 0
|
get() = 0
|
||||||
override val imageType: ImageType
|
|
||||||
get() = ImageType.UNKNOWN
|
|
||||||
|
|
||||||
final override fun toString(): String = _stringValue!!
|
final override fun toString(): String = _stringValue!!
|
||||||
final override fun contentToString(): String = if (isEmoji) {
|
final override fun contentToString(): String = if (isEmoji) {
|
||||||
|
@ -31,11 +31,11 @@ internal data class ImageInfo(val width: Int = 0, val height: Int = 0, val image
|
|||||||
|
|
||||||
internal val UNKNOWN_IMAGE_TYPE_PROMPT_ENABLED = systemProp("mirai.unknown.image.type.logging", false)
|
internal val UNKNOWN_IMAGE_TYPE_PROMPT_ENABLED = systemProp("mirai.unknown.image.type.logging", false)
|
||||||
|
|
||||||
internal fun getImageTypeById(id: Int): ImageType {
|
internal fun getImageTypeById(id: Int): ImageType? {
|
||||||
return if (id == 2001) {
|
return if (id == 2001) {
|
||||||
ImageType.APNG
|
ImageType.APNG
|
||||||
} else {
|
} else {
|
||||||
ImageType.match(getImageType(id))
|
ImageType.matchOrNull(getImageType(id))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,9 +47,9 @@ OnlineFriendImage() {
|
|||||||
override val height: Int
|
override val height: Int
|
||||||
get() = delegate.picHeight
|
get() = delegate.picHeight
|
||||||
override val imageType: ImageType
|
override val imageType: ImageType
|
||||||
get() = getImageTypeById(delegate.imgType)
|
get() = OnlineImageIds.speculateImageType(delegate.filePath, delegate.imgType)
|
||||||
override val imageId: String = kotlin.run {
|
override val imageId: String = kotlin.run {
|
||||||
val imageType = getImageType(delegate.imgType)
|
val imageType = imageType.formatName
|
||||||
generateImageIdFromResourceId(delegate.resId, imageType)
|
generateImageIdFromResourceId(delegate.resId, imageType)
|
||||||
?: kotlin.run {
|
?: kotlin.run {
|
||||||
if (delegate.picMd5.size == 16) generateImageId(delegate.picMd5, imageType)
|
if (delegate.picMd5.size == 16) generateImageId(delegate.picMd5, imageType)
|
||||||
@ -118,16 +118,11 @@ internal class OnlineGroupImageImpl(
|
|||||||
override val height: Int
|
override val height: Int
|
||||||
get() = delegate.height
|
get() = delegate.height
|
||||||
override val imageType: ImageType
|
override val imageType: ImageType
|
||||||
get() = getImageTypeById(delegate.imageType)
|
get() = OnlineImageIds.speculateImageType(delegate.filePath, delegate.imageType)
|
||||||
|
|
||||||
override val imageId: String = generateImageId(
|
override val imageId: String = generateImageId(
|
||||||
delegate.picMd5,
|
delegate.picMd5,
|
||||||
delegate.filePath.substringAfterLast('.').lowercase().let { ext ->
|
OnlineImageIds.speculateImageTypeNameFromFilePath(delegate.filePath)
|
||||||
if (ext == "null") {
|
|
||||||
// official clients might send `null`
|
|
||||||
getImageType(delegate.imageType)
|
|
||||||
} else ext
|
|
||||||
}
|
|
||||||
).takeIf {
|
).takeIf {
|
||||||
Image.IMAGE_ID_REGEX.matches(it)
|
Image.IMAGE_ID_REGEX.matches(it)
|
||||||
} ?: generateImageId(delegate.picMd5)
|
} ?: generateImageId(delegate.picMd5)
|
||||||
@ -141,3 +136,26 @@ internal class OnlineGroupImageImpl(
|
|||||||
delegate.pbReserve.pbImageResv_checkIsEmoji(CustomFaceExtPb.ResvAttr.serializer())
|
delegate.pbReserve.pbImageResv_checkIsEmoji(CustomFaceExtPb.ResvAttr.serializer())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private object OnlineImageIds {
|
||||||
|
|
||||||
|
fun speculateImageType(filePath: String, imageTypeInt: Int): ImageType {
|
||||||
|
return getImageTypeById(imageTypeInt) ?: speculateImageTypeFromImageId(filePath) ?: ImageType.UNKNOWN
|
||||||
|
}
|
||||||
|
|
||||||
|
fun speculateImageTypeFromImageId(filePathOrImageId: String): ImageType? {
|
||||||
|
return speculateImageTypeNameFromFilePath(filePathOrImageId)?.let { ImageType.matchOrNull(it) }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param filePath should ends with `.type`
|
||||||
|
*/
|
||||||
|
fun speculateImageTypeNameFromFilePath(filePath: String): String? {
|
||||||
|
return filePath.substringAfterLast('.').lowercase().let { ext ->
|
||||||
|
if (ext == "null") {
|
||||||
|
// official clients might send `null`
|
||||||
|
null
|
||||||
|
} else ext
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user