From a4d5a4cbf23d22dc87dd62e16a801ddf5f8fe884 Mon Sep 17 00:00:00 2001 From: Him188 Date: Sat, 22 Aug 2020 17:18:46 +0800 Subject: [PATCH] Implement PluginConfig, update docs --- .../mirai/console/MiraiConsoleImplementation.kt | 1 + .../net/mamoe/mirai/console/data/PluginConfig.kt | 5 ++++- .../internal/MiraiConsoleImplementationBridge.kt | 1 + .../console/internal/data/AutoSavePluginData.kt | 6 ++---- .../internal/data/MemoryPluginDataStorageImpl.kt | 9 +++++++++ .../data/MultiFilePluginDataStorageImpl.kt | 9 +++++++++ .../internal/data/PluginDataStorage internal.kt | 11 ----------- .../mirai/console/internal/data/PublishedApis.kt | 11 ----------- .../console/internal/data/valueFromKTypeImpl.kt | 1 - .../console/internal/plugin/JarPluginLoaderImpl.kt | 3 +++ .../mirai/console/plugin/jvm/JarPluginLoader.kt | 6 ++++++ .../mamoe/mirai/console/plugin/jvm/JvmPlugin.kt | 14 +++++++------- 12 files changed, 42 insertions(+), 35 deletions(-) delete mode 100644 backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/PluginDataStorage internal.kt delete mode 100644 backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/PublishedApis.kt diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/MiraiConsoleImplementation.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/MiraiConsoleImplementation.kt index 3e4680a8e..3fc50e57d 100644 --- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/MiraiConsoleImplementation.kt +++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/MiraiConsoleImplementation.kt @@ -76,6 +76,7 @@ public interface MiraiConsoleImplementation : CoroutineScope { public val consoleCommandSender: ConsoleCommandSender public val dataStorageForJarPluginLoader: PluginDataStorage + public val configStorageForJarPluginLoader: PluginDataStorage public val dataStorageForBuiltIns: PluginDataStorage public companion object { diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/PluginConfig.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/PluginConfig.kt index 91cdc6524..cc7df366f 100644 --- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/PluginConfig.kt +++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/data/PluginConfig.kt @@ -12,7 +12,10 @@ package net.mamoe.mirai.console.data /** * 一个插件的配置数据, 用于和用户交互. * - * 用户可通过 mirai-console 前端修改这些配置, 修改会自动写入这个对象中. + * 用户可通过 mirai-console 前端 (如在 Android 中可视化实现) 修改这些配置, 修改会自动写入这个对象中. + * + * **提示**: + * 插件内部的数据应用 [PluginData] 存储, 而不能使用 [PluginConfig]. */ @ExperimentalPluginConfig public interface PluginConfig : PluginData \ No newline at end of file diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/MiraiConsoleImplementationBridge.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/MiraiConsoleImplementationBridge.kt index 273ab3744..aad6f4bb4 100644 --- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/MiraiConsoleImplementationBridge.kt +++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/MiraiConsoleImplementationBridge.kt @@ -59,6 +59,7 @@ internal object MiraiConsoleImplementationBridge : CoroutineScope, MiraiConsoleI override val consoleCommandSender: ConsoleCommandSender get() = instance.consoleCommandSender override val dataStorageForJarPluginLoader: PluginDataStorage get() = instance.dataStorageForJarPluginLoader + override val configStorageForJarPluginLoader: PluginDataStorage get() = instance.configStorageForJarPluginLoader override val dataStorageForBuiltIns: PluginDataStorage get() = instance.dataStorageForBuiltIns init { diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/AutoSavePluginData.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/AutoSavePluginData.kt index 6c3822fd8..6a80cd3d4 100644 --- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/AutoSavePluginData.kt +++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/AutoSavePluginData.kt @@ -13,14 +13,12 @@ import kotlin.reflect.KClass * 当任一相关 [Value] 的值被修改时, 将在一段时间无其他修改时保存 * * 若 [AutoSavePluginDataHolder.coroutineContext] 含有 [Job], 则 [AutoSavePluginData] 会通过 [Job.invokeOnCompletion] 在 Job 完结时触发自动保存. - * - * @see loadPluginData */ internal open class AutoSavePluginData( private val owner: AutoSavePluginDataHolder, internal val originPluginDataClass: KClass -) : - AbstractPluginData(), PluginConfig { +) : AbstractPluginData(), PluginConfig { + private lateinit var storage: PluginDataStorage override fun setStorage(storage: PluginDataStorage) { diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/MemoryPluginDataStorageImpl.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/MemoryPluginDataStorageImpl.kt index 67f4e38d0..ffa51a2f4 100644 --- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/MemoryPluginDataStorageImpl.kt +++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/MemoryPluginDataStorageImpl.kt @@ -1,3 +1,12 @@ +/* + * Copyright 2019-2020 Mamoe Technologies and contributors. + * + * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 with Mamoe Exceptions 许可证的约束, 可以在以下链接找到该许可证. + * Use of this source code is governed by the GNU AFFERO GENERAL PUBLIC LICENSE version 3 with Mamoe Exceptions license that can be found via the following link. + * + * https://github.com/mamoe/mirai/blob/master/LICENSE + */ + package net.mamoe.mirai.console.internal.data import net.mamoe.mirai.console.data.* diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/MultiFilePluginDataStorageImpl.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/MultiFilePluginDataStorageImpl.kt index 61c687256..cb2363b80 100644 --- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/MultiFilePluginDataStorageImpl.kt +++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/MultiFilePluginDataStorageImpl.kt @@ -1,3 +1,12 @@ +/* + * Copyright 2019-2020 Mamoe Technologies and contributors. + * + * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 with Mamoe Exceptions 许可证的约束, 可以在以下链接找到该许可证. + * Use of this source code is governed by the GNU AFFERO GENERAL PUBLIC LICENSE version 3 with Mamoe Exceptions license that can be found via the following link. + * + * https://github.com/mamoe/mirai/blob/master/LICENSE + */ + package net.mamoe.mirai.console.internal.data import net.mamoe.mirai.console.data.* diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/PluginDataStorage internal.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/PluginDataStorage internal.kt deleted file mode 100644 index a62e8907a..000000000 --- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/PluginDataStorage internal.kt +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright 2019-2020 Mamoe Technologies and contributors. - * - * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 with Mamoe Exceptions 许可证的约束, 可以在以下链接找到该许可证. - * Use of this source code is governed by the GNU AFFERO GENERAL PUBLIC LICENSE version 3 with Mamoe Exceptions license that can be found via the following link. - * - * https://github.com/mamoe/mirai/blob/master/LICENSE - */ - -package net.mamoe.mirai.console.internal.data - diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/PublishedApis.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/PublishedApis.kt deleted file mode 100644 index 0867aaae7..000000000 --- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/PublishedApis.kt +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright 2020 Mamoe Technologies and contributors. - * - * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证. - * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link. - * - * https://github.com/mamoe/mirai/blob/master/LICENSE - */ - -package net.mamoe.mirai.console.internal.data - diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/valueFromKTypeImpl.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/valueFromKTypeImpl.kt index 2f6a7c5c6..a4dd1d8a1 100644 --- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/valueFromKTypeImpl.kt +++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/data/valueFromKTypeImpl.kt @@ -99,7 +99,6 @@ internal fun PluginData.valueFromKTypeImpl(type: KType): SerializerAwareValue<*> } } -@PublishedApi internal fun KClass<*>.createInstanceSmart(): Any? { return when (this) { MutableMap::class, diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/plugin/JarPluginLoaderImpl.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/plugin/JarPluginLoaderImpl.kt index 6bb33be26..10de0f8a6 100644 --- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/plugin/JarPluginLoaderImpl.kt +++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/internal/plugin/JarPluginLoaderImpl.kt @@ -32,6 +32,9 @@ internal object JarPluginLoaderImpl : CoroutineScope, JarPluginLoader { + override val configStorage: PluginDataStorage + get() = MiraiConsoleImplementationBridge.dataStorageForJarPluginLoader + private val logger: MiraiLogger = MiraiConsole.newLogger(JarPluginLoader::class.simpleName!!) @ConsoleExperimentalAPI diff --git a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugin/jvm/JarPluginLoader.kt b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugin/jvm/JarPluginLoader.kt index 134b2d018..80dfbbac4 100644 --- a/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugin/jvm/JarPluginLoader.kt +++ b/backend/mirai-console/src/main/kotlin/net/mamoe/mirai/console/plugin/jvm/JarPluginLoader.kt @@ -25,6 +25,12 @@ public interface JarPluginLoader : CoroutineScope, FilePluginLoader loadPluginData(clazz: Class): T = loader.dataStorage.load(this, clazz) /** - * 从 [JarPluginLoader.dataStorage] 获取一个 [PluginData] 实例 + * 读取一个 [PluginConfig] 实例 */ @JvmDefault - public fun loadPluginConfig(clazz: Class): T = loader.dataStorage.load(this, clazz) + public fun loadPluginConfig(clazz: Class): T = loader.configStorage.load(this, clazz) /** * 在插件被加载时调用. 只会被调用一次. @@ -84,25 +84,25 @@ public interface JvmPlugin : Plugin, CoroutineScope, } /** - * 读取一个插件数据. + * 读取一个 [PluginData] 实例 */ @JvmSynthetic public inline fun JvmPlugin.loadPluginData(clazz: KClass): T = this.loadPluginData(clazz.java) /** - * 读取一个插件数据. + * 读取一个 [PluginData] 实例 */ @JvmSynthetic public inline fun JvmPlugin.loadPluginData(): T = this.loadPluginData(T::class) /** - * 读取一个插件配置. + * 读取一个 [PluginConfig] 实例 */ @JvmSynthetic public inline fun JvmPlugin.loadPluginConfig(clazz: KClass): T = this.loadPluginConfig(clazz.java) /** - * 读取一个插件配置. + * 读取一个 [PluginConfig] 实例 */ @JvmSynthetic public inline fun JvmPlugin.loadPluginConfig(): T = this.loadPluginConfig(T::class) \ No newline at end of file