diff --git a/src/main/kotlin/net/taehui/twilight/Component.kt b/src/main/kotlin/net/taehui/twilight/Component.kt index 78cf7ae..e400652 100644 --- a/src/main/kotlin/net/taehui/twilight/Component.kt +++ b/src/main/kotlin/net/taehui/twilight/Component.kt @@ -45,6 +45,10 @@ return value } + override fun toString(): String { + return value.toString() + } + companion object { fun getHandled(value: Int): Handled { return when (value) { @@ -108,7 +112,7 @@ } companion object { - const val AUTOABLE_AUTO_MODE = 1 + const val DEFAULT_AUTO_MODE = 0 const val DEFAULT_JUDGMENT_MODE = 1 const val HIGHER_JUDGMENT_MODE = 2 diff --git a/src/main/kotlin/net/taehui/twilight/Site.kt b/src/main/kotlin/net/taehui/twilight/Site.kt index 67ba3c6..1e03ed2 100644 --- a/src/main/kotlin/net/taehui/twilight/Site.kt +++ b/src/main/kotlin/net/taehui/twilight/Site.kt @@ -1133,9 +1133,9 @@ } private fun getTarget(avatarID: String): String { - synchronized(avatarsCSX) { + return synchronized(avatarsCSX) { val avatars = avatars.filter { it.isAwilight && it.avatarID != avatarID } - return if (avatars.isEmpty()) { + if (avatars.isEmpty()) { "" } else { avatars[(Math.random() * avatars.size).toInt()].avatarID diff --git a/src/main/kotlin/net/taehui/twilight/Utility.kt b/src/main/kotlin/net/taehui/twilight/Utility.kt index 50c1f74..e7e00ae 100644 --- a/src/main/kotlin/net/taehui/twilight/Utility.kt +++ b/src/main/kotlin/net/taehui/twilight/Utility.kt @@ -51,19 +51,21 @@ } fun getQuitStatusValue(point: Double, stand: Int): Int { - if (point < 0.8) { - return 6 + return if (point < 0.8) { + 6 + } else if (point < 0.85) { + 5 + } else if (point < 0.9) { + 4 + } else if (point < 0.95) { + 3 + } else if (stand < 900000) { + 2 + } else if (point < 1.0) { + 1 + } else { + 0 } - if (point < 0.85) { - return 5 - } - if (point < 0.9) { - return 4 - } - if (point < 0.95) { - return 3 - } - return if (stand < 900000) 2 else if (point < 1.0) 1 else 0 } fun isValidWww(www: String): Boolean { diff --git a/src/main/kotlin/net/taehui/twilight/qwilight/QwilightAvatar.kt b/src/main/kotlin/net/taehui/twilight/qwilight/QwilightAvatar.kt index bf8e7b2..84d828d 100644 --- a/src/main/kotlin/net/taehui/twilight/qwilight/QwilightAvatar.kt +++ b/src/main/kotlin/net/taehui/twilight/qwilight/QwilightAvatar.kt @@ -706,13 +706,12 @@ } EventOuterClass.Event.EventID.NEW_UBUNTU -> wantSignedIn { - if (Utility.getDefaultAvatarID( - it - ) == eventText - ) { + val avatarID = Utility.getDefaultAvatarID(it) + val ubuntuID = Utility.getDefaultAvatarID(eventText) + if (avatarID == ubuntuID) { send(EventOuterClass.Event.EventID.WARNING, translateLanguage("ubuntuIsYou")) } else { - DB.saveUbuntu(it, eventText).thenAccept { isOK -> + DB.saveUbuntu(avatarID, ubuntuID).thenAccept { isOK -> if (!isOK) { send(EventOuterClass.Event.EventID.WARNING, translateLanguage("alreadyUbuntu")) } diff --git a/src/main/kotlin/net/taehui/twilight/system/AbilityClassSystem.kt b/src/main/kotlin/net/taehui/twilight/system/AbilityClassSystem.kt index 2a938dd..aac4d79 100644 --- a/src/main/kotlin/net/taehui/twilight/system/AbilityClassSystem.kt +++ b/src/main/kotlin/net/taehui/twilight/system/AbilityClassSystem.kt @@ -15,7 +15,8 @@ } } - private var abilityClasses = arrayOf(emptyArray>(), emptyArray>(), emptyArray>()) + private var abilityClasses = + arrayOf(emptyArray>(), emptyArray>(), emptyArray>()) fun getAbilityClass(abilityClassVariety: AbilityClassVariety, abilityClass: Double): ByteArray { val abilityClasses = abilityClasses[abilityClassVariety.value] @@ -24,7 +25,7 @@ -1.0, -2.0, -3.0 -> abilityClasses[0][0] -4.0, -5.0, -6.0, -7.0, -8.0, -9.0, -10.0 -> abilityClasses[1][0] else -> { - return if (0 <= abilityClass && abilityClass < 2) { + if (0 <= abilityClass && abilityClass < 2) { abilityClasses[2][(5 * abilityClass / 2).toInt()] } else if (2 <= abilityClass && abilityClass < 13) { abilityClasses[3][(5 * (abilityClass - 2) / 11).toInt()] diff --git a/src/main/kotlin/net/taehui/twilight/system/DB.kt b/src/main/kotlin/net/taehui/twilight/system/DB.kt index 9809917..b8a2f1a 100644 --- a/src/main/kotlin/net/taehui/twilight/system/DB.kt +++ b/src/main/kotlin/net/taehui/twilight/system/DB.kt @@ -665,10 +665,10 @@ FilenameUtils.removeExtension(commentFilePath.fileName.toString()) it.prepareStatement( """ - SELECT Audio_Multiplier - FROM tw_comment - WHERE Comment_ID = ? - """.trimIndent() + SELECT Audio_Multiplier + FROM tw_comment + WHERE Comment_ID = ? + """.trimIndent() ).use { dbStatement -> dbStatement.setString(1, commentID) dbStatement.executeQuery().use { rows -> @@ -683,10 +683,10 @@ if (comment.audioMultipliersCount > 0) { it.prepareStatement( """ - UPDATE tw_comment - SET Lowest_Audio_Multiplier = ?, Highest_Audio_Multiplier = ? - WHERE Comment_ID = ? - """.trimIndent() + UPDATE tw_comment + SET Lowest_Audio_Multiplier = ?, Highest_Audio_Multiplier = ? + WHERE Comment_ID = ? + """.trimIndent() ).use { dbStatement -> dbStatement.setDouble( 1, @@ -704,10 +704,10 @@ } else { it.prepareStatement( """ - UPDATE tw_comment - SET Lowest_Audio_Multiplier = Audio_Multiplier, Highest_Audio_Multiplier = Audio_Multiplier - WHERE Comment_ID = ? - """.trimIndent() + UPDATE tw_comment + SET Lowest_Audio_Multiplier = Audio_Multiplier, Highest_Audio_Multiplier = Audio_Multiplier + WHERE Comment_ID = ? + """.trimIndent() ).use { dbStatement -> dbStatement.setString(1, commentID) dbStatement.executeUpdate() @@ -736,6 +736,7 @@ """ DELETE FROM tw_handled + WHERE Handled != ${Component.Handled.F} """.trimIndent() ).use { dbStatement -> dbStatement.execute() } } @@ -751,7 +752,7 @@ """ SELECT Avatar, Note_ID, Hit_Points_Mode, Is_P FROM tw_comment - WHERE Lowest_Audio_Multiplier >= 1.0 AND Auto_Mode = ${Component.AUTOABLE_AUTO_MODE} AND ${ + WHERE Lowest_Audio_Multiplier >= 1.0 AND Auto_Mode = ${Component.DEFAULT_AUTO_MODE} AND ${ getAbilityFilter( Component.DEFAULT_INPUT_FAVOR_MODE ) @@ -1314,7 +1315,7 @@ } fun getAvatarName(avatarID: String): String { - pool.connection.use { + return pool.connection.use { it.prepareStatement( """ SELECT Avatar_Name @@ -1324,7 +1325,7 @@ ).use { dbStatement -> dbStatement.setString(1, avatarID) dbStatement.executeQuery().use { rows -> - return if (rows.next()) rows.getString("Avatar_Name") else "" + if (rows.next()) rows.getString("Avatar_Name") else "" } } } @@ -1418,7 +1419,7 @@ } fun getNotifySaveBundle(avatarID: String): Int { - pool.connection.use { + return pool.connection.use { it.prepareStatement( """ SELECT Notify_Save_Bundle @@ -1428,7 +1429,7 @@ ).use { dbStatement -> dbStatement.setString(1, avatarID) dbStatement.executeQuery() - .use { rows -> return if (rows.next()) rows.getInt("Notify_Save_Bundle") else QwilightAvatar.NOTIFY_SAVE_BUNDLE_CALLABLE } + .use { rows -> if (rows.next()) rows.getInt("Notify_Save_Bundle") else QwilightAvatar.NOTIFY_SAVE_BUNDLE_CALLABLE } } } } @@ -1478,8 +1479,8 @@ VALUES(?, ?) """.trimIndent() ).use { dbStatement -> - dbStatement.setString(1, Utility.getDefaultAvatarID(avatarID)) - dbStatement.setString(2, Utility.getDefaultAvatarID(ubuntuID)) + dbStatement.setString(1, avatarID) + dbStatement.setString(2, ubuntuID) dbStatement.execute() true } @@ -1518,7 +1519,7 @@ } private fun getDefaultBundleCompetence(avatarID: String): Int { - pool.connection.use { + return pool.connection.use { it.prepareStatement( """ SELECT Default_Bundle_Competence @@ -1528,7 +1529,7 @@ ).use { dbStatement -> dbStatement.setString(1, avatarID) dbStatement.executeQuery() - .use { rows -> return if (rows.next()) rows.getInt("Default_Bundle_Competence") else QwilightAvatar.BUNDLE_VOID } + .use { rows -> if (rows.next()) rows.getInt("Default_Bundle_Competence") else QwilightAvatar.BUNDLE_VOID } } } } @@ -1959,10 +1960,8 @@ } } - fun getTitle(qm: Map): CompletableFuture { + fun getTitle(avatarID: String, language: String): CompletableFuture { return logValueFuture { - val avatarID = Utility.getDefaultAvatarID(qm.getOrDefault("avatarID", "")) - val language = qm.getOrDefault("language", "en-US") pool.connection.use { it.prepareStatement( """ @@ -2042,21 +2041,19 @@ ) } - fun getTitles(qm: Map): CompletableFuture> { + fun getTitles(avatarID: String, language: String): CompletableFuture> { return logValueFuture { - val avatarID = Utility.getDefaultAvatarID(qm.getOrDefault("avatarID", "")) TitleSystem.getTitles( getLevelIDs(avatarID), getNoteIDs(avatarID), getAvatarLevels(avatarID)[0], - qm.getOrDefault("language", "en-US") + language ) } } - fun getEdgeIDs(qm: Map): CompletableFuture> { + fun getEdgeIDs(avatarID: String): CompletableFuture> { return logValueFuture { - val avatarID = Utility.getDefaultAvatarID(qm.getOrDefault("avatarID", "")) EdgeSystem.getEdgeIDs( getLevelIDs(avatarID), getNoteIDs(avatarID), getAvatarLevels(avatarID)[0] ) @@ -2086,28 +2083,25 @@ } } - fun getAvatarEdge(avatarID: String): String { - pool.connection.use { - it.prepareStatement( - """ - SELECT Edge_ID - FROM tw_edge - WHERE Avatar = ? - """.trimIndent() - ).use { dbStatement -> - dbStatement.setString(1, avatarID) - dbStatement.executeQuery() - .use { rows -> return if (rows.next()) rows.getString("Edge_ID") else "Default" } + fun getAvatarEdge(avatarID: String): CompletableFuture { + return logValueFuture { + pool.connection.use { + it.prepareStatement( + """ + SELECT Edge_ID + FROM tw_edge + WHERE Avatar = ? + """.trimIndent() + ).use { dbStatement -> + dbStatement.setString(1, avatarID) + dbStatement.executeQuery() + .use { rows -> if (rows.next()) rows.getString("Edge_ID") else "Default" } + } } } } - fun getNote(qm: Map): CompletableFuture { - val want = qm["want"] ?: "" - val src = qm["src"] ?: "0" - val fit = qm["fit"] ?: "0" - val page = (qm["page"] ?: "1").toInt() - val viewUnit = (qm["viewUnit"] ?: "15").toInt() + fun getNote(want: String, src: Int, fit: Int, page: Int, viewUnit: Int): CompletableFuture { val isNotWant = want.isEmpty() var totalCount = 0 @@ -2136,25 +2130,25 @@ } else { db.prepareStatement( when (src) { - "0" -> """ + 0 -> """ SELECT COUNT(Comment_ID) AS Total_Count, COUNT(DISTINCT tw_note.Note_ID, Avatar) AS Highest_Count, COUNT(DISTINCT tw_note.Note_ID) AS Note_Count FROM tw_note, tw_comment WHERE tw_note.Note_ID = tw_comment.Note_ID AND MATCH(Title) AGAINST(? IN BOOLEAN MODE) """.trimIndent() - "1" -> """ + 1 -> """ SELECT COUNT(Comment_ID) AS Total_Count, COUNT(DISTINCT tw_note.Note_ID, Avatar) AS Highest_Count, COUNT(DISTINCT tw_note.Note_ID) AS Note_Count FROM tw_note, tw_comment, tn_avatar WHERE tw_note.Note_ID = tw_comment.Note_ID AND Avatar = Avatar_ID AND MATCH(Avatar_Name) AGAINST(? IN BOOLEAN MODE) """.trimIndent() - "2" -> """ + 2 -> """ SELECT COUNT(Comment_ID) AS Total_Count, COUNT(DISTINCT tw_note.Note_ID, Avatar) AS Highest_Count, COUNT(DISTINCT tw_note.Note_ID) AS Note_Count FROM tw_note, tw_comment WHERE tw_note.Note_ID = tw_comment.Note_ID AND MATCH(Artist) AGAINST(? IN BOOLEAN MODE) """.trimIndent() - "3" -> """ + 3 -> """ SELECT COUNT(Comment_ID) AS Total_Count, COUNT(DISTINCT tw_note.Note_ID, Avatar) AS Highest_Count, COUNT(DISTINCT tw_note.Note_ID) AS Note_Count FROM tw_note, tw_comment WHERE tw_note.Note_ID = tw_comment.Note_ID AND MATCH(Genre) AGAINST(? IN BOOLEAN MODE) @@ -2178,7 +2172,7 @@ } }, logFuture { val dataStatement = """ - DISTINCT tw_note.Note_ID, Note_Variety, Artist, Title, Genre, Level_Text, Level, ( + DISTINCT tw_note.Note_ID, Note_Variety, Artist, Title, Genre, Level_Text, tw_note.Level, ( SELECT COUNT(DISTINCT Note_ID, Avatar) FROM tw_comment WHERE tw_note.Note_ID = tw_comment.Note_ID @@ -2193,13 +2187,13 @@ ) AS Date """.trimIndent() val fitStatement = when (fit) { - "0" -> " ORDER BY Highest DESC " - "1" -> " ORDER BY Total DESC " - "2" -> " ORDER BY Date DESC " - "3" -> " ORDER BY Title " - "4" -> " ORDER BY Artist " - "5" -> " ORDER BY Genre " - "6" -> " ORDER BY Level_Text " + 0 -> " ORDER BY Highest DESC " + 1 -> " ORDER BY Total DESC " + 2 -> " ORDER BY Date DESC " + 3 -> " ORDER BY Title " + 4 -> " ORDER BY Artist " + 5 -> " ORDER BY Genre " + 6 -> " ORDER BY Level_Text " else -> " " } pool.connection.use { db -> @@ -2212,7 +2206,7 @@ dbStatement.setInt(2, viewUnit) } else { dbStatement = when (src) { - "0" -> db.prepareStatement( + 0 -> db.prepareStatement( """ SELECT $dataStatement FROM tw_note @@ -2220,7 +2214,7 @@ """.trimIndent() ) - "1" -> db.prepareStatement( + 1 -> db.prepareStatement( """ SELECT $dataStatement FROM tw_note, tw_comment, tn_avatar @@ -2228,7 +2222,7 @@ """.trimIndent() ) - "2" -> db.prepareStatement( + 2 -> db.prepareStatement( """ SELECT $dataStatement FROM tw_note @@ -2236,7 +2230,7 @@ """.trimIndent() ) - "3" -> db.prepareStatement( + 3 -> db.prepareStatement( """ SELECT $dataStatement FROM tw_note @@ -2395,11 +2389,8 @@ } } - fun getAvatar(qm: Map): CompletableFuture { + fun getAvatar(wantAvatarID: String, wantAvatarName: String): CompletableFuture { return logValueFuture { - val wantAvatarID = Utility.getDefaultAvatarID(qm.getOrDefault("avatarID", "")) - val wantAvatarName = qm.getOrDefault("avatarName", "") - var avatarID = "" var avatarName = "" var avatarIntro = "" diff --git a/src/main/kotlin/net/taehui/twilight/system/IO.kt b/src/main/kotlin/net/taehui/twilight/system/IO.kt index b5b2e58..f231753 100644 --- a/src/main/kotlin/net/taehui/twilight/system/IO.kt +++ b/src/main/kotlin/net/taehui/twilight/system/IO.kt @@ -195,12 +195,12 @@ when (w[1]) { "learn" -> { if (futureLearnComments?.isDone != false) { + futureLearnCommentsStatus.set(0) futureLearnComments = DB.learnComments(futureLearnCommentsStatus).thenAccept { logInfo( "Learned ${futureLearnCommentsStatus.get()} Comments" ) - futureLearnCommentsStatus.set(0) } } else { logInfo( @@ -263,12 +263,12 @@ when (w[1]) { "learn" -> { if (futureLearnHandled?.isDone != false) { + futureLearnHandledStatus.set(0) futureLearnHandled = DB.wipeHandled().thenAccept { DB.learnHandled(futureLearnHandledStatus) logInfo( "Learned ${futureLearnHandledStatus.get()} Handled" ) - futureLearnHandledStatus.set(0) } } else { logInfo( @@ -288,6 +288,7 @@ when (w[1]) { "learn" -> { if (futureLearnNotes?.isDone != false) { + futureLearnNotesStatus.set(0) futureLearnNotes = DB.wipeNotes().thenAccept { try { Files.newDirectoryStream( @@ -320,7 +321,6 @@ logInfo( "Learned ${futureLearnNotesStatus.get()} Notes" ) - futureLearnNotesStatus.set(0) NoteFilesSystem.loadNoteFiles() } } diff --git a/src/main/kotlin/net/taehui/twilight/system/PlatformIDSystem.kt b/src/main/kotlin/net/taehui/twilight/system/PlatformIDSystem.kt index c19ffd3..081b4f7 100644 --- a/src/main/kotlin/net/taehui/twilight/system/PlatformIDSystem.kt +++ b/src/main/kotlin/net/taehui/twilight/system/PlatformIDSystem.kt @@ -8,16 +8,16 @@ import java.util.concurrent.ConcurrentHashMap object PlatformIDSystem : Logger { - private var platformIDStore = ConcurrentHashMap() + private var platformIDAvatarIDMap = ConcurrentHashMap() fun savePlatformID() { - ObjectMapper().writerWithDefaultPrettyPrinter().writeValue(Paths.get("Platform ID.json").toFile(), platformIDStore) + ObjectMapper().writerWithDefaultPrettyPrinter().writeValue(Paths.get("Platform ID.json").toFile(), platformIDAvatarIDMap) logInfo("Saved Platform ID") } fun loadPlatformID() { try { - platformIDStore.putAll( + platformIDAvatarIDMap.putAll( ObjectMapper().readValue(Paths.get("Platform ID.json").toFile(), object : TypeReference>() {}) ) @@ -28,14 +28,18 @@ } fun putPlatformID(platformID: String, avatarID: String) { - platformIDStore[if (platformID.startsWith("$")) platformID else "$${platformID}"] = avatarID + platformIDAvatarIDMap[if (platformID.startsWith("$")) platformID else "$${platformID}"] = avatarID } fun wipePlatformID(platformID: String) { - platformIDStore.remove(if (platformID.startsWith("$")) platformID else "$${platformID}") + platformIDAvatarIDMap.remove(if (platformID.startsWith("$")) platformID else "$${platformID}") } fun getAvatarID(platformID: String): String { - return platformIDStore.getOrDefault(platformID, platformID) + return platformIDAvatarIDMap.getOrDefault(platformID, platformID) + } + + fun hasAvatarID(platformID: String): Boolean { + return platformIDAvatarIDMap.containsKey(platformID) } } \ No newline at end of file diff --git a/src/main/kotlin/net/taehui/twilight/system/ValveSystem.kt b/src/main/kotlin/net/taehui/twilight/system/ValveSystem.kt index 579f86f..d45b370 100644 --- a/src/main/kotlin/net/taehui/twilight/system/ValveSystem.kt +++ b/src/main/kotlin/net/taehui/twilight/system/ValveSystem.kt @@ -5,13 +5,13 @@ import java.util.concurrent.ConcurrentHashMap object ValveSystem : Logger { - private val drawingStore = ConcurrentHashMap() + private val avatarIDDrawingMap = ConcurrentHashMap() fun putDrawing(avatarID: String, valveDrawing: ByteString) { - drawingStore[avatarID] = valveDrawing + avatarIDDrawingMap[avatarID] = valveDrawing } fun getDrawing(avatarID: String): ByteArray? { - return drawingStore[avatarID]?.toByteArray() + return avatarIDDrawingMap[avatarID]?.toByteArray() } } \ No newline at end of file diff --git a/src/main/kotlin/net/taehui/twilight/www/WwwAvatar.kt b/src/main/kotlin/net/taehui/twilight/www/WwwAvatar.kt index c7040a8..f33d269 100644 --- a/src/main/kotlin/net/taehui/twilight/www/WwwAvatar.kt +++ b/src/main/kotlin/net/taehui/twilight/www/WwwAvatar.kt @@ -26,21 +26,6 @@ private var avatarIP = "" private var avatarEstimatedID = "" - private fun getDefaultDrawingIf(drawing: ByteArray? = null): CompletableFuture { - return if (drawing != null) CompletableFuture.completedFuture(drawing) else logValueFuture { - try { - HttpClients.createDefault().use { - val dataGet = HttpGet(Configure.www.taehui + "/avatar/drawing") - dataGet.setHeader("X-Real-IP", avatarIP) - it.execute(dataGet, HCDataHandler()) - } - } catch (e: IOException) { - logFault(e) - null - } - } - } - fun send(handler: ChannelHandlerContext, text: Any?) { val r = DefaultFullHttpResponse( HttpVersion.HTTP_1_1, @@ -140,7 +125,20 @@ val language = params.getOrDefault("language", "en-US") val avatarID = params.getOrDefault("avatarID", "") when (data.path()) { - "/qwilight/www/note" -> DB.getNote(params).thenAccept { send(ctx, it) } + "/qwilight/www/note" -> { + val viewUnit = params["viewUnit"]?.toInt() ?: 10 + if (viewUnit > 10) { + send400(ctx) + } else { + DB.getNote( + params["want"] ?: "", + params["src"]?.toInt() ?: 0, + params["fit"]?.toInt() ?: 0, + params["page"]?.toInt() ?: 1, + viewUnit + ).thenAccept { send(ctx, it) } + } + } "/qwilight/www/comment" -> { val noteID = params.getOrDefault("noteID", "") @@ -174,12 +172,15 @@ } } - "/qwilight/www/avatar" -> DB.getAvatar(params).thenAccept { - if (it != null) { - send(ctx, it) - } else { - send204(ctx) - } + "/qwilight/www/avatar" -> { + DB.getAvatar(Utility.getDefaultAvatarID(avatarID), params.getOrDefault("avatarName", "")) + .thenAccept { + if (it != null) { + send(ctx, it) + } else { + send204(ctx) + } + } } "/qwilight/www/avatar/favorites/5K" -> DB.getAvatarFavorites( @@ -427,7 +428,7 @@ } } - "/qwilight/www/title" -> DB.getTitle(params).thenAccept { + "/qwilight/www/title" -> DB.getTitle(Utility.getDefaultAvatarID(avatarID), language).thenAccept { if (it != null) { send(ctx, it) } else { @@ -436,7 +437,7 @@ } "/qwilight/www/titles" -> DB.getTitles( - params + Utility.getDefaultAvatarID(avatarID), language ).thenAccept { send(ctx, it) } "/qwilight/www/edge" -> { @@ -449,7 +450,7 @@ } "/qwilight/www/edges" -> DB.getEdgeIDs( - params + Utility.getDefaultAvatarID(avatarID) ).thenAccept { send(ctx, it) } "/qwilight/www/drawing" -> { @@ -459,57 +460,50 @@ val abilityClass9K = params.getOrDefault("abilityClass9K", "") val levelID = params.getOrDefault("levelID", "") if (drawingVariety.isNotEmpty()) { - if (avatarID.isEmpty()) { - when (drawingVariety) { - "0" -> getDefaultDrawingIf().thenAccept { send(ctx, it) } - "2" -> send(ctx, EdgeSystem.getDrawing("Default")) - else -> send400(ctx) - } - } else if (avatarID.startsWith("*")) { - when (drawingVariety) { - "0" -> getDefaultDrawingIf(ValveSystem.getDrawing(avatarID)).thenAccept { - send( - ctx, - it - ) - } - - "2" -> send(ctx, EdgeSystem.getDrawing("Default")) - else -> send400(ctx) - } - } else if (avatarID.startsWith("$")) { - when (drawingVariety) { - "0" -> getDefaultDrawingIf(PlatformSystem.getDrawing(avatarID)).thenAccept { - send( - ctx, - it - ) - } - - "2" -> send(ctx, EdgeSystem.getDrawing("Default")) - else -> send400(ctx) - } - } else { - when (drawingVariety) { - "0" -> logFuture { - HttpClients.createDefault().use { - val dataGet = HttpGet( - Configure.www.taehui + "/avatar/drawing/" + Utility.getDefaultAvatarID( - avatarID + when (drawingVariety) { + "0" -> { + fun sendAvatarDrawing(avatarID: String): CompletableFuture { + return logFuture { + HttpClients.createDefault().use { + val dataGet = HttpGet( + Configure.www.taehui + "/avatar/drawing/" + Utility.getDefaultAvatarID( + avatarID + ) ) - ) - dataGet.setHeader("X-Real-IP", avatarIP) - send(ctx, it.execute(dataGet, HCDataHandler())) + dataGet.setHeader("X-Real-IP", avatarIP) + send(ctx, it.execute(dataGet, HCDataHandler())) + } } } - "2" -> logFuture { - val edge = DB.getAvatarEdge(Utility.getDefaultAvatarID(avatarID)) - send(ctx, EdgeSystem.getDrawing(edge)) + if (avatarID.startsWith("*")) { + val avatarDrawing = ValveSystem.getDrawing(Utility.getDefaultAvatarID(avatarID)) + if (avatarDrawing != null) { + send(ctx, avatarDrawing) + } else { + sendAvatarDrawing(avatarID) + } + } else if (avatarID.startsWith("$")) { + if (PlatformIDSystem.hasAvatarID(avatarID)) { + sendAvatarDrawing(avatarID) + } else { + val avatarDrawing = PlatformSystem.getDrawing(avatarID) + if (avatarDrawing != null) { + send(ctx, avatarDrawing) + } else { + sendAvatarDrawing(avatarID) + } + } + } else { + sendAvatarDrawing(avatarID) } - - else -> send400(ctx) } + + "2" -> DB.getAvatarEdge(Utility.getDefaultAvatarID(avatarID)).thenAccept { + send(ctx, EdgeSystem.getDrawing(it)) + } + + else -> send400(ctx) } } else if (abilityClass5K.isNotEmpty()) { send( @@ -536,12 +530,7 @@ ) ) } else if (levelID.isNotEmpty()) { - send( - ctx, - LevelSystem.getLevelIDDrawing( - levelID - ) - ) + send(ctx, LevelSystem.getLevelIDDrawing(levelID)) } else { send400(ctx) }