Skip to content

Commit

Permalink
Fully migrate to nio Path
Browse files Browse the repository at this point in the history
  • Loading branch information
Goooler committed Jul 22, 2024
1 parent b6481c6 commit 1164b34
Show file tree
Hide file tree
Showing 18 changed files with 140 additions and 122 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.github.composegears.valkyrie.generator.imagevector

import java.io.File
import kotlin.io.path.Path

val DEFAULT_CONFIG = ImageVectorGeneratorConfig(
packageName = "io.github.composegears.valkyrie.icons",
Expand All @@ -9,4 +9,4 @@ val DEFAULT_CONFIG = ImageVectorGeneratorConfig(
generatePreview = false
)

fun loadIcon(name: String) = File("src/test/resources/${name}")
fun loadIcon(name: String) = Path("src/test/resources/${name}")
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@ import androidx.compose.material.icons.generator.IconParser
import androidx.compose.material.icons.generator.vector.Vector
import io.github.composegears.valkyrie.parser.IconType.SVG
import io.github.composegears.valkyrie.parser.IconType.XML
import java.io.File
import java.nio.file.Path
import java.util.*
import kotlin.io.path.createTempFile
import kotlin.io.path.extension
import kotlin.io.path.name
import kotlin.io.path.readText

data class IconParserOutput(
Expand All @@ -18,18 +20,18 @@ data class IconParserOutput(
object IconParser {

@Throws(IllegalStateException::class)
fun toVector(file: File): IconParserOutput {
val iconType = IconTypeParser.getIconType(file.extension) ?: error("File not SVG or XML")
fun toVector(path: Path): IconParserOutput {
val iconType = IconTypeParser.getIconType(path.extension) ?: error("File not SVG or XML")

val fileName = getIconName(fileName = file.name)
val fileName = getIconName(fileName = path.name)
val icon = when (iconType) {
SVG -> {
val tmpFile = createTempFile(suffix = "valkyrie/")
SvgToXmlParser.parse(file, tmpFile)
val tmpPath = createTempFile(suffix = "valkyrie/")
SvgToXmlParser.parse(path, tmpPath)

Icon(fileContent = tmpFile.readText())
Icon(fileContent = tmpPath.readText())
}
XML -> Icon(fileContent = file.readText())
XML -> Icon(fileContent = path.readText())
}

return IconParserOutput(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package io.github.composegears.valkyrie.parser

import com.android.ide.common.vectordrawable.Svg2Vector
import java.io.File
import java.nio.file.Path
import kotlin.io.path.outputStream

object SvgToXmlParser {

fun parse(file: File, outPath: Path) {
Svg2Vector.parseSvgToXml(file.toPath(), outPath.outputStream())
fun parse(input: Path, output: Path) {
Svg2Vector.parseSvgToXml(input, output.outputStream())
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.github.composegears.valkyrie.ui.extension

import com.intellij.openapi.vfs.VirtualFile
import java.io.File
import java.nio.file.Path
import kotlin.io.path.Path

fun VirtualFile.toFile() = File(path)
fun VirtualFile.toPath(): Path = Path(path)
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,22 @@ import java.awt.dnd.DropTargetDragEvent
import java.awt.dnd.DropTargetDropEvent
import java.awt.dnd.DropTargetEvent
import java.awt.dnd.DropTargetListener
import java.io.File
import java.nio.file.Path
import kotlin.io.path.isDirectory

@Composable
fun rememberDragAndDropFolderHandler(onDrop: (String) -> Unit): DragAndDropHandlerState {
return rememberFileDragAndDropHandler { file ->
fun rememberDragAndDropFolderHandler(onDrop: (Path) -> Unit): DragAndDropHandlerState {
return rememberFileDragAndDropHandler { path ->
val destination = when {
file.isDirectory -> file.path
else -> file.parent
path.isDirectory() -> path
else -> path.parent
}
onDrop(destination)
}
}

@Composable
fun rememberFileDragAndDropHandler(onDrop: (File) -> Unit): DragAndDropHandlerState {
fun rememberFileDragAndDropHandler(onDrop: (Path) -> Unit): DragAndDropHandlerState {
return rememberMultiSelectDragAndDropHandler { fileList ->
if (fileList.isNotEmpty()) {
onDrop(fileList.first())
Expand All @@ -38,7 +39,7 @@ fun rememberFileDragAndDropHandler(onDrop: (File) -> Unit): DragAndDropHandlerSt
}

@Composable
fun rememberMultiSelectDragAndDropHandler(onDrop: (List<File>) -> Unit): DragAndDropHandlerState {
fun rememberMultiSelectDragAndDropHandler(onDrop: (List<Path>) -> Unit): DragAndDropHandlerState {
if (LocalInspectionMode.current) {
return DragAndDropHandlerState()
} else {
Expand Down Expand Up @@ -73,7 +74,7 @@ data class DragAndDropHandlerState(val isDragging: Boolean = false) {
private class SimpleDropTargetListener(
val onDragEnter: () -> Unit = {},
val onDragExit: () -> Unit = {},
val onDrop: (List<File>) -> Unit = {}
val onDrop: (List<Path>) -> Unit = {}
) : DropTargetListener {
override fun dragEnter(dtde: DropTargetDragEvent?) = onDragEnter()

Expand All @@ -87,13 +88,16 @@ private class SimpleDropTargetListener(
event.acceptDrop(DnDConstants.ACTION_COPY)
val transferable = event.transferable

val files = transferable.transferDataFlavors
val paths = transferable.transferDataFlavors
.asSequence()
.filter { it.isFlavorJavaFileListType }
.mapNotNull { transferable.getTransferData(it) as? List<*> }
.flatten()
.filterIsInstance<File>()
.filterIsInstance<java.io.File>()
.map { it.toPath() }
.toList()

onDrop(files)
onDrop(paths)
event.dropComplete(true)
onDragExit()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,21 @@ import com.intellij.openapi.project.Project
import io.github.composegears.valkyrie.ui.foundation.theme.LocalProject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.nio.file.Path

@Composable
fun rememberDirectoryPicker(): Picker<String?> {
fun rememberDirectoryPicker(): Picker<Path?> {
if (LocalInspectionMode.current) return StubDirectoryPicker

val project = LocalProject.current
return remember { DirectoryPicker(project = project) }
}

private object StubDirectoryPicker : Picker<String?> {
override suspend fun launch(): String? = null
private object StubDirectoryPicker : Picker<Path?> {
override suspend fun launch(): Path? = null
}

private class DirectoryPicker(private val project: Project) : Picker<String?> {
private class DirectoryPicker(private val project: Project) : Picker<Path?> {

private val fileChooserDescriptor = FileChooserDescriptor(
/* chooseFiles = */ false,
Expand All @@ -34,7 +35,7 @@ private class DirectoryPicker(private val project: Project) : Picker<String?> {
/* chooseMultiple = */ false
)

override suspend fun launch(): String? = withContext(Dispatchers.EDT) {
FileChooser.chooseFile(fileChooserDescriptor, project, null)?.path
override suspend fun launch(): Path? = withContext(Dispatchers.EDT) {
FileChooser.chooseFile(fileChooserDescriptor, project, null)?.toNioPath()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,38 +11,38 @@ 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.ui.extension.toFile
import io.github.composegears.valkyrie.ui.extension.toPath
import io.github.composegears.valkyrie.ui.foundation.theme.LocalProject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.io.File
import java.nio.file.Path

@Composable
fun rememberFilePicker(): Picker<File?> {
fun rememberFilePicker(): Picker<Path?> {
if (LocalInspectionMode.current) return StubFilePicker

val project = LocalProject.current

return remember {
FilePicker(
project = project,
filterCondition = { file ->
val extension = file.extension
filterCondition = { path ->
val extension = path.extension

extension != null && (extension.isSvg() || extension.isXml())
}
)
}
}

private object StubFilePicker : Picker<File?> {
override suspend fun launch(): File? = null
private object StubFilePicker : Picker<Path?> {
override suspend fun launch(): Path? = null
}

private class FilePicker(
private val project: Project,
filterCondition: Condition<VirtualFile> = Condition { true }
) : Picker<File?> {
) : Picker<Path?> {

private val fileChooserDescriptor = FileChooserDescriptor(
/* chooseFiles = */ true,
Expand All @@ -53,9 +53,9 @@ private class FilePicker(
/* chooseMultiple = */ false
).withFileFilter(filterCondition)

override suspend fun launch() = withContext(Dispatchers.EDT) {
override suspend fun launch(): Path? = withContext(Dispatchers.EDT) {
FileChooser
.chooseFile(fileChooserDescriptor, project, null)
?.toFile()
?.toPath()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,38 +11,37 @@ 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.ui.extension.toFile
import io.github.composegears.valkyrie.ui.foundation.theme.LocalProject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.io.File
import java.nio.file.Path

@Composable
fun rememberMultipleFilesPicker(): Picker<List<File>> {
fun rememberMultipleFilesPicker(): Picker<List<Path>> {
if (LocalInspectionMode.current) return StubMultipleFilesPicker

val project = LocalProject.current

return remember {
MultipleFilesPicker(
project = project,
filterCondition = { file ->
val extension = file.extension
filterCondition = { path ->
val extension = path.extension

extension != null && (extension.isSvg() || extension.isXml())
}
)
}
}

private object StubMultipleFilesPicker : Picker<List<File>> {
override suspend fun launch(): List<File> = emptyList()
private object StubMultipleFilesPicker : Picker<List<Path>> {
override suspend fun launch(): List<Path> = emptyList()
}

private class MultipleFilesPicker(
private val project: Project,
filterCondition: Condition<VirtualFile> = Condition { true }
) : Picker<List<File>> {
) : Picker<List<Path>> {

private val fileChooserDescriptor = FileChooserDescriptor(
/* chooseFiles = */ true,
Expand All @@ -53,9 +52,9 @@ private class MultipleFilesPicker(
/* chooseMultiple = */ true
).withFileFilter(filterCondition)

override suspend fun launch(): List<File> = withContext(Dispatchers.EDT) {
override suspend fun launch(): List<Path> = withContext(Dispatchers.EDT) {
FileChooser
.chooseFiles(fileChooserDescriptor, project, null)
.map(VirtualFile::toFile)
.map(VirtualFile::toNioPath)
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package io.github.composegears.valkyrie.ui.screen.mode.iconpack.conversion

import androidx.compose.ui.graphics.painter.Painter
import java.io.File
import java.nio.file.Path

sealed interface IconPackConversionState {

Expand Down Expand Up @@ -35,7 +35,7 @@ sealed interface BatchIcon {
override val iconName: IconName,
override val extension: String,
val painter: Painter,
val file: File
val path: Path
) : BatchIcon
}

Expand Down
Loading

0 comments on commit 1164b34

Please sign in to comment.