diff --git a/vripper-core/src/main/kotlin/me/mnlr/vripper/download/ImageDownloadContext.kt b/vripper-core/src/main/kotlin/me/mnlr/vripper/download/ImageDownloadContext.kt index 38a210b..5b90a5f 100644 --- a/vripper-core/src/main/kotlin/me/mnlr/vripper/download/ImageDownloadContext.kt +++ b/vripper-core/src/main/kotlin/me/mnlr/vripper/download/ImageDownloadContext.kt @@ -4,10 +4,11 @@ import org.apache.http.client.protocol.HttpClientContext import me.mnlr.vripper.SpringContext import me.mnlr.vripper.entities.ImageDownloadState import me.mnlr.vripper.entities.PostDownloadState +import me.mnlr.vripper.model.Settings import me.mnlr.vripper.repositories.ImageRepository import me.mnlr.vripper.repositories.PostDownloadStateRepository -class ImageDownloadContext(val imageId: Long) { +class ImageDownloadContext(val imageId: Long, val settings: Settings) { private val imageRepository: ImageRepository = SpringContext.getBean(ImageRepository::class.java) diff --git a/vripper-core/src/main/kotlin/me/mnlr/vripper/download/ImageDownloadRunnable.kt b/vripper-core/src/main/kotlin/me/mnlr/vripper/download/ImageDownloadRunnable.kt index 2da8b4b..40e8c35 100644 --- a/vripper-core/src/main/kotlin/me/mnlr/vripper/download/ImageDownloadRunnable.kt +++ b/vripper-core/src/main/kotlin/me/mnlr/vripper/download/ImageDownloadRunnable.kt @@ -30,7 +30,7 @@ class ImageDownloadRunnable( private val dataTransaction: DataTransaction = SpringContext.getBean(DataTransaction::class.java) private val pathService: PathService = SpringContext.getBean(PathService::class.java) - val context: ImageDownloadContext = ImageDownloadContext(imageInternalId) + val context: ImageDownloadContext = ImageDownloadContext(imageInternalId, settings) private val image: ImageDownloadState get() = context.image private var stopped: Boolean diff --git a/vripper-core/src/main/kotlin/me/mnlr/vripper/host/Host.kt b/vripper-core/src/main/kotlin/me/mnlr/vripper/host/Host.kt index 86cba90..03c8cbe 100644 --- a/vripper-core/src/main/kotlin/me/mnlr/vripper/host/Host.kt +++ b/vripper-core/src/main/kotlin/me/mnlr/vripper/host/Host.kt @@ -1,21 +1,19 @@ package me.mnlr.vripper.host -import org.apache.http.Header -import org.apache.http.client.HttpClient -import org.apache.http.client.methods.CloseableHttpResponse -import org.apache.http.client.protocol.HttpClientContext -import org.apache.http.util.EntityUtils -import org.w3c.dom.Document import me.mnlr.vripper.delegate.LoggerDelegate import me.mnlr.vripper.download.ImageDownloadContext import me.mnlr.vripper.exception.DownloadException import me.mnlr.vripper.exception.HostException import me.mnlr.vripper.getFileNameWithoutExtension import me.mnlr.vripper.services.* -import java.io.FileOutputStream +import org.apache.http.Header +import org.apache.http.client.HttpClient +import org.apache.http.client.methods.CloseableHttpResponse +import org.apache.http.client.protocol.HttpClientContext +import org.apache.http.util.EntityUtils +import org.w3c.dom.Document import java.nio.file.Files import java.nio.file.Path -import kotlin.io.path.pathString abstract class Host( private val httpService: HTTPService, @@ -84,10 +82,10 @@ abstract class Host( val mimeType = getImageMimeType(response.allHeaders) ?: throw HostException("Unsupported image type ${response.getFirstHeader("content-type")}") - val tempImage = Files.createTempFile("vripper", "tmp") + val tempImage = Files.createTempFile(Path.of(context.settings.downloadSettings.tempPath), "vripper_", ".tmp") return response.entity.content.use { inputStream -> try { - FileOutputStream(tempImage.pathString).use { fos -> + Files.newOutputStream(tempImage).use { fos -> val image = context.image image.total = response.entity.contentLength dataTransaction.update(image) diff --git a/vripper-core/src/main/kotlin/me/mnlr/vripper/model/Settings.kt b/vripper-core/src/main/kotlin/me/mnlr/vripper/model/Settings.kt index ae80e62..cd36c87 100644 --- a/vripper-core/src/main/kotlin/me/mnlr/vripper/model/Settings.kt +++ b/vripper-core/src/main/kotlin/me/mnlr/vripper/model/Settings.kt @@ -18,6 +18,7 @@ data class ViperSettings( data class DownloadSettings( var downloadPath: String = System.getProperty("user.home"), + var tempPath: String = System.getProperty("java.io.tmpdir"), var autoStart: Boolean = true, var autoQueueThreshold: Int = 1, var forceOrder: Boolean = false, diff --git a/vripper-gui/src/main/kotlin/me/mnlr/vripper/controller/SettingsController.kt b/vripper-gui/src/main/kotlin/me/mnlr/vripper/controller/SettingsController.kt index e8646f9..03a3915 100644 --- a/vripper-gui/src/main/kotlin/me/mnlr/vripper/controller/SettingsController.kt +++ b/vripper-gui/src/main/kotlin/me/mnlr/vripper/controller/SettingsController.kt @@ -37,6 +37,7 @@ class SettingsController : Controller() { settingsService.newSettings(Settings().apply { downloadSettings = DownloadSettings( downloadSettingsModel.downloadPath, + downloadSettingsModel.tempPath, downloadSettingsModel.autoStart, downloadSettingsModel.autoQueueThreshold, downloadSettingsModel.forceOrder, diff --git a/vripper-gui/src/main/kotlin/me/mnlr/vripper/model/settings/DownloadSettingsModel.kt b/vripper-gui/src/main/kotlin/me/mnlr/vripper/model/settings/DownloadSettingsModel.kt index 8f02e90..b583510 100644 --- a/vripper-gui/src/main/kotlin/me/mnlr/vripper/model/settings/DownloadSettingsModel.kt +++ b/vripper-gui/src/main/kotlin/me/mnlr/vripper/model/settings/DownloadSettingsModel.kt @@ -7,6 +7,9 @@ class DownloadSettingsModel { val downloadPathProperty = SimpleStringProperty() var downloadPath: String by downloadPathProperty + val tempPathProperty = SimpleStringProperty() + var tempPath: String by tempPathProperty + val autoStartProperty = SimpleBooleanProperty() var autoStart: Boolean by autoStartProperty diff --git a/vripper-gui/src/main/kotlin/me/mnlr/vripper/view/settings/DownloadSettingsView.kt b/vripper-gui/src/main/kotlin/me/mnlr/vripper/view/settings/DownloadSettingsView.kt index 8c05ee2..0a24b51 100644 --- a/vripper-gui/src/main/kotlin/me/mnlr/vripper/view/settings/DownloadSettingsView.kt +++ b/vripper-gui/src/main/kotlin/me/mnlr/vripper/view/settings/DownloadSettingsView.kt @@ -13,6 +13,7 @@ class DownloadSettingsView : View("Download Settings") { override fun onDock() { val downloadSettings = settingsController.findDownloadSettings() downloadSettingsModel.downloadPath = downloadSettings.downloadPath + downloadSettingsModel.tempPath = downloadSettings.tempPath downloadSettingsModel.autoStart = downloadSettings.autoStart downloadSettingsModel.autoQueueThreshold = downloadSettings.autoQueueThreshold downloadSettingsModel.forceOrder = downloadSettings.forceOrder @@ -38,6 +39,19 @@ class DownloadSettingsView : View("Download Settings") { } } } + field("Temporary Path") { + textfield(downloadSettingsModel.tempPathProperty) { + isEditable = false + } + button("Browse") { + action { + val directory = chooseDirectory(title = "Select temporary folder") + if(directory != null) { + downloadSettingsModel.tempPathProperty.set(directory.path) + } + } + } + } field("Auto start downloads") { checkbox { bind(downloadSettingsModel.autoStartProperty) diff --git a/vripper-web-ui/src/app/domain/settings.model.ts b/vripper-web-ui/src/app/domain/settings.model.ts index 77a0c58..db2d551 100644 --- a/vripper-web-ui/src/app/domain/settings.model.ts +++ b/vripper-web-ui/src/app/domain/settings.model.ts @@ -14,6 +14,7 @@ export interface ConnectionSettings { export interface DownloadSettings { downloadPath: string; + tempPath: string; autoStart: boolean; autoQueueThreshold: number; forceOrder: boolean; diff --git a/vripper-web-ui/src/app/settings/settings.component.html b/vripper-web-ui/src/app/settings/settings.component.html index 6781d17..f1b3ee6 100644 --- a/vripper-web-ui/src/app/settings/settings.component.html +++ b/vripper-web-ui/src/app/settings/settings.component.html @@ -22,6 +22,10 @@ name="downloadPath" required /> + + Temporary Path + +