From ef79af63224cac470ddb76fc3ae27edb4c22bbb4 Mon Sep 17 00:00:00 2001 From: Ryan Harg Date: Tue, 13 Feb 2024 19:50:46 +0100 Subject: [PATCH] Config serialization and vaultwarden assets --- .../kotlin/de/rpr/githubreleases/Config.kt | 24 +- .../de/rpr/githubreleases/model/GithubRepo.kt | 11 +- assets/vaultwarden.png | Bin 0 -> 34456 bytes assets/vaultwarden.svg | 270 ++++++++++++++++++ 4 files changed, 296 insertions(+), 9 deletions(-) create mode 100644 assets/vaultwarden.png create mode 100644 assets/vaultwarden.svg diff --git a/app/src/main/kotlin/de/rpr/githubreleases/Config.kt b/app/src/main/kotlin/de/rpr/githubreleases/Config.kt index d23642d..881ca81 100644 --- a/app/src/main/kotlin/de/rpr/githubreleases/Config.kt +++ b/app/src/main/kotlin/de/rpr/githubreleases/Config.kt @@ -1,19 +1,33 @@ package de.rpr.githubreleases; +import com.google.gson.Gson +import com.google.gson.GsonBuilder import de.rpr.githubreleases.LogLevel.ERROR import de.rpr.githubreleases.model.GithubRepo +import de.rpr.terminenbg.LocalDateAdapter +import de.rpr.terminenbg.LocalDateTimeAdapter +import java.time.LocalDate +import java.time.LocalDateTime class Config { + @Transient + private val gson: Gson = GsonBuilder().setPrettyPrinting().create() + data class PublishingCredentials( val instanceUrl: String?, - val accessToken: String?, - private val instanceUrlEnvName: String, - private val accessTokenEnvName: String + @Transient val accessToken: String?, + @Transient private val instanceUrlEnvName: String, + @Transient private val accessTokenEnvName: String ) { + // Serialization helper + @Suppress("unused") + val token: String? = accessToken?.let { "${it.take(10)}..." } + @Transient var valid: Boolean = true + init { validate() } @@ -74,5 +88,9 @@ class Config { } } + override fun toString(): String { + return "Config: " + gson.toJson(this) + } + } \ No newline at end of file diff --git a/app/src/main/kotlin/de/rpr/githubreleases/model/GithubRepo.kt b/app/src/main/kotlin/de/rpr/githubreleases/model/GithubRepo.kt index ad705e9..9d28da0 100644 --- a/app/src/main/kotlin/de/rpr/githubreleases/model/GithubRepo.kt +++ b/app/src/main/kotlin/de/rpr/githubreleases/model/GithubRepo.kt @@ -1,11 +1,11 @@ package de.rpr.githubreleases.model -data class GithubRepo(private val repositoryPath: String) { +data class GithubRepo(@Transient private val repositoryPath: String) { - private val urlPrefix = "https://github.com/" + @Transient private val urlPrefix = "https://github.com/" - val repoPath: String - val name: String + @Transient val repoPath: String + @Transient val name: String init { repoPath = repoPath(repositoryPath) @@ -14,7 +14,7 @@ data class GithubRepo(private val repositoryPath: String) { name = repoPath.substring(usernameEnd + 1).trimEnd { ch -> ch == '/' } } - val capitalizedName = name.replaceFirstChar { it.uppercase() } + @Transient val capitalizedName = name.replaceFirstChar { it.uppercase() } val url = urlPrefix + repoPath @@ -23,5 +23,4 @@ data class GithubRepo(private val repositoryPath: String) { } else { repositoryPath } - } \ No newline at end of file diff --git a/assets/vaultwarden.png b/assets/vaultwarden.png new file mode 100644 index 0000000000000000000000000000000000000000..90fe47d092626d8c923d6e59855f4ba48d19ea46 GIT binary patch literal 34456 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 X$}z*WFWIhA;Xh3^9o6S57C!$6nT^*T literal 0 HcmV?d00001 diff --git a/assets/vaultwarden.svg b/assets/vaultwarden.svg new file mode 100644 index 0000000..b62d800 --- /dev/null +++ b/assets/vaultwarden.svg @@ -0,0 +1,270 @@ + + + + + Vaultwarden Icon + + + + + Vaultwarden Icon + + + Mathijs van Veluw + + + Rust Logo + + + +