From 85d99ce4f1b09bbb087dfb7fb67385e0e73b86bd Mon Sep 17 00:00:00 2001 From: "jacek.wolniewicz" Date: Mon, 1 Jul 2024 21:57:07 +0200 Subject: [PATCH] TikTokLive client sevices customization --- .../live/builder/LiveClientBuilder.java | 16 ++++++- Client/pom.xml | 14 +----- .../tiktok/TikTokLiveClientBuilder.java | 11 +++++ .../tiktok/CusomizationExample.java | 48 +++++++++++++++++++ .../jwdeveloper/tiktok/EventsDecorator.java | 7 ++- pom.xml | 13 ++++- 6 files changed, 93 insertions(+), 16 deletions(-) create mode 100644 Examples/src/main/java/io/github/jwdeveloper/tiktok/CusomizationExample.java diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/LiveClientBuilder.java b/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/LiveClientBuilder.java index 603de79..4d230ed 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/LiveClientBuilder.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/LiveClientBuilder.java @@ -22,6 +22,7 @@ */ package io.github.jwdeveloper.tiktok.live.builder; +import io.github.jwdeveloper.dependance.implementation.DependanceContainerBuilder; import io.github.jwdeveloper.tiktok.data.settings.LiveClientSettings; import io.github.jwdeveloper.tiktok.listener.TikTokEventListener; import io.github.jwdeveloper.tiktok.live.LiveClient; @@ -60,15 +61,26 @@ public interface LiveClientBuilder extends EventsBuilder { */ LiveClientBuilder addListener(TikTokEventListener listener); + /** + * Allows you to use own implementation of internal TikTokLive dependencies, + * when the default implementation does not meet your needs * + * + * @param onCustomizeDependencies access to dependency container + * @return + */ + LiveClientBuilder customize(Consumer onCustomizeDependencies); + + /** + * Builds new instance of the LiveClient * @return LiveClient object */ LiveClient build(); /** - * - * @return LiveClient object and connects to TikTok live + * Builds new instance of the LiveClient and connects to live + * @return LiveClient object */ LiveClient buildAndConnect(); diff --git a/Client/pom.xml b/Client/pom.xml index 82e38d9..34e9e11 100644 --- a/Client/pom.xml +++ b/Client/pom.xml @@ -11,12 +11,7 @@ Client - - - jitpack.io - https://jitpack.io - - + @@ -30,12 +25,7 @@ ${project.version} compile - - com.github.jwdeveloper.DepenDance - DepenDance-Full - 0.0.18-Release - compile - + com.google.protobuf protobuf-java 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 f8a19ff..21fdfd7 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java @@ -24,6 +24,7 @@ package io.github.jwdeveloper.tiktok; import io.github.jwdeveloper.dependance.Dependance; import io.github.jwdeveloper.dependance.api.DependanceContainer; +import io.github.jwdeveloper.dependance.implementation.DependanceContainerBuilder; import io.github.jwdeveloper.tiktok.mappers.MessagesMapperFactory; import io.github.jwdeveloper.tiktok.common.LoggerFactory; import io.github.jwdeveloper.tiktok.data.events.*; @@ -63,6 +64,7 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder { protected final TikTokLiveEventHandler eventHandler; protected final List listeners; protected final List> onCustomMappings; + protected final List> onCustomDependencies; public TikTokLiveClientBuilder(String userName) { this.clientSettings = LiveClientSettings.createDefault(); @@ -70,6 +72,7 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder { this.eventHandler = new TikTokLiveEventHandler(); this.listeners = new ArrayList<>(); this.onCustomMappings = new ArrayList<>(); + this.onCustomDependencies = new ArrayList<>(); } public LiveClientBuilder onMapping(Consumer consumer) { @@ -88,6 +91,12 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder { return this; } + @Override + public LiveClientBuilder customize(Consumer onCustomizeDependencies) { + this.onCustomDependencies.add(onCustomizeDependencies); + return this; + } + protected void validate() { if (clientSettings.getClientLanguage() == null || clientSettings.getClientLanguage().isEmpty()) clientSettings.setClientLanguage("en"); @@ -175,6 +184,8 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder { //client dependance.registerSingleton(LiveClient.class, TikTokLiveClient.class); + onCustomDependencies.forEach(action -> action.accept(dependance)); + var container = dependance.build(); return container.find(LiveClient.class); } diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/CusomizationExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/CusomizationExample.java new file mode 100644 index 0000000..8b61618 --- /dev/null +++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/CusomizationExample.java @@ -0,0 +1,48 @@ +package io.github.jwdeveloper.tiktok; + +import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent; +import io.github.jwdeveloper.tiktok.data.events.gift.TikTokGiftEvent; +import io.github.jwdeveloper.tiktok.data.models.gifts.Gift; +import io.github.jwdeveloper.tiktok.live.GiftsManager; +import io.github.jwdeveloper.tiktok.live.LiveClient; + +import java.util.List; +import java.util.Map; +import java.util.function.Predicate; + +/** + * When the default implementation does not meet your needs, + * you can override it using `customize` method + */ +public class CusomizationExample { + public static void main(String[] args) { + + var client = TikTokLive.newClient("john") + .configure(liveClientSettings -> + { + liveClientSettings.setFetchGifts(false); + liveClientSettings.setOffline(true); + }) + .onError((liveClient, event) -> + { + event.getException().printStackTrace(); + }) + .customize(container -> + { + //overriding default implementation of GiftsManager, with own one + container.registerSingleton(TikTokLiveEventHandler.class, CustomEventsHandler.class); + }).build(); + + client.connect(); + client.publishEvent(TikTokGiftEvent.of("rose", 1, 12)); + client.publishEvent(TikTokGiftEvent.of("stone", 2, 12)); + } + + public static class CustomEventsHandler extends TikTokLiveEventHandler { + + @Override + public void publish(LiveClient tikTokLiveClient, TikTokEvent tikTokEvent) { + System.out.println("Hello from custom events handler: " + tikTokEvent.getClass().getSimpleName()); + } + } +} diff --git a/Tools-ReadmeGenerator/src/main/java/io/github/jwdeveloper/tiktok/EventsDecorator.java b/Tools-ReadmeGenerator/src/main/java/io/github/jwdeveloper/tiktok/EventsDecorator.java index 1041f33..441bdb9 100644 --- a/Tools-ReadmeGenerator/src/main/java/io/github/jwdeveloper/tiktok/EventsDecorator.java +++ b/Tools-ReadmeGenerator/src/main/java/io/github/jwdeveloper/tiktok/EventsDecorator.java @@ -5,8 +5,13 @@ import io.github.jwdeveloper.descrabble.api.elements.Element; import io.github.jwdeveloper.descrabble.api.elements.ElementFactory; public class EventsDecorator implements DescriptionDecorator { + + + + @Override - public void decorate(Element root, ElementFactory factory) { + public void decorate(Element root, ElementFactory factory) + { } } diff --git a/pom.xml b/pom.xml index 58bdfa4..8f6b0a8 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,12 @@ 16 UTF-8 - + + + jitpack.io + https://jitpack.io + + @@ -74,6 +79,12 @@ + + com.github.jwdeveloper.DepenDance + DepenDance-Full + 0.0.18-Release + compile + org.projectlombok lombok