diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts index f9e5305c6..28bd82366 100644 --- a/composeApp/build.gradle.kts +++ b/composeApp/build.gradle.kts @@ -30,6 +30,12 @@ abstract class GenerateRuntimeConfigsTask : DefaultTask() { @get:Input abstract val appVersionCode: Property + @get:Input + abstract val desktopAppVersionName: Property + + @get:Input + abstract val desktopAppVersionCode: Property + @TaskAction fun generate() { val props = Properties() @@ -116,6 +122,8 @@ abstract class GenerateRuntimeConfigsTask : DefaultTask() { |object AppVersionConfig { | const val VERSION_NAME = "${appVersionName.get()}" | const val VERSION_CODE = ${appVersionCode.get()} + | const val DESKTOP_VERSION_NAME = "${desktopAppVersionName.get()}" + | const val DESKTOP_VERSION_CODE = ${desktopAppVersionCode.get()} |} """.trimMargin() ) @@ -192,6 +200,23 @@ val releaseAppVersionName = readXcconfigValue(appVersionConfigFile, "MARKETING_V val releaseAppVersionCode = readXcconfigValue(appVersionConfigFile, "CURRENT_PROJECT_VERSION") ?.toIntOrNull() ?: error("CURRENT_PROJECT_VERSION is missing or invalid in ${appVersionConfigFile.path}") +val desktopReleaseVersionName = ( + providers.gradleProperty("nuvio.desktop.versionName").orNull + ?: System.getenv("NUVIO_DESKTOP_VERSION_NAME") + ?: supabaseProps.getProperty("NUVIO_DESKTOP_VERSION_NAME") + ?: "0.1.0" + ).trim() +require(desktopReleaseVersionName.isNotBlank()) { + "Desktop version name must not be blank." +} +val desktopReleaseVersionCode = ( + providers.gradleProperty("nuvio.desktop.versionCode").orNull + ?: System.getenv("NUVIO_DESKTOP_VERSION_CODE") + ?: supabaseProps.getProperty("NUVIO_DESKTOP_VERSION_CODE") + )?.trim() + ?.takeIf { it.isNotBlank() } + ?.toIntOrNull() + ?: 1 val iosDistribution = ( providers.gradleProperty("nuvio.ios.distribution").orNull ?: System.getenv("NUVIO_IOS_DISTRIBUTION") @@ -226,6 +251,8 @@ val generateRuntimeConfigs = tasks.register("generat localPropertiesFile.set(rootProject.layout.projectDirectory.file("local.properties")) appVersionName.set(releaseAppVersionName) appVersionCode.set(releaseAppVersionCode) + desktopAppVersionName.set(desktopReleaseVersionName) + desktopAppVersionCode.set(desktopReleaseVersionCode) } val isMacHost = System.getProperty("os.name").contains("mac", ignoreCase = true) @@ -708,7 +735,7 @@ compose.desktop { nativeDistributions { targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb) packageName = "Nuvio" - packageVersion = releaseAppVersionName + packageVersion = desktopReleaseVersionName macOS { iconFile.set(project.file("src/desktopMain/resources/icons/nuvio-app-icon.icns")) } diff --git a/composeApp/src/androidFull/kotlin/com/nuvio/app/core/build/AppVersionPolicy.android.kt b/composeApp/src/androidFull/kotlin/com/nuvio/app/core/build/AppVersionPolicy.android.kt new file mode 100644 index 000000000..1d181ca62 --- /dev/null +++ b/composeApp/src/androidFull/kotlin/com/nuvio/app/core/build/AppVersionPolicy.android.kt @@ -0,0 +1,7 @@ +package com.nuvio.app.core.build + +actual object AppVersionPolicy { + actual val displayVersionName: String = AppVersionConfig.VERSION_NAME + actual val displayVersionCode: Int = AppVersionConfig.VERSION_CODE + actual val basedOnVersionName: String? = null +} diff --git a/composeApp/src/androidPlaystore/kotlin/com/nuvio/app/core/build/AppVersionPolicy.android.kt b/composeApp/src/androidPlaystore/kotlin/com/nuvio/app/core/build/AppVersionPolicy.android.kt new file mode 100644 index 000000000..1d181ca62 --- /dev/null +++ b/composeApp/src/androidPlaystore/kotlin/com/nuvio/app/core/build/AppVersionPolicy.android.kt @@ -0,0 +1,7 @@ +package com.nuvio.app.core.build + +actual object AppVersionPolicy { + actual val displayVersionName: String = AppVersionConfig.VERSION_NAME + actual val displayVersionCode: Int = AppVersionConfig.VERSION_CODE + actual val basedOnVersionName: String? = null +} diff --git a/composeApp/src/commonMain/composeResources/values/strings.xml b/composeApp/src/commonMain/composeResources/values/strings.xml index 582b500a1..af2b860e3 100644 --- a/composeApp/src/commonMain/composeResources/values/strings.xml +++ b/composeApp/src/commonMain/composeResources/values/strings.xml @@ -300,6 +300,7 @@ Pinned All Your Collections + Based on Nuvio %1$s Made with ❤️ by Tapframe and friends Version %1$s (%2$s) Off diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/core/build/AppVersionPolicy.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/core/build/AppVersionPolicy.kt new file mode 100644 index 000000000..24e0a028c --- /dev/null +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/core/build/AppVersionPolicy.kt @@ -0,0 +1,7 @@ +package com.nuvio.app.core.build + +expect object AppVersionPolicy { + val displayVersionName: String + val displayVersionCode: Int + val basedOnVersionName: String? +} diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsRootPage.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsRootPage.kt index 7527084e4..c882944e5 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsRootPage.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsRootPage.kt @@ -21,8 +21,9 @@ import androidx.compose.material3.Text import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp -import com.nuvio.app.core.build.AppVersionConfig +import com.nuvio.app.core.build.AppVersionPolicy import nuvio.composeapp.generated.resources.Res +import nuvio.composeapp.generated.resources.compose_about_based_on_version_format import nuvio.composeapp.generated.resources.compose_about_made_with import nuvio.composeapp.generated.resources.compose_about_version_format import nuvio.composeapp.generated.resources.compose_settings_page_account @@ -258,14 +259,26 @@ internal fun LazyListScope.settingsRootContent( Text( text = stringResource( Res.string.compose_about_version_format, - AppVersionConfig.VERSION_NAME, - AppVersionConfig.VERSION_CODE, + AppVersionPolicy.displayVersionName, + AppVersionPolicy.displayVersionCode, ), modifier = Modifier.fillMaxWidth(), style = MaterialTheme.typography.bodySmall, color = MaterialTheme.colorScheme.onSurfaceVariant, textAlign = TextAlign.Center, ) + AppVersionPolicy.basedOnVersionName?.let { basedOnVersionName -> + Text( + text = stringResource( + Res.string.compose_about_based_on_version_format, + basedOnVersionName, + ), + modifier = Modifier.fillMaxWidth(), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant, + textAlign = TextAlign.Center, + ) + } } } } diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/trakt/TraktScrobbleRepository.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/trakt/TraktScrobbleRepository.kt index 6130d1ae5..998aa559c 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/trakt/TraktScrobbleRepository.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/trakt/TraktScrobbleRepository.kt @@ -1,7 +1,7 @@ package com.nuvio.app.features.trakt import co.touchlab.kermit.Logger -import com.nuvio.app.core.build.AppVersionConfig +import com.nuvio.app.core.build.AppVersionPolicy import com.nuvio.app.features.addons.httpRequestRaw import com.nuvio.app.features.profiles.ProfileRepository import kotlinx.coroutines.CancellationException @@ -243,7 +243,7 @@ internal object TraktScrobbleRepository { ids = item.ids.toRequestBodyOrNull(), ), progress = clampedProgress, - appVersion = AppVersionConfig.VERSION_NAME, + appVersion = AppVersionPolicy.displayVersionName, ) is TraktScrobbleItem.Episode -> TraktScrobbleRequest( @@ -258,7 +258,7 @@ internal object TraktScrobbleRepository { number = item.number, ), progress = clampedProgress, - appVersion = AppVersionConfig.VERSION_NAME, + appVersion = AppVersionPolicy.displayVersionName, ) } } diff --git a/composeApp/src/desktopMain/kotlin/com/nuvio/app/core/build/AppVersionPolicy.desktop.kt b/composeApp/src/desktopMain/kotlin/com/nuvio/app/core/build/AppVersionPolicy.desktop.kt new file mode 100644 index 000000000..88ada6335 --- /dev/null +++ b/composeApp/src/desktopMain/kotlin/com/nuvio/app/core/build/AppVersionPolicy.desktop.kt @@ -0,0 +1,7 @@ +package com.nuvio.app.core.build + +actual object AppVersionPolicy { + actual val displayVersionName: String = AppVersionConfig.DESKTOP_VERSION_NAME + actual val displayVersionCode: Int = AppVersionConfig.DESKTOP_VERSION_CODE + actual val basedOnVersionName: String? = AppVersionConfig.VERSION_NAME.takeIf { it != displayVersionName } +} diff --git a/composeApp/src/iosAppStore/kotlin/com/nuvio/app/core/build/AppVersionPolicy.ios.kt b/composeApp/src/iosAppStore/kotlin/com/nuvio/app/core/build/AppVersionPolicy.ios.kt new file mode 100644 index 000000000..1d181ca62 --- /dev/null +++ b/composeApp/src/iosAppStore/kotlin/com/nuvio/app/core/build/AppVersionPolicy.ios.kt @@ -0,0 +1,7 @@ +package com.nuvio.app.core.build + +actual object AppVersionPolicy { + actual val displayVersionName: String = AppVersionConfig.VERSION_NAME + actual val displayVersionCode: Int = AppVersionConfig.VERSION_CODE + actual val basedOnVersionName: String? = null +} diff --git a/composeApp/src/iosFull/kotlin/com/nuvio/app/core/build/AppVersionPolicy.ios.kt b/composeApp/src/iosFull/kotlin/com/nuvio/app/core/build/AppVersionPolicy.ios.kt new file mode 100644 index 000000000..1d181ca62 --- /dev/null +++ b/composeApp/src/iosFull/kotlin/com/nuvio/app/core/build/AppVersionPolicy.ios.kt @@ -0,0 +1,7 @@ +package com.nuvio.app.core.build + +actual object AppVersionPolicy { + actual val displayVersionName: String = AppVersionConfig.VERSION_NAME + actual val displayVersionCode: Int = AppVersionConfig.VERSION_CODE + actual val basedOnVersionName: String? = null +}