diff options
| author | Joel Klinghed <the_jk@spawned.biz> | 2024-08-22 00:08:33 +0200 |
|---|---|---|
| committer | Joel Klinghed <the_jk@spawned.biz> | 2024-08-22 00:08:33 +0200 |
| commit | d41f82b99e405e1b6ef2e75d32efa31d91893824 (patch) | |
| tree | 199df84265f889642f8c9d19a9e94a3ea4de6dbd /libs/samba/src/main | |
| parent | 9b7f943969e17273ac9bd78bb238ffbea3865993 (diff) | |
Add AutoClosable to Tree interface
Some backends have resources to free, such as the SambaTree.
Diffstat (limited to 'libs/samba/src/main')
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, "")) } } |
