diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/Picture.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/Picture.java index c55a053..45d2227 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/Picture.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/Picture.java @@ -93,7 +93,7 @@ public class Picture { } } - public static Picture Empty() { + public static Picture empty() { return new Picture(""); } diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/users/User.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/users/User.java index cab957b..06fa68b 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/users/User.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/users/User.java @@ -169,7 +169,7 @@ public class User { public static User EMPTY = new User(0L, "", - Picture.Empty(), + Picture.empty(), 0, 0, List.of(Badge.empty())); diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/LiveClientSettings.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/LiveClientSettings.java index 03a3a69..3ebc928 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/LiveClientSettings.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/LiveClientSettings.java @@ -33,20 +33,15 @@ import java.util.logging.Level; @Data public class LiveClientSettings { - /** - * TODO: give better description - *
- * sets client in the offline mode, so it do not connects to TikTok servers - * it makes sense to use it when you are testing client with your custom events + * Sets client to offline mode, prohibits connection to TikTok servers + * @apiNote Useful when testing client with custom events */ private boolean offline; /** - * TODO: give better description - *
- * Determines if gifts data is downloaded before TikTokLive starts,
- * when `false` then client.giftManager() does not contain initial gifts
+ * Fetch and download gifts data before TikTokLive starts
+ * @apiNote If `false`, client.giftManager() does not contain initial gifts
*/
private boolean fetchGifts = true;
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/http/LiveHttpClient.java b/API/src/main/java/io/github/jwdeveloper/tiktok/http/LiveHttpClient.java
index 2fcdd09..8506db1 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/http/LiveHttpClient.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/http/LiveHttpClient.java
@@ -30,10 +30,14 @@ import io.github.jwdeveloper.tiktok.data.requests.LiveUserData;
public interface LiveHttpClient
{
/**
- * @return list of gifts that are available in your country
+ * @return {@link GiftsData.Response} list of gifts that are compiled and available on github
*/
GiftsData.Response fetchGiftsData();
+ /**
+ * @return {@link GiftsData.Response} list of gifts that are available in your region / livestream
+ */
+ GiftsData.Response fetchRoomGiftsData(String room_id);
/**
* Returns information about user that is having a livestream
diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java
index cfbb449..15e98be 100644
--- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java
+++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java
@@ -128,6 +128,9 @@ public class TikTokLiveClient implements LiveClient {
liveRoomInfo.setStartTime(userData.getStartedAtTimeStamp());
liveRoomInfo.setRoomId(userData.getRoomId());
+ if (clientSettings.isFetchGifts())
+ giftsManager.attachGiftsList(httpClient.fetchRoomGiftsData(userData.getRoomId()).getGifts());
+
if (userData.getUserStatus() == LiveUserData.UserStatus.Offline)
throw new TikTokLiveOfflineHostException("User is offline: " + liveRoomInfo.getHostName());
diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpClient.java
index 0d1098d..f180930 100644
--- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpClient.java
+++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpClient.java
@@ -43,6 +43,7 @@ public class TikTokLiveHttpClient implements LiveHttpClient
private static final String TIKTOK_URL_WEB = "https://www.tiktok.com/";
private static final String TIKTOK_URL_WEBCAST = "https://webcast.tiktok.com/webcast/";
public static final String TIKTOK_GIFTS_URL = "https://raw.githubusercontent.com/TikTok-LIVE-Private/GiftsGenerator/master/page/public/gifts.json";
+ public static final String TIKTOK_ROOM_GIFTS_URL = TIKTOK_URL_WEBCAST+"gift/list/";
public static final int TIKTOK_AGE_RESTRICTED_CODE = 4003110;
private final HttpClientFactory httpFactory;
@@ -65,6 +66,31 @@ public class TikTokLiveHttpClient implements LiveHttpClient
this(new HttpClientFactory(LiveClientSettings.createDefault()), LiveClientSettings.createDefault());
}
+ public GiftsData.Response fetchRoomGiftsData(String room_id) {
+ var proxyClientSettings = clientSettings.getHttpSettings().getProxyClientSettings();
+ if (proxyClientSettings.isEnabled()) {
+ while (proxyClientSettings.hasNext()) {
+ try {
+ return getRoomGiftsData(room_id);
+ } catch (TikTokProxyRequestException ignored) {}
+ }
+ }
+ return getRoomGiftsData(room_id);
+ }
+
+ public GiftsData.Response getRoomGiftsData(String room_id) {
+ var result = httpFactory.client(TIKTOK_ROOM_GIFTS_URL)
+ .withParam("room_id", room_id)
+ .build()
+ .toJsonResponse();
+
+ if (result.isFailure())
+ throw new TikTokLiveRequestException("Unable to fetch gifts information's - "+result);
+
+ var json = result.getContent();
+ return giftsDataMapper.mapRoom(json);
+ }
+
public GiftsData.Response fetchGiftsData() {
var proxyClientSettings = clientSettings.getHttpSettings().getProxyClientSettings();
if (proxyClientSettings.isEnabled()) {
diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpOfflineClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpOfflineClient.java
index c5fb961..76eaa94 100644
--- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpOfflineClient.java
+++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpOfflineClient.java
@@ -18,6 +18,11 @@ public class TikTokLiveHttpOfflineClient implements LiveHttpClient {
return new GiftsData.Response("", List.of());
}
+ @Override
+ public GiftsData.Response fetchRoomGiftsData(String room_id) {
+ return new GiftsData.Response("", List.of());
+ }
+
@Override
public LiveUserData.Response fetchLiveUserData(LiveUserData.Request request) {
return new LiveUserData.Response("", LiveUserData.UserStatus.Live, "offline_room_id", 0);
@@ -42,4 +47,4 @@ public class TikTokLiveHttpOfflineClient implements LiveHttpClient {
URI.create("https://example.live"),
WebcastResponse.newBuilder().build());
}
-}
+}
\ No newline at end of file
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..622500a 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
@@ -4,7 +4,7 @@ import io.github.jwdeveloper.tiktok.data.models.gifts.Gift;
import io.github.jwdeveloper.tiktok.live.GiftsManager;
import java.util.*;
-import java.util.function.Predicate;
+import java.util.function.*;
import java.util.stream.Collectors;
public class TikTokGiftsManager implements GiftsManager {
@@ -12,7 +12,7 @@ public class TikTokGiftsManager implements GiftsManager {
public TikTokGiftsManager(List