summaryrefslogtreecommitdiff
path: root/libs/samba/src/main/java/org/the_jk/cleversync
diff options
context:
space:
mode:
authorJoel Klinghed <the_jk@spawned.biz>2024-08-22 00:08:33 +0200
committerJoel Klinghed <the_jk@spawned.biz>2024-08-22 00:08:33 +0200
commitd41f82b99e405e1b6ef2e75d32efa31d91893824 (patch)
tree199df84265f889642f8c9d19a9e94a3ea4de6dbd /libs/samba/src/main/java/org/the_jk/cleversync
parent9b7f943969e17273ac9bd78bb238ffbea3865993 (diff)
Add AutoClosable to Tree interface
Some backends have resources to free, such as the SambaTree.
Diffstat (limited to 'libs/samba/src/main/java/org/the_jk/cleversync')
-rw-r--r--libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaConnection.kt16
-rw-r--r--libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaTree.kt4
-rw-r--r--libs/samba/src/main/java/org/the_jk/cleversync/samba/SambaTreeFactory.kt6
3 files changed, 23 insertions, 3 deletions
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 04aff44..0b62b61 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
@@ -3,11 +3,23 @@ package org.the_jk.cleversync.io.samba
internal class SambaConnection(uri: String, credentials: SambaCredentials) {
private val context = NativeSamba.newContext()
private val url = context.parseUrl(uri)
+ private var destroyed = false
- val connected = if (url != null) { context.connect(url, credentials) } else false
+ val connected = if (url != null && !destroyed) { context.connect(url, credentials) } else false
val error: String
- get() = context.lastError()
+ get() = if (destroyed) "[destroyed]" else context.lastError()
+
+ protected fun finalize() {
+ destroy()
+ }
+
+ fun destroy() {
+ if (destroyed) return
+ url?.destroy()
+ context.destroy()
+ destroyed = true
+ }
fun openDir(path: String): NativeSamba.Dir? =
if (connected) context.openDir(join(url!!.path(), path)) else null
diff --git a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaTree.kt b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaTree.kt
index 762a61f..3667a74 100644
--- a/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaTree.kt
+++ b/libs/samba/src/main/java/org/the_jk/cleversync/io/samba/SambaTree.kt
@@ -7,4 +7,8 @@ internal class SambaTree(conn: SambaConnection, root: String) : SambaDirectory(c
override fun description(resources: Resources): CharSequence {
TODO("Not yet implemented")
}
+
+ override fun close() {
+ conn.destroy()
+ }
}
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 ebf47d2..23b9769 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
@@ -11,7 +11,11 @@ object SambaTreeFactory {
fun modifiableTree(uri: String, credentials: SambaCredentials): Result<ModifiableTree> {
val connection = SambaConnection(uri, credentials)
- if (!connection.connected) return Result.failure(Exception(connection.error))
+ if (!connection.connected) {
+ val e = Exception(connection.error)
+ connection.destroy()
+ return Result.failure(e)
+ }
return Result.success(SambaTree(connection, ""))
}
}