From 8d755b8726778d106c9502bb96fae9991800088a Mon Sep 17 00:00:00 2001 From: Christian 'ketura' McCarty Date: Sat, 16 Nov 2024 20:45:12 -0600 Subject: [PATCH] PC Errata conversion button - Added a new button in the deckbuilder that converts all cards currently in the deck to applicable PC errata. It is disabled outside of PC formats (and Anything Goes) and enabled for a single usage otherwise. - Optimized card filter a bit so it isn't calling the card collection quite so often during format switching --- .../async/handler/DeckRequestHandler.java | 23 +++++++++++++++- .../src/main/web/deckBuild.html | 4 +++ .../main/web/js/gemp-022/cards/CardFilter.js | 27 ++++++------------- .../src/main/web/js/gemp-022/communication.js | 15 +++++++++++ 4 files changed, 49 insertions(+), 20 deletions(-) diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/DeckRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/DeckRequestHandler.java index 772b09a37..b281a4f45 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/DeckRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/DeckRequestHandler.java @@ -5,6 +5,7 @@ import com.gempukku.lotro.async.ResponseWriter; import com.gempukku.lotro.common.JSONDefs; import com.gempukku.lotro.common.Side; import com.gempukku.lotro.db.DeckDAO; +import com.gempukku.lotro.db.DeckSerialization; import com.gempukku.lotro.draft2.SoloDraftDefinitions; import com.gempukku.lotro.game.*; import com.gempukku.lotro.game.formats.LotroFormatLibrary; @@ -77,7 +78,9 @@ public class DeckRequestHandler extends LotroServerRequestHandler implements Uri getDeckStats(request, responseWriter); } else if (uri.equals("/formats") && request.method() == HttpMethod.POST) { getAllFormats(request, responseWriter); - } else { + } else if (uri.equals("/convert") && request.method() == HttpMethod.POST) { + convertErrata(request, responseWriter); + }else { throw new HttpProcessingException(404); } } @@ -444,6 +447,24 @@ public class DeckRequestHandler extends LotroServerRequestHandler implements Uri responseWriter.writeXmlResponse(serializeDeck(resourceOwner, deckName)); } + private void convertErrata(HttpRequest request, ResponseWriter responseWriter) throws IOException, HttpProcessingException, ParserConfigurationException { + HttpPostRequestDecoder postDecoder = new HttpPostRequestDecoder(request); + try { + String participantId = getFormParameterSafely(postDecoder, "participantId"); + Player resourceOwner = getResourceOwnerSafely(request, participantId); + + String targetFormat = getFormParameterSafely(postDecoder, "targetFormat"); + String contents = getFormParameterSafely(postDecoder, "deckContents"); + + var format = validateFormat(targetFormat); + var originalDeck = DeckSerialization.buildDeckFromContents("", contents, format.getName(), ""); + + responseWriter.writeXmlResponse(serializeDeck(format.applyErrata(originalDeck))); + } finally { + postDecoder.destroy(); + } + } + private void getLibraryDeck(HttpRequest request, ResponseWriter responseWriter) throws HttpProcessingException, ParserConfigurationException { QueryStringDecoder queryDecoder = new QueryStringDecoder(request.uri()); String deckName = getQueryParameterSafely(queryDecoder, "deckName"); diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/deckBuild.html b/gemp-lotr/gemp-lotr-async/src/main/web/deckBuild.html index 2ff487d5a..4bd545aca 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/deckBuild.html +++ b/gemp-lotr/gemp-lotr-async/src/main/web/deckBuild.html @@ -95,6 +95,10 @@ + +