diff --git a/src/main/kotlin/xyz/cssxsh/mirai/plugin/MiraiSeleniumPlugin.kt b/src/main/kotlin/xyz/cssxsh/mirai/plugin/MiraiSeleniumPlugin.kt index 33f5f8e..58c7716 100644 --- a/src/main/kotlin/xyz/cssxsh/mirai/plugin/MiraiSeleniumPlugin.kt +++ b/src/main/kotlin/xyz/cssxsh/mirai/plugin/MiraiSeleniumPlugin.kt @@ -30,19 +30,18 @@ object MiraiSeleniumPlugin : KotlinPlugin( fun setup(flush: Boolean = false): Boolean = synchronized(this) { if (!flush && installed) return@synchronized true - MiraiSeleniumConfig.reload() - if (MiraiSeleniumConfig.arguments.isNotEmpty()) { - logger.info { "额外参数: ${MiraiSeleniumConfig.arguments}" } + if (RemoteWebDriverConfig.arguments.isNotEmpty()) { + logger.info { "额外参数: ${RemoteWebDriverConfig.arguments}" } } installed = false val folder = dataFolder.resolve("selenium") folder.mkdirs() System.setProperty(SELENIUM_FOLDER, folder.absolutePath) try { - setupWebDriver(browser = MiraiSeleniumConfig.browser) + setupWebDriver(browser = RemoteWebDriverConfig.browser) installed = true } catch (exception: UnsupportedOperationException) { - logger.warning({ "浏览器 ${MiraiSeleniumConfig.browser} 不受支持" }, exception) + logger.warning({ "浏览器 ${RemoteWebDriverConfig.browser} 不受支持" }, exception) } catch (cause: Throwable) { logger.warning({ "初始化浏览器驱动失败" }, cause) } @@ -55,7 +54,7 @@ object MiraiSeleniumPlugin : KotlinPlugin( * @param config 配置 * @see RemoteWebDriver */ - fun driver(config: RemoteWebDriverConfig = MiraiSeleniumConfig) = RemoteWebDriver(config) + fun driver(config: RemoteWebDriverConfig = RemoteWebDriverConfig.INSTANCE) = RemoteWebDriver(config) fun clear(): Unit = synchronized(this) { if (!installed) return@synchronized diff --git a/src/main/kotlin/xyz/cssxsh/mirai/plugin/data/MiraiSeleniumConfig.kt b/src/main/kotlin/xyz/cssxsh/mirai/plugin/data/MiraiSeleniumConfig.kt index b985774..f04f835 100644 --- a/src/main/kotlin/xyz/cssxsh/mirai/plugin/data/MiraiSeleniumConfig.kt +++ b/src/main/kotlin/xyz/cssxsh/mirai/plugin/data/MiraiSeleniumConfig.kt @@ -52,4 +52,6 @@ object MiraiSeleniumConfig : ReadOnlyPluginConfig("MiraiSeleniumConfig"), Remote @ValueName("arguments") @ValueDescription("自定义 arguments") override val arguments: List by value(emptyList()) + + class DriverConfig : RemoteWebDriverConfig by MiraiSeleniumConfig } \ No newline at end of file diff --git a/src/main/kotlin/xyz/cssxsh/selenium/RemoteWebDriverConfig.kt b/src/main/kotlin/xyz/cssxsh/selenium/RemoteWebDriverConfig.kt index 5153122..c955052 100644 --- a/src/main/kotlin/xyz/cssxsh/selenium/RemoteWebDriverConfig.kt +++ b/src/main/kotlin/xyz/cssxsh/selenium/RemoteWebDriverConfig.kt @@ -1,5 +1,6 @@ package xyz.cssxsh.selenium +import java.util.* /** * 用来配置 RemoteWebDriver @@ -8,14 +9,36 @@ package xyz.cssxsh.selenium * @see [RemoteWebDriverSupplier] */ interface RemoteWebDriverConfig { - val userAgent: String - val width: Int - val height: Int - val pixelRatio: Int - val headless: Boolean - val proxy: String get() = "" - val log: Boolean get() = false - val browser: String - val factory: String - val arguments: List get() = emptyList() + val userAgent: String get() = INSTANCE.userAgent + val width: Int get() = INSTANCE.width + val height: Int get() = INSTANCE.height + val pixelRatio: Int get() = INSTANCE.pixelRatio + val headless: Boolean get() = INSTANCE.headless + val proxy: String get() = INSTANCE.proxy + val log: Boolean get() = INSTANCE.log + val browser: String get() = INSTANCE.browser + val factory: String get() = INSTANCE.factory + val arguments: List get() = INSTANCE.arguments + + companion object INSTANCE : RemoteWebDriverConfig { + @JvmStatic + val loader: ServiceLoader by lazy { + ServiceLoader.load(RemoteWebDriverConfig::class.java, RemoteWebDriverConfig::class.java.classLoader) + } + + private val instance: RemoteWebDriverConfig by lazy { + loader.iterator().next() + } + + override val userAgent: String get() = instance.userAgent + override val width: Int get() = instance.width + override val height: Int get() = instance.height + override val pixelRatio: Int get() = instance.pixelRatio + override val headless: Boolean get() = instance.headless + override val proxy: String get() = instance.proxy + override val log: Boolean get() = instance.log + override val browser: String get() = instance.browser + override val factory: String get() = instance.factory + override val arguments: List get() = instance.arguments + } } \ No newline at end of file diff --git a/src/main/resources/META-INF/services/xyz.cssxsh.selenium.RemoteWebDriverConfig b/src/main/resources/META-INF/services/xyz.cssxsh.selenium.RemoteWebDriverConfig new file mode 100644 index 0000000..b1bcde2 --- /dev/null +++ b/src/main/resources/META-INF/services/xyz.cssxsh.selenium.RemoteWebDriverConfig @@ -0,0 +1 @@ +xyz.cssxsh.mirai.plugin.data.MiraiSeleniumConfig$DriverConfig \ No newline at end of file