[2.9.0-DEV] Bugfixes

Fix #61 #58 #56 #57 #59
- Fixed GamemodeTimesHandler giving NPE if a gamemode is null.
- Fixed ArrayOutOfBounds if sessions is empty.
- Fixed randomly caused NPE when transforming sessions to length values
(also improved it)

Demographics tab not yet finished.
This commit is contained in:
Rsl1122 2017-03-20 14:50:29 +02:00
parent 388f669fb1
commit 9e6c342f89
4 changed files with 35 additions and 23 deletions

View File

@ -225,6 +225,9 @@ public class UserData {
* @param time * @param time
*/ */
public void setGMTime(GameMode gm, long time) { public void setGMTime(GameMode gm, long time) {
if (gmTimes == null) {
gmTimes = new HashMap<>();
}
gmTimes.put(gm, time); gmTimes.put(gm, time);
} }

View File

@ -33,7 +33,7 @@ public class GamemodeTimesHandler {
* @param data UserData matching the Player * @param data UserData matching the Player
*/ */
public void handleLogin(GameMode gm, UserData data) { public void handleLogin(GameMode gm, UserData data) {
data.setLastGamemode(gm); handleChangeEvent(gm, data);
} }
/** /**
@ -45,15 +45,19 @@ public class GamemodeTimesHandler {
* @param data UserData matching the Player * @param data UserData matching the Player
*/ */
public void handleChangeEvent(GameMode newGM, UserData data) { public void handleChangeEvent(GameMode newGM, UserData data) {
if (newGM == null) {
return;
}
if (data.getLastGamemode() == null) {
data.setLastGamemode(GameMode.SURVIVAL);
}
GameMode oldGM = data.getLastGamemode();
HashMap<GameMode, Long> times = data.getGmTimes(); HashMap<GameMode, Long> times = data.getGmTimes();
Long currentGMTime = times.get(oldGM);
handler.getActivityHandler().saveToCache(data); handler.getActivityHandler().saveToCache(data);
long lastSwap = data.getLastGmSwapTime(); long lastSwap = data.getLastGmSwapTime();
long playTime = data.getPlayTime(); long playTime = data.getPlayTime();
GameMode oldGM = data.getLastGamemode(); data.setGMTime(oldGM, currentGMTime + (playTime - lastSwap));
if (oldGM != null) {
data.setGMTime(oldGM, times.get(oldGM) + (playTime - lastSwap));
}
data.setLastGamemode(newGM); data.setLastGamemode(newGM);
data.setLastGmSwapTime(playTime); data.setLastGmSwapTime(playTime);
} }
@ -65,13 +69,14 @@ public class GamemodeTimesHandler {
* @param data UserData matching the Player * @param data UserData matching the Player
*/ */
public void saveToCache(GameMode currentGM, UserData data) { public void saveToCache(GameMode currentGM, UserData data) {
if (currentGM == null) {
return;
}
HashMap<GameMode, Long> times = data.getGmTimes(); HashMap<GameMode, Long> times = data.getGmTimes();
handler.getActivityHandler().saveToCache(data); handler.getActivityHandler().saveToCache(data);
long lastSwap = data.getLastGmSwapTime(); long lastSwap = data.getLastGmSwapTime();
long playtime = data.getPlayTime(); long playtime = data.getPlayTime();
data.setGMTime(currentGM, times.get(currentGM) + (playtime - lastSwap)); data.setGMTime(currentGM, times.get(currentGM) + (playtime - lastSwap));
data.setLastGmSwapTime(playtime); data.setLastGmSwapTime(playtime);
} }

View File

@ -176,7 +176,10 @@ public class Analysis {
sorted.addTotalKills(uData.getPlayerKills().size()); sorted.addTotalKills(uData.getPlayerKills().size());
sorted.addTotalMobKills(uData.getMobKills()); sorted.addTotalMobKills(uData.getMobKills());
sorted.addTotalDeaths(uData.getDeaths()); sorted.addTotalDeaths(uData.getDeaths());
sorted.getSessiondata().addAll(uData.getSessions()); List<SessionData> sessions = uData.getSessions();
if (!sessions.isEmpty()) {
sorted.getSessiondata().addAll(sessions);
}
sorted.getRegistered().add(uData.getRegistered()); sorted.getRegistered().add(uData.getRegistered());
sorted.addGeoloc(uData.getDemData().getGeoLocation()); sorted.addGeoloc(uData.getDemData().getGeoLocation());
uData.stopAccessing(); uData.stopAccessing();

View File

@ -5,6 +5,7 @@ import java.util.Collection;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
import main.java.com.djrapitops.plan.Settings; import main.java.com.djrapitops.plan.Settings;
import main.java.com.djrapitops.plan.data.SessionData; import main.java.com.djrapitops.plan.data.SessionData;
import main.java.com.djrapitops.plan.data.UserData; import main.java.com.djrapitops.plan.data.UserData;
@ -62,11 +63,11 @@ public class AnalysisUtils {
} }
public static List<Long> transformSessionDataToLengths(Collection<SessionData> data) { public static List<Long> transformSessionDataToLengths(Collection<SessionData> data) {
List<SessionData> d = new ArrayList<>(data); List<Long> list = data.stream()
List<Long> list = new ArrayList<>(); .filter(session -> session != null)
d.stream().forEach((sData) -> { .filter(session -> session.getSessionEnd() > session.getSessionStart())
list.add(sData.getSessionEnd()-sData.getSessionStart()); .map(session -> session.getSessionEnd() - session.getSessionStart())
}); .collect(Collectors.toList());
return list; return list;
} }