Skip to content

Commit

Permalink
feat: RemoteWebDriverConfig.INSTANCE
Browse files Browse the repository at this point in the history
  • Loading branch information
cssxsh committed Jan 18, 2022
1 parent 3ddf5aa commit 1cc83c9
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 16 deletions.
11 changes: 5 additions & 6 deletions src/main/kotlin/xyz/cssxsh/mirai/plugin/MiraiSeleniumPlugin.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,4 +52,6 @@ object MiraiSeleniumConfig : ReadOnlyPluginConfig("MiraiSeleniumConfig"), Remote
@ValueName("arguments")
@ValueDescription("自定义 arguments")
override val arguments: List<String> by value(emptyList())

class DriverConfig : RemoteWebDriverConfig by MiraiSeleniumConfig
}
43 changes: 33 additions & 10 deletions src/main/kotlin/xyz/cssxsh/selenium/RemoteWebDriverConfig.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package xyz.cssxsh.selenium

import java.util.*

/**
* 用来配置 RemoteWebDriver
Expand All @@ -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<String> 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<String> get() = INSTANCE.arguments

companion object INSTANCE : RemoteWebDriverConfig {
@JvmStatic
val loader: ServiceLoader<RemoteWebDriverConfig> 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<String> get() = instance.arguments
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
xyz.cssxsh.mirai.plugin.data.MiraiSeleniumConfig$DriverConfig

0 comments on commit 1cc83c9

Please sign in to comment.