Skip to content
Snippets Groups Projects
Commit bb3def55 authored by Matyáš Latner's avatar Matyáš Latner
Browse files

Merge branch 'feature-halloffame_devel' into 'V3.2.1'

#379 Fixed bug with trophy for playing all games in one day



See merge request !366
parents cbdfe79c 346f9d66
No related branches found
No related tags found
No related merge requests found
......@@ -18,7 +18,6 @@ import java.util.Set;
import cz.nic.tablexia.TablexiaStorage;
import cz.nic.tablexia.game.AbstractTablexiaGame;
import cz.nic.tablexia.game.GameDefinition;
import cz.nic.tablexia.game.common.TablexiaRandom;
import cz.nic.tablexia.game.difficulty.GameDifficulty;
import cz.nic.tablexia.game.trophy.UserTrophyDefinition;
import cz.nic.tablexia.model.UserDAO;
......@@ -28,6 +27,7 @@ import cz.nic.tablexia.util.Log;
/**
* Created by frantisek on 4.11.15.
* Edited by danilov on 22.6.16.
*/
public class UserTrophy {
......@@ -37,22 +37,20 @@ public class UserTrophy {
public static class AllGamesInOneDay implements UserTrophyResolver {
public static final String ALL_IN_ONE_DAY_SELECT = "SELECT 1 FROM (" +
"SELECT COUNT(game_number), game_number, DATE(SUBSTR(end_time, 1, 10), 'unixepoch') AS end_date FROM game" +
" WHERE user_id = ? AND end_time IS NOT NULL GROUP BY game_number, end_date" +
") GROUP BY end_date HAVING COUNT(*) = ?";
public static final String ALL_IN_ONE_DAY_SELECT = "SELECT game_number, end_time FROM game WHERE user_id = ? AND end_time IS NOT NULL";
@Override
public boolean hasGameTrophy(User user, UserTrophyDefinition trophyDef) {
int result = 0;
HashMap<Calendar, Integer> games = new HashMap<Calendar, Integer>();
try {
PreparedStatement statement = TablexiaStorage.getInstance().prepareStatement(ALL_IN_ONE_DAY_SELECT);
statement.setLong(1, user.getId());
statement.setInt(2, GameDefinition.values().length);
try {
ResultSet resultSet = statement.executeQuery();
if (resultSet.next()) {
result = resultSet.getInt(1);
while (resultSet.next()) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(resultSet.getLong(2));
games.put(calendar, resultSet.getInt(1));
}
resultSet.close();
} catch (SQLException e) {
......@@ -63,7 +61,24 @@ public class UserTrophy {
Log.err(UserTrophy.class, "Cannot select number of games from DB!", e);
}
return result == 1;
for(Calendar calendar1 : games.keySet()) {
boolean[] allGamesPlayedArray = new boolean[GameDefinition.values().length];
boolean allGamesPlayed = true;
for (Calendar calendar2 : games.keySet()) {
if(calendar1.get(Calendar.DAY_OF_YEAR) == calendar2.get(Calendar.DAY_OF_YEAR) && calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR)) {
allGamesPlayedArray[games.get(calendar2) - 1] = true;
}
}
for(int i = 0; i < allGamesPlayedArray.length; i++) {
if(!allGamesPlayedArray[i]) {
allGamesPlayed = false;
break;
}
}
if(allGamesPlayed) return true;
}
return false;
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment