Skip to content

Commit

Permalink
Fix in-memory pack generation on Windows on secondary drives
Browse files Browse the repository at this point in the history
Fixes #244
  • Loading branch information
NichtStudioCode committed May 3, 2023
1 parent db88df7 commit c5de6f7
Showing 1 changed file with 8 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package xyz.xenondevs.nova.data.resources.builder

import com.google.common.jimfs.Configuration
import com.google.common.jimfs.Jimfs
import com.google.gson.JsonObject
import kotlinx.coroutines.runBlocking
import xyz.xenondevs.commons.provider.Provider
import xyz.xenondevs.commons.provider.immutable.combinedProvider
import xyz.xenondevs.commons.provider.immutable.flatten
import xyz.xenondevs.commons.provider.immutable.map
import xyz.xenondevs.commons.provider.immutable.orElse
import xyz.xenondevs.downloader.ExtractionMode
import xyz.xenondevs.downloader.MinecraftAssetsDownloader
import xyz.xenondevs.nova.LOGGER
Expand Down Expand Up @@ -39,7 +41,6 @@ import java.nio.file.FileSystem
import java.nio.file.FileSystems
import java.nio.file.Path
import kotlin.io.path.CopyActionResult
import kotlin.io.path.absolutePathString
import kotlin.io.path.copyToRecursively
import kotlin.io.path.createDirectories
import kotlin.io.path.exists
Expand Down Expand Up @@ -83,7 +84,7 @@ internal class ResourcePackBuilder {

companion object {

private val FS_PROVIDER: Provider<FileSystem> = IN_MEMORY_PROVIDER.map { if (it) Jimfs.newFileSystem() else FileSystems.getDefault() }
private var JIMFS_PROVIDER: Provider<FileSystem?> = IN_MEMORY_PROVIDER.map { if (it) Jimfs.newFileSystem(Configuration.unix()) else null }

//<editor-fold desc="never in memory">
val RESOURCE_PACK_FILE: File = File(NOVA.dataFolder, "resource_pack/ResourcePack.zip")
Expand All @@ -94,7 +95,7 @@ internal class ResourcePackBuilder {
//</editor-fold>

//<editor-fold desc="potentially in memory">
private val RESOURCE_PACK_BUILD_DIR_PROVIDER: Provider<Path> = FS_PROVIDER.map { it.getPath(RESOURCE_PACK_DIR.resolve(".build/").absolutePathString()) }
private val RESOURCE_PACK_BUILD_DIR_PROVIDER: Provider<Path> = JIMFS_PROVIDER.map { it.rootDirectories.first() }.orElse(RESOURCE_PACK_DIR.resolve(".build"))
private val TEMP_BASE_PACKS_DIR_PROVIDER: Provider<Path> = RESOURCE_PACK_BUILD_DIR_PROVIDER.map { it.resolve("base_packs") }
private val PACK_DIR_PROVIDER: Provider<Path> = RESOURCE_PACK_BUILD_DIR_PROVIDER.map { it.resolve("pack") }
private val ASSETS_DIR_PROVIDER: Provider<Path> = PACK_DIR_PROVIDER.map { it.resolve("assets") }
Expand Down Expand Up @@ -249,9 +250,10 @@ internal class ResourcePackBuilder {
}

private fun deleteBuildDir() {
if (IN_MEMORY) {
FS_PROVIDER.value.close()
FS_PROVIDER.update() // creates a new jimfs file system
val provider = JIMFS_PROVIDER.value
if (provider != null) {
provider.close()
JIMFS_PROVIDER.update() // creates a new jimfs file system
} else {
RESOURCE_PACK_BUILD_DIR.toFile().deleteRecursively()
}
Expand Down

0 comments on commit c5de6f7

Please sign in to comment.