Skip to content

Commit 3c050a6

Browse files
authored
Merge pull request #125 from wecode-ai/add_a_default_method_for_theme
Add a default method for theme
2 parents 2d9e374 + d3616ab commit 3c050a6

File tree

3 files changed

+69
-60
lines changed

3 files changed

+69
-60
lines changed

jetbrains_plugin/src/main/kotlin/com/sina/weibo/agent/core/RPCManager.kt

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -54,27 +54,28 @@ class RPCManager(
5454
// Send empty configuration model
5555
logger.info("Sending configuration information to extension process")
5656
val themeName =
57-
if (ThemeManager.getInstance().isDarkThemeForce()) "Default Dark Modern" else "Default Light Modern"
57+
if (ThemeManager.getInstance().isDarkThemeForce()) "Visual Studio 2017 Dark - C++" else "Visual Studio 2017 Light - C++"
5858

59-
// Create empty configuration model
60-
val emptyMap = mapOf(
61-
"contents" to emptyMap<String, Any>(),
62-
"keys" to emptyList<String>(),
63-
"overrides" to emptyList<String>()
64-
)
6559
// Get proxy configuration
6660
val httpProxyConfig = ProxyConfigUtil.getHttpProxyConfigForInitialization()
67-
61+
6862
// Build configuration contents
6963
val contentsBuilder = mutableMapOf<String, Any>(
70-
"workbench" to mapOf("colorTheme" to themeName)
64+
"workbench.colorTheme" to themeName
7165
)
72-
66+
7367
// Add proxy configuration if available
7468
httpProxyConfig?.let {
7569
contentsBuilder["http"] = it
7670
logger.info("Using proxy configuration for initialization: $it")
7771
}
72+
73+
// Create empty configuration model
74+
val emptyMap = mapOf(
75+
"contents" to emptyMap<String, Any>(),
76+
"keys" to emptyList<String>(),
77+
"overrides" to emptyList<String>()
78+
)
7879

7980
val emptyConfigModel = mapOf(
8081
"defaults" to mapOf(

jetbrains_plugin/src/main/kotlin/com/sina/weibo/agent/extensions/core/VsixManager.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package com.sina.weibo.agent.extensions.core
66

77
import com.intellij.openapi.diagnostic.Logger
88
import com.intellij.openapi.project.Project
9+
import com.sina.weibo.agent.theme.ThemeManager.Companion.getDefaultThemeResourceDir
910
import com.sina.weibo.agent.theme.ThemeManager.Companion.getThemeResourceDir
1011
import com.sina.weibo.agent.util.PluginConstants.ConfigFiles.getUserConfigDir
1112
import java.io.File
@@ -276,10 +277,10 @@ class VsixManager {
276277
return
277278
}
278279

279-
val integrationsThemeDir = getThemeResourceDir(extensionDir)
280+
var integrationsThemeDir = getThemeResourceDir(extensionDir)
280281
if (integrationsThemeDir == null) {
281-
LOG.warn("Plugin themes directory not found, skipping themes copy")
282-
return
282+
integrationsThemeDir = getDefaultThemeResourceDir(extensionDir)
283+
LOG.warn("Plugin themes directory not found, mkdir")
283284
}
284285

285286
// Create integrations theme directory

jetbrains_plugin/src/main/kotlin/com/sina/weibo/agent/theme/ThemeManager.kt

Lines changed: 54 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import com.intellij.openapi.application.ApplicationManager
1515
import com.intellij.openapi.diagnostic.Logger
1616
import com.intellij.openapi.util.Disposer
1717
import com.intellij.util.messages.MessageBusConnection
18+
import com.sina.weibo.agent.core.ServiceProxyRegistry
1819
import java.io.File
1920
import java.io.IOException
2021
import java.io.InputStream
@@ -64,7 +65,7 @@ class ThemeManager : Disposable {
6465

6566
// JSON serialization
6667
private val gson = Gson()
67-
68+
6869
/**
6970
* Initialize theme manager
7071
* @param resourceRoot Theme resource root directory
@@ -404,53 +405,55 @@ class ThemeManager : Disposable {
404405
val themeFile = themeResourceDir?.resolve(themeFileName)?.toFile()
405406
val vscodeThemeFile = themeResourceDir?.resolve(vscodeThemeName)?.toFile()
406407

407-
if (themeFile?.exists() == true && vscodeThemeFile?.exists() == true) {
408-
// Read theme file content
409-
val themeContent = themeFile.readText()
410-
411-
// Parse theme content
412-
val parsed = parseThemeString(themeContent)
413-
414-
// Handle include field, similar to getTheme.ts logic
415-
var finalTheme = parsed
416-
if (parsed.has("include")) {
417-
val includeFileName = parsed.get("include").asString
418-
val includePath = themeResourceDir?.resolve(includeFileName)
419-
420-
if (includePath != null && includePath.exists()) {
421-
try {
422-
val includeContent = includePath.toFile().readText()
423-
val includeTheme = parseThemeString(includeContent)
424-
finalTheme = mergeJsonObjects(finalTheme, includeTheme)
425-
} catch (e: Exception) {
426-
logger.error("Error processing include theme: $includeFileName", e)
427-
}
408+
val cssExists = vscodeThemeFile?.exists() == true
409+
if (!cssExists) {
410+
logger.warn("VSCode theme style file does not exist: $vscodeThemeName")
411+
return
412+
}
413+
414+
// Read theme file content if it exists; otherwise proceed with an empty theme
415+
val themeContent = if (themeFile?.exists() == true) themeFile.readText() else ""
416+
417+
// Parse theme content when non-blank; otherwise start from an empty JsonObject
418+
val parsed = if (themeContent.isNotBlank()) parseThemeString(themeContent) else JsonObject()
419+
420+
// Handle include field, similar to getTheme.ts logic
421+
var finalTheme = parsed
422+
if (parsed.has("include")) {
423+
val includeFileName = parsed.get("include").asString
424+
val includePath = themeResourceDir?.resolve(includeFileName)
425+
426+
if (includePath != null && includePath.exists()) {
427+
try {
428+
val includeContent = includePath.toFile().readText()
429+
val includeTheme = parseThemeString(includeContent)
430+
finalTheme = mergeJsonObjects(finalTheme, includeTheme)
431+
} catch (e: Exception) {
432+
logger.error("Error processing include theme: $includeFileName", e)
428433
}
429434
}
430-
431-
// Convert theme
432-
val converted = convertTheme(finalTheme)
433-
434-
// Read VSCode theme style file
435-
themeStyleContent = loadVscodeThemeStyle(vscodeThemeFile)
436-
437-
// Add style content to converted theme object
438-
if (themeStyleContent != null) {
439-
converted.addProperty("cssContent", themeStyleContent)
440-
}
441-
442-
// Update cache
443-
val oldConfig = currentThemeConfig
444-
currentThemeConfig = converted
445-
446-
logger.info("Loaded and converted theme configuration: $themeFileName")
447-
448-
// Notify listeners when configuration changes
449-
if (oldConfig?.toString() != converted.toString()) {
450-
notifyThemeChangeListeners()
451-
}
452-
} else {
453-
logger.warn("Theme configuration file does not exist: $themeFileName")
435+
}
436+
437+
// Convert theme (works even if finalTheme is empty)
438+
val converted = convertTheme(finalTheme)
439+
440+
// Read VSCode theme style file
441+
themeStyleContent = vscodeThemeFile?.let { loadVscodeThemeStyle(it) }
442+
443+
// Add style content to converted theme object
444+
if (themeStyleContent != null) {
445+
converted.addProperty("cssContent", themeStyleContent)
446+
}
447+
448+
// Update cache
449+
val oldConfig = currentThemeConfig
450+
currentThemeConfig = converted
451+
452+
logger.info("Loaded and converted theme configuration: $themeFileName (theme exists: ${themeFile?.exists() == true}, css exists: $cssExists)")
453+
454+
// Notify listeners when configuration changes
455+
if (oldConfig?.toString() != converted.toString()) {
456+
notifyThemeChangeListeners()
454457
}
455458
} catch (e: IOException) {
456459
logger.error("Error reading theme configuration", e)
@@ -570,14 +573,18 @@ class ThemeManager : Disposable {
570573

571574
if (themeDir.notExists()) {
572575
// Try second path: integrations/theme/default-themes
573-
themeDir = Paths.get(resourceRoot, "integrations", "theme", "default-themes")
576+
themeDir = getDefaultThemeResourceDir(resourceRoot);
574577
if (themeDir.notExists()) {
575578
return null
576579
}
577580
}
578581

579582
return themeDir
580583
}
584+
585+
fun getDefaultThemeResourceDir(resourceRoot: String): Path {
586+
return Paths.get(resourceRoot, "integrations", "theme", "default-themes")
587+
}
581588

582589
/**
583590
* Get theme manager instance

0 commit comments

Comments
 (0)