Skip to content

Commit 40a7239

Browse files
Micro66hongyu9
authored andcommitted
refactor: Optimize the processing logic of theme files and add a default method for theme directories
1 parent 60f9e08 commit 40a7239

File tree

2 files changed

+56
-49
lines changed

2 files changed

+56
-49
lines changed

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: 52 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -404,53 +404,55 @@ class ThemeManager : Disposable {
404404
val themeFile = themeResourceDir?.resolve(themeFileName)?.toFile()
405405
val vscodeThemeFile = themeResourceDir?.resolve(vscodeThemeName)?.toFile()
406406

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

571573
if (themeDir.notExists()) {
572574
// Try second path: integrations/theme/default-themes
573-
themeDir = Paths.get(resourceRoot, "integrations", "theme", "default-themes")
575+
themeDir = getDefaultThemeResourceDir(resourceRoot);
574576
if (themeDir.notExists()) {
575577
return null
576578
}
577579
}
578580

579581
return themeDir
580582
}
583+
584+
fun getDefaultThemeResourceDir(resourceRoot: String): Path {
585+
return Paths.get(resourceRoot, "integrations", "theme", "default-themes")
586+
}
581587

582588
/**
583589
* Get theme manager instance

0 commit comments

Comments
 (0)