diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/AutoSavePluginDataHolder.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/AutoSavePluginDataHolder.kt new file mode 100644 index 000000000..5b4265865 --- /dev/null +++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/AutoSavePluginDataHolder.kt @@ -0,0 +1,32 @@ +package net.mamoe.mirai.console.data + +import kotlinx.coroutines.CoroutineExceptionHandler +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Job +import net.mamoe.mirai.console.util.ConsoleExperimentalAPI + +/** + * 可以持有相关 [AutoSavePluginData] 的对象. + * + * ### 实现 [AutoSavePluginDataHolder] + * [CoroutineScope.coroutineContext] 中应用 [CoroutineExceptionHandler] + * + * @see net.mamoe.mirai.console.plugin.jvm.JvmPlugin + */ +@ConsoleExperimentalAPI +public interface AutoSavePluginDataHolder : PluginDataHolder, CoroutineScope { + /** + * [AutoSavePluginData] 每次自动保存时间间隔 + * + * - 区间的左端点为最小间隔, 一个 [Value] 被修改后, 若此时间段后无其他修改, 将触发自动保存; 若有, 将重新开始计时. + * - 区间的右端点为最大间隔, 一个 [Value] 被修改后, 最多不超过这个时间段后就会被保存. + * + * 若 [AutoSavePluginDataHolder.coroutineContext] 含有 [Job], + * 则 [AutoSavePluginData] 会通过 [Job.invokeOnCompletion] 在 Job 完结时触发自动保存. + * + * @see LongRange Java 用户使用 [LongRange] 的构造器创建 + * @see Long.rangeTo Kotlin 用户使用 [Long.rangeTo] 创建, 如 `3000..50000` + */ + @ConsoleExperimentalAPI + public val autoSaveIntervalMillis: LongRange +} \ No newline at end of file diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/PluginData.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/PluginData.kt index 094867ef3..08f44ceb3 100644 --- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/PluginData.kt +++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/PluginData.kt @@ -95,7 +95,9 @@ import kotlin.reflect.full.findAnnotation * newList.add(1) // 不会添加到 MyPluginData.nestedMap 中, 因为 `mutableListOf` 创建的 MutableList 被非引用地添加进了 MyPluginData.nestedMap * ``` * - * 一个解决方案是对 [SerializerAwareValue] 做映射或相关修改. 如 [PluginDataExtensions] + * 一个解决方案是对 [SerializerAwareValue] 做映射或相关修改. 如 [PluginDataExtensions]。 + * + * 要查看详细的解释,请查看 [docs/PluginData.md](https://github.com/mamoe/mirai-console/blob/master/docs/PluginData.md) * * @see JvmPlugin.reloadPluginData 通过 [JvmPlugin] 获取指定 [PluginData] 实例. * @see PluginDataStorage [PluginData] 存储仓库 diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/PluginDataHolder.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/PluginDataHolder.kt index e6e210b97..2c89f3587 100644 --- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/PluginDataHolder.kt +++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/PluginDataHolder.kt @@ -11,9 +11,6 @@ package net.mamoe.mirai.console.data -import kotlinx.coroutines.CoroutineExceptionHandler -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Job import net.mamoe.mirai.console.util.ConsoleExperimentalAPI /** @@ -33,32 +30,6 @@ public interface PluginDataHolder { public val dataHolderName: String } -/** - * 可以持有相关 [AutoSavePluginData] 的对象. - * - * ### 实现 [AutoSavePluginDataHolder] - * [CoroutineScope.coroutineContext] 中应用 [CoroutineExceptionHandler] - * - * @see net.mamoe.mirai.console.plugin.jvm.JvmPlugin - */ -@ConsoleExperimentalAPI -public interface AutoSavePluginDataHolder : PluginDataHolder, CoroutineScope { - /** - * [AutoSavePluginData] 每次自动保存时间间隔 - * - * - 区间的左端点为最小间隔, 一个 [Value] 被修改后, 若此时间段后无其他修改, 将触发自动保存; 若有, 将重新开始计时. - * - 区间的右端点为最大间隔, 一个 [Value] 被修改后, 最多不超过这个时间段后就会被保存. - * - * 若 [AutoSavePluginDataHolder.coroutineContext] 含有 [Job], - * 则 [AutoSavePluginData] 会通过 [Job.invokeOnCompletion] 在 Job 完结时触发自动保存. - * - * @see LongRange Java 用户使用 [LongRange] 的构造器创建 - * @see Long.rangeTo Kotlin 用户使用 [Long.rangeTo] 创建, 如 `3000..50000` - */ - @ConsoleExperimentalAPI - public val autoSaveIntervalMillis: LongRange -} - /* public interface PluginDataHolder {