diff --git a/mirai-console/backend/mirai-console/src/MiraiConsoleImplementation.kt b/mirai-console/backend/mirai-console/src/MiraiConsoleImplementation.kt index a5911a72c..cc2115c25 100644 --- a/mirai-console/backend/mirai-console/src/MiraiConsoleImplementation.kt +++ b/mirai-console/backend/mirai-console/src/MiraiConsoleImplementation.kt @@ -38,12 +38,14 @@ import net.mamoe.mirai.message.data.Message import net.mamoe.mirai.utils.BotConfiguration import net.mamoe.mirai.utils.LoginSolver import net.mamoe.mirai.utils.MiraiLogger +import net.mamoe.mirai.utils.NotStableForInheritance import java.nio.file.Path import java.util.* import java.util.concurrent.locks.ReentrantLock import kotlin.annotation.AnnotationTarget.* import kotlin.concurrent.thread import kotlin.coroutines.CoroutineContext +import kotlin.reflect.KClass /** @@ -227,7 +229,7 @@ public interface MiraiConsoleImplementation : CoroutineScope { /** * 前端预先定义的 [LoggerController], 以允许前端使用自己的配置系统 */ - public val loggerController: LoggerController get() = LoggerControllerImpl + public val loggerController: LoggerController get() = LoggerControllerImpl() /////////////////////////////////////////////////////////////////////////// // ConsoleDataScope @@ -257,17 +259,40 @@ public interface MiraiConsoleImplementation : CoroutineScope { * @since 2.10.0-RC */ @ConsoleFrontEndImplementation + @NotStableForInheritance public interface ConsoleDataScope { public val dataHolder: AutoSavePluginDataHolder public val configHolder: AutoSavePluginDataHolder public fun addAndReloadConfig(config: PluginConfig) + + /** + * @since 2.11.0-RC + */ + public fun <T : PluginData> find(type: KClass<T>): T? + + /** + * @since 2.11.0-RC + */ + public fun <T : PluginData> get(type: KClass<T>): T = + find(type) ?: throw NoSuchElementException(type.qualifiedName) + public fun reloadAll() /** - * @since 2.10.0-RCl + * @since 2.10.0-RC */ @ConsoleFrontEndImplementation public companion object { + /** + * @since 2.11.0-RC + */ + public inline fun <reified T : PluginData> ConsoleDataScope.find(): T? = find(T::class) + + /** + * @since 2.11.0-RC + */ + public inline fun <reified T : PluginData> ConsoleDataScope.get(): T = get(T::class) + @JvmStatic public fun createDefault( coroutineContext: CoroutineContext, diff --git a/mirai-console/backend/mirai-console/src/command/BuiltInCommands.kt b/mirai-console/backend/mirai-console/src/command/BuiltInCommands.kt index 4b24c829c..778f1fc6e 100644 --- a/mirai-console/backend/mirai-console/src/command/BuiltInCommands.kt +++ b/mirai-console/backend/mirai-console/src/command/BuiltInCommands.kt @@ -15,6 +15,7 @@ import kotlinx.coroutines.sync.withLock import net.mamoe.mirai.Bot import net.mamoe.mirai.console.MiraiConsole import net.mamoe.mirai.console.MiraiConsoleImplementation +import net.mamoe.mirai.console.MiraiConsoleImplementation.ConsoleDataScope.Companion.get import net.mamoe.mirai.console.command.CommandManager.INSTANCE.allRegisteredCommands import net.mamoe.mirai.console.command.CommandManager.INSTANCE.register import net.mamoe.mirai.console.command.descriptor.CommandArgumentParserException @@ -28,6 +29,7 @@ import net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig import net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig.Account.* import net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig.Account.PasswordKind.MD5 import net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig.Account.PasswordKind.PLAIN +import net.mamoe.mirai.console.internal.data.builtins.DataScope import net.mamoe.mirai.console.internal.extension.GlobalComponentStorage import net.mamoe.mirai.console.internal.permission.BuiltInPermissionService import net.mamoe.mirai.console.internal.pluginManagerImpl @@ -203,7 +205,8 @@ public object BuiltInCommands { } suspend fun getPassword(id: Long): Any? { - val acc = AutoLoginConfig.accounts.firstOrNull { it.account == id.toString() } + val config = DataScope.get<AutoLoginConfig>() + val acc = config.accounts.firstOrNull { it.account == id.toString() } if (acc == null) { sendMessage("Could not find '$id' in AutoLogin config. Please specify password.") return null @@ -321,8 +324,9 @@ public object BuiltInCommands { @Description("查看自动登录账号列表") @SubCommand public suspend fun CommandSender.list() { + val config = DataScope.get<AutoLoginConfig>() sendMessage(buildString { - for (account in AutoLoginConfig.accounts) { + for (account in config.accounts) { if (account.account == "123456") continue append("- ") append("账号: ") @@ -346,27 +350,30 @@ public object BuiltInCommands { @Description("添加自动登录, passwordKind 可选 PLAIN 或 MD5") @SubCommand public suspend fun CommandSender.add(account: Long, password: String, passwordKind: PasswordKind = PLAIN) { + val config = DataScope.get<AutoLoginConfig>() val accountStr = account.toString() - if (AutoLoginConfig.accounts.any { it.account == accountStr }) { + if (config.accounts.any { it.account == accountStr }) { sendMessage("已有相同账号在自动登录配置中. 请先删除该账号.") return } - AutoLoginConfig.accounts.add(AutoLoginConfig.Account(accountStr, Password(passwordKind, password))) + config.accounts.add(AutoLoginConfig.Account(accountStr, Password(passwordKind, password))) sendMessage("已成功添加 '$account'.") } @Description("清除所有配置") @SubCommand public suspend fun CommandSender.clear() { - AutoLoginConfig.accounts.clear() + val config = DataScope.get<AutoLoginConfig>() + config.accounts.clear() sendMessage("已清除所有自动登录配置.") } @Description("删除一个账号") @SubCommand public suspend fun CommandSender.remove(account: Long) { + val config = DataScope.get<AutoLoginConfig>() val accountStr = account.toString() - if (AutoLoginConfig.accounts.removeIf { it.account == accountStr }) { + if (config.accounts.removeIf { it.account == accountStr }) { sendMessage("已成功删除 '$account'.") return } @@ -376,9 +383,10 @@ public object BuiltInCommands { @Description("设置一个账号的一个配置项") @SubCommand public suspend fun CommandSender.setConfig(account: Long, configKey: ConfigurationKey, value: String) { + val config = DataScope.get<AutoLoginConfig>() val accountStr = account.toString() - val oldAccount = AutoLoginConfig.accounts.find { it.account == accountStr } ?: kotlin.run { + val oldAccount = config.accounts.find { it.account == accountStr } ?: kotlin.run { sendMessage("未找到账号 $account.") return } @@ -389,8 +397,8 @@ public object BuiltInCommands { put(configKey, value) }) - AutoLoginConfig.accounts.remove(oldAccount) - AutoLoginConfig.accounts.add(newAccount) + config.accounts.remove(oldAccount) + config.accounts.add(newAccount) sendMessage("成功修改 '$account' 的配置 '$configKey' 为 '$value'") } @@ -398,9 +406,10 @@ public object BuiltInCommands { @Description("删除一个账号的一个配置项") @SubCommand public suspend fun CommandSender.removeConfig(account: Long, configKey: ConfigurationKey) { + val config = DataScope.get<AutoLoginConfig>() val accountStr = account.toString() - val oldAccount = AutoLoginConfig.accounts.find { it.account == accountStr } ?: kotlin.run { + val oldAccount = config.accounts.find { it.account == accountStr } ?: kotlin.run { sendMessage("未找到账号 $account.") return } @@ -409,8 +418,8 @@ public object BuiltInCommands { remove(configKey) }) - AutoLoginConfig.accounts.remove(oldAccount) - AutoLoginConfig.accounts.add(newAccount) + config.accounts.remove(oldAccount) + config.accounts.add(newAccount) sendMessage("成功删除 '$account' 的配置 '$configKey'.") } diff --git a/mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt b/mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt index 4434fc256..6dbc4d8ba 100644 --- a/mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt +++ b/mirai-console/backend/mirai-console/src/internal/MiraiConsoleImplementationBridge.kt @@ -19,6 +19,7 @@ import net.mamoe.mirai.Bot import net.mamoe.mirai.console.MalformedMiraiConsoleImplementationError import net.mamoe.mirai.console.MiraiConsole import net.mamoe.mirai.console.MiraiConsoleImplementation +import net.mamoe.mirai.console.MiraiConsoleImplementation.ConsoleDataScope.Companion.get import net.mamoe.mirai.console.command.BuiltInCommands import net.mamoe.mirai.console.command.CommandManager import net.mamoe.mirai.console.command.ConsoleCommandSender @@ -34,7 +35,8 @@ import net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig import net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig.Account.ConfigurationKey import net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig.Account.PasswordKind.MD5 import net.mamoe.mirai.console.internal.data.builtins.AutoLoginConfig.Account.PasswordKind.PLAIN -import net.mamoe.mirai.console.internal.data.builtins.LoggerConfig +import net.mamoe.mirai.console.internal.data.builtins.DataScope +import net.mamoe.mirai.console.internal.data.builtins.PluginDependenciesConfig import net.mamoe.mirai.console.internal.extension.GlobalComponentStorage import net.mamoe.mirai.console.internal.extension.GlobalComponentStorageImpl import net.mamoe.mirai.console.internal.logging.LoggerControllerImpl @@ -115,14 +117,6 @@ internal class MiraiConsoleImplementationBridge( } } - phase("setup logger controller") { - if (loggerController === LoggerControllerImpl) { - // Reload LoggerConfig. - consoleDataScope.addAndReloadConfig(LoggerConfig) - LoggerControllerImpl.initialized = true - } - } - phase("greeting") { val buildDateFormatted = buildDate.atZone(ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) @@ -152,7 +146,13 @@ internal class MiraiConsoleImplementationBridge( phase("load configurations") { mainLogger.verbose { "Loading configurations..." } - consoleDataScope.addAndReloadConfig(CommandConfig) + consoleDataScope.addAndReloadConfig(AutoLoginConfig()) + consoleDataScope.addAndReloadConfig(CommandConfig()) + consoleDataScope.addAndReloadConfig(PluginDependenciesConfig()) + val loggerController = loggerController + if (loggerController is LoggerControllerImpl) { + consoleDataScope.addAndReloadConfig(loggerController.loggerConfig) + } consoleDataScope.reloadAll() } @@ -227,7 +227,8 @@ internal class MiraiConsoleImplementationBridge( phase("auto-login bots") { runBlocking { - val accounts = AutoLoginConfig.accounts.toList() + val config = DataScope.get<AutoLoginConfig>() + val accounts = config.accounts.toList() for (account in accounts.filter { it.configuration[ConfigurationKey.enable]?.toString()?.equals("true", true) ?: true }) { diff --git a/mirai-console/backend/mirai-console/src/internal/command/CommandManagerImpl.kt b/mirai-console/backend/mirai-console/src/internal/command/CommandManagerImpl.kt index ba1d8cd93..d40bc063d 100644 --- a/mirai-console/backend/mirai-console/src/internal/command/CommandManagerImpl.kt +++ b/mirai-console/backend/mirai-console/src/internal/command/CommandManagerImpl.kt @@ -1,10 +1,10 @@ /* - * Copyright 2019-2021 Mamoe Technologies and contributors. + * Copyright 2019-2022 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. + * 此源代码的使用受 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 + * https://github.com/mamoe/mirai/blob/dev/LICENSE */ package net.mamoe.mirai.console.internal.command @@ -12,6 +12,7 @@ package net.mamoe.mirai.console.internal.command import kotlinx.atomicfu.locks.withLock import kotlinx.coroutines.CoroutineScope import net.mamoe.mirai.console.MiraiConsole +import net.mamoe.mirai.console.MiraiConsoleImplementation.ConsoleDataScope.Companion.get import net.mamoe.mirai.console.command.* import net.mamoe.mirai.console.command.Command.Companion.allNames import net.mamoe.mirai.console.command.CommandManager.INSTANCE.findDuplicate @@ -21,12 +22,12 @@ import net.mamoe.mirai.console.command.parse.CommandCallParser.Companion.parseCo import net.mamoe.mirai.console.command.resolve.CommandCallInterceptor.Companion.intercepted import net.mamoe.mirai.console.command.resolve.CommandCallResolver.Companion.resolve import net.mamoe.mirai.console.command.resolve.getOrElse +import net.mamoe.mirai.console.internal.data.builtins.DataScope import net.mamoe.mirai.console.internal.util.ifNull import net.mamoe.mirai.console.permission.PermissionService.Companion.testPermission import net.mamoe.mirai.message.data.Message import net.mamoe.mirai.message.data.toMessageChain import net.mamoe.mirai.utils.MiraiLogger -import net.mamoe.mirai.utils.castOrNull import net.mamoe.mirai.utils.childScope import java.util.concurrent.locks.ReentrantLock import kotlin.coroutines.CoroutineContext @@ -69,7 +70,7 @@ internal class CommandManagerImpl( _registeredCommands.filter { it.owner == owner } override val allRegisteredCommands: List<Command> get() = _registeredCommands.toList() // copy - override val commandPrefix: String get() = CommandConfig.commandPrefix + override val commandPrefix: String get() = DataScope.get<CommandConfig>().commandPrefix override fun unregisterAllCommands(owner: CommandOwner) { for (registeredCommand in getRegisteredCommands(owner)) { unregisterCommand(registeredCommand) diff --git a/mirai-console/backend/mirai-console/src/internal/command/CommnadConfig.kt b/mirai-console/backend/mirai-console/src/internal/command/CommnadConfig.kt index c71ecd460..3c3c76942 100644 --- a/mirai-console/backend/mirai-console/src/internal/command/CommnadConfig.kt +++ b/mirai-console/backend/mirai-console/src/internal/command/CommnadConfig.kt @@ -1,5 +1,5 @@ /* - * Copyright 2019-2021 Mamoe Technologies and contributors. + * Copyright 2019-2022 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. @@ -19,7 +19,7 @@ import net.mamoe.mirai.console.data.value 内置指令系统配置 """ ) -internal object CommandConfig : ReadOnlyPluginConfig("Command") { +internal class CommandConfig : ReadOnlyPluginConfig("Command") { @ValueDescription( """ 指令前缀, 默认 "/" diff --git a/mirai-console/backend/mirai-console/src/internal/data/builtins/AutoLoginConfig.kt b/mirai-console/backend/mirai-console/src/internal/data/builtins/AutoLoginConfig.kt index ebf029b04..06c782f7d 100644 --- a/mirai-console/backend/mirai-console/src/internal/data/builtins/AutoLoginConfig.kt +++ b/mirai-console/backend/mirai-console/src/internal/data/builtins/AutoLoginConfig.kt @@ -1,10 +1,10 @@ /* - * Copyright 2019-2021 Mamoe Technologies and contributors. + * Copyright 2019-2022 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. + * 此源代码的使用受 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 + * https://github.com/mamoe/mirai/blob/dev/LICENSE */ @file:Suppress("EXPOSED_SUPER_CLASS") @@ -21,13 +21,12 @@ import net.mamoe.mirai.console.data.ValueDescription import net.mamoe.mirai.console.data.value import net.mamoe.mirai.console.util.ConsoleExperimentalApi import net.mamoe.mirai.utils.SecretsProtection -import net.mamoe.mirai.utils.readString import net.mamoe.yamlkt.Comment import net.mamoe.yamlkt.YamlDynamicSerializer @ConsoleExperimentalApi @ValueDescription("自动登录配置") -public object AutoLoginConfig : AutoSavePluginConfig("AutoLogin") { +public class AutoLoginConfig : AutoSavePluginConfig("AutoLogin") { @Serializable public data class Account( diff --git a/mirai-console/backend/mirai-console/src/internal/data/builtins/ConsoleDataScopeImpl.kt b/mirai-console/backend/mirai-console/src/internal/data/builtins/ConsoleDataScopeImpl.kt index 79f3a6bd3..e3e7a199e 100644 --- a/mirai-console/backend/mirai-console/src/internal/data/builtins/ConsoleDataScopeImpl.kt +++ b/mirai-console/backend/mirai-console/src/internal/data/builtins/ConsoleDataScopeImpl.kt @@ -1,5 +1,5 @@ /* - * Copyright 2019-2021 Mamoe Technologies and contributors. + * Copyright 2019-2022 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. @@ -17,28 +17,34 @@ import net.mamoe.mirai.console.data.PluginData import net.mamoe.mirai.console.data.PluginDataStorage import net.mamoe.mirai.utils.childScope import net.mamoe.mirai.utils.minutesToMillis +import java.util.concurrent.ConcurrentLinkedQueue import kotlin.coroutines.CoroutineContext +import kotlin.reflect.KClass +internal val DataScope get() = MiraiConsoleImplementation.getBridge().consoleDataScope internal class ConsoleDataScopeImpl( parentCoroutineContext: CoroutineContext, private val dataStorage: PluginDataStorage, private val configStorage: PluginDataStorage, -) : CoroutineScope by parentCoroutineContext.childScope("ConsoleDataScope"), MiraiConsoleImplementation.ConsoleDataScope { +) : CoroutineScope by parentCoroutineContext.childScope("ConsoleDataScope"), + MiraiConsoleImplementation.ConsoleDataScope { override val dataHolder: AutoSavePluginDataHolder = ConsoleBuiltInPluginDataHolder(this.coroutineContext) override val configHolder: AutoSavePluginDataHolder = ConsoleBuiltInPluginConfigHolder(this.coroutineContext) - private val data: List<PluginData> = mutableListOf() - private val configs: MutableList<PluginConfig> = mutableListOf( - AutoLoginConfig, - PluginDependenciesConfig, - ) + private val data: MutableCollection<PluginData> = ConcurrentLinkedQueue() // tentatively make it thread-safe + private val configs: MutableCollection<PluginConfig> = ConcurrentLinkedQueue() override fun addAndReloadConfig(config: PluginConfig) { configs.add(config) configStorage.load(configHolder, config) } + override fun <T : PluginData> find(type: KClass<T>): T? { + @Suppress("UNCHECKED_CAST") + return (data.find { type.isInstance(it) } ?: configs.find { type.isInstance(it) }) as T? + } + override fun reloadAll() { data.forEach { dt -> dataStorage.load(dataHolder, dt) diff --git a/mirai-console/backend/mirai-console/src/internal/data/builtins/LoggerConfig.kt b/mirai-console/backend/mirai-console/src/internal/data/builtins/LoggerConfig.kt index 37bb8e335..83ce36abf 100644 --- a/mirai-console/backend/mirai-console/src/internal/data/builtins/LoggerConfig.kt +++ b/mirai-console/backend/mirai-console/src/internal/data/builtins/LoggerConfig.kt @@ -1,5 +1,5 @@ /* - * Copyright 2019-2021 Mamoe Technologies and contributors. + * Copyright 2019-2022 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. @@ -9,25 +9,29 @@ package net.mamoe.mirai.console.internal.data.builtins +import net.mamoe.mirai.console.ConsoleFrontEndImplementation import net.mamoe.mirai.console.data.ReadOnlyPluginConfig import net.mamoe.mirai.console.data.ValueDescription import net.mamoe.mirai.console.data.value import net.mamoe.mirai.console.logging.AbstractLoggerController +import net.mamoe.mirai.utils.MiraiExperimentalApi -internal object LoggerConfig : ReadOnlyPluginConfig("Logger") { +@ConsoleFrontEndImplementation +@MiraiExperimentalApi +public class LoggerConfig : ReadOnlyPluginConfig("Logger") { @ValueDescription( """ 日志输出等级 可选值: ALL, VERBOSE, DEBUG, INFO, WARNING, ERROR, NONE """ ) - val defaultPriority by value(AbstractLoggerController.LogPriority.INFO) + public val defaultPriority: AbstractLoggerController.LogPriority by value(AbstractLoggerController.LogPriority.INFO) @ValueDescription( """ 特定日志记录器输出等级 """ ) - val loggers: Map<String, AbstractLoggerController.LogPriority> by value( + public val loggers: Map<String, AbstractLoggerController.LogPriority> by value( mapOf( "example.logger" to AbstractLoggerController.LogPriority.NONE, "console.debug" to AbstractLoggerController.LogPriority.NONE, diff --git a/mirai-console/backend/mirai-console/src/internal/data/builtins/PluginDependenciesConfig.kt b/mirai-console/backend/mirai-console/src/internal/data/builtins/PluginDependenciesConfig.kt index 102958ee9..ad85947b5 100644 --- a/mirai-console/backend/mirai-console/src/internal/data/builtins/PluginDependenciesConfig.kt +++ b/mirai-console/backend/mirai-console/src/internal/data/builtins/PluginDependenciesConfig.kt @@ -14,7 +14,7 @@ import net.mamoe.mirai.console.data.ValueDescription import net.mamoe.mirai.console.data.value @Suppress("RemoveExplicitTypeArguments") -internal object PluginDependenciesConfig : ReadOnlyPluginConfig("PluginDependencies") { +internal class PluginDependenciesConfig : ReadOnlyPluginConfig("PluginDependencies") { @ValueDescription("远程仓库, 如无必要无需修改") val repoLoc by value(listOf<String>("https://maven.aliyun.com/repository/public")) } \ No newline at end of file diff --git a/mirai-console/backend/mirai-console/src/internal/extension/ComponentStorageInternal.kt b/mirai-console/backend/mirai-console/src/internal/extension/ComponentStorageInternal.kt index 618f7e849..5577966cd 100644 --- a/mirai-console/backend/mirai-console/src/internal/extension/ComponentStorageInternal.kt +++ b/mirai-console/backend/mirai-console/src/internal/extension/ComponentStorageInternal.kt @@ -9,8 +9,8 @@ package net.mamoe.mirai.console.internal.extension +import net.mamoe.mirai.console.MiraiConsoleImplementation import net.mamoe.mirai.console.extension.* -import net.mamoe.mirai.console.internal.MiraiConsoleImplementationBridge import net.mamoe.mirai.console.internal.data.kClassQualifiedNameOrTip import net.mamoe.mirai.console.plugin.Plugin import net.mamoe.mirai.console.plugin.name @@ -22,7 +22,7 @@ import kotlin.contracts.contract internal class GlobalComponentStorageImpl : AbstractConcurrentComponentStorage() // source compatibility for <2.11 -internal val GlobalComponentStorage get() = MiraiConsoleImplementationBridge.globalComponentStorage +internal val GlobalComponentStorage get() = MiraiConsoleImplementation.getBridge().globalComponentStorage /** * thread-safe. diff --git a/mirai-console/backend/mirai-console/src/internal/logging/LoggerControllerImpl.kt b/mirai-console/backend/mirai-console/src/internal/logging/LoggerControllerImpl.kt index 0ccd6f413..4c6e1f745 100644 --- a/mirai-console/backend/mirai-console/src/internal/logging/LoggerControllerImpl.kt +++ b/mirai-console/backend/mirai-console/src/internal/logging/LoggerControllerImpl.kt @@ -1,5 +1,5 @@ /* - * Copyright 2019-2021 Mamoe Technologies and contributors. + * Copyright 2019-2022 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. @@ -9,25 +9,24 @@ package net.mamoe.mirai.console.internal.logging -import net.mamoe.mirai.console.ConsoleFrontEndImplementation import net.mamoe.mirai.console.internal.data.builtins.LoggerConfig import net.mamoe.mirai.console.logging.AbstractLoggerController -import net.mamoe.mirai.console.util.ConsoleInternalApi -@ConsoleFrontEndImplementation -@ConsoleInternalApi -internal object LoggerControllerImpl : AbstractLoggerController.PathBased() { - internal var initialized = false +internal class LoggerControllerImpl : AbstractLoggerController.PathBased() { + // 防止 stack overflow (使用 logger 要加载 LoggerController, LoggerConfig 可能会使用 logger) + // 在 console init 阶段 register + internal val loggerConfig: LoggerConfig by lazy { + LoggerConfig() + } override fun findPriority(identity: String?): LogPriority? { - if (!initialized) return LogPriority.NONE return if (identity == null) { - LoggerConfig.defaultPriority + loggerConfig.defaultPriority } else { - LoggerConfig.loggers[identity] + loggerConfig.loggers[identity] } } override val defaultPriority: LogPriority - get() = if (initialized) LoggerConfig.defaultPriority else LogPriority.NONE + get() = loggerConfig.defaultPriority } \ No newline at end of file diff --git a/mirai-console/backend/mirai-console/src/internal/plugin/JvmPluginDependencyDownload.kt b/mirai-console/backend/mirai-console/src/internal/plugin/JvmPluginDependencyDownload.kt index 74286f9aa..c5692e9b0 100644 --- a/mirai-console/backend/mirai-console/src/internal/plugin/JvmPluginDependencyDownload.kt +++ b/mirai-console/backend/mirai-console/src/internal/plugin/JvmPluginDependencyDownload.kt @@ -9,7 +9,9 @@ package net.mamoe.mirai.console.internal.plugin +import net.mamoe.mirai.console.MiraiConsoleImplementation.ConsoleDataScope.Companion.get import net.mamoe.mirai.console.internal.MiraiConsoleBuildDependencies +import net.mamoe.mirai.console.internal.data.builtins.DataScope import net.mamoe.mirai.console.internal.data.builtins.PluginDependenciesConfig import net.mamoe.mirai.console.plugin.PluginManager import net.mamoe.mirai.utils.MiraiLogger @@ -193,13 +195,14 @@ internal class JvmPluginDependencyDownloader( } session.setReadOnly() + val config = DataScope.get<PluginDependenciesConfig>() repositories = repository.newResolutionRepositories( session, - PluginDependenciesConfig.repoLoc.map { url -> + config.repoLoc.map { url -> RemoteRepository.Builder(null, "default", url).build() } ) - logger.debug { "Remote server: " + PluginDependenciesConfig.repoLoc } + logger.debug { "Remote server: " + config.repoLoc } } public fun resolveDependencies(deps: Collection<String>, vararg filters: DependencyFilter): DependencyResult {