From 844d56724363941ad03fa8b9af0a38aaeb118b1c Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Fri, 18 Aug 2017 11:15:36 +0300 Subject: [PATCH] #256 --- .../plan/command/commands/AnalyzeCommand.java | 8 +-- .../plan/data/cache/AnalysisCacheHandler.java | 51 +++++++++++++++++++ 2 files changed, 56 insertions(+), 3 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/AnalyzeCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/AnalyzeCommand.java index 9e79856b0..9b16bb4d1 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/AnalyzeCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/AnalyzeCommand.java @@ -79,18 +79,20 @@ public class AnalyzeCommand extends SubCommand { } }).runTaskAsynchronously(); } - updateCache(); - runMessageSenderTask(sender); + updateCache(sender); return true; } - private void updateCache() { + private void updateCache(ISender sender) { if (!analysisCache.isCached() || MiscUtils.getTime() - analysisCache.getData().getRefreshDate() > TimeAmount.MINUTE.ms()) { int bootAnID = plugin.getBootAnalysisTaskID(); if (bootAnID != -1) { plugin.getServer().getScheduler().cancelTask(bootAnID); } + analysisCache.addNotification(sender); analysisCache.updateCache(); + } else { + analysisCache.sendAnalysisMessage(sender); } } diff --git a/Plan/src/main/java/com/djrapitops/plan/data/cache/AnalysisCacheHandler.java b/Plan/src/main/java/com/djrapitops/plan/data/cache/AnalysisCacheHandler.java index e45b93153..173c236e4 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/cache/AnalysisCacheHandler.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/cache/AnalysisCacheHandler.java @@ -1,9 +1,22 @@ package main.java.com.djrapitops.plan.data.cache; +import com.djrapitops.plugin.command.CommandUtils; +import com.djrapitops.plugin.command.ISender; +import com.djrapitops.plugin.utilities.player.IPlayer; import main.java.com.djrapitops.plan.Plan; +import main.java.com.djrapitops.plan.Settings; import main.java.com.djrapitops.plan.data.AnalysisData; +import main.java.com.djrapitops.plan.locale.Locale; +import main.java.com.djrapitops.plan.locale.Msg; +import main.java.com.djrapitops.plan.ui.text.TextUI; +import main.java.com.djrapitops.plan.utilities.HtmlUtils; import main.java.com.djrapitops.plan.utilities.analysis.Analysis; +import java.util.HashSet; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; + /** * This class is used to store the most recent AnalysisData object and to run * Analysis. @@ -13,10 +26,13 @@ import main.java.com.djrapitops.plan.utilities.analysis.Analysis; */ public class AnalysisCacheHandler { + private final Plan plugin; private final Analysis analysis; private AnalysisData cache; private boolean analysisEnabled; + private Set notifyWhenCached; + /** * Class Constructor. *

@@ -25,8 +41,10 @@ public class AnalysisCacheHandler { * @param plugin Current instance of Plan */ public AnalysisCacheHandler(Plan plugin) { + this.plugin = plugin; analysis = new Analysis(plugin); analysisEnabled = true; + notifyWhenCached = new HashSet<>(); } /** @@ -43,6 +61,33 @@ public class AnalysisCacheHandler { */ public void cache(AnalysisData data) { cache = data; + for (UUID uuid : notifyWhenCached) { + Optional player = plugin.fetch().getPlayer(uuid); + if (player.isPresent()) { + sendAnalysisMessage(player.get()); + } + } + notifyWhenCached.clear(); + } + + public void sendAnalysisMessage(ISender sender) { + boolean textUI = Settings.USE_ALTERNATIVE_UI.isTrue(); + sender.sendMessage(Locale.get(Msg.CMD_HEADER_ANALYZE).toString()); + if (textUI) { + sender.sendMessage(TextUI.getAnalysisMessages()); + } else { + // Link + String url = HtmlUtils.getServerAnalysisUrlWithProtocol(); + String message = Locale.get(Msg.CMD_INFO_LINK).toString(); + boolean console = !CommandUtils.isPlayer(sender); + if (console) { + sender.sendMessage(message + url); + } else { + sender.sendMessage(message); + sender.sendLink(" ", Locale.get(Msg.CMD_INFO_CLICK_ME).toString(), url); + } + } + sender.sendMessage(Locale.get(Msg.CMD_CONSTANT_FOOTER).toString()); } /** @@ -83,4 +128,10 @@ public class AnalysisCacheHandler { analysis.setTaskId(-1); analysisEnabled = true; } + + public void addNotification(ISender sender) { + if (CommandUtils.isPlayer(sender)) { + notifyWhenCached.add(((IPlayer) sender.getSender()).getUuid()); + } + } }