From cc5389ea8f6d7b4606946bca98c515c841223ec2 Mon Sep 17 00:00:00 2001 From: Tomuxs Date: Thu, 12 Jun 2025 15:53:21 +0200 Subject: [PATCH] Fixed skin deletion --- app/src/main/java/org/skinner/Database.java | 40 ++++++++++++++------- 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/skinner/Database.java b/app/src/main/java/org/skinner/Database.java index 809509b..c68c2fd 100644 --- a/app/src/main/java/org/skinner/Database.java +++ b/app/src/main/java/org/skinner/Database.java @@ -149,19 +149,21 @@ public class Database { public static void deleteSkin(String hash) throws SQLException { Skin skin = getSkin(hash); - Skin defaultSkin = ensureDefaultSkin(); + Skin defaultSkin = ensureDefaultSkin(hash); - PreparedStatement stmt = getConnection().prepareStatement("DELETE FROM skin WHERE _hash = ?;"); + // Give effected profiles default skin + PreparedStatement stmt = getConnection().prepareStatement("UPDATE profile SET skin = ? WHERE skin = ?;"); - stmt.setString(1, hash); + stmt.setInt(1, defaultSkin.getId()); + stmt.setInt(2, skin.getId()); stmt.execute(); stmt.close(); - stmt = getConnection().prepareStatement("UPDATE profile SET skin = ? WHERE skin = ?;"); + // Remove targeted skin + stmt = getConnection().prepareStatement("DELETE FROM skin WHERE id = ?;"); - stmt.setInt(1, defaultSkin.getId()); - stmt.setInt(2, skin.getId()); + stmt.setInt(1, skin.getId()); stmt.execute(); stmt.close(); @@ -289,9 +291,15 @@ public class Database { stmt.close(); } - public static Skin getDefaultSkin() throws SQLException { - Statement stmt = getConnection().createStatement(); - ResultSet resultSet = stmt.executeQuery("SELECT * FROM skin ORDER BY id ASC LIMIT 1;"); + public static Skin getDefaultSkin(String exclude_skin) throws SQLException { + PreparedStatement stmt = exclude_skin == null ? + getConnection().prepareStatement("SELECT * FROM skin ORDER BY id ASC LIMIT 1;") : + getConnection().prepareStatement("SELECT * FROM skin WHERE _hash != ? ORDER BY id ASC LIMIT 1;"); + if (exclude_skin != null) + stmt.setString(1, exclude_skin); + + ResultSet resultSet = stmt.executeQuery(); + if (!resultSet.next()) return null; @@ -305,9 +313,13 @@ public class Database { ); } - private static Skin ensureDefaultSkin() throws SQLException { + public static Skin getDefaultSkin() throws SQLException { + return getDefaultSkin(null); + } + + private static Skin ensureDefaultSkin(String exclude_skin) throws SQLException { // TODO: Optimise - Skin skin = getDefaultSkin(); + Skin skin = getDefaultSkin(exclude_skin); if (skin != null) return skin; try { @@ -320,7 +332,11 @@ public class Database { } catch (IOException e) { e.printStackTrace(); } - return getDefaultSkin(); + return getDefaultSkin(exclude_skin); + } + + private static Skin ensureDefaultSkin() throws SQLException { + return ensureDefaultSkin(null); } private boolean errored = false;