From 70d3863cb2e1720a8d4e56b5f5d251e3facd891e Mon Sep 17 00:00:00 2001 From: Stas Parshin <2172170+pengrad@users.noreply.github.com> Date: Fri, 30 Aug 2024 18:20:06 +0700 Subject: [PATCH] Fix SendPaidMedia attachments --- .../model/paidmedia/PaidMediaPhoto.java | 4 +--- .../model/paidmedia/PaidMediaPreview.java | 8 +++----- .../model/paidmedia/PaidMediaVideo.java | 4 +--- .../model/request/InputPaidMedia.java | 9 ++++----- .../model/request/InputPaidMediaVideo.java | 10 ---------- .../partner/TransactionPartnerFragment.java | 4 +--- .../partner/TransactionPartnerOther.java | 5 +---- .../TransactionPartnerTelegramAds.java | 5 +---- .../stars/partner/TransactionPartnerUser.java | 8 +++----- .../RevenueWithdrawalStateSucceeded.java | 6 ++---- .../telegrambot/request/SendPaidMedia.java | 18 ++++++++++++++++++ .../pengrad/telegrambot/TelegramBotTest.java | 19 +++++++++++++++++++ 12 files changed, 54 insertions(+), 46 deletions(-) diff --git a/library/src/main/java/com/pengrad/telegrambot/model/paidmedia/PaidMediaPhoto.java b/library/src/main/java/com/pengrad/telegrambot/model/paidmedia/PaidMediaPhoto.java index 08f948b8..37b7e4dd 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/paidmedia/PaidMediaPhoto.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/paidmedia/PaidMediaPhoto.java @@ -36,9 +36,7 @@ public int hashCode() { @Override public String toString() { return "PaidMediaPhoto{" + - "type='" + type() + "\'," + - ", photo=" + Arrays.toString(photo) + "\'" + + "photo=" + Arrays.toString(photo) + '}'; } - } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/paidmedia/PaidMediaPreview.java b/library/src/main/java/com/pengrad/telegrambot/model/paidmedia/PaidMediaPreview.java index 5d2bc7bf..53d972b3 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/paidmedia/PaidMediaPreview.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/paidmedia/PaidMediaPreview.java @@ -47,11 +47,9 @@ public int hashCode() { @Override public String toString() { return "PaidMediaPreview{" + - "type='" + type() + "\'," + - ", width=" + width + "\'," + - ", height=" + height + "\'," + - ", duration=" + duration + "\'" + + "width=" + width + + ", height=" + height + + ", duration=" + duration + '}'; } - } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/paidmedia/PaidMediaVideo.java b/library/src/main/java/com/pengrad/telegrambot/model/paidmedia/PaidMediaVideo.java index 56c34d21..6c16ef30 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/paidmedia/PaidMediaVideo.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/paidmedia/PaidMediaVideo.java @@ -36,9 +36,7 @@ public int hashCode() { @Override public String toString() { return "PaidMediaVideo{" + - "type='" + type() + "\'," + - ", video=" + video + "\'" + + "video=" + video + '}'; } - } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/InputPaidMedia.java b/library/src/main/java/com/pengrad/telegrambot/model/request/InputPaidMedia.java index 92ca03f3..3237b198 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/InputPaidMedia.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/InputPaidMedia.java @@ -7,16 +7,12 @@ import java.util.HashMap; import java.util.Map; -/** - * Stas Parshin - * 23 November 2017 - */ abstract public class InputPaidMedia implements Serializable { private final static long serialVersionUID = 0L; private final String type; private final String media; - private String thumbnail; + transient protected Map attachments = new HashMap<>(); transient private InputFile inputFile; transient private String inputFileAttachId; transient private String fileName; @@ -39,6 +35,9 @@ abstract public class InputPaidMedia implements Serializable { } } + public Map getAttachments() { + return attachments; + } public InputFile inputFile() { return inputFile; diff --git a/library/src/main/java/com/pengrad/telegrambot/model/request/InputPaidMediaVideo.java b/library/src/main/java/com/pengrad/telegrambot/model/request/InputPaidMediaVideo.java index 9d51c7f7..4c1e7509 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/request/InputPaidMediaVideo.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/request/InputPaidMediaVideo.java @@ -5,7 +5,6 @@ import java.io.File; import java.io.Serializable; -import java.util.HashMap; import java.util.Map; public class InputPaidMediaVideo extends InputPaidMedia implements Serializable { @@ -14,12 +13,8 @@ public class InputPaidMediaVideo extends InputPaidMedia implements Serializable private Integer width, height, duration; private Boolean supports_streaming; - private String thumbnail; - transient private Map attachments = new HashMap<>(); - - public InputPaidMediaVideo(String media) { super("video", media); } @@ -66,11 +61,6 @@ public InputPaidMediaVideo thumbnail(byte[] thumbnail) { return this; } - public Map getAttachments() { - return attachments; - } - - @Override public String getDefaultFileName() { return ContentTypes.VIDEO_FILE_NAME; diff --git a/library/src/main/java/com/pengrad/telegrambot/model/stars/partner/TransactionPartnerFragment.java b/library/src/main/java/com/pengrad/telegrambot/model/stars/partner/TransactionPartnerFragment.java index ca958d00..50446618 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/stars/partner/TransactionPartnerFragment.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/stars/partner/TransactionPartnerFragment.java @@ -35,9 +35,7 @@ public int hashCode() { @Override public String toString() { return "TransactionPartnerFragment{" + - "type='" + type() + "\'," + - ", withdrawal_state=" + withdrawal_state + "\'" + + "withdrawal_state=" + withdrawal_state + '}'; } - } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/stars/partner/TransactionPartnerOther.java b/library/src/main/java/com/pengrad/telegrambot/model/stars/partner/TransactionPartnerOther.java index 3a2e7d37..545b3fd9 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/stars/partner/TransactionPartnerOther.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/stars/partner/TransactionPartnerOther.java @@ -26,9 +26,6 @@ public int hashCode() { @Override public String toString() { - return "TransactionPartnerOther{" + - "type='" + type() + "\'" + - '}'; + return "TransactionPartnerOther{}"; } - } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/stars/partner/TransactionPartnerTelegramAds.java b/library/src/main/java/com/pengrad/telegrambot/model/stars/partner/TransactionPartnerTelegramAds.java index d0eff45e..c118ce22 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/stars/partner/TransactionPartnerTelegramAds.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/stars/partner/TransactionPartnerTelegramAds.java @@ -26,9 +26,6 @@ public int hashCode() { @Override public String toString() { - return "TransactionPartnerTelegramAds{" + - "type='" + type() + "\'" + - '}'; + return "TransactionPartnerTelegramAds{}"; } - } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/stars/partner/TransactionPartnerUser.java b/library/src/main/java/com/pengrad/telegrambot/model/stars/partner/TransactionPartnerUser.java index 391764d2..7dbf2b47 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/stars/partner/TransactionPartnerUser.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/stars/partner/TransactionPartnerUser.java @@ -48,11 +48,9 @@ public int hashCode() { @Override public String toString() { return "TransactionPartnerUser{" + - "type='" + type() + "\'," + - ", user=" + user + "\'," + - ", invoice_payload=" + invoice_payload + "\'," + - ", paid_media=" + paid_media + "\'" + + "user=" + user + + ", invoice_payload='" + invoice_payload + '\'' + + ", paid_media=" + Arrays.toString(paid_media) + '}'; } - } diff --git a/library/src/main/java/com/pengrad/telegrambot/model/stars/withdrawal/RevenueWithdrawalStateSucceeded.java b/library/src/main/java/com/pengrad/telegrambot/model/stars/withdrawal/RevenueWithdrawalStateSucceeded.java index 8ecef7bb..6875aa02 100644 --- a/library/src/main/java/com/pengrad/telegrambot/model/stars/withdrawal/RevenueWithdrawalStateSucceeded.java +++ b/library/src/main/java/com/pengrad/telegrambot/model/stars/withdrawal/RevenueWithdrawalStateSucceeded.java @@ -39,10 +39,8 @@ public int hashCode() { @Override public String toString() { return "RevenueWithdrawalStateSucceeded{" + - "type='" + type() + "\'," + - "date='" + date + "\'," + - "url='" + url + "\'" + + "date=" + date + + ", url='" + url + '\'' + '}'; } - } diff --git a/library/src/main/java/com/pengrad/telegrambot/request/SendPaidMedia.java b/library/src/main/java/com/pengrad/telegrambot/request/SendPaidMedia.java index d8e81dd1..6e7d0b64 100644 --- a/library/src/main/java/com/pengrad/telegrambot/request/SendPaidMedia.java +++ b/library/src/main/java/com/pengrad/telegrambot/request/SendPaidMedia.java @@ -10,10 +10,28 @@ public class SendPaidMedia extends BaseRequest { + private boolean isMultipart = false; public SendPaidMedia(Object chatId, Integer starCount, InputPaidMedia... media) { super(SendResponse.class); add("chat_id", chatId).add("star_count", starCount).add("media", media); + + for (InputPaidMedia m : media) { + Map attachments = m.getAttachments(); + if (attachments != null && !attachments.isEmpty()) { + addAll(attachments); + isMultipart = true; + } + if (m.inputFile() != null) { + add(m.getInputFileId(), m.inputFile()); + isMultipart = true; + } + } + } + + @Override + public boolean isMultipart() { + return isMultipart; } public SendPaidMedia caption(String caption) { diff --git a/library/src/test/java/com/pengrad/telegrambot/TelegramBotTest.java b/library/src/test/java/com/pengrad/telegrambot/TelegramBotTest.java index 73e7234d..31a7cfe4 100644 --- a/library/src/test/java/com/pengrad/telegrambot/TelegramBotTest.java +++ b/library/src/test/java/com/pengrad/telegrambot/TelegramBotTest.java @@ -6,6 +6,9 @@ import com.pengrad.telegrambot.model.botcommandscope.BotCommandScopeAllChatAdministrators; import com.pengrad.telegrambot.model.chatboost.ChatBoost; import com.pengrad.telegrambot.model.giveaway.Giveaway; +import com.pengrad.telegrambot.model.paidmedia.PaidMediaInfo; +import com.pengrad.telegrambot.model.paidmedia.PaidMediaPhoto; +import com.pengrad.telegrambot.model.paidmedia.PaidMediaVideo; import com.pengrad.telegrambot.model.reaction.ReactionTypeEmoji; import com.pengrad.telegrambot.model.request.*; import com.pengrad.telegrambot.passport.*; @@ -2416,4 +2419,20 @@ public void answerWebAppQuery() { assertEquals("Bad Request: query is too old and response timeout expired or query ID is invalid", response.description()); assertNull(response.sentWebAppMessage()); } + + @Test + public void sendPaidMedia() { + Integer starCount = 2; + SendResponse response = bot.execute(new SendPaidMedia(chatId, starCount, + new InputPaidMediaVideo(videoFile).thumbnail(thumbFile), + new InputPaidMediaPhoto(photoFileId))); + PaidMediaInfo mediaInfo = response.message().paidMedia(); + assertTrue(response.isOk()); + assertEquals(starCount, mediaInfo.starCount()); + assertEquals(2, mediaInfo.paidMedia().length); + assertEquals("video", mediaInfo.paidMedia()[0].type()); + VideoTest.check(((PaidMediaVideo) mediaInfo.paidMedia()[0]).getVideo()); + assertEquals("photo", mediaInfo.paidMedia()[1].type()); + PhotoSizeTest.checkPhotos(((PaidMediaPhoto) mediaInfo.paidMedia()[1]).getPhoto()); + } }