From 1a9b338836aca59c73edf1c2475c1fcec2ffab52 Mon Sep 17 00:00:00 2001 From: aNNiMON Date: Wed, 18 Oct 2023 23:50:02 +0300 Subject: [PATCH] Add support for telegram document attachments. Close #2 --- .../resolvers/MultiAudioStreamsResolver.java | 13 ++++++++++--- .../com/annimon/ffmpegbot/session/FileInfo.java | 7 +++++++ .../com/annimon/ffmpegbot/session/Resolver.java | 13 +++++++++++++ 3 files changed, 30 insertions(+), 3 deletions(-) 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 3d88224..aa5db09 100644 --- a/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/MultiAudioStreamsResolver.java +++ b/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/MultiAudioStreamsResolver.java @@ -1,7 +1,9 @@ package com.annimon.ffmpegbot.parameters.resolvers; +import com.annimon.ffmpegbot.parameters.AudioStreamByLanguage; import com.annimon.ffmpegbot.parameters.Parameter; import com.annimon.ffmpegbot.session.FileInfo; +import com.annimon.ffmpegbot.session.FileType; import org.jetbrains.annotations.NotNull; import java.util.List; @@ -9,8 +11,13 @@ public class MultiAudioStreamsResolver implements ParametersResolver { @Override public void resolve(@NotNull List> parameters, @NotNull FileInfo fileInfo) { - // TODO: Disabled until files support will be implemented - // Check for mkv file type - // parameters.add(new AudioStreamByLanguage()); + // TODO: ffprobe check for actual codec + if (!fileInfo.fileType().equals(FileType.VIDEO)) { + return; + } + + if (fileInfo.getExtension().equals("mkv")) { + parameters.add(new AudioStreamByLanguage()); + } } } diff --git a/src/main/java/com/annimon/ffmpegbot/session/FileInfo.java b/src/main/java/com/annimon/ffmpegbot/session/FileInfo.java index fe23843..d520f3b 100644 --- a/src/main/java/com/annimon/ffmpegbot/session/FileInfo.java +++ b/src/main/java/com/annimon/ffmpegbot/session/FileInfo.java @@ -1,8 +1,15 @@ package com.annimon.ffmpegbot.session; +import org.apache.commons.io.FilenameUtils; +import java.util.Locale; + public record FileInfo(FileType fileType, String fileId, String filename, Long fileSize, Integer duration, Integer width, Integer height) { public FileInfo(FileType fileType, String fileId, String filename, Long fileSize, Integer duration) { this(fileType, fileId, filename, fileSize, duration, null, null); } + + public String getExtension() { + return FilenameUtils.getExtension(filename).toLowerCase(Locale.ROOT); + } } diff --git a/src/main/java/com/annimon/ffmpegbot/session/Resolver.java b/src/main/java/com/annimon/ffmpegbot/session/Resolver.java index 58235b4..8e5b93b 100644 --- a/src/main/java/com/annimon/ffmpegbot/session/Resolver.java +++ b/src/main/java/com/annimon/ffmpegbot/session/Resolver.java @@ -28,6 +28,19 @@ public class Resolver { } else if (message.hasVoice()) { final var att = message.getVoice(); return new FileInfo(FileType.VOICE, att.getFileId(), null, att.getFileSize(), att.getDuration()); + } else if (message.hasDocument()) { + final var att = message.getDocument(); + final var mimeType = att.getMimeType(); + if (mimeType == null || att.getFileSize() == null || att.getFileSize() == 0) { + return null; + } else if (mimeType.startsWith("video/")) { + return new FileInfo(FileType.VIDEO, att.getFileId(), att.getFileName(), + att.getFileSize(), null); + } else if (mimeType.startsWith("audio/")) { + return new FileInfo(FileType.AUDIO, att.getFileId(), att.getFileName(), + att.getFileSize(), null); + } + return null; } else { return null; }