From c91070ae1547c3925c5e985b16741d598fe35ca4 Mon Sep 17 00:00:00 2001 From: mykola2312 <49044616+mykola2312@users.noreply.github.com> Date: Fri, 26 Apr 2024 03:02:08 +0300 Subject: [PATCH] implement basic oop for mpv ipc --- .../java/com/mykola2312/mptv/mpv/MPV.java | 3 +- .../com/mykola2312/mptv/mpv/MPVCommand.java | 27 +++++++++++++++++ .../mykola2312/mptv/mpv/MPVCommandRaw.java | 22 ++------------ .../com/mykola2312/mptv/mpv/MPVProperty.java | 15 ++++++++++ .../mykola2312/mptv/mpv/MPVSetProperty.java | 29 +++++++++++++++++++ .../com/mykola2312/mptv/mpv/MPVSocket.java | 5 ++-- 6 files changed, 77 insertions(+), 24 deletions(-) create mode 100644 src/main/java/com/mykola2312/mptv/mpv/MPVCommand.java create mode 100644 src/main/java/com/mykola2312/mptv/mpv/MPVProperty.java create mode 100644 src/main/java/com/mykola2312/mptv/mpv/MPVSetProperty.java diff --git a/src/main/java/com/mykola2312/mptv/mpv/MPV.java b/src/main/java/com/mykola2312/mptv/mpv/MPV.java index 8764ce9..b770214 100644 --- a/src/main/java/com/mykola2312/mptv/mpv/MPV.java +++ b/src/main/java/com/mykola2312/mptv/mpv/MPV.java @@ -31,8 +31,7 @@ public class MPV implements TaskProcess { socket = new MPVSocket(); socket.waitForConnection(MPV_SOCKET_PATH); - // TODO: remove test code - socket.writeCommandRaw(new MPVCommandRaw("set_property", "volume", "0")); + socket.writeCommand(new MPVSetProperty(MPVProperty.VOLUME, 0)); return isAlive(); } diff --git a/src/main/java/com/mykola2312/mptv/mpv/MPVCommand.java b/src/main/java/com/mykola2312/mptv/mpv/MPVCommand.java new file mode 100644 index 0000000..9ff613f --- /dev/null +++ b/src/main/java/com/mykola2312/mptv/mpv/MPVCommand.java @@ -0,0 +1,27 @@ +package com.mykola2312.mptv.mpv; + +import java.nio.charset.StandardCharsets; +import java.util.List; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +public abstract class MPVCommand { + private int requestId; + + public void setRequestId(int requestId) { + this.requestId = requestId; + } + + protected abstract List serializeCommand(); + + public byte[] serialize() throws JsonProcessingException { + MPVCommandRaw command = new MPVCommandRaw(); + command.request_id = requestId; + command.command = serializeCommand(); + + ObjectMapper mapper = new ObjectMapper(); + String jsonCommand = mapper.writeValueAsString(command) + "\n"; + return jsonCommand.getBytes(StandardCharsets.UTF_8); + } +} diff --git a/src/main/java/com/mykola2312/mptv/mpv/MPVCommandRaw.java b/src/main/java/com/mykola2312/mptv/mpv/MPVCommandRaw.java index 489ca9e..76f4647 100644 --- a/src/main/java/com/mykola2312/mptv/mpv/MPVCommandRaw.java +++ b/src/main/java/com/mykola2312/mptv/mpv/MPVCommandRaw.java @@ -1,24 +1,8 @@ package com.mykola2312.mptv.mpv; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Arrays; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; +import java.util.List; public class MPVCommandRaw { - public ArrayList command; - - public MPVCommandRaw(String name, String... args) { - command = new ArrayList<>(); - command.add(name); - command.addAll(Arrays.asList(args)); - } - - public byte[] serialize() throws JsonProcessingException { - ObjectMapper mapper = new ObjectMapper(); - String jsonCommand = mapper.writeValueAsString(this); - return jsonCommand.getBytes(StandardCharsets.UTF_8); - } + public int request_id; + public List command; } diff --git a/src/main/java/com/mykola2312/mptv/mpv/MPVProperty.java b/src/main/java/com/mykola2312/mptv/mpv/MPVProperty.java new file mode 100644 index 0000000..0184bbc --- /dev/null +++ b/src/main/java/com/mykola2312/mptv/mpv/MPVProperty.java @@ -0,0 +1,15 @@ +package com.mykola2312.mptv.mpv; + +public enum MPVProperty { + VOLUME ("volume"); + + private final String name; + + private MPVProperty(String name) { + this.name = name; + } + + public String toString() { + return this.name; + } +} diff --git a/src/main/java/com/mykola2312/mptv/mpv/MPVSetProperty.java b/src/main/java/com/mykola2312/mptv/mpv/MPVSetProperty.java new file mode 100644 index 0000000..e128719 --- /dev/null +++ b/src/main/java/com/mykola2312/mptv/mpv/MPVSetProperty.java @@ -0,0 +1,29 @@ +package com.mykola2312.mptv.mpv; + +import java.util.Arrays; +import java.util.List; + +public class MPVSetProperty extends MPVCommand { + private final MPVProperty property; + private final String value; + + public MPVSetProperty(MPVProperty property, String value) { + this.property = property; + this.value = value; + } + + public MPVSetProperty(MPVProperty property, int value) { + this.property = property; + this.value = String.valueOf(value); + } + + public MPVSetProperty(MPVProperty property, float value) { + this.property = property; + this.value = String.valueOf(value); + } + + @Override + protected List serializeCommand() { + return Arrays.asList("set_property", property.toString(), value); + } +} diff --git a/src/main/java/com/mykola2312/mptv/mpv/MPVSocket.java b/src/main/java/com/mykola2312/mptv/mpv/MPVSocket.java index 825f61e..47b055b 100644 --- a/src/main/java/com/mykola2312/mptv/mpv/MPVSocket.java +++ b/src/main/java/com/mykola2312/mptv/mpv/MPVSocket.java @@ -46,12 +46,11 @@ public class MPVSocket { } } - public void writeCommandRaw(MPVCommandRaw command) { + public void writeCommand(MPVCommand command) { try { AFOutputStream output = socket.getOutputStream(); - + output.write(command.serialize()); - output.write('\n'); output.flush(); } catch (JsonProcessingException e) { logger.error("failed to serialize command", e);