Skip to content

Commit 43a8ba4

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

File tree

6 files changed

+31
-56
lines changed

6 files changed

+31
-56
lines changed

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

Lines changed: 15 additions & 3 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.Getter;
30+
import lombok.*;
3131

3232
import java.util.*;
3333

@@ -43,6 +43,8 @@ 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;
4648
private final List<Team> teams;
4749

4850
public TikTokLinkMicBattleEvent(WebcastLinkMicBattle msg) {
@@ -53,19 +55,29 @@ public TikTokLinkMicBattleEvent(WebcastLinkMicBattle msg) {
5355
if (msg.getHostTeamCount() == 2) { // 1v1 battle
5456
teams.add(new Team1v1(msg.getHostTeam(0), msg));
5557
teams.add(new Team1v1(msg.getHostTeam(1), msg));
58+
oneVsOne = true;
5659
} else { // 2v2 battle
5760
if (isFinished()) {
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));
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));
6063
} else {
6164
teams.add(new Team2v2(msg.getHostTeam(0), msg.getHostTeam(1), msg));
6265
teams.add(new Team2v2(msg.getHostTeam(2), msg.getHostTeam(3), msg));
6366
}
67+
oneVsOne = false;
6468
}
6569

6670
// Info:
6771
// - msg.getDetailsList() & msg.getViewerTeamList() both only have content when battle is finished
6872
// - msg.getDetailsCount() & msg.getViewerTeamCount() always is 2 only when battle is finished
6973
// - msg.getHostTeamCount() always is 2 for 1v1 or 4 for 2v2
7074
}
75+
76+
public boolean is1v1() {
77+
return oneVsOne;
78+
}
79+
80+
public boolean is2v2() {
81+
return !oneVsOne;
82+
}
7183
}

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

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

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

97
@Data
108
public class Gift {
@@ -16,7 +14,7 @@ public class Gift {
1614

1715
private final int diamondCost;
1816

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

2119
private final JsonObject properties;
2220

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

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

94-
9594
//I don't like it, but it is reasonable for now
9695
private static GiftsManager giftsManager;
9796

@@ -108,6 +107,4 @@ public static GiftsManager gifts() {
108107
}
109108
return giftsManager;
110109
}
111-
112-
113110
}

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

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

208208

209209
//LinkMic events
210-
// mapper.webcastObjectToConstructor(WebcastLinkMicBattle.class, TikTokLinkMicBattleEvent.class);
211-
// mapper.webcastObjectToConstructor(WebcastLinkMicArmies.class, TikTokLinkMicArmiesEvent.class);
212-
// mapper.webcastObjectToConstructor(WebcastLinkMicMethod.class, TikTokLinkMicMethodEvent.class);
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);
213219
// mapper.webcastObjectToConstructor(WebcastLinkMicFanTicketMethod.class, TikTokLinkMicFanTicketEvent.class);
214220

215221
//Rank events

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

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
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;
54
import io.github.jwdeveloper.tiktok.live.GiftsManager;
65

7-
import java.util.Collections;
8-
import java.util.List;
9-
import java.util.Map;
10-
import java.util.function.Function;
6+
import java.util.*;
117
import java.util.function.Predicate;
128
import java.util.stream.Collectors;
139

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

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

4234
public Gift getByFilter(Predicate<Gift> filter) {
4335
return giftsByIdIndex.values()
4436
.stream()
4537
.filter(filter)
4638
.findFirst()
47-
.orElseGet(() -> Gift.UNDEFINED);
39+
.orElse(Gift.UNDEFINED);
4840
}
4941

5042
@Override
@@ -62,4 +54,4 @@ public List<Gift> toList() {
6254
public Map<Integer, Gift> toMap() {
6355
return Collections.unmodifiableMap(giftsByIdIndex);
6456
}
65-
}
57+
}

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

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,11 @@
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;
3130
import io.github.jwdeveloper.tiktok.live.GiftsManager;
3231
import io.github.jwdeveloper.tiktok.mappers.TikTokMapperHelper;
3332
import io.github.jwdeveloper.tiktok.mappers.data.MappingResult;
3433
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastGiftMessage;
3534
import lombok.SneakyThrows;
36-
import sun.misc.Unsafe;
3735

3836
import java.util.*;
3937

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

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

131127
return gift;
132128
}
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-
}
159129
}

0 commit comments

Comments
 (0)