From 73659a2a10241a1ff687aaaab085250d0188a8ad Mon Sep 17 00:00:00 2001 From: Abdelilah El Aissaoui Date: Sat, 30 Oct 2021 19:06:03 +0200 Subject: [PATCH] Added support for zenity dialogs in linux --- src/main/kotlin/app/extensions/Shell.kt | 23 ++++++++++++++++++ src/main/kotlin/app/ui/SystemDialogs.kt | 31 +++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 src/main/kotlin/app/extensions/Shell.kt diff --git a/src/main/kotlin/app/extensions/Shell.kt b/src/main/kotlin/app/extensions/Shell.kt new file mode 100644 index 0000000..d517e9e --- /dev/null +++ b/src/main/kotlin/app/extensions/Shell.kt @@ -0,0 +1,23 @@ +package app.extensions + +import java.util.* + +fun runCommand(command: String): String? { + return try { + var result: String? + Runtime.getRuntime().exec(command).inputStream.use { inputStream -> + Scanner(inputStream).useDelimiter("\\A").use { s -> + result = if (s.hasNext()) + s.next() + else + null + } + } + + result + } catch (ex: Exception) { + ex.printStackTrace() + null + } + +} \ No newline at end of file diff --git a/src/main/kotlin/app/ui/SystemDialogs.kt b/src/main/kotlin/app/ui/SystemDialogs.kt index 6d88ddd..728a1f3 100644 --- a/src/main/kotlin/app/ui/SystemDialogs.kt +++ b/src/main/kotlin/app/ui/SystemDialogs.kt @@ -1,10 +1,41 @@ +import app.AppStateManager +import app.extensions.runCommand import app.git.GitManager +import java.io.IOException +import java.util.* import javax.swing.JFileChooser + fun openRepositoryDialog(gitManager: GitManager) { + val os = System.getProperty("os.name") val appStateManager = gitManager.appStateManager val latestDirectoryOpened = appStateManager.latestOpenedRepositoryPath + + if(os.lowercase() == "linux") { + val checkZenityInstalled = runCommand("which zenity 2>/dev/null") + val isZenityInstalled = !checkZenityInstalled.isNullOrEmpty() + + if(isZenityInstalled) { + val openDirectory = runCommand( + "zenity --file-selection --title=\"Select your git directory\" --directory --filename=\"$latestDirectoryOpened\"" + )?.replace("\n", "") + + if(!openDirectory.isNullOrEmpty()) + gitManager.openRepository(openDirectory) + } else + openRepositoryDialog(gitManager, latestDirectoryOpened) + } else { + openRepositoryDialog(gitManager, latestDirectoryOpened) + } + +} + +private fun openRepositoryDialog( + gitManager: GitManager, + latestDirectoryOpened: String +) { + val fileChooser = if (latestDirectoryOpened.isEmpty()) JFileChooser() else