From 0b9852c4d4ccd3958f70897b0e7f1f8d65c65c91 Mon Sep 17 00:00:00 2001 From: kohlerpop1 Date: Tue, 18 Jun 2024 15:21:05 -0400 Subject: [PATCH 1/5] Moved ActionResult#message to top of toJson() for easier reading Change Recording settings to accept an output file instead of directory and filename --- .../jwdeveloper/tiktok/common/ActionResult.java | 2 +- .../recorder/impl/RecorderListener.java | 16 +++++++--------- .../recorder/impl/data/RecorderSettings.java | 4 ++-- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java index 46bdb5d..25cb954 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java @@ -100,8 +100,8 @@ public class ActionResult { public JsonObject toJson() { JsonObject map = new JsonObject(); map.addProperty("success", success); - map.add("content", gson.toJsonTree(content)); map.addProperty("message", message); + map.add("content", gson.toJsonTree(content)); map.add("previous", hasPrevious() ? previous.toJson() : null); return map; } diff --git a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java index 7d0de49..8f245fd 100644 --- a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java +++ b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java @@ -87,14 +87,13 @@ public class RecorderListener implements LiveRecorder { connection.setRequestProperty(entry.getKey(), entry.getValue()); } - var path = settings.getOutputPath() + File.separator + settings.getOutputFileName(); - var file = new File(path); + var file = settings.getOutputFile(); file.getParentFile().mkdirs(); file.createNewFile(); try ( - var in = connection.getInputStream(); - var fos = new FileOutputStream(file) + var in = connection.getInputStream(); + var fos = new FileOutputStream(file) ) { byte[] dataBuffer = new byte[1024]; int bytesRead; @@ -113,11 +112,10 @@ public class RecorderListener implements LiveRecorder { var recordingStartedEvent = new TikTokLiveRecorderStartedEvent(downloadData); liveClient.publishEvent(recordingStartedEvent); - if (recordingStartedEvent.isCanceled()) { - liveClient.getLogger().info("Recording cancelled"); - return; - } - liveDownloadThread.start(); + if (recordingStartedEvent.isCanceled()) + liveClient.getLogger().info("Recording cancelled"); + else + liveDownloadThread.start(); } @TikTokEventObserver diff --git a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/data/RecorderSettings.java b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/data/RecorderSettings.java index 2b04f01..2440225 100644 --- a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/data/RecorderSettings.java +++ b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/data/RecorderSettings.java @@ -27,6 +27,7 @@ import io.github.jwdeveloper.tiktok.extension.recorder.impl.enums.LiveFormat; import lombok.Getter; import lombok.Setter; +import java.io.File; import java.util.function.Function; @Getter @@ -36,8 +37,7 @@ public class RecorderSettings { private String ffmpegPath; private String quality; private String format; - private String outputPath; - private String outputFileName; + private File outputFile; private Function prepareDownloadData; private boolean startOnConnected; private boolean stopOnDisconnect = true; From 26659bb37d608c7d225329040d363412131d9b24 Mon Sep 17 00:00:00 2001 From: kohlerpop1 Date: Tue, 18 Jun 2024 15:36:03 -0400 Subject: [PATCH 2/5] Removed not needed/used RecorderSettings#startOnConnected --- .../tiktok/extension/recorder/impl/RecorderListener.java | 1 - .../tiktok/extension/recorder/impl/data/RecorderSettings.java | 1 - 2 files changed, 2 deletions(-) diff --git a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java index 8f245fd..1473a3b 100644 --- a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java +++ b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java @@ -76,7 +76,6 @@ public class RecorderListener implements LiveRecorder { if (isConnected()) return; - liveDownloadThread = new Thread(() -> { try { liveClient.getLogger().info("Recording started"); diff --git a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/data/RecorderSettings.java b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/data/RecorderSettings.java index 2440225..c27de1b 100644 --- a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/data/RecorderSettings.java +++ b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/data/RecorderSettings.java @@ -39,7 +39,6 @@ public class RecorderSettings { private String format; private File outputFile; private Function prepareDownloadData; - private boolean startOnConnected; private boolean stopOnDisconnect = true; public static RecorderSettings DEFAULT() { From 0329d3cfeb83cec1a329f9d87b2f8c68494e265a Mon Sep 17 00:00:00 2001 From: kohlerpop1 Date: Tue, 18 Jun 2024 22:01:47 -0400 Subject: [PATCH 3/5] Removed useless imports and altered logger message! --- .../java/io/github/jwdeveloper/tiktok/RecorderExample.java | 7 ++++--- .../tiktok/extension/recorder/impl/RecorderListener.java | 5 +---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/RecorderExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/RecorderExample.java index 50b05de..7f8f8cb 100644 --- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/RecorderExample.java +++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/RecorderExample.java @@ -26,6 +26,8 @@ package io.github.jwdeveloper.tiktok; import io.github.jwdeveloper.tiktok.extension.recorder.TikTokLiveRecorder; import io.github.jwdeveloper.tiktok.extension.recorder.impl.event.TikTokLiveRecorderStartedEvent; +import java.io.File; + public class RecorderExample { public static void main(String[] args) { @@ -42,8 +44,7 @@ public class RecorderExample { .addListener(TikTokLiveRecorder.use(recorderSettings -> { recorderSettings.setFfmpegPath("C:\\Users\\ja\\IdeaProjects\\TikTokLiveJava\\extension-recorder\\libs\\ffmpeg.exe"); - recorderSettings.setOutputPath("C:\\Users\\ja\\IdeaProjects\\TikTokLiveJava\\extension-recorder\\out"); - recorderSettings.setOutputFileName("test.flv"); + recorderSettings.setOutputFile(new File("C:\\Users\\ja\\IdeaProjects\\TikTokLiveJava\\extension-recorder\\out", "test.flv")); })) .onEvent(TikTokLiveRecorderStartedEvent.class, (liveClient, event) -> { @@ -52,4 +53,4 @@ public class RecorderExample { .buildAndConnect(); } -} +} \ No newline at end of file diff --git a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java index 1473a3b..45eadae 100644 --- a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java +++ b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java @@ -37,11 +37,8 @@ import io.github.jwdeveloper.tiktok.models.ConnectionState; import javax.net.ssl.HttpsURLConnection; import java.io.*; import java.net.URL; -import java.util.concurrent.TimeUnit; import java.util.function.Consumer; -import static java.nio.charset.StandardCharsets.UTF_8; - public class RecorderListener implements LiveRecorder { private final Consumer consumer; @@ -78,7 +75,7 @@ public class RecorderListener implements LiveRecorder { liveDownloadThread = new Thread(() -> { try { - liveClient.getLogger().info("Recording started"); + liveClient.getLogger().info("Recording started "+liveClient.getRoomInfo().getHostName()); var url = new URL(downloadData.getFullUrl()); HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); var headers = LiveClientSettings.DefaultRequestHeaders(); From 77c9cd6b527fe8c49efac00aabf35e3eedd42041 Mon Sep 17 00:00:00 2001 From: kohlerpop1 Date: Thu, 20 Jun 2024 16:51:42 -0400 Subject: [PATCH 4/5] Converted Consumer to BiConsumer to also accept liveClient! --- .../io/github/jwdeveloper/tiktok/RecorderExample.java | 2 +- .../tiktok/extension/recorder/TikTokLiveRecorder.java | 7 ++++--- .../tiktok/extension/recorder/impl/RecorderListener.java | 8 ++++---- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/RecorderExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/RecorderExample.java index 7f8f8cb..9c10e7b 100644 --- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/RecorderExample.java +++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/RecorderExample.java @@ -41,7 +41,7 @@ public class RecorderExample { { event.getException().printStackTrace(); }) - .addListener(TikTokLiveRecorder.use(recorderSettings -> + .addListener(TikTokLiveRecorder.use((recorderSettings, liveClient) -> { recorderSettings.setFfmpegPath("C:\\Users\\ja\\IdeaProjects\\TikTokLiveJava\\extension-recorder\\libs\\ffmpeg.exe"); recorderSettings.setOutputFile(new File("C:\\Users\\ja\\IdeaProjects\\TikTokLiveJava\\extension-recorder\\out", "test.flv")); diff --git a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/TikTokLiveRecorder.java b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/TikTokLiveRecorder.java index 4db5f38..a54e786 100644 --- a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/TikTokLiveRecorder.java +++ b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/TikTokLiveRecorder.java @@ -25,18 +25,19 @@ package io.github.jwdeveloper.tiktok.extension.recorder; import io.github.jwdeveloper.tiktok.extension.recorder.api.LiveRecorder; import io.github.jwdeveloper.tiktok.extension.recorder.impl.RecorderListener; import io.github.jwdeveloper.tiktok.extension.recorder.impl.data.RecorderSettings; +import io.github.jwdeveloper.tiktok.live.LiveClient; -import java.util.function.Consumer; +import java.util.function.*; public class TikTokLiveRecorder { - public static LiveRecorder use(Consumer consumer) + public static LiveRecorder use(BiConsumer consumer) { return new RecorderListener(consumer); } public static LiveRecorder use() { - return use(x ->{}); + return use((x,y) ->{}); } } \ No newline at end of file diff --git a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java index 45eadae..66b1caf 100644 --- a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java +++ b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java @@ -37,23 +37,23 @@ import io.github.jwdeveloper.tiktok.models.ConnectionState; import javax.net.ssl.HttpsURLConnection; import java.io.*; import java.net.URL; -import java.util.function.Consumer; +import java.util.function.*; public class RecorderListener implements LiveRecorder { - private final Consumer consumer; + private final BiConsumer consumer; private RecorderSettings settings; private DownloadData downloadData; private Thread liveDownloadThread; - public RecorderListener(Consumer consumer) { + public RecorderListener(BiConsumer consumer) { this.consumer = consumer; } @TikTokEventObserver private void onResponse(LiveClient liveClient, TikTokRoomDataResponseEvent event) { settings = RecorderSettings.DEFAULT(); - consumer.accept(settings); + consumer.accept(settings, liveClient); var json = event.getLiveData().getJson(); From d8258031875adaec556dd8b18f2bf6eacd9071af Mon Sep 17 00:00:00 2001 From: kohlerpop1 Date: Sun, 23 Jun 2024 23:06:05 -0400 Subject: [PATCH 5/5] Added while loop condition so it does not exit when getConnectionState returns Disconnected and stopOnDisconnect is false! --- .../tiktok/extension/recorder/impl/RecorderListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java index 66b1caf..b88cd5a 100644 --- a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java +++ b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java @@ -93,7 +93,7 @@ public class RecorderListener implements LiveRecorder { ) { byte[] dataBuffer = new byte[1024]; int bytesRead; - while (liveClient.getRoomInfo().getConnectionState() == ConnectionState.CONNECTED && (bytesRead = in.read(dataBuffer)) != -1) { + while ((!settings.isStopOnDisconnect() || liveClient.getRoomInfo().getConnectionState() == ConnectionState.CONNECTED) && (bytesRead = in.read(dataBuffer)) != -1) { fos.write(dataBuffer, 0, bytesRead); fos.flush(); }