Extract AutoSavePluginDataHolder

This commit is contained in:
Him188 2020-09-03 22:00:03 +08:00
parent bd939ee85f
commit 623dd28a6e
3 changed files with 35 additions and 30 deletions

View File

@ -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
}

View File

@ -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] 存储仓库

View File

@ -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 {