added new record stuff and lots of optimisation

This commit is contained in:
potzplitz 2024-03-30 20:44:54 +01:00
parent 65631a126d
commit 0417d9b9bb
8 changed files with 289 additions and 162 deletions

View file

@ -18,6 +18,9 @@ public class DatabaseManager {
createLevelDB.createNewDatabase("levels"); createLevelDB.createNewDatabase("levels");
} }
createLevelDB.createNewTable("levels"); createLevelDB.createNewTable("levels");
createLevelDB.checkColumns("levels");
} }
public void migrateData() { public void migrateData() {
@ -77,7 +80,8 @@ public class DatabaseManager {
Integer.parseInt(data.getQualification().get(i)), // Qualifikation Integer.parseInt(data.getQualification().get(i)), // Qualifikation
data.getVictors().get(i), // Sieger data.getVictors().get(i), // Sieger
false, false,
false false,
""
); );
} }

View file

@ -0,0 +1,15 @@
package database;
public class MigrateDataToNewDatabase {
public void migrate() {
Sqlite sql = new Sqlite("levels");
sql.queryData("levels");
}
}

View file

@ -2,21 +2,21 @@ package database;
import java.io.File; import java.io.File;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Statement; import java.sql.Statement;
import java.util.ArrayList; import java.util.ArrayList;
import data.FetchData; import data.FetchData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class Sqlite { public class Sqlite {
private static String url = "jdbc:sqlite:C:\\ExtremeDemonList\\database\\sqlite\\"; private static String url = "jdbc:sqlite:C:\\ExtremeDemonList\\database\\sqlite\\";
private static String filename; private static String filename;
private ArrayList<String> levelname = new ArrayList<String>(); private ArrayList<String> levelname = new ArrayList<String>();
private ArrayList<String> levelID = new ArrayList<String>(); private ArrayList<String> levelID = new ArrayList<String>();
private ArrayList<String> author = new ArrayList<String>(); private ArrayList<String> author = new ArrayList<String>();
@ -29,6 +29,7 @@ public class Sqlite {
private ArrayList<String> rawLevelNames = new ArrayList<String>(); private ArrayList<String> rawLevelNames = new ArrayList<String>();
private ArrayList<Integer> attempts = new ArrayList<Integer>(); private ArrayList<Integer> attempts = new ArrayList<Integer>();
private ArrayList<Boolean> locked = new ArrayList<Boolean>(); // New column private ArrayList<Boolean> locked = new ArrayList<Boolean>(); // New column
private ArrayList<String> pbarr = new ArrayList<String>();
public ArrayList<String> getLevelname() { public ArrayList<String> getLevelname() {
return levelname; return levelname;
@ -69,7 +70,7 @@ public class Sqlite {
public ArrayList<String> getRawLevelNames() { public ArrayList<String> getRawLevelNames() {
return rawLevelNames; return rawLevelNames;
} }
public ArrayList<Integer> getAttempts() { public ArrayList<Integer> getAttempts() {
return attempts; return attempts;
} }
@ -78,34 +79,32 @@ public class Sqlite {
return locked; return locked;
} }
public ArrayList<String> getPbarr() {
return pbarr;
}
public Sqlite(String dbname) { // setzt variablen public Sqlite(String dbname) { // setzt variablen
url = "jdbc:sqlite:C:\\ExtremeDemonList\\database\\sqlite\\"; url = "jdbc:sqlite:C:\\ExtremeDemonList\\database\\sqlite\\";
url += dbname + ".db"; url += dbname + ".db";
filename = dbname + ""; filename = dbname + "";
} }
public boolean exists() { // überprüft, ob datenbank existiert public boolean exists() { // überprüft, ob datenbank existiert
File file = new File("C:\\ExtremeDemonList\\database\\sqlite\\" + filename + ".db"); File file = new File("C:\\ExtremeDemonList\\database\\sqlite\\" + filename + ".db");
if(file.exists()) { return file.exists();
return true; // ja
} else {
return false; // nein
}
} }
public void createNewDatabase(String dbname) { // erstellt eine neue datenbank public void createNewDatabase(String dbname) { // erstellt eine neue datenbank
url = "jdbc:sqlite:C:\\ExtremeDemonList\\database\\sqlite\\"; url = "jdbc:sqlite:C:\\ExtremeDemonList\\database\\sqlite\\";
url += dbname + ".db"; url += dbname + ".db";
filename = dbname; filename = dbname;
try (Connection conn = DriverManager.getConnection(url)) { try (Connection conn = DriverManager.getConnection(url)) {
} catch(SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
public void createNewTable(String tablename) { public void createNewTable(String tablename) {
String sql = "CREATE TABLE IF NOT EXISTS " + tablename + " (\n" String sql = "CREATE TABLE IF NOT EXISTS " + tablename + " (\n"
+ " id INTEGER PRIMARY KEY,\n" + " id INTEGER PRIMARY KEY,\n"
@ -121,24 +120,24 @@ public class Sqlite {
+ " records TEXT NOT NULL,\n" + " records TEXT NOT NULL,\n"
+ " attempts INTEGER NOT NULL,\n" + " attempts INTEGER NOT NULL,\n"
+ " completed BOOLEAN NOT NULL,\n" + " completed BOOLEAN NOT NULL,\n"
+ " locked BOOLEAN NOT NULL\n" // Neue Spalte + " locked BOOLEAN NOT NULL,\n" // Neue Spalte
+ " personalBest STRING NOT NULL\n"
+ ");"; + ");";
try (Connection conn = DriverManager.getConnection(url); try (Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement()) { Statement stmt = conn.createStatement()) {
// create a new table // create a new table
stmt.execute(sql); stmt.execute(sql);
} catch (SQLException e) { } catch (SQLException e) {
System.out.println(e.getMessage()); System.out.println(e.getMessage());
} }
} }
public void insertData(String tablename, Integer attempts, int placement, String levelname, String levelnameRaw, int levelid, String author, String creators, String verifier, String verificationLink, int percenttoqualify, String records, boolean completed, boolean locked) { public void insertData(String tablename, Integer attempts, int placement, String levelname, String levelnameRaw, int levelid, String author, String creators, String verifier, String verificationLink, int percenttoqualify, String records, boolean completed, boolean locked, String pb) {
String sql = "INSERT INTO " + tablename + " (placement, levelname, levelnameRaw, levelID, author, creators, verifier, verificationLink, percentToQualify, records, attempts, completed, locked) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; String sql = "INSERT INTO " + tablename + " (placement, levelname, levelnameRaw, levelID, author, creators, verifier, verificationLink, percentToQualify, records, attempts, completed, locked, personalBest) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
System.out.println("tablename: " + levelname); System.out.println("tablename: " + levelname);
try (Connection conn = DriverManager.getConnection(url); try (Connection conn = DriverManager.getConnection(url);
PreparedStatement pstmt = conn.prepareStatement(sql)) { PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, placement); pstmt.setInt(1, placement);
@ -154,47 +153,48 @@ public class Sqlite {
pstmt.setInt(11, attempts); pstmt.setInt(11, attempts);
pstmt.setBoolean(12, completed); pstmt.setBoolean(12, completed);
pstmt.setBoolean(13, locked); pstmt.setBoolean(13, locked);
pstmt.setString(14, pb);
pstmt.executeUpdate(); pstmt.executeUpdate();
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace();
}
}
public void queryData(String tablename) {
String sql = "SELECT levelname, levelNameRaw, levelID, author, creators, verifier, verificationLink, percentToQualify, attempts, completed, records, locked FROM " + tablename;
try (Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)){
// loop through the result set
while (rs.next()) {
levelname.add(rs.getString("levelname"));
levelID.add(rs.getInt("levelID") + "");
author.add(rs.getString("author"));
creators.add(rs.getString("creators"));
verifier.add(rs.getString("verifier"));
verificationLink.add(rs.getString("verificationLink"));
percenttoqualify.add(rs.getInt("percentToQualify") + "");
completed.add(rs.getBoolean("completed") + "");
records.add(rs.getString("records"));
rawLevelNames.add(rs.getString("levelNameRaw"));
attempts.add(rs.getInt("attempts"));
locked.add(rs.getBoolean("locked")); // Get the value of the new column
}
} catch(SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
public void queryData(String tablename) {
String sql = "SELECT * FROM " + tablename;
try (Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
// loop through the result set
while (rs.next()) {
levelname.add(rs.getString("levelname"));
levelID.add(rs.getInt("levelID") + "");
author.add(rs.getString("author"));
creators.add(rs.getString("creators"));
verifier.add(rs.getString("verifier"));
verificationLink.add(rs.getString("verificationLink"));
percenttoqualify.add(rs.getInt("percentToQualify") + "");
completed.add(rs.getBoolean("completed") + "");
records.add(rs.getString("records"));
rawLevelNames.add(rs.getString("levelNameRaw"));
attempts.add(rs.getInt("attempts"));
locked.add(rs.getBoolean("locked")); // Get the value of the new column
pbarr.add(rs.getString("personalBest"));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public void sortData(String tablename) throws SQLException { public void sortData(String tablename) throws SQLException {
FetchData data = new FetchData(); FetchData data = new FetchData();
ArrayList<String> levelnamelocal = new ArrayList<String>(); ArrayList<String> levelnamelocal = new ArrayList<String>();
ArrayList<String> levelIDlocal = new ArrayList<String>(); ArrayList<String> levelIDlocal = new ArrayList<String>();
@ -208,6 +208,7 @@ public class Sqlite {
ArrayList<String> rawLevelNameslocal = new ArrayList<String>(); ArrayList<String> rawLevelNameslocal = new ArrayList<String>();
ArrayList<Integer> attemptsLocal = new ArrayList<Integer>(); ArrayList<Integer> attemptsLocal = new ArrayList<Integer>();
ArrayList<Boolean> lockedLocal = new ArrayList<Boolean>(); ArrayList<Boolean> lockedLocal = new ArrayList<Boolean>();
ArrayList<String> pblocal = new ArrayList<String>();
try (Connection conn = DriverManager.getConnection(url); try (Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement()) { Statement stmt = conn.createStatement()) {
@ -241,6 +242,7 @@ public class Sqlite {
rawLevelNameslocal.add(rs.getString("levelNameRaw")); rawLevelNameslocal.add(rs.getString("levelNameRaw"));
attemptsLocal.add(rs.getInt("attempts")); attemptsLocal.add(rs.getInt("attempts"));
lockedLocal.add(rs.getBoolean("locked")); lockedLocal.add(rs.getBoolean("locked"));
pblocal.add(rs.getString("personalBest"));
} }
} }
@ -251,7 +253,7 @@ public class Sqlite {
createNewTable(tablename); createNewTable(tablename);
// Füge Daten in die neue Tabelle ein // Füge Daten in die neue Tabelle ein
String insert = "INSERT INTO " + tablename + " (placement, levelname, levelnameRaw, levelID, author, creators, verifier, verificationLink, percentToQualify, records, attempts, completed, locked) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; String insert = "INSERT INTO " + tablename + " (placement, levelname, levelnameRaw, levelID, author, creators, verifier, verificationLink, percentToQualify, records, attempts, completed, locked, personalBest) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
try (PreparedStatement pstmt = conn.prepareStatement(insert)) { try (PreparedStatement pstmt = conn.prepareStatement(insert)) {
for (int i = 0; i < levelnamelocal.size(); i++) { for (int i = 0; i < levelnamelocal.size(); i++) {
pstmt.setInt(1, i + 1); pstmt.setInt(1, i + 1);
@ -267,6 +269,7 @@ public class Sqlite {
pstmt.setInt(11, attemptsLocal.get(i)); pstmt.setInt(11, attemptsLocal.get(i));
pstmt.setBoolean(12, false); pstmt.setBoolean(12, false);
pstmt.setBoolean(13, lockedLocal.get(i)); // Insert value of locked column pstmt.setBoolean(13, lockedLocal.get(i)); // Insert value of locked column
pstmt.setString(14, pblocal.get(i));
pstmt.executeUpdate(); pstmt.executeUpdate();
} }
} }
@ -275,16 +278,19 @@ public class Sqlite {
} }
} }
public void modifyData(String levelname, boolean completedStatus, int attempts, boolean lock) { public void modifyData(String levelname, boolean completedStatus, int attempts, boolean lock, String percent) {
String sql = "UPDATE levels SET completed = ?, attempts = ?, locked = ? WHERE levelname = ?"; String sql = "UPDATE levels SET completed = ?, attempts = ?, locked = ?, personalBest = ? WHERE levelname = ?";
try (Connection conn = DriverManager.getConnection(url); try (Connection conn = DriverManager.getConnection(url);
PreparedStatement pstmt = conn.prepareStatement(sql)) { PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setBoolean(1, completedStatus); pstmt.setBoolean(1, completedStatus);
pstmt.setInt(2, attempts); pstmt.setInt(2, attempts);
pstmt.setBoolean(3, lock); // Korrigierte Reihenfolge pstmt.setBoolean(3, lock); // Korrigierte Reihenfolge
pstmt.setString(4, levelname); // Korrigierte Reihenfolge pstmt.setString(4, percent);
pstmt.setString(5, levelname); // Korrigierte Reihenfolge
int rowsUpdated = pstmt.executeUpdate(); int rowsUpdated = pstmt.executeUpdate();
if (rowsUpdated > 0) { if (rowsUpdated > 0) {
System.out.println("Data updated successfully."); System.out.println("Data updated successfully.");
@ -296,4 +302,72 @@ public class Sqlite {
} }
} }
public void checkColumns(String tablename) {
String[] spalten = {"placement", "levelname", "levelnameRaw", "levelID", "author", "creators", "verifier", "verificationLink", "percentToQualify", "records", "attempts", "completed", "locked", "personalBest"};
// Datenbankverbindung
try (Connection connection = DriverManager.getConnection(url)) {
DatabaseMetaData metaData = connection.getMetaData();
ResultSet resultSet;
int missing = 0;
// Schleife über die Spalten
for (String spalte : spalten) {
// Abfrage der Spalteninformationen
resultSet = metaData.getColumns(null, null, tablename, spalte);
if (!resultSet.next()) {
System.out.println("Spalte " + spalte + " existiert nicht. Eine neue Spalte wird erstellt.");
// Eine neue Spalte erstellen
createNewColumn(tablename, spalte);
missing++;
}
}
if (missing > 0) {
moveDataToNewDatabase(tablename);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
private void createNewColumn(String tablename, String columnName) {
String sql = "ALTER TABLE " + tablename + " ADD COLUMN " + columnName + " TEXT";
try (Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement()) {
stmt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void moveDataToNewDatabase(String tablename) {
// Neuen Tabellennamen für die Kopie
String newTableName = tablename + "_new";
// Erstelle die neue Tabelle
createNewTable(newTableName);
try (Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement()) {
// SQL-Abfrage, um Daten von der alten Tabelle in die neue Tabelle zu kopieren
String copyDataQuery = "INSERT INTO " + newTableName + " SELECT * FROM " + tablename;
// Führe die SQL-Abfrage aus
stmt.executeUpdate(copyDataQuery);
// Lösche die alte Tabelle
String dropOldTableQuery = "DROP TABLE IF EXISTS " + tablename;
stmt.executeUpdate(dropOldTableQuery);
System.out.println("Daten wurden erfolgreich von der alten Tabelle in die neue Tabelle kopiert.");
} catch (SQLException e) {
e.printStackTrace();
}
}
} }

View file

@ -9,6 +9,7 @@ import javax.swing.JTextArea;
import data.FetchData; import data.FetchData;
import data.ManageFiles; import data.ManageFiles;
import database.Sqlite;
public class AttemptsProgress { public class AttemptsProgress {
@ -16,18 +17,25 @@ public class AttemptsProgress {
JTextArea area = new JTextArea(); JTextArea area = new JTextArea();
JScrollPane scroll = new JScrollPane(area); JScrollPane scroll = new JScrollPane(area);
JFrame main = new JFrame("Updater"); JFrame main = new JFrame("Updater");
JLabel zeit = new JLabel("Verstrichene Zeit: ");
private float timer;
private float finishedtime;
private boolean running = false;
public void build() { public void build() {
running = true;
main.setSize(400, 300); main.setSize(400, 300);
main.setLayout(null); main.setLayout(null);
main.setResizable(false); main.setResizable(false);
main.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); main.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
JLabel info = new JLabel("Speicherstand wird gelesen...");
info.setBounds(120, 1, 500, 30); zeit.setBounds(90, 1, 500, 30);
area.setEditable(false); area.setEditable(false);
@ -47,20 +55,24 @@ public class AttemptsProgress {
bar.setMaximum(data.allLevels().size() - 1); bar.setMaximum(data.allLevels().size() - 1);
bar.setStringPainted(true); bar.setStringPainted(true);
main.add(info); main.add(zeit);
main.add(scroll); main.add(scroll);
main.add(bar); main.add(bar);
main.setVisible(true); main.setVisible(true);
area.append("Speicherstand wird eingelesen...");
} }
public void update(String level, int attempts, int selection, int index) { public void update(String level, int attempts, int percent, int index) {
bar.setValue(index); bar.setValue(index);
area.append(level + " >>> " + attempts + " Attempts\n"); area.append(index + "| " + level + " >>> " + attempts + " Attempts, Progress: " + percent + "%\n");
area.setCaretPosition(area.getDocument().getLength()); area.setCaretPosition(area.getDocument().getLength());
timer = 0;
} }
public void close() { public void close() {
running = false;
JOptionPane.showMessageDialog(null, "Attempts wurden erfolgreich übertragen.", "Fertig", JOptionPane.INFORMATION_MESSAGE); JOptionPane.showMessageDialog(null, "Attempts wurden erfolgreich übertragen.", "Fertig", JOptionPane.INFORMATION_MESSAGE);
main.dispose(); main.dispose();
} }

View file

@ -75,6 +75,7 @@ public class MainGUI {
data.queryData("levels"); data.queryData("levels");
gridLayout.setRows(data.getLevelname().size()); gridLayout.setRows(data.getLevelname().size());
main.setSize(900, 700); main.setSize(900, 700);
main.setLayout(null); main.setLayout(null);
@ -93,8 +94,7 @@ public class MainGUI {
info.setBounds(380, 270, 300, 30); info.setBounds(380, 270, 300, 30);
currentLevel.setBounds(200, 330, 200, 30); currentLevel.setBounds(200, 330, 200, 30);
levelpanel.setBackground(Color.LIGHT_GRAY);
levelpanel.setBorder(BorderFactory.createLineBorder(Color.BLACK)); levelpanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
levelpanel.setLayout(gridLayout); levelpanel.setLayout(gridLayout);
@ -172,6 +172,9 @@ public class MainGUI {
uncompleted.setMargin(new Insets(0,0,0,0)); uncompleted.setMargin(new Insets(0,0,0,0));
uncompleted.setVisible(false); uncompleted.setVisible(false);
JLabel percent = new JLabel("0%");
percent.setBounds(130, 10, 100, 30);
JTextField attempts = new JTextField("0"); JTextField attempts = new JTextField("0");
attempts.setBounds(500, 17, 70, 18); attempts.setBounds(500, 17, 70, 18);
attempts.setVisible(false); attempts.setVisible(false);
@ -261,7 +264,7 @@ public class MainGUI {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
if(!(comp[index] == Boolean.parseBoolean(data.getCompleted().get(index))) || !(attempts.getText().equals(data.getAttempts().get(index) + "")) || !(data.getLocked().get(index) == lockbool[index])) { if(!(comp[index] == Boolean.parseBoolean(data.getCompleted().get(index))) || !(attempts.getText().equals(data.getAttempts().get(index) + "")) || !(data.getLocked().get(index) == lockbool[index])) {
data.modifyData(data.getLevelname().get(index), comp[index], Integer.parseInt(attempts.getText()), lockbool[index]); data.modifyData(data.getLevelname().get(index), comp[index], Integer.parseInt(attempts.getText()), lockbool[index], data.getPbarr().get(index));
} }
@ -338,6 +341,17 @@ public class MainGUI {
rank.setBounds(10, 10, 40, 30); rank.setBounds(10, 10, 40, 30);
rank.setName(i + ""); rank.setName(i + "");
if(data.getPbarr().get(i) == null) {
percent.setText("0%");
} else {
percent.setText(data.getPbarr().get(i) + "%");
}
if(Boolean.parseBoolean(data.getCompleted().get(i))) {
percent.setText("100%");
percent.setForeground(Color.decode("#008000"));
}
filtercompleted.setText("nach Geschafft filtern (" + completedcount + ")"); filtercompleted.setText("nach Geschafft filtern (" + completedcount + ")");
show.addActionListener(new ActionListener() { show.addActionListener(new ActionListener() {
@ -417,20 +431,20 @@ public class MainGUI {
filtercompleted.addItemListener(new ItemListener() { filtercompleted.addItemListener(new ItemListener() {
@Override @Override
public void itemStateChanged(ItemEvent e) { public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) { boolean isSelected = e.getStateChange() == ItemEvent.SELECTED;
if (!contents.getBackground().equals(Color.decode("#cbffbf"))) { if (isSelected && !contents.getBackground().equals(Color.decode("#cbffbf"))) {
levelpanel.remove(contents); levelpanel.remove(contents);
gridLayout.setRows(data.getLevelname().size()); gridLayout.setRows(data.getLevelname().size());
scroll.repaint(); scroll.repaint();
scroll.revalidate(); scroll.revalidate();
} } else if (!isSelected) {
} else if (e.getStateChange() == ItemEvent.DESELECTED) {
levelpanel.add(contents, 0); levelpanel.add(contents, 0);
} }
levelpanel.repaint(); levelpanel.repaint();
levelpanel.revalidate(); levelpanel.revalidate();
} }
}); });
contents.add(levelname); contents.add(levelname);
contents.add(rank); contents.add(rank);
@ -441,6 +455,7 @@ public class MainGUI {
contents.add(attempts); contents.add(attempts);
contents.add(sperren); contents.add(sperren);
contents.add(lockind); contents.add(lockind);
contents.add(percent);
levelpanel.add(contents); levelpanel.add(contents);
} }

View file

@ -6,6 +6,7 @@ import java.util.zip.DataFormatException;
import data.FetchData; import data.FetchData;
import data.ManageFiles; import data.ManageFiles;
import database.DatabaseManager; import database.DatabaseManager;
import database.Sqlite;
import filestructure.CreateFileStructure; import filestructure.CreateFileStructure;
import gui.LoadMenu; import gui.LoadMenu;
import preload.PreChecks; import preload.PreChecks;
@ -38,6 +39,9 @@ public class Main {
load.updateBar("Daten werden überprüft..."); load.updateBar("Daten werden überprüft...");
Sqlite sql = new Sqlite("levels");
sql.checkColumns("levels");
PreChecks check = new PreChecks(); PreChecks check = new PreChecks();
check.check(); check.check();
@ -47,8 +51,7 @@ public class Main {
manager.compareArrays(settings.isOldsystem()); manager.compareArrays(settings.isOldsystem());
load.updateBar("Datenbank wird gestartet..."); load.updateBar("Datenbank wird gestartet...");
DatabaseManager data = new DatabaseManager();
DatabaseManager data = new DatabaseManager();
data.manage(); data.manage();
load.updateBar("Ladevorgang abgeschlossen"); load.updateBar("Ladevorgang abgeschlossen");

View file

@ -1,6 +1,8 @@
package readsafefile; package readsafefile;
import java.io.File; import java.io.File;
import java.util.HashMap;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilderFactory;
@ -10,64 +12,66 @@ import org.w3c.dom.Element;
import org.w3c.dom.NodeList; import org.w3c.dom.NodeList;
public class ReadAttemptsFromXML { public class ReadAttemptsFromXML {
public String getAttempts(String levelID) { public Map<String, String> attempts = new HashMap<String, String>();
String atts = "0"; public Map<String, String> newbestMap = new HashMap<>();
try {
// Pfad zur XML-Datei public void readAttempts() {
File xmlFile = new File("C:\\ExtremeDemonList\\userdata\\CCGameManager.dat.xml"); try {
File xmlFile = new File("C:\\ExtremeDemonList\\userdata\\CCGameManager.dat.xml");
// Erstellen des Dokument-Builders DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
// Parsen der XML-Datei, um ein Document-Objekt zu erhalten Document doc = dBuilder.parse(xmlFile);
Document doc = dBuilder.parse(xmlFile);
// Normalisieren des Documents doc.getDocumentElement().normalize();
doc.getDocumentElement().normalize();
// Die NodeList der <k> Elemente erhalten NodeList kList = doc.getElementsByTagName("k");
NodeList kList = doc.getElementsByTagName("k");
// Durchlaufen der NodeList Map<String, String> tempAttempts = new HashMap<>();
for (int i = 0; i < kList.getLength(); i++) {
// Aktuelles Node
Element kElement = (Element) kList.item(i);
// Prüfen, ob der Wert des <k> Elements eine Level-ID ist for (int i = 0; i < kList.getLength(); i++) {
String currentLevelID = kElement.getTextContent(); Element kElement = (Element) kList.item(i);
String currentLevelID = kElement.getTextContent();
if (currentLevelID.equals(levelID)) {
// Das übergeordnete <d> Element finden Element dElement = (Element) kElement.getNextSibling();
Element dElement = (Element) kElement.getNextSibling();
while (dElement != null && !dElement.getNodeName().equals("d")) {
// Überprüfen, ob das nächste Element ein <d> Element ist dElement = (Element) dElement.getNextSibling();
while (dElement != null && !dElement.getNodeName().equals("d")) { }
dElement = (Element) dElement.getNextSibling();
} if (dElement != null) {
NodeList dChildren = dElement.getChildNodes();
// Überprüfen, ob das <d> Element gefunden wurde String attemptsValue = null;
if (dElement != null) { String percentValue = null;
// Den <k> Key "k1" im <d> Element finden
NodeList dChildren = dElement.getChildNodes(); for (int j = 0; j < dChildren.getLength(); j++) {
for (int j = 0; j < dChildren.getLength(); j++) { if (dChildren.item(j).getNodeName().equals("k")) {
if (dChildren.item(j).getNodeName().equals("k")) { Element kChild = (Element) dChildren.item(j);
Element kChild = (Element) dChildren.item(j);
if (kChild.getTextContent().equals("k18")) { if (kChild.getTextContent().equals("k18")) {
// Den Wert der Attempts erhalten attemptsValue = dChildren.item(j + 1).getTextContent();
atts = dChildren.item(j + 1).getTextContent(); }
System.out.println("Attempts des Levels " + levelID + ": " + atts);
return atts; if (kChild.getTextContent().equals("k19")) {
} percentValue = dChildren.item(j + 1).getTextContent();
} }
} }
} }
}
} if (attemptsValue != null && percentValue != null) {
} catch (Exception e) { tempAttempts.put(currentLevelID, attemptsValue ); // + "," + percentValue
e.printStackTrace(); newbestMap.put(currentLevelID, percentValue);
} }
return atts; }
} }
// Füge die Daten aus der temporären Map in die attempts-Map ein
attempts.putAll(tempAttempts);
} catch (Exception e) {
e.printStackTrace();
}
}
} }

View file

@ -9,8 +9,7 @@ import gui.AttemptsProgress;
public class SafeFileManager { public class SafeFileManager {
public void DecryptSafeFile() throws IOException { public void DecryptSafeFile() throws IOException {
DecryptXOR dec = new DecryptXOR(); DecryptXOR.decryptAndWriteFiles();
dec.decryptAndWriteFiles();
} }
public void ReadIndexAttempts() throws IOException { public void ReadIndexAttempts() throws IOException {
@ -22,37 +21,38 @@ public class SafeFileManager {
@Override @Override
public void run() { public void run() {
// TODO Auto-generated method stub
Sqlite database = new Sqlite("levels"); Sqlite database = new Sqlite("levels");
database.queryData("levels"); database.queryData("levels");
FetchData fetch = new FetchData(); FetchData fetch = new FetchData();
try { try {
fetch.getGithubString(); fetch.getGithubString();
} catch (IOException e) { } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
} }
ReadAttemptsFromXML read = new ReadAttemptsFromXML(); ReadAttemptsFromXML read = new ReadAttemptsFromXML();
read.readAttempts();
String attempts; String attempts;
String percent;
for(int i = 0; i < fetch.allLevels().size(); i++) { for(int i = 0; i < database.getLevelID().size(); i++) {
attempts = read.attempts.get(database.getLevelID().get(i));
attempts = read.getAttempts(database.getLevelID().get(i)); percent = read.newbestMap.get(database.getLevelID().get(i));
if(attempts == null) {
prog.update(database.getLevelname().get(i), Integer.parseInt(attempts), 1, i); attempts = 0 + "";
if(!database.getLocked().get(i)) {
database.modifyData(database.getLevelname().get(i), Boolean.parseBoolean(database.getCompleted().get(i)), Integer.parseInt(attempts), database.getLocked().get(i));
} }
} if(percent == null) {
} percent = 0 + "";
}
}); prog.update(database.getLevelname().get(i), Integer.parseInt(attempts), Integer.parseInt(percent), i);
if(!database.getLocked().get(i)) {
database.modifyData(database.getLevelname().get(i), Boolean.parseBoolean(database.getCompleted().get(i)), Integer.parseInt(attempts), database.getLocked().get(i), percent);
}
}
}
});
thread.start(); thread.start();
} }
} }