Skip to content

Commit d9c40fd

Browse files
Implemented downloading and uploading.
1 parent 6185d25 commit d9c40fd

18 files changed

Lines changed: 185 additions & 91 deletions

File tree

Demos/Ktor/comparison-ktor/src/main/kotlin/com/groupdocs/ui/Defaults.kt

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,14 @@ interface Defaults {
1111

1212
interface Comparison {
1313
enum class FilesProviderType {
14-
LOCAL, GOOGLE, DROPBOX
14+
LOCAL
1515
}
1616

1717
companion object {
18-
const val DEFAULT_PRELOAD_RESULT_PAGE_COUNT = 2
1918
const val DEFAULT_PREVIEW_PAGE_WIDTH = 768
2019
const val DEFAULT_PREVIEW_PAGE_RATIO = 1.3f
2120
val DEFAULT_FILES_PROVIDER_TYPE = FilesProviderType.LOCAL
22-
val DEFAULT_CACHE_DIRECTORY = System.getProperty("java.io.tmpdir")
23-
val DEFAULT_TEMP_DIRECTORY = System.getProperty("java.io.tmpdir")
21+
val DEFAULT_TEMP_DIRECTORY: String? = System.getProperty("java.io.tmpdir")
2422
}
2523
}
2624

@@ -30,16 +28,4 @@ interface Defaults {
3028
const val DEFAULT_RESULT_DIRECTORY = "ResultFiles"
3129
}
3230
}
33-
34-
interface Google {
35-
enum class AccessType {
36-
OFFLINE, ONLINE
37-
}
38-
39-
companion object {
40-
const val DEFAULT_LOCAL_SERVER_RECEIVER_PORT = 8888
41-
val DEFAULT_ACCESS_TYPE = AccessType.OFFLINE
42-
const val DEFAULT_CREDENTIALS_PATH = "credentials.json"
43-
}
44-
}
4531
}

Demos/Ktor/comparison-ktor/src/main/kotlin/com/groupdocs/ui/Module.kt

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,35 +26,32 @@ fun Application.module() {
2626
level = Level.DEBUG
2727
filter { call -> call.request.path().startsWith("/comparison") }
2828
}
29-
install(ContentNegotiation) { gson {
30-
serializeNulls()
31-
}}
29+
install(ContentNegotiation) {
30+
gson {
31+
serializeNulls()
32+
}
33+
}
3234
install(DefaultHeaders) {
3335
header("X-Engine", "Ktor") // will send this header with each response
3436
}
3537
install(StatusPages) {
3638
generalStatusPages()
3739
internalStatusPages()
3840
}
39-
// data class MySession(val count: Int = 0)
40-
// install(Sessions) {
41-
// cookie<MySession>("MY_SESSION") {
42-
// cookie.extensions["SameSite"] = "lax"
43-
// }
44-
// }
45-
4641

4742
install(Routing) {
4843
static("/static") {
4944
resources("static")
5045
}
51-
homeModule()
52-
configModule()
53-
treeModule()
54-
downloadModule()
55-
uploadModule()
56-
compareModule()
57-
pageModule()
58-
descriptionModule()
46+
route("/comparison") {
47+
homeModule()
48+
configModule()
49+
treeModule()
50+
descriptionModule()
51+
compareModule()
52+
downloadModule()
53+
uploadModule()
54+
pageModule()
55+
}
5956
}
6057
}

Demos/Ktor/comparison-ktor/src/main/kotlin/com/groupdocs/ui/config/ApplicationConfig.kt

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,10 @@ data class ApplicationConfig(
1313

1414
@kotlinx.serialization.Serializable
1515
data class Application(
16-
private val licensePath: String = "",
17-
val hostAddress: String = "",
16+
private val licensePath: String = ""
1817
) {
19-
val licensePathOrNull: String?
20-
get() = licensePath.ifBlank { null }
18+
val licensePathOrNull: String
19+
get() = licensePath.ifBlank { Defaults.Application.DEFAULT_LICENSE_PATH }
2120
}
2221

2322
@kotlinx.serialization.Serializable
@@ -28,8 +27,7 @@ data class Common(
2827
val print: Boolean = false,
2928
val browse: Boolean = false,
3029
val rewrite: Boolean = false,
31-
val enableRightClick: Boolean = false,
32-
val sessionTimeout: Int = 0
30+
val enableRightClick: Boolean = false
3331
)
3432

3533
@kotlinx.serialization.Serializable
@@ -49,7 +47,7 @@ data class Comparison(
4947
else -> Defaults.Comparison.DEFAULT_FILES_PROVIDER_TYPE
5048
}
5149
val tempDirectoryOrDefault: String
52-
get() = tempDirectory.ifBlank { Defaults.Comparison.DEFAULT_TEMP_DIRECTORY }
50+
get() = tempDirectory.ifBlank { Defaults.Comparison.DEFAULT_TEMP_DIRECTORY } ?: throw IllegalStateException("Can't get temp directory!")
5351
val previewPageWidthOrDefault: Int
5452
get() = if (previewPageWidth == 0) Defaults.Comparison.DEFAULT_PREVIEW_PAGE_WIDTH else previewPageWidth
5553
val previewPageRatioOrDefault: Float

Demos/Ktor/comparison-ktor/src/main/kotlin/com/groupdocs/ui/di/ModulesInjection.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@ import com.groupdocs.ui.modules.tree.TreeController
1616
import com.groupdocs.ui.modules.tree.TreeControllerImpl
1717
import com.groupdocs.ui.modules.upload.UploadController
1818
import com.groupdocs.ui.modules.upload.UploadControllerImpl
19-
import com.groupdocs.ui.usecase.AreFilesSupportedUseCase
20-
import com.groupdocs.ui.usecase.CompareDocumentsUseCase
21-
import com.groupdocs.ui.usecase.GetLocalFilesUseCase
22-
import com.groupdocs.ui.usecase.RetrieveLocalFilePagesStreamUseCase
19+
import com.groupdocs.ui.usecase.*
2320
import org.koin.core.module.dsl.bind
2421
import org.koin.core.module.dsl.singleOf
2522
import org.koin.dsl.module
@@ -40,6 +37,7 @@ object ModulesInjection {
4037
singleOf(::RetrieveLocalFilePagesStreamUseCase)
4138
singleOf(::AreFilesSupportedUseCase)
4239
singleOf(::CompareDocumentsUseCase)
40+
singleOf(::SaveStreamToFilesDirectoryUseCase)
4341
}
4442
val managerBeans = module {
4543
singleOf(::PathManagerImpl) { bind<PathManager>() }

Demos/Ktor/comparison-ktor/src/main/kotlin/com/groupdocs/ui/model/DownloadResponse.kt

Lines changed: 0 additions & 5 deletions
This file was deleted.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package com.groupdocs.ui.model
22

33
data class UploadResponse(
4-
val id: Int
4+
val guid: String
55
)

Demos/Ktor/comparison-ktor/src/main/kotlin/com/groupdocs/ui/modules/compare/CompareModule.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ import io.ktor.server.routing.*
99
import org.koin.ktor.ext.inject
1010

1111

12-
fun Routing.compareModule() {
12+
fun Route.compareModule() {
1313
val compareController by inject<CompareController>()
1414

15-
post("/comparison/compare") {
15+
post("/compare") {
1616
val request = call.receive<CompareRequest>()
1717
val response = compareController.compare(request)
1818
call.respond(HttpStatusCode.OK, response)

Demos/Ktor/comparison-ktor/src/main/kotlin/com/groupdocs/ui/modules/config/ConfigModule.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ import io.ktor.server.routing.*
77
import org.koin.ktor.ext.inject
88

99

10-
fun Routing.configModule() {
10+
fun Route.configModule() {
1111
val configController by inject<ConfigController>()
1212

13-
get("/comparison/loadConfig") {
13+
get("/loadConfig") {
1414
val response = configController.config()
1515
call.respond(HttpStatusCode.OK, response)
1616
}

Demos/Ktor/comparison-ktor/src/main/kotlin/com/groupdocs/ui/modules/description/DescriptionModule.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ import io.ktor.server.routing.*
99
import org.koin.ktor.ext.inject
1010

1111

12-
fun Routing.descriptionModule() {
12+
fun Route.descriptionModule() {
1313
val descriptionController by inject<DescriptionController>()
1414

15-
post("/comparison/loadDocumentDescription") {
15+
post("/loadDocumentDescription") {
1616
val request = call.receive<DescriptionRequest>()
1717
val response = descriptionController.description(request)
1818
call.respond(HttpStatusCode.OK, response)
Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,27 @@
11
package com.groupdocs.ui.modules.download
22

3-
import com.groupdocs.ui.model.DownloadResponse
3+
import com.groupdocs.ui.manager.PathManager
44
import com.groupdocs.ui.modules.BaseController
5+
import kotlinx.coroutines.Dispatchers
6+
import kotlinx.coroutines.withContext
57
import org.koin.core.component.KoinComponent
8+
import java.io.OutputStream
9+
import java.nio.file.Files
610

7-
class DownloadControllerImpl : BaseController(), DownloadController, KoinComponent {
8-
override suspend fun download(): DownloadResponse {
9-
return DownloadResponse(123)
11+
class DownloadControllerImpl(
12+
private val pathManager: PathManager
13+
) : BaseController(), DownloadController, KoinComponent {
14+
override suspend fun download(fileName: String, outputStream: OutputStream) {
15+
val resultPath = pathManager.filesDirectory.resolve(fileName).toAbsolutePath().normalize().toString()
16+
val resultDocumentPath = pathManager.assertPathIsInsideFilesDirectory(resultPath)
17+
18+
withContext(Dispatchers.IO) {
19+
Files.copy(resultDocumentPath, outputStream)
20+
}
1021
}
1122

1223
}
1324

1425
interface DownloadController {
15-
suspend fun download(): DownloadResponse
26+
suspend fun download(fileName: String, outputStream: OutputStream)
1627
}

0 commit comments

Comments
 (0)