From a2bfd75dee9b4952771a66c555ba1d920a072ae9 Mon Sep 17 00:00:00 2001 From: Pacien TRAN-GIRARD Date: Tue, 11 Jul 2017 14:49:08 +0200 Subject: Implement create and join network dialogs + refactoring --- .../java/org/pacien/tincapp/commands/Executor.kt | 7 +++++- .../java/org/pacien/tincapp/commands/TincApp.kt | 29 ++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/org/pacien/tincapp/commands/TincApp.kt (limited to 'app/src/main/java/org/pacien/tincapp/commands') diff --git a/app/src/main/java/org/pacien/tincapp/commands/Executor.kt b/app/src/main/java/org/pacien/tincapp/commands/Executor.kt index eccd2f9..38c2cb5 100644 --- a/app/src/main/java/org/pacien/tincapp/commands/Executor.kt +++ b/app/src/main/java/org/pacien/tincapp/commands/Executor.kt @@ -1,6 +1,8 @@ package org.pacien.tincapp.commands +import android.os.AsyncTask import java8.util.concurrent.CompletableFuture +import java8.util.function.Supplier import java.io.BufferedReader import java.io.IOException import java.io.InputStream @@ -35,10 +37,13 @@ internal object Executor { throw CommandExecutionException(e.message ?: "Could not start process.") } - return CompletableFuture.supplyAsync> { + return supplyAsyncTask> { if (proc.waitFor() == 0) read(proc.inputStream) else throw CommandExecutionException(read(proc.errorStream).lastOrNull() ?: "Non-zero exit status.") } } + fun runAsyncTask(r: () -> Unit) = CompletableFuture.runAsync(Runnable(r), AsyncTask.THREAD_POOL_EXECUTOR)!! + fun supplyAsyncTask(s: () -> U) = CompletableFuture.supplyAsync(Supplier(s), AsyncTask.THREAD_POOL_EXECUTOR)!! + } diff --git a/app/src/main/java/org/pacien/tincapp/commands/TincApp.kt b/app/src/main/java/org/pacien/tincapp/commands/TincApp.kt new file mode 100644 index 0000000..108b27d --- /dev/null +++ b/app/src/main/java/org/pacien/tincapp/commands/TincApp.kt @@ -0,0 +1,29 @@ +package org.pacien.tincapp.commands + +import java8.util.concurrent.CompletableFuture +import org.pacien.tincapp.commands.Executor.runAsyncTask +import org.pacien.tincapp.context.AppPaths +import org.pacien.tincapp.data.VpnInterfaceConfiguration + +/** + * @author pacien + */ +object TincApp { + + private val SCRIPT_SUFFIXES = listOf("-up", "-down", "-created", "-accepted") + private val STATIC_SCRIPTS = listOf("tinc", "host", "subnet", "invitation").flatMap { s -> SCRIPT_SUFFIXES.map { s + it } } + + private fun listScripts(netName: String) = AppPaths.confDir(netName).listFiles { f -> f.name in STATIC_SCRIPTS } + + AppPaths.hostsDir(netName).listFiles { f -> SCRIPT_SUFFIXES.none { f.name.endsWith(it) } } + + fun removeScripts(netName: String): CompletableFuture = runAsyncTask { + listScripts(netName).forEach { it.delete() } + } + + fun generateIfaceCfg(netName: String): CompletableFuture = runAsyncTask { + VpnInterfaceConfiguration + .fromInvitation(AppPaths.invitationFile(netName)) + .write(AppPaths.netConfFile(netName)) + } + +} -- cgit v1.2.3