Skip to content

Commit

Permalink
fix tracking new lsp configs
Browse files Browse the repository at this point in the history
  • Loading branch information
reymondzzzz committed Aug 22, 2024
1 parent 801493c commit 459aa42
Showing 1 changed file with 29 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,20 @@ package com.smallcloud.refactai.panes.sharedchat.browser
import com.google.gson.Gson
import com.intellij.ide.BrowserUtil
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.keymap.Keymap
import com.intellij.openapi.keymap.KeymapManager
import com.intellij.openapi.keymap.KeymapUtil
import com.intellij.ui.jcef.*
import com.intellij.util.messages.MessageBus
import com.intellij.util.ui.UIUtil
import com.smallcloud.refactai.PluginState
import com.smallcloud.refactai.account.AccountManagerChangedNotifier
import com.smallcloud.refactai.lsp.LSPCapabilities
import com.smallcloud.refactai.lsp.LSPProcessHolderChangedNotifier
import com.smallcloud.refactai.panes.sharedchat.Editor
import com.smallcloud.refactai.panes.sharedchat.Events
import com.smallcloud.refactai.settings.AppSettingsState
import org.cef.CefApp
import org.cef.browser.CefBrowser
import org.cef.handler.CefLoadHandlerAdapter
import javax.swing.JComponent
import com.intellij.openapi.keymap.KeymapUtil
import com.smallcloud.refactai.panes.sharedchat.Editor
import javax.swing.JFrame
import javax.swing.JWindow


fun getActionKeybinding(actionId: String): String {
Expand All @@ -36,7 +32,7 @@ fun getActionKeybinding(actionId: String): String {
return KeymapUtil.getShortcutText(shortcuts[0])
}

class ChatWebView(val editor: Editor , val messageHandler: (event: Events.FromChat) -> Unit): Disposable {
class ChatWebView(val editor: Editor, val messageHandler: (event: Events.FromChat) -> Unit) : Disposable {
private val jsPoolSize = "200"

init {
Expand All @@ -45,8 +41,16 @@ class ChatWebView(val editor: Editor , val messageHandler: (event: Events.FromC

fun setStyle() {
val isDarkMode = UIUtil.isUnderDarcula()
val mode = if (isDarkMode) { "dark" } else { "light" }
val bodyClass = if (isDarkMode) { "vscode-dark" } else { "vscode-light" }
val mode = if (isDarkMode) {
"dark"
} else {
"light"
}
val bodyClass = if (isDarkMode) {
"vscode-dark"
} else {
"vscode-light"
}
val backgroundColour = UIUtil.getPanelBackground()
val red = backgroundColour.red
val green = backgroundColour.green
Expand All @@ -68,6 +72,7 @@ class ChatWebView(val editor: Editor , val messageHandler: (event: Events.FromC

val browser = JBCefBrowser
.createBuilder()
.setEnableOpenDevToolsMenuItem(true)
.setUrl("http://refactai/index.html")
.setOffScreenRendering(useOsr)
.build()
Expand All @@ -76,7 +81,9 @@ class ChatWebView(val editor: Editor , val messageHandler: (event: Events.FromC
JBCefClient.Properties.JS_QUERY_POOL_SIZE,
jsPoolSize,
)
browser.setProperty(JBCefBrowserBase.Properties.NO_CONTEXT_MENU, true)
if (System.getenv("REFACT_DEBUG") != "1") {
browser.setProperty(JBCefBrowserBase.Properties.NO_CONTEXT_MENU, true)
}

CefApp.getInstance().registerSchemeHandlerFactory("http", "refactai", RequestHandlerFactory())

Expand All @@ -85,7 +92,7 @@ class ChatWebView(val editor: Editor , val messageHandler: (event: Events.FromC

val myJSQueryOpenInBrowserRedirectHyperlink = JBCefJSQuery.create((browser as JBCefBrowserBase?)!!)
myJSQueryOpenInBrowserRedirectHyperlink.addHandler { href ->
if(href.isNotEmpty()) {
if (href.isNotEmpty()) {
BrowserUtil.browse(href)
}
null
Expand All @@ -94,18 +101,18 @@ class ChatWebView(val editor: Editor , val messageHandler: (event: Events.FromC
var installedScript = false
var setupReact = false

browser.jbCefClient.addLoadHandler(object: CefLoadHandlerAdapter() {
browser.jbCefClient.addLoadHandler(object : CefLoadHandlerAdapter() {
override fun onLoadingStateChange(
browser: CefBrowser,
isLoading: Boolean,
canGoBack: Boolean,
canGoForward: Boolean
) {
if(isLoading) {
if (isLoading) {
return;
}

if(!installedScript) {
if (!installedScript) {
installedScript = setUpJavaScriptMessageBus(browser, myJSQueryOpenInBrowser)
}

Expand All @@ -120,11 +127,9 @@ class ChatWebView(val editor: Editor , val messageHandler: (event: Events.FromC

}, browser.cefBrowser)

val messageBus: MessageBus = ApplicationManager.getApplication().messageBus
messageBus
.connect(PluginState.instance)
.subscribe(AccountManagerChangedNotifier.TOPIC, object : AccountManagerChangedNotifier {
override fun apiKeyChanged(newApiKey: String?) {
editor.project.messageBus.connect(PluginState.instance)
.subscribe(LSPProcessHolderChangedNotifier.TOPIC, object : LSPProcessHolderChangedNotifier {
override fun capabilitiesChanged(newCaps: LSPCapabilities) {
setupReact = false
installedScript = false
browser.cefBrowser.reload()
Expand All @@ -133,20 +138,14 @@ class ChatWebView(val editor: Editor , val messageHandler: (event: Events.FromC
})

browser.createImmediately()


// val dev = JBCefBrowser.createBuilder().setCefBrowser(browser.cefBrowser).setClient(browser.jbCefClient).build()
// JFrame().add(dev.component)
// dev.openDevtools()

browser
}

fun addMessageHandler(myJSQueryOpenInBrowser: JBCefJSQuery) {
myJSQueryOpenInBrowser.addHandler { msg ->
val event = Events.parse(msg)

if(event != null) {
if (event != null) {
messageHandler(event)
}
null
Expand Down Expand Up @@ -201,15 +200,15 @@ class ChatWebView(val editor: Editor , val messageHandler: (event: Events.FromC
const msg = JSON.stringify(event);
${myJSQueryOpenInBrowser.inject("msg")}
}""".trimIndent()
if(browser != null) {
if (browser != null) {
browser.executeJavaScript(script, browser.url, 0);
return true
}
return false
}

fun postMessage(message: Events.ToChat<*>?) {
if(message != null) {
if (message != null) {
val json = Events.stringify(message)
println("post message json: $json")
this.postMessage(json)
Expand Down

0 comments on commit 459aa42

Please sign in to comment.