From fb9fc04ee5284dba3fed2aad5c478d2f722a6f2d Mon Sep 17 00:00:00 2001 From: kohlerpop1 Date: Fri, 19 Apr 2024 13:33:49 -0400 Subject: [PATCH] Revert "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" This reverts commit 43a8ba4225f2fb8d85a6bb73fa60e7fda3f35b90. --- .../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, 56 insertions(+), 31 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 f11838b..1b55357 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.*; +import lombok.Getter; import java.util.*; @@ -43,8 +43,6 @@ 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) { @@ -55,16 +53,14 @@ 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().orElseThrow(), msg)); - teams.add(new Team2v2(msg.getHostData2V2List().stream().filter(data -> data.getTeamNumber() == 2).findFirst().orElseThrow(), msg)); + 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)); } 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: @@ -72,12 +68,4 @@ 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 95f8b91..6217fe9 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,7 +2,9 @@ package io.github.jwdeveloper.tiktok.data.models.gifts; import com.google.gson.JsonObject; import io.github.jwdeveloper.tiktok.data.models.Picture; -import lombok.Data; +import lombok.*; + +import java.util.*; @Data public class Gift { @@ -14,7 +16,7 @@ public class Gift { private final int diamondCost; - private Picture picture; + private final 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 02f81df..204e9cb 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java @@ -91,6 +91,7 @@ public class TikTokLive { return new TikTokLiveHttpClient(); } + //I don't like it, but it is reasonable for now private static GiftsManager giftsManager; @@ -107,4 +108,6 @@ 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 dc60991..d23aad5 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java @@ -207,15 +207,9 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder { //LinkMic events - 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(WebcastLinkMicBattle.class, TikTokLinkMicBattleEvent.class); + // mapper.webcastObjectToConstructor(WebcastLinkMicArmies.class, TikTokLinkMicArmiesEvent.class); + // 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 60e3b76..763b710 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,9 +1,13 @@ 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.*; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -28,7 +32,11 @@ public class TikTokGiftsManager implements GiftsManager { } public Gift getById(int giftId) { - return giftsByIdIndex.getOrDefault(giftId, Gift.UNDEFINED); + if (!giftsByIdIndex.containsKey(giftId)) { + return Gift.UNDEFINED; + } + + return giftsByIdIndex.get(giftId); } public Gift getByFilter(Predicate filter) { @@ -36,7 +44,7 @@ public class TikTokGiftsManager implements GiftsManager { .stream() .filter(filter) .findFirst() - .orElse(Gift.UNDEFINED); + .orElseGet(() -> Gift.UNDEFINED); } @Override @@ -54,4 +62,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 0cda6ab..0547994 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,11 +27,13 @@ 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.*; @@ -122,8 +124,36 @@ public class TikTokGiftEventHandler { } if (gift.getPicture().getLink().endsWith(".webp")) - gift.setPicture(Picture.map(giftMessage.getGift().getImage())); + { + updatePicture(gift, giftMessage); + } 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