From 43a8ba4225f2fb8d85a6bb73fa60e7fda3f35b90 Mon Sep 17 00:00:00 2001 From: kohlerpop1 Date: Fri, 19 Apr 2024 13:28:10 -0400 Subject: [PATCH] More updated to TikTokLinkMicBattleEvent, updated Gift since its no longer enum we do not need to use Unsafe, and added default mappings for WebcastLinkMicBattle and WebcastLinkMicArmies --- .../data/events/TikTokLinkMicBattleEvent.java | 18 +++++++++-- .../tiktok/data/models/gifts/Gift.java | 6 ++-- .../github/jwdeveloper/tiktok/TikTokLive.java | 3 -- .../tiktok/TikTokLiveClientBuilder.java | 12 +++++-- .../tiktok/gifts/TikTokGiftsManager.java | 16 +++------- .../handlers/TikTokGiftEventHandler.java | 32 +------------------ 6 files changed, 31 insertions(+), 56 deletions(-) diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokLinkMicBattleEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokLinkMicBattleEvent.java index 1b55357..f11838b 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokLinkMicBattleEvent.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokLinkMicBattleEvent.java @@ -27,7 +27,7 @@ import io.github.jwdeveloper.tiktok.data.events.common.TikTokHeaderEvent; import io.github.jwdeveloper.tiktok.data.models.battles.*; import io.github.jwdeveloper.tiktok.messages.enums.LinkMicBattleStatus; import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMicBattle; -import lombok.Getter; +import lombok.*; import java.util.*; @@ -43,6 +43,8 @@ public class TikTokLinkMicBattleEvent extends TikTokHeaderEvent true if battle is finished otherwise false */ private final boolean finished; + @Getter(AccessLevel.NONE) + private final boolean oneVsOne; private final List teams; public TikTokLinkMicBattleEvent(WebcastLinkMicBattle msg) { @@ -53,14 +55,16 @@ public class TikTokLinkMicBattleEvent extends TikTokHeaderEvent if (msg.getHostTeamCount() == 2) { // 1v1 battle teams.add(new Team1v1(msg.getHostTeam(0), msg)); teams.add(new Team1v1(msg.getHostTeam(1), msg)); + oneVsOne = true; } else { // 2v2 battle if (isFinished()) { - teams.add(new Team2v2(msg.getHostData2V2List().stream().filter(data -> data.getTeamNumber() == 1).findFirst().orElse(null), msg)); - teams.add(new Team2v2(msg.getHostData2V2List().stream().filter(data -> data.getTeamNumber() == 2).findFirst().orElse(null), msg)); + teams.add(new Team2v2(msg.getHostData2V2List().stream().filter(data -> data.getTeamNumber() == 1).findFirst().orElseThrow(), msg)); + teams.add(new Team2v2(msg.getHostData2V2List().stream().filter(data -> data.getTeamNumber() == 2).findFirst().orElseThrow(), msg)); } else { teams.add(new Team2v2(msg.getHostTeam(0), msg.getHostTeam(1), msg)); teams.add(new Team2v2(msg.getHostTeam(2), msg.getHostTeam(3), msg)); } + oneVsOne = false; } // Info: @@ -68,4 +72,12 @@ public class TikTokLinkMicBattleEvent extends TikTokHeaderEvent // - msg.getDetailsCount() & msg.getViewerTeamCount() always is 2 only when battle is finished // - msg.getHostTeamCount() always is 2 for 1v1 or 4 for 2v2 } + + public boolean is1v1() { + return oneVsOne; + } + + public boolean is2v2() { + return !oneVsOne; + } } \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/Gift.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/Gift.java index 6217fe9..95f8b91 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/Gift.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/Gift.java @@ -2,9 +2,7 @@ package io.github.jwdeveloper.tiktok.data.models.gifts; import com.google.gson.JsonObject; import io.github.jwdeveloper.tiktok.data.models.Picture; -import lombok.*; - -import java.util.*; +import lombok.Data; @Data public class Gift { @@ -16,7 +14,7 @@ public class Gift { private final int diamondCost; - private final Picture picture; + private Picture picture; private final JsonObject properties; diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java index 204e9cb..02f81df 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java @@ -91,7 +91,6 @@ public class TikTokLive { return new TikTokLiveHttpClient(); } - //I don't like it, but it is reasonable for now private static GiftsManager giftsManager; @@ -108,6 +107,4 @@ public class TikTokLive { } return giftsManager; } - - } \ No newline at end of file diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java index d23aad5..dc60991 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java @@ -207,9 +207,15 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder { //LinkMic events - // mapper.webcastObjectToConstructor(WebcastLinkMicBattle.class, TikTokLinkMicBattleEvent.class); - // mapper.webcastObjectToConstructor(WebcastLinkMicArmies.class, TikTokLinkMicArmiesEvent.class); - // mapper.webcastObjectToConstructor(WebcastLinkMicMethod.class, TikTokLinkMicMethodEvent.class); + mapper.forMessage(WebcastLinkMicBattle.class, (inputBytes, messageName, mapperHelper) -> { + var message = mapperHelper.bytesToWebcastObject(inputBytes, WebcastLinkMicBattle.class); + return MappingResult.of(message, new TikTokLinkMicBattleEvent(message)); + }); + mapper.forMessage(WebcastLinkMicArmies.class, (inputBytes, messageName, mapperHelper) -> { + var message = mapperHelper.bytesToWebcastObject(inputBytes, WebcastLinkMicArmies.class); + return MappingResult.of(message, new TikTokLinkMicArmiesEvent(message)); + }); + // mapper.webcastObjectToConstructor(WebcastLinkMicMethod.class, TikTokLinkMicMethodEvent.class); // mapper.webcastObjectToConstructor(WebcastLinkMicFanTicketMethod.class, TikTokLinkMicFanTicketEvent.class); //Rank events diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/gifts/TikTokGiftsManager.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/gifts/TikTokGiftsManager.java index 763b710..60e3b76 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/gifts/TikTokGiftsManager.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/gifts/TikTokGiftsManager.java @@ -1,13 +1,9 @@ package io.github.jwdeveloper.tiktok.gifts; import io.github.jwdeveloper.tiktok.data.models.gifts.Gift; -import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException; import io.github.jwdeveloper.tiktok.live.GiftsManager; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.function.Function; +import java.util.*; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -32,11 +28,7 @@ public class TikTokGiftsManager implements GiftsManager { } public Gift getById(int giftId) { - if (!giftsByIdIndex.containsKey(giftId)) { - return Gift.UNDEFINED; - } - - return giftsByIdIndex.get(giftId); + return giftsByIdIndex.getOrDefault(giftId, Gift.UNDEFINED); } public Gift getByFilter(Predicate filter) { @@ -44,7 +36,7 @@ public class TikTokGiftsManager implements GiftsManager { .stream() .filter(filter) .findFirst() - .orElseGet(() -> Gift.UNDEFINED); + .orElse(Gift.UNDEFINED); } @Override @@ -62,4 +54,4 @@ public class TikTokGiftsManager implements GiftsManager { public Map toMap() { return Collections.unmodifiableMap(giftsByIdIndex); } -} +} \ No newline at end of file diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/handlers/TikTokGiftEventHandler.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/handlers/TikTokGiftEventHandler.java index 0547994..0cda6ab 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/handlers/TikTokGiftEventHandler.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/handlers/TikTokGiftEventHandler.java @@ -27,13 +27,11 @@ import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent; import io.github.jwdeveloper.tiktok.data.events.gift.*; import io.github.jwdeveloper.tiktok.data.models.Picture; import io.github.jwdeveloper.tiktok.data.models.gifts.*; -import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException; import io.github.jwdeveloper.tiktok.live.GiftsManager; import io.github.jwdeveloper.tiktok.mappers.TikTokMapperHelper; import io.github.jwdeveloper.tiktok.mappers.data.MappingResult; import io.github.jwdeveloper.tiktok.messages.webcast.WebcastGiftMessage; import lombok.SneakyThrows; -import sun.misc.Unsafe; import java.util.*; @@ -124,36 +122,8 @@ public class TikTokGiftEventHandler { } if (gift.getPicture().getLink().endsWith(".webp")) - { - updatePicture(gift, giftMessage); - } + gift.setPicture(Picture.map(giftMessage.getGift().getImage())); return gift; } - - // TODO-kohlerpop1: I do not think this method is needed for any reason? - // TODO response: - - /** - * Some generated gifts in JSON file contains .webp image format, - * that's bad since java by the defult is not supporing .webp and when URL is - * converted to Java.io.Image then image is null - * - * However, TikTok in GiftWebcast event always has image in .jpg format, - * so I take advantage of it and swap .webp url with .jpg url - * - */ - - private void updatePicture(Gift gift, WebcastGiftMessage webcastGiftMessage) { - try { - var picture = Picture.map(webcastGiftMessage.getGift().getImage()); - var constructor = Unsafe.class.getDeclaredConstructors()[0]; - constructor.setAccessible(true); - var field = Gift.class.getDeclaredField("picture"); - field.setAccessible(true); - field.set(gift, picture); - } catch (Exception e) { - throw new TikTokLiveException("Unable to update picture in gift: " + gift.toString()); - } - } } \ No newline at end of file