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() { protected FlatfileDatabaseManager() {
usersFile = new File(mcMMO.getUsersFilePath()); usersFile = new File(mcMMO.getUsersFilePath());
createDatabase(); checkStructure();
updateLeaderboards(); updateLeaderboards();
} }
@ -555,8 +555,44 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
playerStatHash.put(SkillType.FISHING, fishing); playerStatHash.put(SkillType.FISHING, fishing);
} }
private void createDatabase() { /**
* Checks that the file is present and valid
*/
private void checkStructure() {
if (usersFile.exists()) { 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; return;
} }

View File

@ -51,7 +51,7 @@ public final class SQLDatabaseManager implements DatabaseManager {
protected SQLDatabaseManager() { protected SQLDatabaseManager() {
checkConnected(); checkConnected();
createStructure(); checkStructure();
} }
public void purgePowerlessUsers() { 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` (" write("CREATE TABLE IF NOT EXISTS `" + tablePrefix + "users` ("
+ "`id` int(10) unsigned NOT NULL AUTO_INCREMENT," + "`id` int(10) unsigned NOT NULL AUTO_INCREMENT,"
+ "`user` varchar(40) NOT NULL," + "`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) { private int readId(String playerName) {
int id = 0; int id = 0;