mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-01-27 18:41:40 +01:00
Split Session table creation for Player page to a separate class
This commit is contained in:
parent
a092e39ee4
commit
a83c871bf8
@ -71,7 +71,7 @@ public class DataContainer extends HashMap<Key, Supplier> {
|
|||||||
public <T> T getUnsafe(Key<T> key) {
|
public <T> T getUnsafe(Key<T> key) {
|
||||||
Supplier supplier = get(key);
|
Supplier supplier = get(key);
|
||||||
if (supplier == null) {
|
if (supplier == null) {
|
||||||
throw new IllegalArgumentException("Unsupported Key");
|
throw new IllegalArgumentException("Unsupported Key: " + key.getKeyName());
|
||||||
}
|
}
|
||||||
return (T) supplier.get();
|
return (T) supplier.get();
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,7 @@ import com.djrapitops.plan.utilities.html.structure.SessionAccordion;
|
|||||||
import com.djrapitops.plan.utilities.html.tables.ActionsTable;
|
import com.djrapitops.plan.utilities.html.tables.ActionsTable;
|
||||||
import com.djrapitops.plan.utilities.html.tables.GeoInfoTable;
|
import com.djrapitops.plan.utilities.html.tables.GeoInfoTable;
|
||||||
import com.djrapitops.plan.utilities.html.tables.NicknameTable;
|
import com.djrapitops.plan.utilities.html.tables.NicknameTable;
|
||||||
|
import com.djrapitops.plan.utilities.html.tables.PlayerSessionTable;
|
||||||
import com.djrapitops.plugin.api.Benchmark;
|
import com.djrapitops.plugin.api.Benchmark;
|
||||||
import com.djrapitops.plugin.api.TimeAmount;
|
import com.djrapitops.plugin.api.TimeAmount;
|
||||||
|
|
||||||
@ -134,7 +135,19 @@ public class InspectPage extends Page {
|
|||||||
SessionsMutator allSessionsMutator = new SessionsMutator(allSessions);
|
SessionsMutator allSessionsMutator = new SessionsMutator(allSessions);
|
||||||
allSessions.sort(new SessionStartComparator());
|
allSessions.sort(new SessionStartComparator());
|
||||||
|
|
||||||
SessionAccordion sessionAccordion = SessionAccordion.forPlayer(allSessions, () -> serverNames);
|
String sessionAccordionViewScript = "";
|
||||||
|
if (allSessions.isEmpty()) {
|
||||||
|
addValue("accordionSessions", "<div class=\"body\">" + "<p>No Sessions</p>" + "</div>");
|
||||||
|
} else {
|
||||||
|
if (Settings.DISPLAY_SESSIONS_AS_TABLE.isTrue()) {
|
||||||
|
addValue("accordionSessions", new PlayerSessionTable(playerName, allSessions).parseHtml());
|
||||||
|
} else {
|
||||||
|
SessionAccordion sessionAccordion = SessionAccordion.forPlayer(allSessions, () -> serverNames);
|
||||||
|
addValue("accordionSessions", sessionAccordion.toHtml());
|
||||||
|
sessionAccordionViewScript = sessionAccordion.toViewScript();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TODO Session table if setting is enabled
|
// TODO Session table if setting is enabled
|
||||||
ServerAccordion serverAccordion = new ServerAccordion(container, serverNames);
|
ServerAccordion serverAccordion = new ServerAccordion(container, serverNames);
|
||||||
|
|
||||||
@ -143,9 +156,8 @@ public class InspectPage extends Page {
|
|||||||
addValue("calendarSeries", playerCalendar.toCalendarSeries());
|
addValue("calendarSeries", playerCalendar.toCalendarSeries());
|
||||||
addValue("firstDay", 1);
|
addValue("firstDay", 1);
|
||||||
|
|
||||||
addValue("accordionSessions", sessionAccordion.toHtml());
|
|
||||||
addValue("accordionServers", serverAccordion.toHtml());
|
addValue("accordionServers", serverAccordion.toHtml());
|
||||||
addValue("sessionTabGraphViewFunctions", sessionAccordion.toViewScript() + serverAccordion.toViewScript());
|
addValue("sessionTabGraphViewFunctions", sessionAccordionViewScript + serverAccordion.toViewScript());
|
||||||
|
|
||||||
long dayAgo = now - TimeAmount.DAY.ms();
|
long dayAgo = now - TimeAmount.DAY.ms();
|
||||||
long weekAgo = now - TimeAmount.WEEK.ms();
|
long weekAgo = now - TimeAmount.WEEK.ms();
|
||||||
|
@ -4,9 +4,11 @@ import com.djrapitops.plan.data.PlayerProfile;
|
|||||||
import com.djrapitops.plan.data.calculation.ActivityIndex;
|
import com.djrapitops.plan.data.calculation.ActivityIndex;
|
||||||
import com.djrapitops.plan.data.container.Session;
|
import com.djrapitops.plan.data.container.Session;
|
||||||
import com.djrapitops.plan.data.container.StickyData;
|
import com.djrapitops.plan.data.container.StickyData;
|
||||||
|
import com.djrapitops.plan.data.store.keys.SessionKeys;
|
||||||
import com.djrapitops.plan.data.time.GMTimes;
|
import com.djrapitops.plan.data.time.GMTimes;
|
||||||
import com.djrapitops.plan.data.time.WorldTimes;
|
import com.djrapitops.plan.data.time.WorldTimes;
|
||||||
import com.djrapitops.plan.system.settings.WorldAliasSettings;
|
import com.djrapitops.plan.system.settings.WorldAliasSettings;
|
||||||
|
import com.djrapitops.plan.utilities.FormatUtils;
|
||||||
import com.djrapitops.plugin.api.TimeAmount;
|
import com.djrapitops.plugin.api.TimeAmount;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@ -258,4 +260,33 @@ public class AnalysisUtils {
|
|||||||
|
|
||||||
return new StickyData(averageIndex, averageMessagesSent, averagePlayersOnline);
|
return new StickyData(averageIndex, averageMessagesSent, averagePlayersOnline);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getLongestWorldPlayed(Session session) {
|
||||||
|
Map<String, String> aliases = WorldAliasSettings.getAliases();
|
||||||
|
if (!session.supports(SessionKeys.WORLD_TIMES)) {
|
||||||
|
return "No World Time Data";
|
||||||
|
}
|
||||||
|
if (!session.supports(SessionKeys.END)) {
|
||||||
|
return "Current: " + aliases.get(session.getUnsafe(SessionKeys.WORLD_TIMES).getCurrentWorld());
|
||||||
|
}
|
||||||
|
|
||||||
|
WorldTimes worldTimes = session.getUnsafe(SessionKeys.WORLD_TIMES);
|
||||||
|
Map<String, Long> playtimePerAlias = getPlaytimePerAlias(worldTimes);
|
||||||
|
long total = worldTimes.getTotal();
|
||||||
|
|
||||||
|
long longest = 0;
|
||||||
|
String theWorld = "-";
|
||||||
|
for (Map.Entry<String, Long> entry : playtimePerAlias.entrySet()) {
|
||||||
|
String world = entry.getKey();
|
||||||
|
long time = entry.getValue();
|
||||||
|
if (time > longest) {
|
||||||
|
longest = time;
|
||||||
|
theWorld = world;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
double percentage = longest * 100.0 / total;
|
||||||
|
|
||||||
|
return theWorld + " (" + FormatUtils.cutDecimals(percentage) + "%)";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,17 +5,13 @@
|
|||||||
package com.djrapitops.plan.utilities.html;
|
package com.djrapitops.plan.utilities.html;
|
||||||
|
|
||||||
import com.djrapitops.plan.api.exceptions.database.DBOpException;
|
import com.djrapitops.plan.api.exceptions.database.DBOpException;
|
||||||
import com.djrapitops.plan.data.container.Session;
|
|
||||||
import com.djrapitops.plan.system.database.databases.Database;
|
import com.djrapitops.plan.system.database.databases.Database;
|
||||||
import com.djrapitops.plan.system.info.server.Server;
|
import com.djrapitops.plan.system.info.server.Server;
|
||||||
import com.djrapitops.plan.system.info.server.ServerInfo;
|
import com.djrapitops.plan.system.info.server.ServerInfo;
|
||||||
import com.djrapitops.plan.system.info.server.ServerProperties;
|
import com.djrapitops.plan.system.info.server.ServerProperties;
|
||||||
import com.djrapitops.plan.system.settings.Settings;
|
|
||||||
import com.djrapitops.plan.utilities.FormatUtils;
|
import com.djrapitops.plan.utilities.FormatUtils;
|
||||||
import com.djrapitops.plan.utilities.analysis.Analysis;
|
import com.djrapitops.plan.utilities.analysis.Analysis;
|
||||||
import com.djrapitops.plan.utilities.html.graphs.line.OnlineActivityGraph;
|
import com.djrapitops.plan.utilities.html.graphs.line.OnlineActivityGraph;
|
||||||
import com.djrapitops.plan.utilities.html.structure.SessionTabStructureCreator;
|
|
||||||
import com.djrapitops.plan.utilities.html.tables.SessionsTableCreator;
|
|
||||||
import com.djrapitops.plugin.api.utility.log.Log;
|
import com.djrapitops.plugin.api.utility.log.Log;
|
||||||
import com.djrapitops.plugin.utilities.Verify;
|
import com.djrapitops.plugin.utilities.Verify;
|
||||||
|
|
||||||
@ -61,19 +57,6 @@ public class HtmlStructure {
|
|||||||
return builder.toString();
|
return builder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public static String[] createSessionsTabContentInspectPage(Map<String, List<Session>> sessions, List<Session> allSessions, UUID uuid) {
|
|
||||||
if (Settings.DISPLAY_SESSIONS_AS_TABLE.isTrue()) {
|
|
||||||
Map<UUID, List<Session>> sessionsByPlayer = new HashMap<>();
|
|
||||||
sessionsByPlayer.put(uuid, allSessions);
|
|
||||||
return new String[]{Html.TABLE_SESSIONS.parse("", "", "", SessionsTableCreator.createTable(sessionsByPlayer, allSessions)[0]), ""};
|
|
||||||
} else {
|
|
||||||
Map<UUID, Map<String, List<Session>>> map = new HashMap<>();
|
|
||||||
map.put(uuid, sessions);
|
|
||||||
return SessionTabStructureCreator.createStructure(map, allSessions, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String[] createInspectPageTabContentCalculating() {
|
public static String[] createInspectPageTabContentCalculating() {
|
||||||
String tab = "<div class=\"tab\">" +
|
String tab = "<div class=\"tab\">" +
|
||||||
"<div class=\"row clearfix\">" +
|
"<div class=\"row clearfix\">" +
|
||||||
|
@ -10,10 +10,10 @@ import com.djrapitops.plan.data.time.WorldTimes;
|
|||||||
import com.djrapitops.plan.system.settings.Settings;
|
import com.djrapitops.plan.system.settings.Settings;
|
||||||
import com.djrapitops.plan.system.settings.theme.Theme;
|
import com.djrapitops.plan.system.settings.theme.Theme;
|
||||||
import com.djrapitops.plan.system.settings.theme.ThemeVal;
|
import com.djrapitops.plan.system.settings.theme.ThemeVal;
|
||||||
|
import com.djrapitops.plan.utilities.analysis.AnalysisUtils;
|
||||||
import com.djrapitops.plan.utilities.html.HtmlStructure;
|
import com.djrapitops.plan.utilities.html.HtmlStructure;
|
||||||
import com.djrapitops.plan.utilities.html.graphs.pie.WorldPie;
|
import com.djrapitops.plan.utilities.html.graphs.pie.WorldPie;
|
||||||
import com.djrapitops.plan.utilities.html.tables.KillsTable;
|
import com.djrapitops.plan.utilities.html.tables.KillsTable;
|
||||||
import com.djrapitops.plan.utilities.html.tables.SessionsTableCreator;
|
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
@ -107,7 +107,7 @@ public class SessionAccordion extends AbstractAccordion {
|
|||||||
int deaths = session.getValue(SessionKeys.DEATH_COUNT).orElse(0);
|
int deaths = session.getValue(SessionKeys.DEATH_COUNT).orElse(0);
|
||||||
|
|
||||||
String info = appendWorldPercentage
|
String info = appendWorldPercentage
|
||||||
? HtmlStructure.separateWithDots(sessionStart, SessionsTableCreator.getLongestWorldPlayed(session))
|
? HtmlStructure.separateWithDots(sessionStart, AnalysisUtils.getLongestWorldPlayed(session))
|
||||||
: sessionStart;
|
: sessionStart;
|
||||||
String title = HtmlStructure.separateWithDots(playerName, info) + "<span class=\"pull-right\">" + length + "</span>";
|
String title = HtmlStructure.separateWithDots(playerName, info) + "<span class=\"pull-right\">" + length + "</span>";
|
||||||
String htmlID = "" + session.getValue(SessionKeys.START).orElse(0L) + i;
|
String htmlID = "" + session.getValue(SessionKeys.START).orElse(0L) + i;
|
||||||
@ -178,7 +178,7 @@ public class SessionAccordion extends AbstractAccordion {
|
|||||||
int deaths = session.getValue(SessionKeys.DEATH_COUNT).orElse(0);
|
int deaths = session.getValue(SessionKeys.DEATH_COUNT).orElse(0);
|
||||||
|
|
||||||
String info = appendWorldPercentage
|
String info = appendWorldPercentage
|
||||||
? HtmlStructure.separateWithDots(sessionStart, SessionsTableCreator.getLongestWorldPlayed(session))
|
? HtmlStructure.separateWithDots(sessionStart, AnalysisUtils.getLongestWorldPlayed(session))
|
||||||
: sessionStart;
|
: sessionStart;
|
||||||
String title = HtmlStructure.separateWithDots(serverName, info) + "<span class=\"pull-right\">" + length + "</span>";
|
String title = HtmlStructure.separateWithDots(serverName, info) + "<span class=\"pull-right\">" + length + "</span>";
|
||||||
String htmlID = "" + session.getValue(SessionKeys.START).orElse(0L) + i;
|
String htmlID = "" + session.getValue(SessionKeys.START).orElse(0L) + i;
|
||||||
|
@ -14,6 +14,7 @@ import com.djrapitops.plan.system.cache.DataCache;
|
|||||||
import com.djrapitops.plan.system.settings.Settings;
|
import com.djrapitops.plan.system.settings.Settings;
|
||||||
import com.djrapitops.plan.system.settings.theme.Theme;
|
import com.djrapitops.plan.system.settings.theme.Theme;
|
||||||
import com.djrapitops.plan.system.settings.theme.ThemeVal;
|
import com.djrapitops.plan.system.settings.theme.ThemeVal;
|
||||||
|
import com.djrapitops.plan.utilities.analysis.AnalysisUtils;
|
||||||
import com.djrapitops.plan.utilities.html.Html;
|
import com.djrapitops.plan.utilities.html.Html;
|
||||||
import com.djrapitops.plan.utilities.html.HtmlStructure;
|
import com.djrapitops.plan.utilities.html.HtmlStructure;
|
||||||
import com.djrapitops.plan.utilities.html.graphs.pie.WorldPie;
|
import com.djrapitops.plan.utilities.html.graphs.pie.WorldPie;
|
||||||
@ -79,7 +80,7 @@ public class SessionTabStructureCreator {
|
|||||||
String link = PlanAPI.getInstance().getPlayerInspectPageLink(name);
|
String link = PlanAPI.getInstance().getPlayerInspectPageLink(name);
|
||||||
|
|
||||||
String info = appendWorldPercentage
|
String info = appendWorldPercentage
|
||||||
? HtmlStructure.separateWithDots(sessionStart, SessionsTableCreator.getLongestWorldPlayed(session))
|
? HtmlStructure.separateWithDots(sessionStart, AnalysisUtils.getLongestWorldPlayed(session))
|
||||||
: sessionStart;
|
: sessionStart;
|
||||||
String nameAndInfo = appendName ?
|
String nameAndInfo = appendName ?
|
||||||
HtmlStructure.separateWithDots(name, info) :
|
HtmlStructure.separateWithDots(name, info) :
|
||||||
|
@ -0,0 +1,60 @@
|
|||||||
|
package com.djrapitops.plan.utilities.html.tables;
|
||||||
|
|
||||||
|
import com.djrapitops.plan.api.PlanAPI;
|
||||||
|
import com.djrapitops.plan.data.container.Session;
|
||||||
|
import com.djrapitops.plan.data.element.TableContainer;
|
||||||
|
import com.djrapitops.plan.data.store.keys.SessionKeys;
|
||||||
|
import com.djrapitops.plan.data.store.mutators.formatting.Formatters;
|
||||||
|
import com.djrapitops.plan.system.settings.Settings;
|
||||||
|
import com.djrapitops.plan.utilities.analysis.AnalysisUtils;
|
||||||
|
import com.djrapitops.plan.utilities.html.Html;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TableContainer for a Session table for a single player.
|
||||||
|
*
|
||||||
|
* @author Rsl1122
|
||||||
|
*/
|
||||||
|
public class PlayerSessionTable extends TableContainer {
|
||||||
|
|
||||||
|
private final String playerName;
|
||||||
|
private final List<Session> sessions;
|
||||||
|
|
||||||
|
public PlayerSessionTable(String playerName, List<Session> sessions) {
|
||||||
|
super("Player", "Start", "Length", "World");
|
||||||
|
this.playerName = playerName;
|
||||||
|
this.sessions = sessions;
|
||||||
|
|
||||||
|
addRows();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addRows() {
|
||||||
|
int maxSessions = Settings.MAX_SESSIONS.getNumber();
|
||||||
|
if (maxSessions <= 0) {
|
||||||
|
maxSessions = 50;
|
||||||
|
}
|
||||||
|
|
||||||
|
String inspectUrl = PlanAPI.getInstance().getPlayerInspectPageLink(playerName);
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
for (Session session : sessions) {
|
||||||
|
if (i >= maxSessions) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
String start = Formatters.year().apply(session);
|
||||||
|
String length = session.supports(SessionKeys.END)
|
||||||
|
? Formatters.timeAmount().apply(session.getValue(SessionKeys.LENGTH).orElse(0L))
|
||||||
|
: "Online";
|
||||||
|
String world = AnalysisUtils.getLongestWorldPlayed(session);
|
||||||
|
|
||||||
|
String toolTip = "Session ID: " + session.getValue(SessionKeys.DB_ID)
|
||||||
|
.map(id -> Integer.toString(id))
|
||||||
|
.orElse("Not Saved.");
|
||||||
|
addRow(Html.LINK_TOOLTIP.parse(inspectUrl, playerName, toolTip), start, length, world);
|
||||||
|
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -7,12 +7,9 @@ package com.djrapitops.plan.utilities.html.tables;
|
|||||||
import com.djrapitops.plan.api.PlanAPI;
|
import com.djrapitops.plan.api.PlanAPI;
|
||||||
import com.djrapitops.plan.data.container.Session;
|
import com.djrapitops.plan.data.container.Session;
|
||||||
import com.djrapitops.plan.data.store.mutators.formatting.Formatters;
|
import com.djrapitops.plan.data.store.mutators.formatting.Formatters;
|
||||||
import com.djrapitops.plan.data.time.WorldTimes;
|
|
||||||
import com.djrapitops.plan.system.cache.DataCache;
|
import com.djrapitops.plan.system.cache.DataCache;
|
||||||
import com.djrapitops.plan.system.cache.SessionCache;
|
import com.djrapitops.plan.system.cache.SessionCache;
|
||||||
import com.djrapitops.plan.system.settings.Settings;
|
import com.djrapitops.plan.system.settings.Settings;
|
||||||
import com.djrapitops.plan.system.settings.WorldAliasSettings;
|
|
||||||
import com.djrapitops.plan.utilities.FormatUtils;
|
|
||||||
import com.djrapitops.plan.utilities.analysis.AnalysisUtils;
|
import com.djrapitops.plan.utilities.analysis.AnalysisUtils;
|
||||||
import com.djrapitops.plan.utilities.comparators.SessionStartComparator;
|
import com.djrapitops.plan.utilities.comparators.SessionStartComparator;
|
||||||
import com.djrapitops.plan.utilities.html.Html;
|
import com.djrapitops.plan.utilities.html.Html;
|
||||||
@ -79,7 +76,7 @@ public class SessionsTableCreator {
|
|||||||
String name = dataCache.getName(uuid);
|
String name = dataCache.getName(uuid);
|
||||||
String start = Formatters.year().apply(session);
|
String start = Formatters.year().apply(session);
|
||||||
String length = session.getSessionEnd() != -1 ? Formatters.timeAmount().apply(session.getLength()) : "Online";
|
String length = session.getSessionEnd() != -1 ? Formatters.timeAmount().apply(session.getLength()) : "Online";
|
||||||
String world = getLongestWorldPlayed(session);
|
String world = AnalysisUtils.getLongestWorldPlayed(session);
|
||||||
|
|
||||||
String inspectUrl = PlanAPI.getInstance().getPlayerInspectPageLink(name);
|
String inspectUrl = PlanAPI.getInstance().getPlayerInspectPageLink(name);
|
||||||
String toolTip = "Session ID: " + (session.isFetchedFromDB() ? session.getSessionID() : "Not Saved.");
|
String toolTip = "Session ID: " + (session.isFetchedFromDB() ? session.getSessionID() : "Not Saved.");
|
||||||
@ -104,29 +101,4 @@ public class SessionsTableCreator {
|
|||||||
return new String[]{sessionTableBuilder.toString(), recentLoginsBuilder.toString()};
|
return new String[]{sessionTableBuilder.toString(), recentLoginsBuilder.toString()};
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getLongestWorldPlayed(Session session) {
|
|
||||||
Map<String, String> aliases = WorldAliasSettings.getAliases();
|
|
||||||
if (session.getSessionEnd() == -1) {
|
|
||||||
return "Current: " + aliases.get(session.getWorldTimes().getCurrentWorld());
|
|
||||||
}
|
|
||||||
|
|
||||||
WorldTimes worldTimes = session.getWorldTimes();
|
|
||||||
Map<String, Long> playtimePerAlias = AnalysisUtils.getPlaytimePerAlias(worldTimes);
|
|
||||||
long total = worldTimes.getTotal();
|
|
||||||
|
|
||||||
long longest = 0;
|
|
||||||
String theWorld = "-";
|
|
||||||
for (Map.Entry<String, Long> entry : playtimePerAlias.entrySet()) {
|
|
||||||
String world = entry.getKey();
|
|
||||||
long time = entry.getValue();
|
|
||||||
if (time > longest) {
|
|
||||||
longest = time;
|
|
||||||
theWorld = world;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
double percentage = longest * 100.0 / total;
|
|
||||||
|
|
||||||
return theWorld + " (" + FormatUtils.cutDecimals(percentage) + "%)";
|
|
||||||
}
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user