diff --git a/src/main/kotlin/net/taehui/twilight/qwilight/QwilightAvatar.kt b/src/main/kotlin/net/taehui/twilight/qwilight/QwilightAvatar.kt index cc31bfe..dd12c2d 100644 --- a/src/main/kotlin/net/taehui/twilight/qwilight/QwilightAvatar.kt +++ b/src/main/kotlin/net/taehui/twilight/qwilight/QwilightAvatar.kt @@ -278,13 +278,16 @@ val avatarID = it[1] as String val avatarName = it[2] as String AvatarHandler.handleLogIn( - this, it[0] as String, avatarID, avatarName, avatarCompetence + this, + it[0] as String, + avatarID, + avatarName, + avatarCompetence ) AvatarIPSystem.putAvatarIP(this, avatarID) + send(EventOuterClass.Event.EventID.NOTIFY_PASS, DB.getPasses(avatarID)) DB.getNotifyUbuntu(avatarID).forEach { ubuntuID -> - AvatarHandler.getAvatar( - ubuntuID - )?.let { ubuntu -> + AvatarHandler.getAvatar(ubuntuID)?.let { ubuntu -> if (DB.isCrossUbuntu(avatarID, ubuntuID)) { ubuntu.send(EventOuterClass.Event.EventID.NOTIFY, object { val text = String.format( @@ -924,15 +927,20 @@ ) { val avatar = AvatarHandler.getAvatar(it) if (avatar != null) { - avatar.send(EventOuterClass.Event.EventID.NOTIFY_PASS, object { - val title = targetComputing.title - val artist = targetComputing.artist - val genre = targetComputing.genre - val levelText = targetComputing.levelText - val avatarName = this@QwilightAvatar.avatarName - val noteID = targetComputing.noteID - }) + avatar.send( + EventOuterClass.Event.EventID.NOTIFY_PASS, + arrayOf(object { + val title = targetComputing.title + val artist = targetComputing.artist + val genre = targetComputing.genre + val levelText = targetComputing.levelText + val avatarID = this@QwilightAvatar.avatarID + val avatarName = this@QwilightAvatar.avatarName + val noteID = targetComputing.noteID + }) + ) } else { + DB.setPass(it, targetComputing, avatarID) } } } diff --git a/src/main/kotlin/net/taehui/twilight/system/DB.kt b/src/main/kotlin/net/taehui/twilight/system/DB.kt index fadb896..ff03a1b 100644 --- a/src/main/kotlin/net/taehui/twilight/system/DB.kt +++ b/src/main/kotlin/net/taehui/twilight/system/DB.kt @@ -319,6 +319,23 @@ ) COLLATE=utf8mb4_general_ci ENGINE=InnoDB """.trimIndent() ) + dbStatement.executeUpdate( + """ + CREATE TABLE IF NOT EXISTS tw_pass ( + Avatar VARCHAR(20) NOT NULL, + Title TEXT NOT NULL, + Artist TEXT NOT NULL, + Genre TEXT NOT NULL, + Level_Text TEXT NOT NULL, + Note_ID VARCHAR(139) NOT NULL, + Avatar_ID VARCHAR(20) NOT NULL, + PRIMARY KEY (Avatar, Note_ID, Avatar_ID), + FOREIGN KEY (Avatar) REFERENCES tn_avatar(Avatar_ID) ON UPDATE CASCADE ON DELETE CASCADE, + FOREIGN KEY (Avatar_ID) REFERENCES tn_avatar(Avatar_ID) ON UPDATE CASCADE ON DELETE CASCADE, + KEY (Avatar) + ) COLLATE=utf8mb4_general_ci ENGINE=InnoDB + """.trimIndent() + ) } } } @@ -3416,6 +3433,66 @@ } } + fun setPass(avatar: String, targetComputing: Computing, avatarID: String) { + pool.connection.use { db -> + db.prepareStatement( + """ + REPLACE INTO tw_pass + VALUES(?, ?, ?, ?, ?, ?, ?) + """.trimIndent() + ).use { dbStatement -> + dbStatement.setString(1, avatar) + dbStatement.setString(2, targetComputing.title) + dbStatement.setString(3, targetComputing.artist) + dbStatement.setString(4, targetComputing.genre) + dbStatement.setString(5, targetComputing.levelText) + dbStatement.setString(6, targetComputing.noteID) + dbStatement.setString(7, avatarID) + dbStatement.execute() + } + } + } + + fun getPasses(avatar: String) { + pool.connection.use { db -> + val data = mutableListOf() + db.prepareStatement( + """ + SELECT Title, Artist, Genre, Level_Text, Note_ID, tn_avatar.Avatar_ID, tn_avatar.Avatar_Name + FROM tw_pass + INNER JOIN tn_avatar ON tw_pass.Avatar_ID = tn_avatar.Avatar_ID + WHERE Avatar = ? + """.trimIndent() + ).use { dbStatement -> + dbStatement.setString(1, avatar) + dbStatement.executeQuery().use { rows -> + while (rows.next()) { + data.add(object { + val title = rows.getString("Title") + val artist = rows.getString("Artist") + val genre = rows.getLong("Genre") + val levelText = rows.getLong("Level_Text") + val avatarID = rows.getLong("Avatar_ID") + val avatarName = rows.getLong("Avatar_Name") + val noteID = rows.getLong("Note_ID") + }) + } + } + } + db.prepareStatement( + """ + DELETE + FROM tw_pass + WHERE Avatar = ? + """.trimIndent() + ).use { dbStatement -> + dbStatement.setString(1, avatar) + dbStatement.execute() + } + data + } + } + interface IAvatarLevelVSItem { val noteID: String @@ -3445,19 +3522,19 @@ """.trimIndent() ).use { dbStatement -> dbStatement.setString(1, avatarID) - dbStatement.executeQuery().use { - while (it.next()) { - val noteID = it.getString("Note_ID") + dbStatement.executeQuery().use { rows -> + while (rows.next()) { + val noteID = rows.getString("Note_ID") noteIDAvatarLevelVSMap[noteID] = object : IAvatarLevelVSItem { override val noteID = noteID - override val noteID128 = it.getString("Note_ID_128") - override val noteID256 = it.getString("Note_ID_256") - val artist = it.getString("Artist") - val title = it.getString("Title") - val genre = it.getString("Genre") - val levelText = it.getString("Level_Text") - val level = it.getInt("Level") - override val stand = it.getInt("Stand") + override val noteID128 = rows.getString("Note_ID_128") + override val noteID256 = rows.getString("Note_ID_256") + val artist = rows.getString("Artist") + val title = rows.getString("Title") + val genre = rows.getString("Genre") + val levelText = rows.getString("Level_Text") + val level = rows.getInt("Level") + override val stand = rows.getInt("Stand") override var levelVSStand = 0 override val handled = getHandled(avatarID, noteID) } diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index 0dfa618..c4e9f79 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -11,12 +11,6 @@ - - - - - @@ -29,8 +23,14 @@ - + + + + + + @@ -58,13 +58,13 @@ - + - + \ No newline at end of file