User: joe Date: 06 Dec 25 17:10 Revision: d411716d4cbb2ab19540c867dc5dc31d016feb3f Summary: Fix slow operations errors in local templates TeamCity URL: http://ci.mcdev.io:80/viewModification.html?tab=vcsModificationFiles&modId=10339&personal=false Index: src/main/kotlin/creator/custom/providers/BuiltinTemplateProvider.kt =================================================================== --- src/main/kotlin/creator/custom/providers/BuiltinTemplateProvider.kt (revision 84af97366c71b8e61aeefbf190755b9abdca212a) +++ src/main/kotlin/creator/custom/providers/BuiltinTemplateProvider.kt (revision d411716d4cbb2ab19540c867dc5dc31d016feb3f) @@ -33,6 +33,8 @@ import com.intellij.ui.dsl.builder.bindSelected import com.intellij.ui.dsl.builder.panel import javax.swing.JComponent +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext class BuiltinTemplateProvider : RemoteTemplateProvider() { @@ -59,16 +61,16 @@ override suspend fun loadTemplates( context: WizardContext, repo: MinecraftSettings.TemplateRepo - ): Collection { + ): Collection = withContext(Dispatchers.IO) { val remoteTemplates = doLoadTemplates(context, repo, builtinTemplatesInnerPath) if (remoteTemplates.isNotEmpty()) { - return remoteTemplates + return@withContext remoteTemplates } val repoRoot = builtinTemplatesPath.virtualFile - ?: return emptyList() + ?: return@withContext emptyList() repoRoot.refreshSync(context.modalityState) - return TemplateProvider.findTemplates(context.modalityState, repoRoot) + TemplateProvider.findTemplates(context.modalityState, repoRoot) } override fun setupConfigUi( Index: src/main/kotlin/creator/custom/providers/LocalTemplateProvider.kt =================================================================== --- src/main/kotlin/creator/custom/providers/LocalTemplateProvider.kt (revision 84af97366c71b8e61aeefbf190755b9abdca212a) +++ src/main/kotlin/creator/custom/providers/LocalTemplateProvider.kt (revision d411716d4cbb2ab19540c867dc5dc31d016feb3f) @@ -39,6 +39,8 @@ import java.nio.file.Path import javax.swing.JComponent import kotlin.io.path.absolute +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext class LocalTemplateProvider : TemplateProvider { @@ -49,13 +51,13 @@ override suspend fun loadTemplates( context: WizardContext, repo: MinecraftSettings.TemplateRepo - ): Collection { + ): Collection = withContext(Dispatchers.IO) { val rootPath = Path.of(repo.data.trim()).absolute() val repoRoot = rootPath.virtualFile - ?: return emptyList() + ?: return@withContext emptyList() val modalityState = context.modalityState repoRoot.refreshSync(modalityState) - return TemplateProvider.findTemplates(modalityState, repoRoot) + TemplateProvider.findTemplates(modalityState, repoRoot) } override fun setupConfigUi( Index: src/main/kotlin/creator/custom/providers/TemplateProvider.kt =================================================================== --- src/main/kotlin/creator/custom/providers/TemplateProvider.kt (revision 84af97366c71b8e61aeefbf190755b9abdca212a) +++ src/main/kotlin/creator/custom/providers/TemplateProvider.kt (revision d411716d4cbb2ab19540c867dc5dc31d016feb3f) @@ -47,6 +47,8 @@ import java.util.ResourceBundle import java.util.concurrent.TimeUnit import javax.swing.JComponent +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext import org.jetbrains.concurrency.runAsync /** @@ -75,12 +77,12 @@ fun getAllKeys() = EP_NAME.extensionList.mapNotNull { it.key } - fun findTemplates( + suspend fun findTemplates( modalityState: ModalityState, repoRoot: VirtualFile, templates: MutableList = mutableListOf(), bundle: ResourceBundle? = loadMessagesBundle(modalityState, repoRoot) - ): List { + ): List = withContext(Dispatchers.IO) { val templatesToLoad = mutableListOf() val visitor = object : VirtualFileVisitor() { override fun visitFile(file: VirtualFile): Boolean { @@ -113,7 +115,7 @@ } } - return templates + templates } fun loadMessagesBundle(modalityState: ModalityState, repoRoot: VirtualFile): ResourceBundle? = try { Index: src/main/kotlin/creator/custom/providers/ZipTemplateProvider.kt =================================================================== --- src/main/kotlin/creator/custom/providers/ZipTemplateProvider.kt (revision 84af97366c71b8e61aeefbf190755b9abdca212a) +++ src/main/kotlin/creator/custom/providers/ZipTemplateProvider.kt (revision d411716d4cbb2ab19540c867dc5dc31d016feb3f) @@ -38,6 +38,8 @@ import java.nio.file.Path import javax.swing.JComponent import kotlin.io.path.isRegularFile +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext class ZipTemplateProvider : TemplateProvider { @@ -48,14 +50,14 @@ override suspend fun loadTemplates( context: WizardContext, repo: MinecraftSettings.TemplateRepo - ): Collection { + ): Collection = withContext(Dispatchers.IO) { val archiveRoot = repo.data + JarFileSystem.JAR_SEPARATOR val fs = JarFileSystem.getInstance() val rootFile = fs.refreshAndFindFileByPath(archiveRoot) - ?: return emptyList() + ?: return@withContext emptyList() val modalityState = context.modalityState rootFile.refreshSync(modalityState) - return TemplateProvider.findTemplates(modalityState, rootFile) + TemplateProvider.findTemplates(modalityState, rootFile) } override fun setupConfigUi(