summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/io/src/main/java/org/the_jk/cleversync/io/Tree.kt2
-rw-r--r--libs/local/src/main/java/org/the_jk/cleversync/io/local/PathTree.kt1
-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
5 files changed, 25 insertions, 4 deletions
diff --git a/libs/io/src/main/java/org/the_jk/cleversync/io/Tree.kt b/libs/io/src/main/java/org/the_jk/cleversync/io/Tree.kt
index b6f2d54..69980c2 100644
--- a/libs/io/src/main/java/org/the_jk/cleversync/io/Tree.kt
+++ b/libs/io/src/main/java/org/the_jk/cleversync/io/Tree.kt
@@ -2,6 +2,6 @@ package org.the_jk.cleversync.io
import android.content.res.Resources
-interface Tree : Directory {
+interface Tree : Directory, AutoCloseable {
fun description(resources: Resources): CharSequence
}
diff --git a/libs/local/src/main/java/org/the_jk/cleversync/io/local/PathTree.kt b/libs/local/src/main/java/org/the_jk/cleversync/io/local/PathTree.kt
index 23442a1..409701c 100644
--- a/libs/local/src/main/java/org/the_jk/cleversync/io/local/PathTree.kt
+++ b/libs/local/src/main/java/org/the_jk/cleversync/io/local/PathTree.kt
@@ -7,4 +7,5 @@ import java.nio.file.Path
internal class PathTree(root: Path) : PathDirectory(root, PathWatcher()), ModifiableTree {
override fun description(resources: Resources) = resources.getString(R.string.local_directory)
+ override fun close() = Unit
}
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, ""))
}
}