diff --git a/docs/team/teamler.json b/docs/team/teamler.json index d7e33c51..888b3a30 100644 --- a/docs/team/teamler.json +++ b/docs/team/teamler.json @@ -3105,7 +3105,7 @@ "rank_history": { "initial": "spieler", "20.11.2022": "developer", - "09.05.2024": "native" + "09.05.2024": "native_mvp" } }, { diff --git a/howto-dapp/src/main/java/de/timolia/howto/Dapp.kt b/howto-dapp/src/main/java/de/timolia/howto/Dapp.kt index f947ff03..fbf29b46 100644 --- a/howto-dapp/src/main/java/de/timolia/howto/Dapp.kt +++ b/howto-dapp/src/main/java/de/timolia/howto/Dapp.kt @@ -8,21 +8,19 @@ import de.timolia.howto.generator.FileWriter import de.timolia.howto.generator.PageRankChange import de.timolia.howto.generator.PageResponsibilities import de.timolia.howto.generator.PageTeamMembers -import de.timolia.howto.minecraft.MojangService import de.timolia.howto.teamler.Teamler import de.timolia.howto.translate.Translate -import kotlinx.coroutines.runBlocking import java.nio.file.Files import java.nio.file.Path import java.util.* -import kotlin.Throws -import kotlin.jvm.JvmStatic +import java.util.logging.Logger object Dapp { val translate: Translate = Translate() val gson: Gson = GsonBuilder() .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) .create() + private val logger: Logger = Logger.getLogger(this::class.simpleName) @Throws(Exception::class) @JvmStatic @@ -32,10 +30,14 @@ object Dapp { val json = Files.readString(path.resolve("teamler.json")) val teamlers = gson.fromJson(json, Array::class.java) val teamlerList = listOf(*teamlers) + logger.info("Update team member names...") teamlerList.forEach(Teamler::updateName) with(FileWriter(path, translate)) { + logger.info("Generate team changes...") writeFile("changes", PageRankChange.generate(teamlerList)) + logger.info("Generate team page members...") writeFile("members", PageTeamMembers(teamlerList).generate()) + logger.info("Generate team responsibilities...") writeFile("responsibilities", PageResponsibilities.generate(teamlerList)) } if(args.any { it.equals("init", ignoreCase = true) }) { diff --git a/howto-dapp/src/main/java/de/timolia/howto/minecraft/MojangService.kt b/howto-dapp/src/main/java/de/timolia/howto/minecraft/MojangService.kt index 251e347a..70bb9314 100644 --- a/howto-dapp/src/main/java/de/timolia/howto/minecraft/MojangService.kt +++ b/howto-dapp/src/main/java/de/timolia/howto/minecraft/MojangService.kt @@ -3,22 +3,33 @@ package de.timolia.howto.minecraft import com.google.gson.Gson import fuel.httpGet import kotlinx.coroutines.runBlocking +import java.util.logging.Logger object MojangService { data class ProfileInfo(val id: String, val name: String? = null) - val resolved = HashMap() + private val resolved = HashMap() + private val logger = Logger.getLogger(this::class.simpleName) - fun nameFromUUid(uuid: String) = resolved.computeIfAbsent(uuid, ::resolve) + /** + * Get the player name of an uuid from the Mojang api or local cache + * + * @param uuid the uuid of the player the name should be looked up + * @param fallback the name of player if the Mojang api can't look up the player name + * @return the player name + */ + fun nameFromUUid(uuid: String, fallback: () -> String) = resolved.computeIfAbsent(uuid) { + resolve(uuid) ?: fallback() + } - fun resolve(uuid: String): String = runBlocking { - val base_url = "https://sessionserver.mojang.com/session/minecraft/profile/$uuid" + private fun resolve(uuid: String): String? = runBlocking { + val baseUrl = "https://sessionserver.mojang.com/session/minecraft/profile/$uuid" - val response = base_url.httpGet() + val response = baseUrl.httpGet() try { Gson().fromJson(response.body, ProfileInfo::class.java).name!! } catch (exception: Exception) { - println(response) - throw exception + logger.warning(response.body) + null } } } \ No newline at end of file diff --git a/howto-dapp/src/main/java/de/timolia/howto/rank/TeamlerRankChange.kt b/howto-dapp/src/main/java/de/timolia/howto/rank/TeamlerRankChange.kt index 29f8ef3c..bdb73ece 100644 --- a/howto-dapp/src/main/java/de/timolia/howto/rank/TeamlerRankChange.kt +++ b/howto-dapp/src/main/java/de/timolia/howto/rank/TeamlerRankChange.kt @@ -27,7 +27,9 @@ class TeamlerRankChange { constructor(name: String?, uuid: UUID, rankFrom: Rank, rankTo: Rank, date: String, hidden: Boolean) { this.name = try { - MojangService.nameFromUUid(uuid.toString()) + MojangService.nameFromUUid(uuid.toString()) { + name!! + } } catch (exception: Exception) { exception.printStackTrace() name!! diff --git a/howto-dapp/src/main/java/de/timolia/howto/teamler/Teamler.kt b/howto-dapp/src/main/java/de/timolia/howto/teamler/Teamler.kt index a99266e9..eff42b80 100644 --- a/howto-dapp/src/main/java/de/timolia/howto/teamler/Teamler.kt +++ b/howto-dapp/src/main/java/de/timolia/howto/teamler/Teamler.kt @@ -31,9 +31,9 @@ class Teamler( if (rankHistory.isNullOrEmpty()) { return rankChanges } - for (i in 0 until rankHistory.size) { - val rank = rankHistory.values.toTypedArray()[i] - Validate.notNull(rank, "Der " + (i + 1) + ". Rang von '" + name + "' existiert nicht") + val ranks = rankHistory.values.toTypedArray() + ranks.forEachIndexed { index, rank -> + Validate.notNull(rank, "Der " + (index + 1) + ". Rang von '" + name + "' existiert nicht") } val dates = rankHistory.keys .map { s -> s.replace("hidden-", "") } @@ -108,9 +108,8 @@ class Teamler( } fun updateName() { - name = MojangService.nameFromUUid(uuid.toString()) - if (name == null) { - name = SQLApi.getName(uuid).toString() + name = MojangService.nameFromUUid(uuid.toString()) { + SQLApi.getName(uuid).toString() } }