mirror of
https://github.com/aNNiMON/ffmpegbot
synced 2024-09-19 22:54:20 +03:00
Store parameters as map
This commit is contained in:
parent
4389c3c6ec
commit
1ba8208b7a
@ -2,8 +2,8 @@ package com.annimon.ffmpegbot.commands.ffmpeg;
|
|||||||
|
|
||||||
import com.annimon.ffmpegbot.file.FileDownloadException;
|
import com.annimon.ffmpegbot.file.FileDownloadException;
|
||||||
import com.annimon.ffmpegbot.file.FileDownloader;
|
import com.annimon.ffmpegbot.file.FileDownloader;
|
||||||
import com.annimon.ffmpegbot.parameters.Parameter;
|
|
||||||
import com.annimon.ffmpegbot.file.FilePath;
|
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.GlobalParametersResolver;
|
||||||
import com.annimon.ffmpegbot.parameters.resolvers.ParametersResolver;
|
import com.annimon.ffmpegbot.parameters.resolvers.ParametersResolver;
|
||||||
import com.annimon.ffmpegbot.session.MediaSession;
|
import com.annimon.ffmpegbot.session.MediaSession;
|
||||||
@ -19,7 +19,6 @@ import com.annimon.tgbotsmodule.services.CommonAbsSender;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.telegram.telegrambots.meta.api.objects.Message;
|
import org.telegram.telegrambots.meta.api.objects.Message;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
@ -54,7 +53,7 @@ public class MediaProcessingBundle implements CommandBundle<For> {
|
|||||||
session.setChatId(message.getChatId());
|
session.setChatId(message.getChatId());
|
||||||
session.fromFileInfo(fileInfo);
|
session.fromFileInfo(fileInfo);
|
||||||
|
|
||||||
final var params = new ArrayList<Parameter<?>>();
|
final var params = new Parameters();
|
||||||
parametersResolver.resolve(params, fileInfo);
|
parametersResolver.resolve(params, fileInfo);
|
||||||
session.setParams(params);
|
session.setParams(params);
|
||||||
|
|
||||||
@ -78,10 +77,7 @@ public class MediaProcessingBundle implements CommandBundle<For> {
|
|||||||
session.setSelectedParam(null);
|
session.setSelectedParam(null);
|
||||||
} else {
|
} else {
|
||||||
final String id = ctx.argument(0);
|
final String id = ctx.argument(0);
|
||||||
final var param = session.getParams().stream()
|
final var param = session.getParams().findById(id);
|
||||||
.filter(p -> p.getId().equals(id))
|
|
||||||
.findFirst().orElse(null);
|
|
||||||
|
|
||||||
session.setSelectedParam(param);
|
session.setSelectedParam(param);
|
||||||
|
|
||||||
if (param != null && ctx.argumentsLength() == 2) {
|
if (param != null && ctx.argumentsLength() == 2) {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.annimon.ffmpegbot.commands.ffmpeg;
|
package com.annimon.ffmpegbot.commands.ffmpeg;
|
||||||
|
|
||||||
import com.annimon.ffmpegbot.parameters.Parameter;
|
import com.annimon.ffmpegbot.parameters.Parameter;
|
||||||
|
import com.annimon.ffmpegbot.parameters.Parameters;
|
||||||
import com.annimon.ffmpegbot.session.MediaSession;
|
import com.annimon.ffmpegbot.session.MediaSession;
|
||||||
import com.annimon.ffmpegbot.session.YtDlpSession;
|
import com.annimon.ffmpegbot.session.YtDlpSession;
|
||||||
import org.telegram.telegrambots.meta.api.objects.replykeyboard.InlineKeyboardMarkup;
|
import org.telegram.telegrambots.meta.api.objects.replykeyboard.InlineKeyboardMarkup;
|
||||||
@ -26,7 +27,7 @@ public class MediaProcessingKeyboard {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static InlineKeyboardMarkup createParamsListKeyboard(List<Parameter<?>> params) {
|
private static InlineKeyboardMarkup createParamsListKeyboard(Parameters params) {
|
||||||
final var keyboard = new ArrayList<List<InlineKeyboardButton>>();
|
final var keyboard = new ArrayList<List<InlineKeyboardButton>>();
|
||||||
final var it = params.iterator();
|
final var it = params.iterator();
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
package com.annimon.ffmpegbot.parameters;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class Parameters extends AbstractCollection<Parameter<?>> {
|
||||||
|
|
||||||
|
private final Map<String, Parameter<?>> 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<Parameter<?>> iterator() {
|
||||||
|
return parameters.values().iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int size() {
|
||||||
|
return parameters.size();
|
||||||
|
}
|
||||||
|
}
|
@ -9,7 +9,7 @@ import java.util.List;
|
|||||||
public class AudioResolver implements ParametersResolver {
|
public class AudioResolver implements ParametersResolver {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void resolve(@NotNull List<Parameter<?>> parameters, @NotNull FileInfo fileInfo) {
|
public void resolve(@NotNull Parameters parameters, @NotNull FileInfo fileInfo) {
|
||||||
final boolean hasAudio = switch (fileInfo.fileType()) {
|
final boolean hasAudio = switch (fileInfo.fileType()) {
|
||||||
case ANIMATION -> false;
|
case ANIMATION -> false;
|
||||||
case AUDIO, VOICE -> true;
|
case AUDIO, VOICE -> true;
|
||||||
@ -28,7 +28,7 @@ public class AudioResolver implements ParametersResolver {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void disableAudioParam(@NotNull List<Parameter<?>> parameters, @NotNull FileType fileType) {
|
private void disableAudioParam(@NotNull Parameters parameters, @NotNull FileType fileType) {
|
||||||
final boolean canAudioBeDisabled = switch (fileType) {
|
final boolean canAudioBeDisabled = switch (fileType) {
|
||||||
case ANIMATION, AUDIO, VOICE -> false;
|
case ANIMATION, AUDIO, VOICE -> false;
|
||||||
case VIDEO, VIDEO_NOTE -> true;
|
case VIDEO, VIDEO_NOTE -> true;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package com.annimon.ffmpegbot.parameters.resolvers;
|
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 com.annimon.ffmpegbot.session.FileInfo;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -19,7 +19,7 @@ public class GlobalParametersResolver implements ParametersResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void resolve(@NotNull List<Parameter<?>> parameters, @NotNull FileInfo fileInfo) {
|
public void resolve(@NotNull Parameters parameters, @NotNull FileInfo fileInfo) {
|
||||||
for (ParametersResolver resolver : resolvers) {
|
for (ParametersResolver resolver : resolvers) {
|
||||||
resolver.resolve(parameters, fileInfo);
|
resolver.resolve(parameters, fileInfo);
|
||||||
}
|
}
|
||||||
|
@ -1,16 +1,15 @@
|
|||||||
package com.annimon.ffmpegbot.parameters.resolvers;
|
package com.annimon.ffmpegbot.parameters.resolvers;
|
||||||
|
|
||||||
import com.annimon.ffmpegbot.parameters.AudioStreamByLanguage;
|
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.FileInfo;
|
||||||
import com.annimon.ffmpegbot.session.FileType;
|
import com.annimon.ffmpegbot.session.FileType;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class MultiAudioStreamsResolver implements ParametersResolver {
|
public class MultiAudioStreamsResolver implements ParametersResolver {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void resolve(@NotNull List<Parameter<?>> parameters, @NotNull FileInfo fileInfo) {
|
public void resolve(@NotNull Parameters parameters, @NotNull FileInfo fileInfo) {
|
||||||
// TODO: ffprobe check for actual codec
|
// TODO: ffprobe check for actual codec
|
||||||
if (!fileInfo.fileType().equals(FileType.VIDEO)) {
|
if (!fileInfo.fileType().equals(FileType.VIDEO)) {
|
||||||
return;
|
return;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package com.annimon.ffmpegbot.parameters.resolvers;
|
package com.annimon.ffmpegbot.parameters.resolvers;
|
||||||
|
|
||||||
import com.annimon.ffmpegbot.parameters.OutputFormat;
|
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 com.annimon.ffmpegbot.session.FileInfo;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
@ -12,7 +12,7 @@ import static com.annimon.ffmpegbot.parameters.OutputFormat.*;
|
|||||||
public class OutputFormatResolver implements ParametersResolver {
|
public class OutputFormatResolver implements ParametersResolver {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void resolve(@NotNull List<Parameter<?>> parameters, @NotNull FileInfo fileInfo) {
|
public void resolve(@NotNull Parameters parameters, @NotNull FileInfo fileInfo) {
|
||||||
final var outputFormat = switch (fileInfo.fileType()) {
|
final var outputFormat = switch (fileInfo.fileType()) {
|
||||||
case VIDEO -> forVideo(fileInfo);
|
case VIDEO -> forVideo(fileInfo);
|
||||||
case VIDEO_NOTE -> new OutputFormat(List.of(VIDEO_NOTE, VIDEO, AUDIO), VIDEO_NOTE);
|
case VIDEO_NOTE -> new OutputFormat(List.of(VIDEO_NOTE, VIDEO, AUDIO), VIDEO_NOTE);
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
package com.annimon.ffmpegbot.parameters.resolvers;
|
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 com.annimon.ffmpegbot.session.FileInfo;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public interface ParametersResolver {
|
public interface ParametersResolver {
|
||||||
|
|
||||||
void resolve(@NotNull List<Parameter<?>> parameters, @NotNull FileInfo fileInfo);
|
void resolve(@NotNull Parameters parameters, @NotNull FileInfo fileInfo);
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,14 @@
|
|||||||
package com.annimon.ffmpegbot.parameters.resolvers;
|
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.parameters.SpeedFactor;
|
||||||
import com.annimon.ffmpegbot.session.FileInfo;
|
import com.annimon.ffmpegbot.session.FileInfo;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class SpeedFactorResolver implements ParametersResolver {
|
public class SpeedFactorResolver implements ParametersResolver {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void resolve(@NotNull List<Parameter<?>> parameters, @NotNull FileInfo fileInfo) {
|
public void resolve(@NotNull Parameters parameters, @NotNull FileInfo fileInfo) {
|
||||||
// For anything except static images
|
// For anything except static images
|
||||||
parameters.add(new SpeedFactor());
|
parameters.add(new SpeedFactor());
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ import java.util.List;
|
|||||||
public class VideoResolver implements ParametersResolver {
|
public class VideoResolver implements ParametersResolver {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void resolve(@NotNull List<Parameter<?>> parameters, @NotNull FileInfo fileInfo) {
|
public void resolve(@NotNull Parameters parameters, @NotNull FileInfo fileInfo) {
|
||||||
final boolean hasVideo = switch (fileInfo.fileType()) {
|
final boolean hasVideo = switch (fileInfo.fileType()) {
|
||||||
case ANIMATION, VIDEO, VIDEO_NOTE -> true;
|
case ANIMATION, VIDEO, VIDEO_NOTE -> true;
|
||||||
default -> false;
|
default -> false;
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package com.annimon.ffmpegbot.session;
|
package com.annimon.ffmpegbot.session;
|
||||||
|
|
||||||
import com.annimon.ffmpegbot.parameters.Parameter;
|
import com.annimon.ffmpegbot.parameters.Parameter;
|
||||||
|
import com.annimon.ffmpegbot.parameters.Parameters;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.List;
|
|
||||||
import java.util.StringJoiner;
|
import java.util.StringJoiner;
|
||||||
|
|
||||||
import static com.annimon.ffmpegbot.TextUtils.*;
|
import static com.annimon.ffmpegbot.TextUtils.*;
|
||||||
@ -18,7 +18,7 @@ public final class MediaSession extends Session {
|
|||||||
private String resolution;
|
private String resolution;
|
||||||
// Parameters
|
// Parameters
|
||||||
private Parameter<?> selectedParam;
|
private Parameter<?> selectedParam;
|
||||||
private List<Parameter<?>> params;
|
private Parameters params;
|
||||||
// Files
|
// Files
|
||||||
private File inputFile;
|
private File inputFile;
|
||||||
private File outputFile;
|
private File outputFile;
|
||||||
@ -82,11 +82,11 @@ public final class MediaSession extends Session {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Parameter<?>> getParams() {
|
public Parameters getParams() {
|
||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setParams(List<Parameter<?>> params) {
|
public void setParams(Parameters params) {
|
||||||
this.params = params;
|
this.params = params;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user