From 4d4987326fd6709e3f2792a9dff43db014f7ac66 Mon Sep 17 00:00:00 2001 From: Goooler Date: Tue, 23 Jul 2024 08:09:29 +0800 Subject: [PATCH] Refactor extension checkers --- .../valkyrie/parser/IconParser.kt | 2 +- .../composegears/valkyrie/parser/IconType.kt | 25 +++++++++++++++++++ .../valkyrie/parser/IconTypeParser.kt | 15 ----------- .../valkyrie/ui/extension/String.kt | 3 --- .../ui/foundation/picker/FilePicker.kt | 11 ++++---- .../foundation/picker/MultipleFilesPicker.kt | 11 ++++---- .../conversion/IconPackConversionViewModel.kt | 4 ++- .../iconpack/conversion/util/FileToPainter.kt | 8 +++--- 8 files changed, 44 insertions(+), 35 deletions(-) create mode 100644 components/parser/src/main/kotlin/io/github/composegears/valkyrie/parser/IconType.kt delete mode 100644 components/parser/src/main/kotlin/io/github/composegears/valkyrie/parser/IconTypeParser.kt diff --git a/components/parser/src/main/kotlin/io/github/composegears/valkyrie/parser/IconParser.kt b/components/parser/src/main/kotlin/io/github/composegears/valkyrie/parser/IconParser.kt index cefa1635..3d6551ca 100644 --- a/components/parser/src/main/kotlin/io/github/composegears/valkyrie/parser/IconParser.kt +++ b/components/parser/src/main/kotlin/io/github/composegears/valkyrie/parser/IconParser.kt @@ -20,7 +20,7 @@ object IconParser { @Throws(IllegalStateException::class) fun toVector(path: Path): IconParserOutput { - val iconType = IconTypeParser.getIconType(path.extension) ?: error("File not SVG or XML") + val iconType = IconType.from(path.extension) ?: error("File not SVG or XML") val fileName = getIconName(fileName = path.name) val icon = when (iconType) { diff --git a/components/parser/src/main/kotlin/io/github/composegears/valkyrie/parser/IconType.kt b/components/parser/src/main/kotlin/io/github/composegears/valkyrie/parser/IconType.kt new file mode 100644 index 00000000..52248ce3 --- /dev/null +++ b/components/parser/src/main/kotlin/io/github/composegears/valkyrie/parser/IconType.kt @@ -0,0 +1,25 @@ +package io.github.composegears.valkyrie.parser + +import java.nio.file.Path +import kotlin.io.path.extension + +@PublishedApi +internal enum class IconType(val extension: String) { + SVG("svg"), + XML("xml"), + ; + + companion object { + fun from(extension: String): IconType? = when { + extension.isSvg -> SVG + extension.isXml -> XML + else -> null + } + } +} + +inline val String?.isSvg: Boolean get() = equals(other = IconType.SVG.extension, ignoreCase = true) +inline val String?.isXml: Boolean get() = equals(other = IconType.XML.extension, ignoreCase = true) + +inline val Path.isSvg: Boolean get() = extension.isSvg +inline val Path.isXml: Boolean get() = extension.isXml diff --git a/components/parser/src/main/kotlin/io/github/composegears/valkyrie/parser/IconTypeParser.kt b/components/parser/src/main/kotlin/io/github/composegears/valkyrie/parser/IconTypeParser.kt deleted file mode 100644 index 71272ba6..00000000 --- a/components/parser/src/main/kotlin/io/github/composegears/valkyrie/parser/IconTypeParser.kt +++ /dev/null @@ -1,15 +0,0 @@ -package io.github.composegears.valkyrie.parser - -internal object IconTypeParser { - - fun getIconType(fileExtension: String): IconType? = when { - IconType.SVG.extension.equals(fileExtension, ignoreCase = true) -> IconType.SVG - IconType.XML.extension.equals(fileExtension, ignoreCase = true) -> IconType.XML - else -> null - } -} - -internal enum class IconType(val extension: String) { - SVG("svg"), - XML("xml"), -} diff --git a/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/extension/String.kt b/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/extension/String.kt index 72aa4afc..74be6613 100644 --- a/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/extension/String.kt +++ b/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/extension/String.kt @@ -3,6 +3,3 @@ package io.github.composegears.valkyrie.ui.extension inline fun String?.or(default: String): String = this ?: default - -fun String.isSvg() = equals(other = "svg", ignoreCase = true) -fun String.isXml() = equals(other = "xml", ignoreCase = true) diff --git a/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/foundation/picker/FilePicker.kt b/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/foundation/picker/FilePicker.kt index 9885f35a..ae82b65c 100644 --- a/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/foundation/picker/FilePicker.kt +++ b/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/foundation/picker/FilePicker.kt @@ -9,8 +9,8 @@ import com.intellij.openapi.fileChooser.FileChooserDescriptor import com.intellij.openapi.project.Project import com.intellij.openapi.util.Condition import com.intellij.openapi.vfs.VirtualFile -import io.github.composegears.valkyrie.ui.extension.isSvg -import io.github.composegears.valkyrie.ui.extension.isXml +import io.github.composegears.valkyrie.parser.isSvg +import io.github.composegears.valkyrie.parser.isXml import io.github.composegears.valkyrie.ui.extension.toPath import io.github.composegears.valkyrie.ui.foundation.theme.LocalProject import java.nio.file.Path @@ -26,10 +26,9 @@ fun rememberFilePicker(): Picker { return remember { FilePicker( project = project, - filterCondition = { path -> - val extension = path.extension - - extension != null && (extension.isSvg() || extension.isXml()) + filterCondition = { vf -> + val extension = vf.extension + extension.isSvg || extension.isXml }, ) } diff --git a/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/foundation/picker/MultipleFilesPicker.kt b/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/foundation/picker/MultipleFilesPicker.kt index 45019092..afa27eaa 100644 --- a/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/foundation/picker/MultipleFilesPicker.kt +++ b/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/foundation/picker/MultipleFilesPicker.kt @@ -9,8 +9,8 @@ import com.intellij.openapi.fileChooser.FileChooserDescriptor import com.intellij.openapi.project.Project import com.intellij.openapi.util.Condition import com.intellij.openapi.vfs.VirtualFile -import io.github.composegears.valkyrie.ui.extension.isSvg -import io.github.composegears.valkyrie.ui.extension.isXml +import io.github.composegears.valkyrie.parser.isSvg +import io.github.composegears.valkyrie.parser.isXml import io.github.composegears.valkyrie.ui.foundation.theme.LocalProject import java.nio.file.Path import kotlinx.coroutines.Dispatchers @@ -25,10 +25,9 @@ fun rememberMultipleFilesPicker(): Picker> { return remember { MultipleFilesPicker( project = project, - filterCondition = { path -> - val extension = path.extension - - extension != null && (extension.isSvg() || extension.isXml()) + filterCondition = { vf -> + val extension = vf.extension + extension.isSvg || extension.isXml }, ) } diff --git a/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/iconpack/conversion/IconPackConversionViewModel.kt b/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/iconpack/conversion/IconPackConversionViewModel.kt index 37f79f6f..16516c3b 100644 --- a/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/iconpack/conversion/IconPackConversionViewModel.kt +++ b/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/iconpack/conversion/IconPackConversionViewModel.kt @@ -5,6 +5,8 @@ import io.github.composegears.valkyrie.generator.imagevector.ImageVectorGenerato import io.github.composegears.valkyrie.generator.imagevector.ImageVectorGeneratorConfig import io.github.composegears.valkyrie.generator.imagevector.ImageVectorSpecOutput import io.github.composegears.valkyrie.parser.IconParser +import io.github.composegears.valkyrie.parser.isSvg +import io.github.composegears.valkyrie.parser.isXml import io.github.composegears.valkyrie.processing.writter.FileWriter import io.github.composegears.valkyrie.settings.InMemorySettings import io.github.composegears.valkyrie.settings.ValkyriesSettings @@ -192,7 +194,7 @@ class IconPackConversionViewModel( } private fun List.processFiles() { - val paths = filter { it.isRegularFile() && (it.extension == "xml" || it.extension == "svg") } + val paths = filter { it.isRegularFile() && (it.isXml || it.isSvg) } if (paths.isNotEmpty()) { _state.updateState { diff --git a/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/iconpack/conversion/util/FileToPainter.kt b/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/iconpack/conversion/util/FileToPainter.kt index 3ff760dc..4b247e8d 100644 --- a/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/iconpack/conversion/util/FileToPainter.kt +++ b/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/mode/iconpack/conversion/util/FileToPainter.kt @@ -4,15 +4,17 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.toPainter import com.android.ide.common.vectordrawable.VdPreview import io.github.composegears.valkyrie.parser.SvgToXmlParser +import io.github.composegears.valkyrie.parser.isSvg +import io.github.composegears.valkyrie.parser.isXml import java.nio.file.Path import kotlin.io.path.createTempFile import kotlin.io.path.extension import kotlin.io.path.name import kotlin.io.path.readText -fun Path.toPainterOrNull(): Painter? = when (extension) { - "svg" -> svgToPainter() - "xml" -> xmlToPainter() +fun Path.toPainterOrNull(): Painter? = when { + isSvg -> svgToPainter() + isXml -> xmlToPainter() else -> error("Unsupported file type: $extension") }