Skip to content

Commit

Permalink
Fixo patcho.
Browse files Browse the repository at this point in the history
  • Loading branch information
Unthrottled committed Jul 12, 2024
1 parent fcd43da commit 4d1ede7
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 50 deletions.
86 changes: 44 additions & 42 deletions src/main/kotlin/io/unthrottled/doki/icon/ColorPatcher.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package io.unthrottled.doki.icon
import com.google.common.cache.Cache
import com.google.common.cache.CacheBuilder
import com.intellij.ide.ui.LafManager
import com.intellij.ide.ui.UITheme
import com.intellij.ide.ui.laf.UIThemeLookAndFeelInfo
import com.intellij.ui.ColorUtil
import com.intellij.ui.JBColor
import com.intellij.ui.JBColor.namedColor
Expand All @@ -21,6 +21,47 @@ import io.unthrottled.doki.util.toOptional
import java.awt.Color
import java.time.Duration

private fun buildThemeColorPatcher(themeLookAndFeel: UIThemeLookAndFeelInfo): SvgElementColorPatcherProvider? {
val themeLookAndFeelMethods = themeLookAndFeel.javaClass.methods
val themeGetter = themeLookAndFeelMethods.firstOrNull { method -> method.name == "getTheme" }
val theme = themeGetter?.invoke(themeLookAndFeel)
val themeClassMethods = theme?.javaClass?.methods ?: return null
val colorPatcherGetter = themeClassMethods.firstOrNull { method -> method.name == "getColorPatcher" }
val colorPatcherProvider = colorPatcherGetter?.invoke(theme)
val colorPatcherMethods = colorPatcherProvider?.javaClass?.methods ?: return null
val attr = colorPatcherMethods.firstOrNull { method -> method.name == "attributeForPath" }
val digest = colorPatcherMethods.firstOrNull { method -> method.name == "digest" }
return object : SvgElementColorPatcherProvider, Logging {
override fun attributeForPath(path: String): SvgAttributePatcher? =
runSafelyWithResult({
val patcherForPath = attr?.invoke(colorPatcherProvider, path) ?: return@runSafelyWithResult null
val patchColorsMethod =
patcherForPath.javaClass
.methods.firstOrNull { method -> method.name == "patchColors" } ?: return@runSafelyWithResult null
object : SvgAttributePatcher {
override fun patchColors(attributes: MutableMap<String, String>) {
runSafelyWithResult({
patchColorsMethod.invoke(patcherForPath, attributes)
}) { patchingError ->
logger().warn("unable to patch colors", patchingError)
}
}
}
}) {
logger().warn("Unable to patch path for raisins", it)
null
}

override fun digest(): LongArray =
runSafelyWithResult({
digest?.invoke(colorPatcherProvider) as LongArray
}) { digestError ->
logger().warn("Unable to get digest", digestError)
longArrayOf()
}
}
}

object NoOptPatcher : SvgAttributePatcher {
override fun patchColors(attributes: MutableMap<String, String>) {
}
Expand Down Expand Up @@ -48,49 +89,10 @@ object ColorPatcher : SvgElementColorPatcherProvider {
LafManager.getInstance()
?.currentUIThemeLookAndFeel.toOptional()
.map {
it to it.javaClass.methods.firstOrNull { method -> method.name == "getTheme" }
buildThemeColorPatcher(it)
}
.filter { it.second != null }
.ifPresent {
val theme = ((it.second?.invoke(it.first)) as UITheme)
// todo fix
val themeClass = UITheme::class.java
val themeClassMethods = themeClass.methods
val attr = themeClassMethods.firstOrNull { method -> method.name == "attributeForPath" }
val digest = themeClassMethods.firstOrNull { method -> method.name == "digest" }
this.uiColorPatcherProvider =
object : SvgElementColorPatcherProvider, Logging {
override fun attributeForPath(path: String): SvgAttributePatcher? {
return runSafelyWithResult({
val patcherForPath = attr?.invoke(digest, path)
val patchColorsMethod =
patcherForPath?.javaClass
?.methods?.firstOrNull { method -> method.name == "patchColors" }
object : SvgAttributePatcher {
override fun patchColors(attributes: MutableMap<String, String>) {
runSafelyWithResult({
patchColorsMethod
?.invoke(patcherForPath, attributes)
}) { patchingError ->
logger().warn("unable to patch colors", patchingError)
}
}
}
}) {
logger().warn("Unable to patch path for raisins", it)
null
}
}

override fun digest(): LongArray {
return runSafelyWithResult({
digest?.invoke(theme) as LongArray
}) { digestError ->
logger().warn("Unable to get digest", digestError)
longArrayOf()
}
}
}
this.uiColorPatcherProvider = it
}
clearCaches()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -417,14 +417,6 @@ object UpdateNotification : Logging {
}
}

private val lastWorkingBuild = BuildNumber.fromString("212.5712.43")

private fun needsToFixUpdateNotification(): Boolean {
val build = ApplicationInfoEx.getInstanceEx().build
return (lastWorkingBuild?.compareTo(build) ?: 0) < 0 &&
WeebService.isBackgroundOn()
}

private fun buildUrl(
isNewUser: Boolean,
newVersion: String,
Expand Down

0 comments on commit 4d1ede7

Please sign in to comment.