1111 */
1212package de.gesellix.docker.remote.api.client
1313
14+ import com.squareup.moshi.Moshi
1415import de.gesellix.docker.engine.DockerClientConfig
1516import de.gesellix.docker.engine.RequestMethod.*
1617import de.gesellix.docker.remote.api.ContainerChangeResponseItem
@@ -40,9 +41,12 @@ import kotlinx.coroutines.flow.collect
4041import kotlinx.coroutines.launch
4142import kotlinx.coroutines.runBlocking
4243import kotlinx.coroutines.withTimeout
44+ import okio.source
45+ import java.io.InputStream
4346import java.net.HttpURLConnection.HTTP_NOT_FOUND
4447import java.net.HttpURLConnection.HTTP_NOT_MODIFIED
4548import java.net.Proxy
49+ import java.util.*
4650
4751class ContainerApi (dockerClientConfig : DockerClientConfig = defaultClientConfig, proxy : Proxy ? ) : ApiClient(dockerClientConfig, proxy) {
4852 constructor (dockerClientConfig: DockerClientConfig = defaultClientConfig) : this (dockerClientConfig, null )
@@ -66,15 +70,15 @@ class ContainerApi(dockerClientConfig: DockerClientConfig = defaultClientConfig,
6670 * @throws ServerException If the API returns a server error response
6771 */
6872 @Throws(UnsupportedOperationException ::class , ClientException ::class , ServerException ::class )
69- fun containerArchive (id : String , path : String ) {
73+ fun containerArchive (id : String , path : String ): java.io. File {
7074 val localVariableConfig = containerArchiveRequestConfig(id = id, path = path)
7175
72- val localVarResponse = request<Any ?>(
76+ val localVarResponse = request< java.io. File ? > (
7377 localVariableConfig
7478 )
7579
7680 return when (localVarResponse.responseType) {
77- ResponseType .Success -> Unit
81+ ResponseType .Success -> (localVarResponse as Success < * >).data as java.io. File
7882 ResponseType .Informational -> throw UnsupportedOperationException (" Client does not support Informational responses." )
7983 ResponseType .Redirection -> throw UnsupportedOperationException (" Client does not support Redirection responses." )
8084 ResponseType .ClientError -> {
@@ -123,15 +127,23 @@ class ContainerApi(dockerClientConfig: DockerClientConfig = defaultClientConfig,
123127 * @throws ServerException If the API returns a server error response
124128 */
125129 @Throws(UnsupportedOperationException ::class , ClientException ::class , ServerException ::class )
126- fun containerArchiveInfo (id : String , path : String ) {
130+ fun containerArchiveInfo (id : String , path : String ): Any? {
127131 val localVariableConfig = containerArchiveInfoRequestConfig(id = id, path = path)
128132
129133 val localVarResponse = request<Any ?>(
130134 localVariableConfig
131135 )
132136
133- return when (localVarResponse.responseType) {
134- ResponseType .Success -> Unit
137+ when (localVarResponse.responseType) {
138+ ResponseType .Success -> {
139+ val stats = localVarResponse.headers[" X-Docker-Container-Path-Stat" .lowercase()]?.first()
140+ return if (stats == null ) {
141+ null
142+ } else {
143+ val jsonAdapter = Moshi .Builder ().build().adapter(Map ::class .java)
144+ jsonAdapter.fromJson(String (Base64 .getDecoder().decode(stats)))
145+ }
146+ }
135147 ResponseType .Informational -> throw UnsupportedOperationException (" Client does not support Informational responses." )
136148 ResponseType .Redirection -> throw UnsupportedOperationException (" Client does not support Redirection responses." )
137149 ResponseType .ClientError -> {
@@ -441,7 +453,8 @@ class ContainerApi(dockerClientConfig: DockerClientConfig = defaultClientConfig,
441453 */
442454 @Suppress(" UNCHECKED_CAST" )
443455 @Throws(UnsupportedOperationException ::class , ClientException ::class , ServerException ::class )
444- fun containerCreate (body : ContainerCreateRequest , name : String? ): ContainerCreateResponse {
456+ @JvmOverloads
457+ fun containerCreate (body : ContainerCreateRequest , name : String? = ""): ContainerCreateResponse {
445458 val localVariableConfig = containerCreateRequestConfig(body = body, name = name)
446459
447460 val localVarResponse = request<ContainerCreateResponse >(
@@ -1653,7 +1666,7 @@ class ContainerApi(dockerClientConfig: DockerClientConfig = defaultClientConfig,
16531666 * @throws ServerException If the API returns a server error response
16541667 */
16551668 @Throws(UnsupportedOperationException ::class , ClientException ::class , ServerException ::class )
1656- fun putContainerArchive (id : String , path : String , inputStream : java.io. File , noOverwriteDirNonDir : String? , copyUIDGID : String? ) {
1669+ fun putContainerArchive (id : String , path : String , inputStream : InputStream , noOverwriteDirNonDir : String? , copyUIDGID : String? ) {
16571670 val localVariableConfig = putContainerArchiveRequestConfig(id = id, path = path, inputStream = inputStream, noOverwriteDirNonDir = noOverwriteDirNonDir, copyUIDGID = copyUIDGID)
16581671
16591672 val localVarResponse = request<Any ?>(
@@ -1685,8 +1698,8 @@ class ContainerApi(dockerClientConfig: DockerClientConfig = defaultClientConfig,
16851698 * @param copyUIDGID If `1`, `true`, then it will copy UID/GID maps to the dest file or dir (optional)
16861699 * @return RequestConfig
16871700 */
1688- fun putContainerArchiveRequestConfig (id : String , path : String , inputStream : java.io. File , noOverwriteDirNonDir : String? , copyUIDGID : String? ): RequestConfig {
1689- val localVariableBody: Any? = inputStream
1701+ fun putContainerArchiveRequestConfig (id : String , path : String , inputStream : InputStream , noOverwriteDirNonDir : String? , copyUIDGID : String? ): RequestConfig {
1702+ val localVariableBody: Any = inputStream.source()
16901703 val localVariableQuery: MultiValueMap = mutableMapOf<String , List <String >>()
16911704 .apply {
16921705 put(" path" , listOf (path))
0 commit comments