diff options
Diffstat (limited to 'libs/samba/src/main/java')
4 files changed, 18 insertions, 11 deletions
diff --git a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/NativeSamba.kt b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/NativeSamba.kt index 360aaa9..e48268d 100644 --- a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/NativeSamba.kt +++ b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/NativeSamba.kt @@ -4,10 +4,13 @@ package org.the_jk.cleversync.io.samba import androidx.annotation.Keep +import kotlin.time.Duration +import kotlin.time.Duration.Companion.seconds @Keep internal object NativeSamba { - fun newContext(): Context = NativeContext(nativeContextNew()) + fun newContext(timeout: Duration = 30.seconds): Context = + NativeContext(nativeContextNew(timeout.inWholeSeconds.toInt())) interface Object { fun destroy() @@ -15,7 +18,7 @@ internal object NativeSamba { interface Context : Object { fun parseUrl(url: String): Url? - fun connect(url: Url): Boolean + fun connect(url: Url, credentials: SambaCredentials): Boolean fun lastError(): String fun openDir(path: String): Dir? } @@ -40,8 +43,8 @@ internal object NativeSamba { return if (ptr != 0L) NativeUrl(ptr) else null } - override fun connect(url: Url): Boolean { - return nativeContextConnect(ptr, (url as NativeUrl).get()) + override fun connect(url: Url, credentials: SambaCredentials): Boolean { + return nativeContextConnect(ptr, (url as NativeUrl).get(), credentials.username, credentials.password) } override fun lastError(): String { @@ -78,10 +81,10 @@ internal object NativeSamba { System.loadLibrary("samba") } - private external fun nativeContextNew(): Long + private external fun nativeContextNew(timeoutSeconds: Int): Long private external fun nativeContextDestroy(ptr: Long) private external fun nativeContextParseUrl(ptr: Long, url: String): Long - private external fun nativeContextConnect(ptr: Long, url: Long): Boolean + private external fun nativeContextConnect(ptr: Long, url: Long, username: String?, password: String?): Boolean private external fun nativeContextGetError(ptr: Long): String private external fun nativeContextOpenDir(ptr: Long, path: String): Long diff --git a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaConnection.kt b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaConnection.kt index 03d3a9e..05cc831 100644 --- a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaConnection.kt +++ b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaConnection.kt @@ -1,10 +1,10 @@ package org.the_jk.cleversync.io.samba -internal class SambaConnection(uri: String) { +internal class SambaConnection(uri: String, credentials: SambaCredentials) { private val context = NativeSamba.newContext() private val url = context.parseUrl(uri) - val connected = if (url != null) { context.connect(url) } else false + val connected = if (url != null) { context.connect(url, credentials) } else false val error: String get() = context.lastError() diff --git a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaCredentials.kt b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaCredentials.kt new file mode 100644 index 0000000..4b1518b --- /dev/null +++ b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaCredentials.kt @@ -0,0 +1,3 @@ +package org.the_jk.cleversync.io.samba + +data class SambaCredentials(val username: String?, val password: String?) diff --git a/libs/samba/src/main/java/org/the_jk/cleversync/samba/SambaTreeFactory.kt b/libs/samba/src/main/java/org/the_jk/cleversync/samba/SambaTreeFactory.kt index 3455de8..5c9bc4f 100644 --- a/libs/samba/src/main/java/org/the_jk/cleversync/samba/SambaTreeFactory.kt +++ b/libs/samba/src/main/java/org/the_jk/cleversync/samba/SambaTreeFactory.kt @@ -3,13 +3,14 @@ package org.the_jk.cleversync.samba import org.the_jk.cleversync.io.ModifiableTree import org.the_jk.cleversync.io.Tree import org.the_jk.cleversync.io.samba.SambaConnection +import org.the_jk.cleversync.io.samba.SambaCredentials import org.the_jk.cleversync.io.samba.SambaTree object SambaTreeFactory { - fun tree(uri: String): Result<Tree> = modifiableTree(uri) + fun tree(uri: String, credentials: SambaCredentials): Result<Tree> = modifiableTree(uri, credentials) - fun modifiableTree(uri: String): Result<ModifiableTree> { - val connection = SambaConnection(uri) + fun modifiableTree(uri: String, credentials: SambaCredentials): Result<ModifiableTree> { + val connection = SambaConnection(uri, credentials) if (!connection.connected) return Result.failure(Exception(connection.error)) val root = connection.openDir("") ?: return Result.failure(Exception(connection.error)) return Result.success(SambaTree(connection, root)) |
