Skip to content

Commit fb9fc04

Browse files
committed
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 43a8ba4.
1 parent 43a8ba4 commit fb9fc04

File tree

6 files changed

+56
-31
lines changed

6 files changed

+56
-31
lines changed

API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokLinkMicBattleEvent.java

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import io.github.jwdeveloper.tiktok.data.models.battles.*;
2828
import io.github.jwdeveloper.tiktok.messages.enums.LinkMicBattleStatus;
2929
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMicBattle;
30-
import lombok.*;
30+
import lombok.Getter;
3131

3232
import java.util.*;
3333

@@ -43,8 +43,6 @@ public class TikTokLinkMicBattleEvent extends TikTokHeaderEvent
4343
true if battle is finished otherwise false
4444
*/
4545
private final boolean finished;
46-
@Getter(AccessLevel.NONE)
47-
private final boolean oneVsOne;
4846
private final List<Team> teams;
4947

5048
public TikTokLinkMicBattleEvent(WebcastLinkMicBattle msg) {
@@ -55,29 +53,19 @@ public TikTokLinkMicBattleEvent(WebcastLinkMicBattle msg) {
5553
if (msg.getHostTeamCount() == 2) { // 1v1 battle
5654
teams.add(new Team1v1(msg.getHostTeam(0), msg));
5755
teams.add(new Team1v1(msg.getHostTeam(1), msg));
58-
oneVsOne = true;
5956
} else { // 2v2 battle
6057
if (isFinished()) {
61-
teams.add(new Team2v2(msg.getHostData2V2List().stream().filter(data -> data.getTeamNumber() == 1).findFirst().orElseThrow(), msg));
62-
teams.add(new Team2v2(msg.getHostData2V2List().stream().filter(data -> data.getTeamNumber() == 2).findFirst().orElseThrow(), msg));
58+
teams.add(new Team2v2(msg.getHostData2V2List().stream().filter(data -> data.getTeamNumber() == 1).findFirst().orElse(null), msg));
59+
teams.add(new Team2v2(msg.getHostData2V2List().stream().filter(data -> data.getTeamNumber() == 2).findFirst().orElse(null), msg));
6360
} else {
6461
teams.add(new Team2v2(msg.getHostTeam(0), msg.getHostTeam(1), msg));
6562
teams.add(new Team2v2(msg.getHostTeam(2), msg.getHostTeam(3), msg));
6663
}
67-
oneVsOne = false;
6864
}
6965

7066
// Info:
7167
// - msg.getDetailsList() & msg.getViewerTeamList() both only have content when battle is finished
7268
// - msg.getDetailsCount() & msg.getViewerTeamCount() always is 2 only when battle is finished
7369
// - msg.getHostTeamCount() always is 2 for 1v1 or 4 for 2v2
7470
}
75-
76-
public boolean is1v1() {
77-
return oneVsOne;
78-
}
79-
80-
public boolean is2v2() {
81-
return !oneVsOne;
82-
}
8371
}

API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/Gift.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import com.google.gson.JsonObject;
44
import io.github.jwdeveloper.tiktok.data.models.Picture;
5-
import lombok.Data;
5+
import lombok.*;
6+
7+
import java.util.*;
68

79
@Data
810
public class Gift {
@@ -14,7 +16,7 @@ public class Gift {
1416

1517
private final int diamondCost;
1618

17-
private Picture picture;
19+
private final Picture picture;
1820

1921
private final JsonObject properties;
2022

Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ public static LiveHttpClient requests() {
9191
return new TikTokLiveHttpClient();
9292
}
9393

94+
9495
//I don't like it, but it is reasonable for now
9596
private static GiftsManager giftsManager;
9697

@@ -107,4 +108,6 @@ public static GiftsManager gifts() {
107108
}
108109
return giftsManager;
109110
}
111+
112+
110113
}

Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -207,15 +207,9 @@ public TikTokLiveMapper createMapper(GiftsManager giftsManager, TikTokRoomInfo r
207207

208208

209209
//LinkMic events
210-
mapper.forMessage(WebcastLinkMicBattle.class, (inputBytes, messageName, mapperHelper) -> {
211-
var message = mapperHelper.bytesToWebcastObject(inputBytes, WebcastLinkMicBattle.class);
212-
return MappingResult.of(message, new TikTokLinkMicBattleEvent(message));
213-
});
214-
mapper.forMessage(WebcastLinkMicArmies.class, (inputBytes, messageName, mapperHelper) -> {
215-
var message = mapperHelper.bytesToWebcastObject(inputBytes, WebcastLinkMicArmies.class);
216-
return MappingResult.of(message, new TikTokLinkMicArmiesEvent(message));
217-
});
218-
// mapper.webcastObjectToConstructor(WebcastLinkMicMethod.class, TikTokLinkMicMethodEvent.class);
210+
// mapper.webcastObjectToConstructor(WebcastLinkMicBattle.class, TikTokLinkMicBattleEvent.class);
211+
// mapper.webcastObjectToConstructor(WebcastLinkMicArmies.class, TikTokLinkMicArmiesEvent.class);
212+
// mapper.webcastObjectToConstructor(WebcastLinkMicMethod.class, TikTokLinkMicMethodEvent.class);
219213
// mapper.webcastObjectToConstructor(WebcastLinkMicFanTicketMethod.class, TikTokLinkMicFanTicketEvent.class);
220214

221215
//Rank events

Client/src/main/java/io/github/jwdeveloper/tiktok/gifts/TikTokGiftsManager.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package io.github.jwdeveloper.tiktok.gifts;
22

33
import io.github.jwdeveloper.tiktok.data.models.gifts.Gift;
4+
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException;
45
import io.github.jwdeveloper.tiktok.live.GiftsManager;
56

6-
import java.util.*;
7+
import java.util.Collections;
8+
import java.util.List;
9+
import java.util.Map;
10+
import java.util.function.Function;
711
import java.util.function.Predicate;
812
import java.util.stream.Collectors;
913

@@ -28,15 +32,19 @@ public Gift getByName(String name) {
2832
}
2933

3034
public Gift getById(int giftId) {
31-
return giftsByIdIndex.getOrDefault(giftId, Gift.UNDEFINED);
35+
if (!giftsByIdIndex.containsKey(giftId)) {
36+
return Gift.UNDEFINED;
37+
}
38+
39+
return giftsByIdIndex.get(giftId);
3240
}
3341

3442
public Gift getByFilter(Predicate<Gift> filter) {
3543
return giftsByIdIndex.values()
3644
.stream()
3745
.filter(filter)
3846
.findFirst()
39-
.orElse(Gift.UNDEFINED);
47+
.orElseGet(() -> Gift.UNDEFINED);
4048
}
4149

4250
@Override
@@ -54,4 +62,4 @@ public List<Gift> toList() {
5462
public Map<Integer, Gift> toMap() {
5563
return Collections.unmodifiableMap(giftsByIdIndex);
5664
}
57-
}
65+
}

Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/handlers/TikTokGiftEventHandler.java

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,13 @@
2727
import io.github.jwdeveloper.tiktok.data.events.gift.*;
2828
import io.github.jwdeveloper.tiktok.data.models.Picture;
2929
import io.github.jwdeveloper.tiktok.data.models.gifts.*;
30+
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException;
3031
import io.github.jwdeveloper.tiktok.live.GiftsManager;
3132
import io.github.jwdeveloper.tiktok.mappers.TikTokMapperHelper;
3233
import io.github.jwdeveloper.tiktok.mappers.data.MappingResult;
3334
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastGiftMessage;
3435
import lombok.SneakyThrows;
36+
import sun.misc.Unsafe;
3537

3638
import java.util.*;
3739

@@ -122,8 +124,36 @@ private Gift getGiftObject(WebcastGiftMessage giftMessage) {
122124
}
123125

124126
if (gift.getPicture().getLink().endsWith(".webp"))
125-
gift.setPicture(Picture.map(giftMessage.getGift().getImage()));
127+
{
128+
updatePicture(gift, giftMessage);
129+
}
126130

127131
return gift;
128132
}
133+
134+
// TODO-kohlerpop1: I do not think this method is needed for any reason?
135+
// TODO response:
136+
137+
/**
138+
* Some generated gifts in JSON file contains .webp image format,
139+
* that's bad since java by the defult is not supporing .webp and when URL is
140+
* converted to Java.io.Image then image is null
141+
*
142+
* However, TikTok in GiftWebcast event always has image in .jpg format,
143+
* so I take advantage of it and swap .webp url with .jpg url
144+
*
145+
*/
146+
147+
private void updatePicture(Gift gift, WebcastGiftMessage webcastGiftMessage) {
148+
try {
149+
var picture = Picture.map(webcastGiftMessage.getGift().getImage());
150+
var constructor = Unsafe.class.getDeclaredConstructors()[0];
151+
constructor.setAccessible(true);
152+
var field = Gift.class.getDeclaredField("picture");
153+
field.setAccessible(true);
154+
field.set(gift, picture);
155+
} catch (Exception e) {
156+
throw new TikTokLiveException("Unable to update picture in gift: " + gift.toString());
157+
}
158+
}
129159
}

0 commit comments

Comments
 (0)