1
0
mirror of https://github.com/mamoe/mirai.git synced 2025-04-25 04:50:26 +08:00

Change ConsoleDataScope from singleton to instances

This commit is contained in:
Him188 2021-12-26 17:16:38 +00:00
parent ea0bf38203
commit 0dcba7c30c
3 changed files with 29 additions and 22 deletions
mirai-console/backend/mirai-console/src

View File

@ -16,6 +16,7 @@ import kotlinx.coroutines.*
import net.mamoe.mirai.Bot
import net.mamoe.mirai.console.MiraiConsoleImplementation.Companion.start
import net.mamoe.mirai.console.command.ConsoleCommandSender
import net.mamoe.mirai.console.data.PluginDataHolder
import net.mamoe.mirai.console.data.PluginDataStorage
import net.mamoe.mirai.console.extension.ComponentStorage
import net.mamoe.mirai.console.internal.MiraiConsoleImplementationBridge

View File

@ -100,6 +100,8 @@ internal object MiraiConsoleImplementationBridge : CoroutineScope, MiraiConsoleI
override val consoleInput: ConsoleInput by instance::consoleInput
override val isAnsiSupported: Boolean by instance::isAnsiSupported
val consoleDataScope = ConsoleDataScope(coroutineContext, dataStorageForBuiltIns, dataStorageForBuiltIns)
override fun createLoginSolver(requesterBot: Long, configuration: BotConfiguration): LoginSolver =
instance.createLoginSolver(requesterBot, configuration)
@ -128,7 +130,7 @@ internal object MiraiConsoleImplementationBridge : CoroutineScope, MiraiConsoleI
phase("setup logger controller") {
if (loggerController === LoggerControllerImpl) {
// Reload LoggerConfig.
ConsoleDataScope.addAndReloadConfig(LoggerConfig)
consoleDataScope.addAndReloadConfig(LoggerConfig)
LoggerControllerImpl.initialized = true
}
}
@ -162,8 +164,8 @@ internal object MiraiConsoleImplementationBridge : CoroutineScope, MiraiConsoleI
phase("load configurations") {
mainLogger.verbose { "Loading configurations..." }
ConsoleDataScope.addAndReloadConfig(CommandConfig)
ConsoleDataScope.reloadAll()
consoleDataScope.addAndReloadConfig(CommandConfig)
consoleDataScope.reloadAll()
}
phase("initialize all plugins") {
@ -189,7 +191,7 @@ internal object MiraiConsoleImplementationBridge : CoroutineScope, MiraiConsoleI
SingletonExtensionSelector.init()
val instance = SingletonExtensionSelector.instance
if (instance is BuiltInSingletonExtensionSelector) {
ConsoleDataScope.addAndReloadConfig(instance.config)
consoleDataScope.addAndReloadConfig(instance.config)
}
}
@ -200,7 +202,7 @@ internal object MiraiConsoleImplementationBridge : CoroutineScope, MiraiConsoleI
PermissionServiceProvider.permissionServiceOk = true
PermissionService.INSTANCE.let { ps ->
if (ps is BuiltInPermissionService) {
ConsoleDataScope.addAndReloadConfig(ps.config)
consoleDataScope.addAndReloadConfig(ps.config)
mainLogger.verbose { "Reloaded PermissionService settings." }
} else {
mainLogger.info { "Loaded PermissionService from plugin ${PermissionServiceProvider.providerPlugin?.name}" }

View File

@ -10,49 +10,53 @@
package net.mamoe.mirai.console.internal.data.builtins
import kotlinx.coroutines.CoroutineScope
import net.mamoe.mirai.console.MiraiConsole
import net.mamoe.mirai.console.data.AutoSavePluginDataHolder
import net.mamoe.mirai.console.data.PluginConfig
import net.mamoe.mirai.console.data.PluginData
import net.mamoe.mirai.console.data.PluginDataStorage
import net.mamoe.mirai.console.internal.MiraiConsoleImplementationBridge
import net.mamoe.mirai.utils.childScope
import net.mamoe.mirai.utils.minutesToMillis
import kotlin.coroutines.CoroutineContext
internal object ConsoleDataScope : CoroutineScope by MiraiConsole.childScope("ConsoleDataScope") {
internal class ConsoleDataScope(
parentCoroutineContext: CoroutineContext,
private val dataStorage: PluginDataStorage,
private val configStorage: PluginDataStorage,
) : CoroutineScope by parentCoroutineContext.childScope("ConsoleDataScope") {
val dataHolder: AutoSavePluginDataHolder = ConsoleBuiltInPluginDataHolder(this.coroutineContext)
val configHolder: AutoSavePluginDataHolder = ConsoleBuiltInPluginConfigHolder(this.coroutineContext)
private val data: List<PluginData> = mutableListOf()
private val configs: MutableList<PluginConfig> = mutableListOf(AutoLoginConfig)
fun addAndReloadConfig(config: PluginConfig) {
configs.add(config)
ConsoleBuiltInPluginConfigStorage.load(ConsoleBuiltInPluginConfigHolder, config)
configStorage.load(configHolder, config)
}
fun reloadAll() {
data.forEach { dt ->
ConsoleBuiltInPluginDataStorage.load(ConsoleBuiltInPluginDataHolder, dt)
dataStorage.load(dataHolder, dt)
}
configs.forEach { config ->
ConsoleBuiltInPluginConfigStorage.load(ConsoleBuiltInPluginConfigHolder, config)
configStorage.load(dataHolder, config)
}
}
}
internal object ConsoleBuiltInPluginDataHolder : AutoSavePluginDataHolder,
CoroutineScope by ConsoleDataScope.childScope("ConsoleBuiltInPluginDataHolder") {
private class ConsoleBuiltInPluginDataHolder(
parentCoroutineContext: CoroutineContext
) : AutoSavePluginDataHolder,
CoroutineScope by parentCoroutineContext.childScope("ConsoleBuiltInPluginDataHolder") {
override val autoSaveIntervalMillis: LongRange = 1.minutesToMillis..10.minutesToMillis
override val dataHolderName: String get() = "Console"
}
internal object ConsoleBuiltInPluginConfigHolder : AutoSavePluginDataHolder,
CoroutineScope by ConsoleDataScope.childScope("ConsoleBuiltInPluginConfigHolder") {
private class ConsoleBuiltInPluginConfigHolder(
parentCoroutineContext: CoroutineContext
) : AutoSavePluginDataHolder,
CoroutineScope by parentCoroutineContext.childScope("ConsoleBuiltInPluginConfigHolder") {
override val autoSaveIntervalMillis: LongRange = 1.minutesToMillis..10.minutesToMillis
override val dataHolderName: String get() = "Console"
}
internal object ConsoleBuiltInPluginDataStorage :
PluginDataStorage by MiraiConsoleImplementationBridge.dataStorageForBuiltIns
internal object ConsoleBuiltInPluginConfigStorage :
PluginDataStorage by MiraiConsoleImplementationBridge.configStorageForBuiltIns
}