mirror of
https://github.com/mamoe/mirai.git
synced 2025-01-11 02:50:15 +08:00
Implement configDataFolder and pathas
This commit is contained in:
parent
cb50ca8e64
commit
21150742dc
@ -21,6 +21,7 @@ import net.mamoe.mirai.console.MiraiConsoleImplementation.Companion.start
|
||||
import net.mamoe.mirai.console.internal.MiraiConsoleImplementationBridge
|
||||
import net.mamoe.mirai.console.internal.util.childScopeContext
|
||||
import net.mamoe.mirai.console.plugin.PluginLoader
|
||||
import net.mamoe.mirai.console.plugin.PluginManager
|
||||
import net.mamoe.mirai.console.plugin.center.PluginCenter
|
||||
import net.mamoe.mirai.console.plugin.jvm.JarPluginLoader
|
||||
import net.mamoe.mirai.console.util.ConsoleExperimentalAPI
|
||||
@ -43,6 +44,10 @@ public interface MiraiConsole : CoroutineScope {
|
||||
* Console 运行根目录, 由前端决定确切路径.
|
||||
*
|
||||
* 所有子模块都会在这个目录之下创建子目录.
|
||||
*
|
||||
* @see PluginManager.pluginsPath
|
||||
* @see PluginManager.pluginsDataPath
|
||||
* @see PluginManager.pluginsConfigPath
|
||||
*/
|
||||
public val rootPath: Path
|
||||
|
||||
|
@ -21,6 +21,7 @@ import net.mamoe.mirai.console.plugin.ResourceContainer.Companion.asResourceCont
|
||||
import net.mamoe.mirai.console.plugin.jvm.JvmPlugin
|
||||
import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription
|
||||
import net.mamoe.mirai.utils.MiraiLogger
|
||||
import java.io.File
|
||||
import java.io.InputStream
|
||||
import java.nio.file.Path
|
||||
import java.util.concurrent.locks.ReentrantLock
|
||||
@ -38,7 +39,7 @@ internal abstract class JvmPluginInternal(
|
||||
) : JvmPlugin,
|
||||
CoroutineScope {
|
||||
|
||||
override var isEnabled: Boolean = false
|
||||
final override var isEnabled: Boolean = false
|
||||
|
||||
private val resourceContainerDelegate by lazy { this::class.java.classLoader.asResourceContainer() }
|
||||
override fun getResourceAsStream(path: String): InputStream? = resourceContainerDelegate.getResourceAsStream(path)
|
||||
@ -64,6 +65,18 @@ internal abstract class JvmPluginInternal(
|
||||
PluginManager.pluginsDataPath.resolve(description.name).apply { mkdir() }
|
||||
}
|
||||
|
||||
final override val dataFolder: File by lazy {
|
||||
dataFolderPath.toFile()
|
||||
}
|
||||
|
||||
override val configFolderPath: Path by lazy {
|
||||
PluginManager.pluginsConfigPath.resolve(description.name).apply { mkdir() }
|
||||
}
|
||||
|
||||
override val configFolder: File by lazy {
|
||||
configFolderPath.toFile()
|
||||
}
|
||||
|
||||
internal fun internalOnDisable() {
|
||||
firstRun = false
|
||||
kotlin.runCatching {
|
||||
|
@ -21,12 +21,18 @@ import net.mamoe.mirai.console.plugin.description.PluginDependency
|
||||
import net.mamoe.mirai.console.plugin.description.PluginDescription
|
||||
import net.mamoe.mirai.console.plugin.description.PluginKind
|
||||
import net.mamoe.mirai.utils.info
|
||||
import java.io.File
|
||||
import java.nio.file.Path
|
||||
import java.util.concurrent.locks.ReentrantLock
|
||||
|
||||
internal object PluginManagerImpl : PluginManager {
|
||||
|
||||
override val pluginsPath: Path = MiraiConsole.rootPath.resolve("plugins").apply { mkdir() }
|
||||
override val pluginsFolder: File = pluginsPath.toFile()
|
||||
override val pluginsDataPath: Path = MiraiConsole.rootPath.resolve("data").apply { mkdir() }
|
||||
override val pluginsDataFolder: File = pluginsDataPath.toFile()
|
||||
override val pluginsConfigPath: Path = MiraiConsole.rootPath.resolve("config").apply { mkdir() }
|
||||
override val pluginsConfigFolder: File = pluginsConfigPath.toFile()
|
||||
|
||||
@Suppress("ObjectPropertyName")
|
||||
private val _pluginLoaders: MutableList<PluginLoader<*, *>> = mutableListOf()
|
||||
|
@ -12,11 +12,13 @@
|
||||
package net.mamoe.mirai.console.plugin
|
||||
|
||||
import net.mamoe.mirai.console.command.CommandOwner
|
||||
import net.mamoe.mirai.console.data.PluginConfig
|
||||
import net.mamoe.mirai.console.data.PluginData
|
||||
import net.mamoe.mirai.console.plugin.PluginManager.INSTANCE.disable
|
||||
import net.mamoe.mirai.console.plugin.PluginManager.INSTANCE.enable
|
||||
import net.mamoe.mirai.console.plugin.PluginManager.INSTANCE.safeLoader
|
||||
import net.mamoe.mirai.console.plugin.description.PluginDescription
|
||||
import net.mamoe.mirai.console.plugin.jvm.JvmPlugin
|
||||
import net.mamoe.mirai.console.util.ConsoleExperimentalAPI
|
||||
import java.io.File
|
||||
import java.nio.file.Path
|
||||
|
||||
@ -48,18 +50,32 @@ public interface Plugin : CommandOwner {
|
||||
public val loader: PluginLoader<*, *>
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取
|
||||
*/
|
||||
public inline val Plugin.description: PluginDescription get() = this.safeLoader.getDescription(this)
|
||||
|
||||
/**
|
||||
* 支持文件系统存储的扩展.
|
||||
*
|
||||
* @suppress 此接口只应由 [JvmPlugin] 继承
|
||||
*
|
||||
* @see JvmPlugin
|
||||
*/
|
||||
@ConsoleExperimentalAPI("classname is subject to change")
|
||||
public interface PluginFileExtensions {
|
||||
/**
|
||||
* 数据目录
|
||||
* 数据目录路径
|
||||
* @see PluginData
|
||||
*/
|
||||
public val dataFolderPath: Path
|
||||
|
||||
/**
|
||||
* 数据目录. `dataFolderPath.toFile()`
|
||||
* @see PluginData
|
||||
*/
|
||||
public val dataFolder: File
|
||||
|
||||
|
||||
/**
|
||||
* 从数据目录获取一个文件.
|
||||
* @see dataFolderPath
|
||||
@ -87,9 +103,46 @@ public interface PluginFileExtensions {
|
||||
*/
|
||||
@JvmDefault
|
||||
public fun resolveDataPath(relativePath: Path): Path = dataFolderPath.resolve(relativePath)
|
||||
}
|
||||
|
||||
/**
|
||||
* @return `dataFolderPath.toFile()`
|
||||
|
||||
/**
|
||||
* 插件配置保存路径
|
||||
* @see PluginConfig
|
||||
*/
|
||||
public val PluginFileExtensions.dataFolder: File get() = dataFolderPath.toFile()
|
||||
public val configFolderPath: Path
|
||||
|
||||
/**
|
||||
* 插件配置保存路径
|
||||
* @see PluginConfig
|
||||
*/
|
||||
public val configFolder: File
|
||||
|
||||
|
||||
/**
|
||||
* 从配置目录获取一个文件.
|
||||
* @see configFolderPath
|
||||
*/
|
||||
@JvmDefault
|
||||
public fun resolveConfigFile(relativePath: String): File = configFolderPath.resolve(relativePath).toFile()
|
||||
|
||||
/**
|
||||
* 从配置目录获取一个文件.
|
||||
* @see configFolderPath
|
||||
*/
|
||||
@JvmDefault
|
||||
public fun resolveConfigPath(relativePath: String): Path = configFolderPath.resolve(relativePath)
|
||||
|
||||
/**
|
||||
* 从配置目录获取一个文件.
|
||||
* @see configFolderPath
|
||||
*/
|
||||
@JvmDefault
|
||||
public fun resolveConfigFile(relativePath: Path): File = configFolderPath.resolve(relativePath).toFile()
|
||||
|
||||
/**
|
||||
* 从配置目录获取一个文件路径.
|
||||
* @see configFolderPath
|
||||
*/
|
||||
@JvmDefault
|
||||
public fun resolveConfigPath(relativePath: Path): Path = configFolderPath.resolve(relativePath)
|
||||
}
|
@ -31,24 +31,55 @@ import java.nio.file.Path
|
||||
* @see PluginLoader 插件加载器
|
||||
*/
|
||||
public interface PluginManager {
|
||||
// region paths
|
||||
|
||||
/**
|
||||
* 插件自身存放路径. 由前端决定具体路径.
|
||||
* 插件自身存放路径 [Path]. 由前端决定具体路径.
|
||||
*
|
||||
* **实现细节**: 在 terminal 前端实现为 `$rootPath/plugins`
|
||||
*
|
||||
* @see pluginsFolder [File] 类型
|
||||
*/
|
||||
public val pluginsPath: Path
|
||||
|
||||
/**
|
||||
* 插件数据存放路径
|
||||
* 插件自身存放路径 [File]. 由前端决定具体路径.
|
||||
*
|
||||
* **实现细节**: 在 terminal 前端实现为 `$rootPath/plugins`
|
||||
*/
|
||||
public val pluginsFolder: File
|
||||
|
||||
/**
|
||||
* 插件内部数据存放路径 [Path]
|
||||
*
|
||||
* **实现细节**: 在 terminal 前端实现为 `$rootPath/data`
|
||||
*
|
||||
* @see pluginsDataFolder [File] 类型
|
||||
*/
|
||||
public val pluginsDataPath: Path
|
||||
|
||||
/**
|
||||
* 插件内部数据存放路径 [File]
|
||||
*
|
||||
* **实现细节**: 在 terminal 前端实现为 `$rootPath/data`
|
||||
*/
|
||||
public val pluginsDataFolder: File
|
||||
|
||||
/**
|
||||
* 插件配置存放路径 [Path]
|
||||
*
|
||||
* **实现细节**: 在 terminal 前端实现为 `$rootPath/config`
|
||||
*/
|
||||
public val pluginsConfigPath: Path
|
||||
|
||||
/**
|
||||
* 插件配置存放路径 [File]
|
||||
*
|
||||
* **实现细节**: 在 terminal 前端实现为 `$rootPath/config`
|
||||
*/
|
||||
public val pluginsConfigFolder: File
|
||||
|
||||
// endregion
|
||||
|
||||
|
||||
// region plugins & loaders
|
||||
|
||||
/**
|
||||
* 已加载的插件列表
|
||||
*
|
||||
@ -104,13 +135,15 @@ public interface PluginManager {
|
||||
public fun Plugin.enable(): Unit = safeLoader.enable(this)
|
||||
|
||||
/**
|
||||
* 经过泛型类型转换的 [PluginLoader]
|
||||
* 经过泛型类型转换的 [Plugin.loader]
|
||||
*/
|
||||
@get:JvmSynthetic
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
public val <P : Plugin> P.safeLoader: PluginLoader<P, PluginDescription>
|
||||
get() = this.loader as PluginLoader<P, PluginDescription>
|
||||
|
||||
// endregion
|
||||
|
||||
public companion object INSTANCE : PluginManager by PluginManagerImpl {
|
||||
// due to Kotlin's bug
|
||||
public override val Plugin.description: PluginDescription get() = PluginManagerImpl.run { description }
|
||||
@ -121,17 +154,3 @@ public interface PluginManager {
|
||||
public override val <P : Plugin> P.safeLoader: PluginLoader<P, PluginDescription> get() = PluginManagerImpl.run { safeLoader }
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see PluginManager.pluginsPath
|
||||
*/
|
||||
@get:JvmSynthetic
|
||||
public inline val PluginManager.pluginsFolder: File
|
||||
get() = pluginsPath.toFile()
|
||||
|
||||
/**
|
||||
* @see PluginManager.pluginsDataPath
|
||||
*/
|
||||
@get:JvmSynthetic
|
||||
public inline val PluginManager.pluginsDataFolder: File
|
||||
get() = pluginsDataPath.toFile()
|
@ -24,6 +24,7 @@ import net.mamoe.mirai.console.data.PluginData
|
||||
import net.mamoe.mirai.console.plugin.Plugin
|
||||
import net.mamoe.mirai.console.plugin.PluginFileExtensions
|
||||
import net.mamoe.mirai.console.plugin.ResourceContainer
|
||||
import net.mamoe.mirai.console.plugin.getDescription
|
||||
import net.mamoe.mirai.utils.MiraiLogger
|
||||
|
||||
|
||||
@ -48,7 +49,7 @@ public interface JvmPlugin : Plugin, CoroutineScope,
|
||||
public val logger: MiraiLogger
|
||||
|
||||
/** 插件描述 */
|
||||
public val description: JvmPluginDescription
|
||||
public val description: JvmPluginDescription get() = loader.getDescription(this)
|
||||
|
||||
/** 所属插件加载器实例 */
|
||||
@JvmDefault
|
||||
|
Loading…
Reference in New Issue
Block a user