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:
parent
ea0bf38203
commit
0dcba7c30c
mirai-console/backend/mirai-console/src
MiraiConsoleImplementation.kt
internal
@ -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
|
||||
|
@ -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}" }
|
||||
|
@ -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
|
||||
}
|
Loading…
Reference in New Issue
Block a user