From ebb2ad3032e929a93e6985aed1f4ffeff4a63627 Mon Sep 17 00:00:00 2001 From: AmirHossein Abdolmotallebi Date: Sat, 12 Oct 2024 20:46:29 +0330 Subject: [PATCH] add open folder to file utils --- .../ir/amirab/util/osfileutil/FileUtils.kt | 1 + .../amirab/util/osfileutil/FileUtilsBase.kt | 27 ++++++++++++++----- .../ir/amirab/util/osfileutil/JVMFileUtils.kt | 8 ++++++ .../amirab/util/osfileutil/LinuxFileUtils.kt | 3 +++ .../amirab/util/osfileutil/MacOsFileUtils.kt | 5 ++++ .../util/osfileutil/WindowsFileUtils.kt | 4 +++ 6 files changed, 42 insertions(+), 6 deletions(-) diff --git a/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/FileUtils.kt b/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/FileUtils.kt index 977c516..f7ba722 100644 --- a/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/FileUtils.kt +++ b/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/FileUtils.kt @@ -6,6 +6,7 @@ import java.io.File interface FileUtils { fun openFile(file: File): Boolean fun openFolderOfFile(file: File): Boolean + fun openFolder(folder: File): Boolean fun canWriteInThisFolder(folder: String): Boolean companion object : FileUtils by getPlatformFileUtil() diff --git a/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/FileUtilsBase.kt b/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/FileUtilsBase.kt index 5759d9c..dd19f64 100644 --- a/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/FileUtilsBase.kt +++ b/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/FileUtilsBase.kt @@ -5,15 +5,21 @@ import java.io.FileNotFoundException abstract class FileUtilsBase : FileUtils { override fun openFile(file: File): Boolean { - if (!file.exists()) { - throw FileNotFoundException("$file not found") - } - return openFileInternal(file) + return openFileInternal( + file = preparedFile(file) + ) } override fun openFolderOfFile(file: File): Boolean { - val file = file.canonicalFile.absoluteFile - return openFolderOfFileInternal(file) + return openFolderOfFileInternal( + file = preparedFile(file) + ) + } + + override fun openFolder(folder: File): Boolean { + return openFolderInternal( + folder = preparedFile(folder) + ) } override fun canWriteInThisFolder(folder: String): Boolean { @@ -34,6 +40,15 @@ abstract class FileUtilsBase : FileUtils { return false } + private fun preparedFile(file: File): File { + val file = file.canonicalFile.absoluteFile + if (!file.exists()) { + throw FileNotFoundException("$file not found") + } + return file + } + protected abstract fun openFileInternal(file: File): Boolean protected abstract fun openFolderOfFileInternal(file: File): Boolean + protected abstract fun openFolderInternal(folder: File): Boolean } \ No newline at end of file diff --git a/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/JVMFileUtils.kt b/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/JVMFileUtils.kt index 22b3471..1ae1482 100644 --- a/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/JVMFileUtils.kt +++ b/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/JVMFileUtils.kt @@ -22,4 +22,12 @@ internal class JVMFileUtils : FileUtilsBase() { } return false } + + override fun openFolderInternal(folder: File): Boolean { + kotlin.runCatching { + Desktop.getDesktop().open(folder) + return true + } + return false + } } \ No newline at end of file diff --git a/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/LinuxFileUtils.kt b/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/LinuxFileUtils.kt index 2268a13..fe1bdf2 100644 --- a/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/LinuxFileUtils.kt +++ b/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/LinuxFileUtils.kt @@ -28,4 +28,7 @@ internal class LinuxFileUtils : FileUtilsBase() { return xdgOpenResult } + override fun openFolderInternal(folder: File): Boolean { + return execAndWait(arrayOf("xdg-open", folder.parent)) + } } \ No newline at end of file diff --git a/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/MacOsFileUtils.kt b/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/MacOsFileUtils.kt index cc53ac1..517c340 100644 --- a/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/MacOsFileUtils.kt +++ b/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/MacOsFileUtils.kt @@ -10,4 +10,9 @@ internal class MacOsFileUtils : FileUtilsBase() { override fun openFolderOfFileInternal(file: File): Boolean { return execAndWait(arrayOf("open", "-R", file.path)) } + + override fun openFolderInternal(folder: File): Boolean { + return execAndWait(arrayOf("open", folder.path)) + } + } \ No newline at end of file diff --git a/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/WindowsFileUtils.kt b/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/WindowsFileUtils.kt index d07c862..da4d783 100644 --- a/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/WindowsFileUtils.kt +++ b/shared/utils/src/main/kotlin/ir/amirab/util/osfileutil/WindowsFileUtils.kt @@ -10,4 +10,8 @@ internal class WindowsFileUtils : FileUtilsBase() { override fun openFolderOfFileInternal(file: File): Boolean { return execAndWait(arrayOf("cmd", "/c", "explorer.exe", "/select,", file.path)) } + + override fun openFolderInternal(folder: File): Boolean { + return execAndWait(arrayOf("cmd", "/c", "explorer.exe", folder.path)) + } } \ No newline at end of file