在 MultiFilePluginDataStorage.load 失败时,备份数据文件 (#2089)

* feat: load data failure, backup data file

* feat: load data failure, backup data file

* feat: currentTimeMillis
This commit is contained in:
cssxsh 2022-06-14 02:45:22 +08:00 committed by GitHub
parent 342538e31b
commit 2d41a617fe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -18,6 +18,7 @@ import net.mamoe.mirai.console.data.PluginDataStorage
import net.mamoe.mirai.console.util.ConsoleExperimentalApi import net.mamoe.mirai.console.util.ConsoleExperimentalApi
import net.mamoe.mirai.message.MessageSerializers import net.mamoe.mirai.message.MessageSerializers
import net.mamoe.mirai.utils.MiraiLogger import net.mamoe.mirai.utils.MiraiLogger
import net.mamoe.mirai.utils.currentTimeMillis
import net.mamoe.yamlkt.Yaml import net.mamoe.yamlkt.Yaml
import java.io.File import java.io.File
import java.nio.file.Path import java.nio.file.Path
@ -35,9 +36,17 @@ internal open class MultiFilePluginDataStorageImpl(
instance.onInit(holder, this) instance.onInit(holder, this)
// 0xFEFF is BOM, handle UTF8-BOM // 0xFEFF is BOM, handle UTF8-BOM
val text = getPluginDataFile(holder, instance).readText().removePrefix("\uFEFF") val file = getPluginDataFile(holder, instance)
val text = file.readText().removePrefix("\uFEFF")
if (text.isNotBlank()) { if (text.isNotBlank()) {
createYaml(instance).decodeFromString(instance.updaterSerializer, text) val yaml = createYaml(instance)
try {
yaml.decodeFromString(instance.updaterSerializer, text)
} catch (cause: Throwable) {
// backup data file
file.copyTo(file.resolveSibling("${file.name}.${currentTimeMillis()}.bak"))
throw cause
}
} else { } else {
this.store(holder, instance) // save an initial copy this.store(holder, instance) // save an initial copy
} }