Flatfile repair

This commit is contained in:
T00thpick1 2013-07-01 01:37:24 -04:00
parent f118ac14ca
commit 11e4ff34d6
2 changed files with 47 additions and 5 deletions

View File

@ -38,7 +38,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
protected FlatfileDatabaseManager() {
usersFile = new File(mcMMO.getUsersFilePath());
createDatabase();
checkStructure();
updateLeaderboards();
}
@ -555,8 +555,44 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
playerStatHash.put(SkillType.FISHING, fishing);
}
private void createDatabase() {
/**
* Checks that the file is present and valid
*/
private void checkStructure() {
if (usersFile.exists()) {
BufferedReader in = null;
FileWriter out = null;
String usersFilePath = mcMMO.getUsersFilePath();
synchronized (fileWritingLock) {
try {
in = new BufferedReader(new FileReader(usersFilePath));
StringBuilder writer = new StringBuilder();
String line = "";
while ((line = in.readLine()) != null) {
String[] character = line.split(":");
// If they're valid, rewrite them to the file.
if (character.length >= 37) {
writer.append(line).append("\r\n");
} else {
// Placeholder, repair row if needed (I.E. when new skills are added and such)
}
}
// Write the new file
out = new FileWriter(usersFilePath);
out.write(writer.toString());
}
catch (IOException e) {
mcMMO.p.getLogger().severe("Exception while reading " + usersFilePath + " (Are you sure you formatted it correctly?)" + e.toString());
}
finally {
tryClose(in);
tryClose(out);
}
}
return;
}

View File

@ -51,7 +51,7 @@ public final class SQLDatabaseManager implements DatabaseManager {
protected SQLDatabaseManager() {
checkConnected();
createStructure();
checkStructure();
}
public void purgePowerlessUsers() {
@ -589,9 +589,9 @@ public final class SQLDatabaseManager implements DatabaseManager {
}
/**
* Attempt to create the database structure.
* Checks that the database structure is present and correct
*/
private void createStructure() {
private void checkStructure() {
write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "users` ("
+ "`id` int(10) unsigned NOT NULL AUTO_INCREMENT,"
+ "`user` varchar(40) NOT NULL,"
@ -1042,6 +1042,12 @@ public final class SQLDatabaseManager implements DatabaseManager {
}
}
/**
* Retrieve the database id for a player
*
* @param playerName The name of the user to retrieve the id for
* @return the requested id or 0 if not found
*/
private int readId(String playerName) {
int id = 0;