From 1ba8208b7a5a91cce94c37facaecefe3636def13 Mon Sep 17 00:00:00 2001 From: aNNiMON Date: Tue, 2 Jul 2024 19:32:32 +0300 Subject: [PATCH] Store parameters as map --- .../ffmpeg/MediaProcessingBundle.java | 10 ++---- .../ffmpeg/MediaProcessingKeyboard.java | 3 +- .../ffmpegbot/parameters/Parameters.java | 33 +++++++++++++++++++ .../parameters/resolvers/AudioResolver.java | 4 +-- .../resolvers/GlobalParametersResolver.java | 4 +-- .../resolvers/MultiAudioStreamsResolver.java | 5 ++- .../resolvers/OutputFormatResolver.java | 4 +-- .../resolvers/ParametersResolver.java | 5 ++- .../resolvers/SpeedFactorResolver.java | 5 ++- .../parameters/resolvers/VideoResolver.java | 2 +- .../ffmpegbot/session/MediaSession.java | 8 ++--- 11 files changed, 55 insertions(+), 28 deletions(-) create mode 100644 src/main/java/com/annimon/ffmpegbot/parameters/Parameters.java diff --git a/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/MediaProcessingBundle.java b/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/MediaProcessingBundle.java index 7528839..a56f34c 100644 --- a/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/MediaProcessingBundle.java +++ b/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/MediaProcessingBundle.java @@ -2,8 +2,8 @@ package com.annimon.ffmpegbot.commands.ffmpeg; import com.annimon.ffmpegbot.file.FileDownloadException; import com.annimon.ffmpegbot.file.FileDownloader; -import com.annimon.ffmpegbot.parameters.Parameter; import com.annimon.ffmpegbot.file.FilePath; +import com.annimon.ffmpegbot.parameters.Parameters; import com.annimon.ffmpegbot.parameters.resolvers.GlobalParametersResolver; import com.annimon.ffmpegbot.parameters.resolvers.ParametersResolver; import com.annimon.ffmpegbot.session.MediaSession; @@ -19,7 +19,6 @@ import com.annimon.tgbotsmodule.services.CommonAbsSender; import org.jetbrains.annotations.NotNull; import org.telegram.telegrambots.meta.api.objects.Message; -import java.util.ArrayList; import java.util.concurrent.CompletableFuture; import java.util.function.BiConsumer; import java.util.function.Consumer; @@ -54,7 +53,7 @@ public class MediaProcessingBundle implements CommandBundle { session.setChatId(message.getChatId()); session.fromFileInfo(fileInfo); - final var params = new ArrayList>(); + final var params = new Parameters(); parametersResolver.resolve(params, fileInfo); session.setParams(params); @@ -78,10 +77,7 @@ public class MediaProcessingBundle implements CommandBundle { session.setSelectedParam(null); } else { final String id = ctx.argument(0); - final var param = session.getParams().stream() - .filter(p -> p.getId().equals(id)) - .findFirst().orElse(null); - + final var param = session.getParams().findById(id); session.setSelectedParam(param); if (param != null && ctx.argumentsLength() == 2) { diff --git a/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/MediaProcessingKeyboard.java b/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/MediaProcessingKeyboard.java index 8db1d75..188533d 100644 --- a/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/MediaProcessingKeyboard.java +++ b/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/MediaProcessingKeyboard.java @@ -1,6 +1,7 @@ package com.annimon.ffmpegbot.commands.ffmpeg; import com.annimon.ffmpegbot.parameters.Parameter; +import com.annimon.ffmpegbot.parameters.Parameters; import com.annimon.ffmpegbot.session.MediaSession; import com.annimon.ffmpegbot.session.YtDlpSession; import org.telegram.telegrambots.meta.api.objects.replykeyboard.InlineKeyboardMarkup; @@ -26,7 +27,7 @@ public class MediaProcessingKeyboard { } } - private static InlineKeyboardMarkup createParamsListKeyboard(List> params) { + private static InlineKeyboardMarkup createParamsListKeyboard(Parameters params) { final var keyboard = new ArrayList>(); final var it = params.iterator(); while (it.hasNext()) { diff --git a/src/main/java/com/annimon/ffmpegbot/parameters/Parameters.java b/src/main/java/com/annimon/ffmpegbot/parameters/Parameters.java new file mode 100644 index 0000000..8616238 --- /dev/null +++ b/src/main/java/com/annimon/ffmpegbot/parameters/Parameters.java @@ -0,0 +1,33 @@ +package com.annimon.ffmpegbot.parameters; + +import org.jetbrains.annotations.NotNull; +import java.util.*; + +public class Parameters extends AbstractCollection> { + + private final Map> parameters; + + public Parameters() { + parameters = new LinkedHashMap<>(); + } + + @Override + public boolean add(Parameter parameter) { + return !Objects.equals(parameter, parameters.put(parameter.id, parameter)); + } + + public Parameter findById(String id) { + return parameters.get(id); + } + + @NotNull + @Override + public Iterator> iterator() { + return parameters.values().iterator(); + } + + @Override + public int size() { + return parameters.size(); + } +} diff --git a/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/AudioResolver.java b/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/AudioResolver.java index 88c94ae..abcd9c2 100644 --- a/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/AudioResolver.java +++ b/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/AudioResolver.java @@ -9,7 +9,7 @@ import java.util.List; public class AudioResolver implements ParametersResolver { @Override - public void resolve(@NotNull List> parameters, @NotNull FileInfo fileInfo) { + public void resolve(@NotNull Parameters parameters, @NotNull FileInfo fileInfo) { final boolean hasAudio = switch (fileInfo.fileType()) { case ANIMATION -> false; case AUDIO, VOICE -> true; @@ -28,7 +28,7 @@ public class AudioResolver implements ParametersResolver { } } - private void disableAudioParam(@NotNull List> parameters, @NotNull FileType fileType) { + private void disableAudioParam(@NotNull Parameters parameters, @NotNull FileType fileType) { final boolean canAudioBeDisabled = switch (fileType) { case ANIMATION, AUDIO, VOICE -> false; case VIDEO, VIDEO_NOTE -> true; diff --git a/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/GlobalParametersResolver.java b/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/GlobalParametersResolver.java index d13c06a..e477fe9 100644 --- a/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/GlobalParametersResolver.java +++ b/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/GlobalParametersResolver.java @@ -1,6 +1,6 @@ package com.annimon.ffmpegbot.parameters.resolvers; -import com.annimon.ffmpegbot.parameters.Parameter; +import com.annimon.ffmpegbot.parameters.Parameters; import com.annimon.ffmpegbot.session.FileInfo; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -19,7 +19,7 @@ public class GlobalParametersResolver implements ParametersResolver { } @Override - public void resolve(@NotNull List> parameters, @NotNull FileInfo fileInfo) { + public void resolve(@NotNull Parameters parameters, @NotNull FileInfo fileInfo) { for (ParametersResolver resolver : resolvers) { resolver.resolve(parameters, fileInfo); } diff --git a/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/MultiAudioStreamsResolver.java b/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/MultiAudioStreamsResolver.java index aa5db09..d99d469 100644 --- a/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/MultiAudioStreamsResolver.java +++ b/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/MultiAudioStreamsResolver.java @@ -1,16 +1,15 @@ package com.annimon.ffmpegbot.parameters.resolvers; import com.annimon.ffmpegbot.parameters.AudioStreamByLanguage; -import com.annimon.ffmpegbot.parameters.Parameter; +import com.annimon.ffmpegbot.parameters.Parameters; import com.annimon.ffmpegbot.session.FileInfo; import com.annimon.ffmpegbot.session.FileType; import org.jetbrains.annotations.NotNull; -import java.util.List; public class MultiAudioStreamsResolver implements ParametersResolver { @Override - public void resolve(@NotNull List> parameters, @NotNull FileInfo fileInfo) { + public void resolve(@NotNull Parameters parameters, @NotNull FileInfo fileInfo) { // TODO: ffprobe check for actual codec if (!fileInfo.fileType().equals(FileType.VIDEO)) { return; diff --git a/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/OutputFormatResolver.java b/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/OutputFormatResolver.java index b148614..caaccf5 100644 --- a/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/OutputFormatResolver.java +++ b/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/OutputFormatResolver.java @@ -1,7 +1,7 @@ package com.annimon.ffmpegbot.parameters.resolvers; import com.annimon.ffmpegbot.parameters.OutputFormat; -import com.annimon.ffmpegbot.parameters.Parameter; +import com.annimon.ffmpegbot.parameters.Parameters; import com.annimon.ffmpegbot.session.FileInfo; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -12,7 +12,7 @@ import static com.annimon.ffmpegbot.parameters.OutputFormat.*; public class OutputFormatResolver implements ParametersResolver { @Override - public void resolve(@NotNull List> parameters, @NotNull FileInfo fileInfo) { + public void resolve(@NotNull Parameters parameters, @NotNull FileInfo fileInfo) { final var outputFormat = switch (fileInfo.fileType()) { case VIDEO -> forVideo(fileInfo); case VIDEO_NOTE -> new OutputFormat(List.of(VIDEO_NOTE, VIDEO, AUDIO), VIDEO_NOTE); diff --git a/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/ParametersResolver.java b/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/ParametersResolver.java index 7cb9f9e..a1bcb6e 100644 --- a/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/ParametersResolver.java +++ b/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/ParametersResolver.java @@ -1,11 +1,10 @@ package com.annimon.ffmpegbot.parameters.resolvers; -import com.annimon.ffmpegbot.parameters.Parameter; +import com.annimon.ffmpegbot.parameters.Parameters; import com.annimon.ffmpegbot.session.FileInfo; import org.jetbrains.annotations.NotNull; -import java.util.List; public interface ParametersResolver { - void resolve(@NotNull List> parameters, @NotNull FileInfo fileInfo); + void resolve(@NotNull Parameters parameters, @NotNull FileInfo fileInfo); } diff --git a/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/SpeedFactorResolver.java b/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/SpeedFactorResolver.java index 5ba0160..0a89aa6 100644 --- a/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/SpeedFactorResolver.java +++ b/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/SpeedFactorResolver.java @@ -1,15 +1,14 @@ package com.annimon.ffmpegbot.parameters.resolvers; -import com.annimon.ffmpegbot.parameters.Parameter; +import com.annimon.ffmpegbot.parameters.Parameters; import com.annimon.ffmpegbot.parameters.SpeedFactor; import com.annimon.ffmpegbot.session.FileInfo; import org.jetbrains.annotations.NotNull; -import java.util.List; public class SpeedFactorResolver implements ParametersResolver { @Override - public void resolve(@NotNull List> parameters, @NotNull FileInfo fileInfo) { + public void resolve(@NotNull Parameters parameters, @NotNull FileInfo fileInfo) { // For anything except static images parameters.add(new SpeedFactor()); } diff --git a/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/VideoResolver.java b/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/VideoResolver.java index 0bb42d5..f32f946 100644 --- a/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/VideoResolver.java +++ b/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/VideoResolver.java @@ -8,7 +8,7 @@ import java.util.List; public class VideoResolver implements ParametersResolver { @Override - public void resolve(@NotNull List> parameters, @NotNull FileInfo fileInfo) { + public void resolve(@NotNull Parameters parameters, @NotNull FileInfo fileInfo) { final boolean hasVideo = switch (fileInfo.fileType()) { case ANIMATION, VIDEO, VIDEO_NOTE -> true; default -> false; diff --git a/src/main/java/com/annimon/ffmpegbot/session/MediaSession.java b/src/main/java/com/annimon/ffmpegbot/session/MediaSession.java index 055fffa..319a367 100644 --- a/src/main/java/com/annimon/ffmpegbot/session/MediaSession.java +++ b/src/main/java/com/annimon/ffmpegbot/session/MediaSession.java @@ -1,9 +1,9 @@ package com.annimon.ffmpegbot.session; import com.annimon.ffmpegbot.parameters.Parameter; +import com.annimon.ffmpegbot.parameters.Parameters; import java.io.File; -import java.util.List; import java.util.StringJoiner; import static com.annimon.ffmpegbot.TextUtils.*; @@ -18,7 +18,7 @@ public final class MediaSession extends Session { private String resolution; // Parameters private Parameter selectedParam; - private List> params; + private Parameters params; // Files private File inputFile; private File outputFile; @@ -82,11 +82,11 @@ public final class MediaSession extends Session { } } - public List> getParams() { + public Parameters getParams() { return params; } - public void setParams(List> params) { + public void setParams(Parameters params) { this.params = params; }