mirror of
https://github.com/mamoe/mirai.git
synced 2025-03-04 07:30:15 +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
|
||||
public fun generateImageId(md5: ByteArray, format: String = "mirai"): String {
|
||||
return """{${generateUUID(md5)}}.$format"""
|
||||
public fun generateImageId(md5: ByteArray, format: String? = null): String {
|
||||
return """{${generateUUID(md5)}}.${format ?: "mirai"}"""
|
||||
}
|
||||
|
||||
@JvmOverloads
|
||||
|
@ -120,7 +120,7 @@ internal sealed class AbstractUser(
|
||||
},
|
||||
width = fileWidth,
|
||||
height = fileHeight,
|
||||
imageType = getImageTypeById(fileType),
|
||||
imageType = getImageTypeById(fileType) ?: ImageType.UNKNOWN,
|
||||
size = resource.size
|
||||
)
|
||||
}.also {
|
||||
|
@ -241,7 +241,7 @@ internal class GroupImpl constructor(
|
||||
imageId = resourceId,
|
||||
height = fileHeight,
|
||||
width = fileWidth,
|
||||
imageType = getImageTypeById(fileType),
|
||||
imageType = getImageTypeById(fileType) ?: ImageType.UNKNOWN,
|
||||
size = resource.size
|
||||
)
|
||||
}
|
||||
|
@ -26,8 +26,6 @@ internal sealed class AbstractImage : Image {
|
||||
get() = 0
|
||||
override val height: Int
|
||||
get() = 0
|
||||
override val imageType: ImageType
|
||||
get() = ImageType.UNKNOWN
|
||||
|
||||
final override fun toString(): String = _stringValue!!
|
||||
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 fun getImageTypeById(id: Int): ImageType {
|
||||
internal fun getImageTypeById(id: Int): ImageType? {
|
||||
return if (id == 2001) {
|
||||
ImageType.APNG
|
||||
} else {
|
||||
ImageType.match(getImageType(id))
|
||||
ImageType.matchOrNull(getImageType(id))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -47,9 +47,9 @@ OnlineFriendImage() {
|
||||
override val height: Int
|
||||
get() = delegate.picHeight
|
||||
override val imageType: ImageType
|
||||
get() = getImageTypeById(delegate.imgType)
|
||||
get() = OnlineImageIds.speculateImageType(delegate.filePath, delegate.imgType)
|
||||
override val imageId: String = kotlin.run {
|
||||
val imageType = getImageType(delegate.imgType)
|
||||
val imageType = imageType.formatName
|
||||
generateImageIdFromResourceId(delegate.resId, imageType)
|
||||
?: kotlin.run {
|
||||
if (delegate.picMd5.size == 16) generateImageId(delegate.picMd5, imageType)
|
||||
@ -118,16 +118,11 @@ internal class OnlineGroupImageImpl(
|
||||
override val height: Int
|
||||
get() = delegate.height
|
||||
override val imageType: ImageType
|
||||
get() = getImageTypeById(delegate.imageType)
|
||||
get() = OnlineImageIds.speculateImageType(delegate.filePath, delegate.imageType)
|
||||
|
||||
override val imageId: String = generateImageId(
|
||||
delegate.picMd5,
|
||||
delegate.filePath.substringAfterLast('.').lowercase().let { ext ->
|
||||
if (ext == "null") {
|
||||
// official clients might send `null`
|
||||
getImageType(delegate.imageType)
|
||||
} else ext
|
||||
}
|
||||
OnlineImageIds.speculateImageTypeNameFromFilePath(delegate.filePath)
|
||||
).takeIf {
|
||||
Image.IMAGE_ID_REGEX.matches(it)
|
||||
} ?: generateImageId(delegate.picMd5)
|
||||
@ -141,3 +136,26 @@ internal class OnlineGroupImageImpl(
|
||||
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