Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion src/main/kotlin/creator/custom/CustomPlatformStep.kt
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ package com.demonwav.mcdev.creator.custom
import com.demonwav.mcdev.MinecraftSettings
import com.demonwav.mcdev.asset.MCDevBundle
import com.demonwav.mcdev.creator.custom.providers.EmptyLoadedTemplate
import com.demonwav.mcdev.creator.custom.providers.InvalidVersionTemplate
import com.demonwav.mcdev.creator.custom.providers.LoadedTemplate
import com.demonwav.mcdev.creator.custom.providers.TemplateProvider
import com.demonwav.mcdev.creator.modalityState
Expand Down Expand Up @@ -95,6 +96,7 @@ class CustomPlatformStep(
val templateLoadingText2Property = propertyGraph.property<String>("")
lateinit var templatePropertiesProcessIcon: Cell<AsyncProcessIcon>
lateinit var noTemplatesAvailable: Cell<JLabel>
lateinit var invalidTemplateVersion: Cell<JLabel>
var templateLoadingJob: Job? = null

private val externalPropertyProvider = object : ExternalTemplatePropertyProvider {
Expand Down Expand Up @@ -200,6 +202,9 @@ class CustomPlatformStep(
noTemplatesAvailable = label(MCDevBundle("creator.step.generic.no_templates_available.message"))
.visible(false)
.apply { component.foreground = JBColor.RED }
invalidTemplateVersion = label("Invalid template version.")
.visible(false)
.apply { component.foreground = JBColor.RED }
templatePropertyPlaceholder = placeholder().align(AlignX.FILL)
}.topGap(TopGap.SMALL)

Expand Down Expand Up @@ -265,8 +270,23 @@ class CustomPlatformStep(

templateLoadingProperty.set(false)
noTemplatesAvailable.visible(newTemplates.isEmpty())
availableTemplates = newTemplates
if (newTemplates.any { checkInvalidVersionTemplate(it) }) {
availableTemplates = emptyList()
invalidTemplateVersion.visible(true)
} else {
availableTemplates = newTemplates
invalidTemplateVersion.visible(false)
}
}
}

private fun checkInvalidVersionTemplate(template: LoadedTemplate): Boolean {
if (template is InvalidVersionTemplate) {
invalidTemplateVersion.component.text = "Invalid template version: ${template.descriptor.version}. Supported " +
"versions: [${TemplateDescriptor.SUPPORTED_FORMAT_VERSIONS.joinToString(", ")}]"
return true;
}
return false
}

override fun setupProject(project: Project) {
Expand Down
3 changes: 2 additions & 1 deletion src/main/kotlin/creator/custom/TemplateDescriptor.kt
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ data class TemplateDescriptor(

companion object {

const val FORMAT_VERSION = 3
val SUPPORTED_FORMAT_VERSIONS = intArrayOf(3, 2, 1)
val LATEST_FORMAT_VERSION = SUPPORTED_FORMAT_VERSIONS[0];
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ class BuiltinTemplateProvider : RemoteTemplateProvider() {

private val builtinRepoUrl = $$"https://github.com/minecraft-dev/templates/archive/refs/heads/v$version.zip"
private val builtinTemplatesPath = PluginUtil.plugin.pluginPath.resolve("lib/resources/builtin-templates")
private val builtinTemplatesInnerPath = "templates-${TemplateDescriptor.FORMAT_VERSION}"
private var repoUpdated: Boolean = false

override val label: String = MCDevBundle("template.provider.builtin.label")
Expand All @@ -60,9 +59,11 @@ class BuiltinTemplateProvider : RemoteTemplateProvider() {
context: WizardContext,
repo: MinecraftSettings.TemplateRepo
): Collection<LoadedTemplate> {
val remoteTemplates = doLoadTemplates(context, repo, builtinTemplatesInnerPath)
if (remoteTemplates.isNotEmpty()) {
return remoteTemplates
for (supportedVersion in TemplateDescriptor.SUPPORTED_FORMAT_VERSIONS) {
val remoteTemplates = doLoadTemplates(context, repo, "templates-${supportedVersion}", supportedVersion)
if (remoteTemplates.isNotEmpty()) {
return remoteTemplates
}
}

val repoRoot = builtinTemplatesPath.virtualFile
Expand Down
21 changes: 21 additions & 0 deletions src/main/kotlin/creator/custom/providers/InvalidVersionTemplate.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.demonwav.mcdev.creator.custom.providers

import com.demonwav.mcdev.creator.custom.TemplateDescriptor
import com.intellij.openapi.vfs.VirtualFile

class InvalidVersionTemplate(
templateRoot: VirtualFile,
label: String,
descriptor: TemplateDescriptor,
tooltip: String? = null
) : VfsLoadedTemplate(
templateRoot,
label,
tooltip,
descriptor,
false
) {
override fun loadTemplateContents(path: String): String {
throw NotImplementedError("You cannot load template contents of a template with an invalid version.")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ open class RemoteTemplateProvider : TemplateProvider {
): Boolean {
indicator.text2 = "Updating remote repository $repoName"

val repoUrl = replaceVariables(originalRepoUrl)
val repoUrl = replaceVariables(originalRepoUrl, TemplateDescriptor.LATEST_FORMAT_VERSION)

val manager = FuelManager()
manager.proxy = selectProxy(repoUrl)
Expand Down Expand Up @@ -147,7 +147,8 @@ open class RemoteTemplateProvider : TemplateProvider {
protected suspend fun doLoadTemplates(
context: WizardContext,
repo: MinecraftSettings.TemplateRepo,
rawInnerPath: String
rawInnerPath: String,
version: Int? = null
): List<LoadedTemplate> {
val remoteRootPath = RemoteTemplateRepo.getDestinationZip(repo.name)
if (!remoteRootPath.exists()) {
Expand All @@ -162,7 +163,8 @@ open class RemoteTemplateProvider : TemplateProvider {
val modalityState = context.modalityState
rootFile.refreshSync(modalityState)

val innerPath = replaceVariables(rawInnerPath)
// Default to the latest version for unspecified version variable substitution
val innerPath = replaceVariables(rawInnerPath, version ?: TemplateDescriptor.LATEST_FORMAT_VERSION)
val repoRoot = if (innerPath.isNotBlank()) {
rootFile.findFileByRelativePath(innerPath)
} else {
Expand All @@ -176,8 +178,8 @@ open class RemoteTemplateProvider : TemplateProvider {
return TemplateProvider.findTemplates(modalityState, repoRoot)
}

private fun replaceVariables(originalRepoUrl: String): String =
originalRepoUrl.replace($$"$version", TemplateDescriptor.FORMAT_VERSION.toString())
private fun replaceVariables(originalRepoUrl: String, version: Int): String =
originalRepoUrl.replace($$"$version", version.toString())

override fun setupConfigUi(
data: String,
Expand Down
4 changes: 2 additions & 2 deletions src/main/kotlin/creator/custom/providers/TemplateProvider.kt
Original file line number Diff line number Diff line change
Expand Up @@ -174,9 +174,9 @@ interface TemplateProvider {
): VfsLoadedTemplate? {
descriptorFile.refreshSync(modalityState)
var descriptor = Gson().fromJson<TemplateDescriptor>(descriptorFile.readText())
if (descriptor.version != TemplateDescriptor.FORMAT_VERSION) {
if (!TemplateDescriptor.SUPPORTED_FORMAT_VERSIONS.contains(descriptor.version)) {
thisLogger().warn("Cannot handle template ${descriptorFile.path} of version ${descriptor.version}")
return null
return InvalidVersionTemplate(templateRoot, "Invalid Version", descriptor)
}

if (descriptor.hidden == true) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.readText
import java.io.FileNotFoundException

class VfsLoadedTemplate(
open class VfsLoadedTemplate(
val templateRoot: VirtualFile,
override val label: String,
override val tooltip: String? = null,
Expand Down
2 changes: 1 addition & 1 deletion src/test/kotlin/creator/ClassFqnCreatorPropertyTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ class ClassFqnCreatorPropertyTest : CreatorTemplateProcessorTestBase() {
makeTemplate(
"""
{
"version": ${TemplateDescriptor.FORMAT_VERSION},
"version": ${TemplateDescriptor.LATEST_FORMAT_VERSION},
"properties": [
{
"name": "BUILD_COORDS",
Expand Down
4 changes: 2 additions & 2 deletions src/test/kotlin/creator/CreatorTemplateProcessorTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class CreatorTemplateProcessorTest : CreatorTemplateProcessorTestBase() {
makeTemplate(
"""
{
"version": ${TemplateDescriptor.FORMAT_VERSION},
"version": ${TemplateDescriptor.LATEST_FORMAT_VERSION},
"properties": [
{
"name": "PROP",
Expand All @@ -62,7 +62,7 @@ class CreatorTemplateProcessorTest : CreatorTemplateProcessorTestBase() {
makeTemplate(
"""
{
"version": ${TemplateDescriptor.FORMAT_VERSION},
"version": ${TemplateDescriptor.LATEST_FORMAT_VERSION},
"properties": [
{
"name": "PROP",
Expand Down
20 changes: 10 additions & 10 deletions src/test/kotlin/creator/StringCreatorPropertyTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class StringCreatorPropertyTest : CreatorTemplateProcessorTestBase() {
val reporter = makeTemplate(
"""
{
"version": ${TemplateDescriptor.FORMAT_VERSION},
"version": ${TemplateDescriptor.LATEST_FORMAT_VERSION},
"properties": [
{
"name": "STRING",
Expand All @@ -63,7 +63,7 @@ class StringCreatorPropertyTest : CreatorTemplateProcessorTestBase() {
makeTemplate(
"""
{
"version": ${TemplateDescriptor.FORMAT_VERSION},
"version": ${TemplateDescriptor.LATEST_FORMAT_VERSION},
"properties": [
{
"name": "STRING",
Expand Down Expand Up @@ -100,7 +100,7 @@ class StringCreatorPropertyTest : CreatorTemplateProcessorTestBase() {
val reporter = makeTemplate(
"""
{
"version": ${TemplateDescriptor.FORMAT_VERSION},
"version": ${TemplateDescriptor.LATEST_FORMAT_VERSION},
"properties": [
{
"name": "STRING",
Expand All @@ -124,7 +124,7 @@ class StringCreatorPropertyTest : CreatorTemplateProcessorTestBase() {
val reporter = makeTemplate(
"""
{
"version": ${TemplateDescriptor.FORMAT_VERSION},
"version": ${TemplateDescriptor.LATEST_FORMAT_VERSION},
"properties": [
{
"name": "STRING",
Expand All @@ -149,7 +149,7 @@ class StringCreatorPropertyTest : CreatorTemplateProcessorTestBase() {
val reporter = makeTemplate(
"""
{
"version": ${TemplateDescriptor.FORMAT_VERSION},
"version": ${TemplateDescriptor.LATEST_FORMAT_VERSION},
"properties": [
{
"name": "STRING",
Expand Down Expand Up @@ -177,7 +177,7 @@ class StringCreatorPropertyTest : CreatorTemplateProcessorTestBase() {
val reporter = makeTemplate(
"""
{
"version": ${TemplateDescriptor.FORMAT_VERSION},
"version": ${TemplateDescriptor.LATEST_FORMAT_VERSION},
"properties": [
{
"name": "BOOL",
Expand Down Expand Up @@ -206,7 +206,7 @@ class StringCreatorPropertyTest : CreatorTemplateProcessorTestBase() {
val reporter = makeTemplate(
"""
{
"version": ${TemplateDescriptor.FORMAT_VERSION},
"version": ${TemplateDescriptor.LATEST_FORMAT_VERSION},
"properties": [
{
"name": "STRING",
Expand All @@ -233,7 +233,7 @@ class StringCreatorPropertyTest : CreatorTemplateProcessorTestBase() {
val reporter = makeTemplate(
"""
{
"version": ${TemplateDescriptor.FORMAT_VERSION},
"version": ${TemplateDescriptor.LATEST_FORMAT_VERSION},
"properties": [
{
"name": "STRING",
Expand All @@ -260,7 +260,7 @@ class StringCreatorPropertyTest : CreatorTemplateProcessorTestBase() {
makeTemplate(
"""
{
"version": ${TemplateDescriptor.FORMAT_VERSION},
"version": ${TemplateDescriptor.LATEST_FORMAT_VERSION},
"properties": [
{
"name": "STRING",
Expand Down Expand Up @@ -302,7 +302,7 @@ class StringCreatorPropertyTest : CreatorTemplateProcessorTestBase() {
makeTemplate(
"""
{
"version": ${TemplateDescriptor.FORMAT_VERSION},
"version": ${TemplateDescriptor.LATEST_FORMAT_VERSION},
"properties": [
{
"name": "STRING",
Expand Down
Loading