diff --git a/Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/manage/ManageExportCommand.java b/Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/manage/ManageExportCommand.java index c03391c22..07c938c2d 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/manage/ManageExportCommand.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/commands/subcommands/manage/ManageExportCommand.java @@ -18,6 +18,7 @@ package com.djrapitops.plan.commands.subcommands.manage; import com.djrapitops.plan.delivery.export.Exporter; import com.djrapitops.plan.exceptions.ExportException; +import com.djrapitops.plan.identification.ServerInfo; import com.djrapitops.plan.processing.Processing; import com.djrapitops.plan.settings.Permissions; import com.djrapitops.plan.settings.config.PlanConfig; @@ -55,6 +56,7 @@ public class ManageExportCommand extends CommandNode { private final ColorScheme colorScheme; private final PlanConfig config; private final DBSystem dbSystem; + private final ServerInfo serverInfo; private final Exporter exporter; private final Processing processing; @@ -64,6 +66,7 @@ public class ManageExportCommand extends CommandNode { ColorScheme colorScheme, PlanConfig config, DBSystem dbSystem, + ServerInfo serverInfo, Exporter exporter, Processing processing ) { @@ -73,6 +76,7 @@ public class ManageExportCommand extends CommandNode { this.colorScheme = colorScheme; this.config = config; this.dbSystem = dbSystem; + this.serverInfo = serverInfo; this.exporter = exporter; this.processing = processing; @@ -89,7 +93,7 @@ public class ManageExportCommand extends CommandNode { String exportArg = args[0]; if ("list".equals(exportArg)) { - sender.sendMessage("> " + colorScheme.getMainColor() + "players"); + sender.sendMessage("> " + colorScheme.getMainColor() + "players, server_json"); return; } @@ -105,15 +109,30 @@ public class ManageExportCommand extends CommandNode { private Consumer getExportFunction(String exportArg) { if ("players".equals(exportArg)) { return this::exportPlayers; + } else if ("server_json".endsWith(exportArg)) { + return this::exportServerJSON; } return sender -> sender.sendMessage(locale.getString(ManageLang.FAIL_EXPORTER_NOT_FOUND, exportArg)); } - private void exportPlayers(Sender sender) { - sender.sendMessage(locale.getString(ManageLang.PROGRESS_START)); - if (config.get(ExportSettings.PLAYERS_PAGE)) { - processing.submitNonCritical(exporter::exportPlayersPage); + private void exportServerJSON(Sender sender) { + if (!config.get(ExportSettings.SERVER_JSON)) { + sender.sendMessage("§c'" + ExportSettings.SERVER_JSON.getPath() + "': false"); + return; } + processing.submitNonCritical(() -> { + try { + sender.sendMessage(locale.getString(ManageLang.PROGRESS_START)); + exporter.exportServerJSON(serverInfo.getServer()); + sender.sendMessage(locale.getString(ManageLang.PROGRESS_SUCCESS)); + } catch (ExportException e) { + sender.sendMessage(locale.getString(ManageLang.PROGRESS_FAIL)); + sender.sendMessage("§c" + e.toString()); + } + }); + } + + private void exportPlayers(Sender sender) { Boolean exportPlayerJSON = config.get(ExportSettings.PLAYER_JSON); Boolean exportPlayerHTML = config.get(ExportSettings.PLAYER_PAGES); if (!exportPlayerJSON && !exportPlayerHTML) { @@ -123,6 +142,11 @@ public class ManageExportCommand extends CommandNode { } processing.submitNonCritical(() -> { + sender.sendMessage(locale.getString(ManageLang.PROGRESS_START)); + if (config.get(ExportSettings.PLAYERS_PAGE)) { + processing.submitNonCritical(exporter::exportPlayersPage); + } + Map players = dbSystem.getDatabase().query(UserIdentifierQueries.fetchAllPlayerNames()); int size = players.size(); int failed = 0; diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/ExportScheduler.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/ExportScheduler.java index 4aaaf2a0b..3d88ae731 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/ExportScheduler.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/ExportScheduler.java @@ -96,7 +96,10 @@ public class ExportScheduler { int offsetMultiplier = proxy.isPresent() ? 1 : 0; // Delay first server export if on a network. for (Server server : servers) { taskSystem.registerTask("Server export", - new ExportTask(exporter, exporter -> exporter.exportServerPage(server), logger, errorHandler)) + new ExportTask(exporter, exporter -> { + exporter.exportServerPage(server); + exporter.exportServerJSON(server); + }, logger, errorHandler)) .runTaskTimerAsynchronously(offset * offsetMultiplier, period); offsetMultiplier++; } diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/Exporter.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/Exporter.java index 851e234df..a7298c0a1 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/Exporter.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/Exporter.java @@ -39,7 +39,7 @@ import java.util.UUID; * @author Rsl1122 */ @Singleton -public class Exporter { +public class Exporter extends FileExporter { private final PlanFiles files; private final PlanConfig config; @@ -111,6 +111,24 @@ public class Exporter { } } + public boolean exportServerJSON(Server server) throws ExportException { + UUID serverUUID = server.getUuid(); + if (failedServers.contains(serverUUID) || !config.get(ExportSettings.SERVER_JSON)) return false; + + try { + Path toDirectory = getJSONExportDirectory().resolve(toFileName(server.getName())); + if (server.isProxy()) { + networkPageExporter.exportJSON(toDirectory, server); + } else { + serverPageExporter.exportJSON(toDirectory, server); + } + return true; + } catch (IOException | NotFoundException e) { + failedServers.add(serverUUID); + throw new ExportException("Failed to export server: " + server.getIdentifiableName() + " (Attempts disabled until next reload), " + e.toString(), e); + } + } + /** * Export page of a player. * diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/NetworkPageExporter.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/NetworkPageExporter.java index ef1079762..0e227c7ec 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/NetworkPageExporter.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/NetworkPageExporter.java @@ -86,7 +86,7 @@ public class NetworkPageExporter extends FileExporter { export(to, exportPaths.resolveExportPaths(locale.replaceMatchingLanguage(page.toHtml()))); } - private void exportJSON(Path toDirectory, Server server) throws IOException, NotFoundException { + public void exportJSON(Path toDirectory, Server server) throws IOException, NotFoundException { String serverUUID = server.getUuid().toString(); exportJSON(toDirectory, diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/ServerPageExporter.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/ServerPageExporter.java index 7a2228fb3..da01cd2eb 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/ServerPageExporter.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/export/ServerPageExporter.java @@ -92,7 +92,7 @@ public class ServerPageExporter extends FileExporter { export(to, exportPaths.resolveExportPaths(locale.replaceMatchingLanguage(page.toHtml()))); } - private void exportJSON(Path toDirectory, Server server) throws IOException, NotFoundException { + public void exportJSON(Path toDirectory, Server server) throws IOException, NotFoundException { String serverName = server.getName(); exportJSON(toDirectory,