Fix no quote forward breaks album

This commit is contained in:
NekoInverter 2020-10-09 16:51:31 +00:00 committed by 世界
parent e7deda98a5
commit 39e6a4a6bb
No known key found for this signature in database
GPG Key ID: CD109927C34A63C4
7 changed files with 88 additions and 24 deletions

View File

@ -1005,11 +1005,7 @@ public class SendMessagesHelper extends BaseController implements NotificationCe
}
}
public void processForwardFromMyName(MessageObject messageObject, long did, boolean nullReply) {
processForwardFromMyName(messageObject, did, nullReply, true, 0);
}
public void processForwardFromMyName(MessageObject messageObject, long did, boolean nullReply, boolean notify, int scheduleDate) {
public void processForwardFromMyName(MessageObject messageObject, long did) {
if (messageObject == null) {
return;
}
@ -1020,9 +1016,9 @@ public class SendMessagesHelper extends BaseController implements NotificationCe
params.put("parentObject", "sent_" + messageObject.messageOwner.peer_id.channel_id + "_" + messageObject.getId());
}
if (messageObject.messageOwner.media.photo instanceof TLRPC.TL_photo) {
sendMessage((TLRPC.TL_photo) messageObject.messageOwner.media.photo, null, did, nullReply ? null : messageObject.replyMessageObject, null, messageObject.messageOwner.message, messageObject.messageOwner.entities, null, params, notify, scheduleDate, messageObject.messageOwner.media.ttl_seconds, messageObject);
sendMessage((TLRPC.TL_photo) messageObject.messageOwner.media.photo, null, did, messageObject.replyMessageObject, null, messageObject.messageOwner.message, messageObject.messageOwner.entities, null, params, true, 0, messageObject.messageOwner.media.ttl_seconds, messageObject);
} else if (messageObject.messageOwner.media.document instanceof TLRPC.TL_document) {
sendMessage((TLRPC.TL_document) messageObject.messageOwner.media.document, null, messageObject.messageOwner.attachPath, did, nullReply ? null : messageObject.replyMessageObject, null, messageObject.messageOwner.message, messageObject.messageOwner.entities, null, params, notify, scheduleDate, messageObject.messageOwner.media.ttl_seconds, messageObject);
sendMessage((TLRPC.TL_document) messageObject.messageOwner.media.document, null, messageObject.messageOwner.attachPath, did, messageObject.replyMessageObject, null, messageObject.messageOwner.message, messageObject.messageOwner.entities, null, params, true, 0, messageObject.messageOwner.media.ttl_seconds, messageObject);
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaVenue || messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaGeo) {
sendMessage(messageObject.messageOwner.media, did, messageObject.replyMessageObject, null, null, null, true, 0);
} else if (messageObject.messageOwner.media.phone_number != null) {
@ -1035,7 +1031,7 @@ public class SendMessagesHelper extends BaseController implements NotificationCe
} else if ((int) did != 0) {
ArrayList<MessageObject> arrayList = new ArrayList<>();
arrayList.add(messageObject);
sendMessage(arrayList, did, notify, scheduleDate);
sendMessage(arrayList, did, true, 0);
}
} else if (messageObject.messageOwner.message != null) {
TLRPC.WebPage webPage = null;
@ -1058,11 +1054,11 @@ public class SendMessagesHelper extends BaseController implements NotificationCe
} else {
entities = null;
}
sendMessage(messageObject.messageOwner.message, did, nullReply ? null : messageObject.replyMessageObject, null, webPage, true, entities, null, null, notify, scheduleDate);
sendMessage(messageObject.messageOwner.message, did, messageObject.replyMessageObject, null, webPage, true, entities, null, null, true, 0);
} else if ((int) did != 0) {
ArrayList<MessageObject> arrayList = new ArrayList<>();
arrayList.add(messageObject);
sendMessage(arrayList, did, notify, scheduleDate);
sendMessage(arrayList, did, true, 0);
}
}
@ -1681,7 +1677,7 @@ public class SendMessagesHelper extends BaseController implements NotificationCe
}
} else {
for (int a = 0; a < messages.size(); a++) {
processForwardFromMyName(messages.get(a), peer, false);
processForwardFromMyName(messages.get(a), peer);
}
}
return sendResult;

View File

@ -47,6 +47,7 @@ import java.util.ArrayList;
import tw.nekomimi.nekogram.NekoConfig;
import tw.nekomimi.nekogram.utils.VibrateUtil;
import tw.nekomimi.nekogram.MessageHelper;
public class BaseFragment {
@ -588,4 +589,8 @@ public class BaseFragment {
parentLayout.setFragmentPanTranslationOffset(offset);
}
}
public MessageHelper getMessageHelper() {
return MessageHelper.getInstance(currentAccount);
}
}

View File

@ -1720,7 +1720,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
if (ChatObject.canUserDoAction(currentChat, ChatObject.ACTION_DELETE_MESSAGES)) {
getMessagesController().deleteUserChannelHistory(currentChat, UserConfig.getInstance(currentAccount).getCurrentUser(), 0);
} else {
MessageHelper.getInstance(currentAccount).deleteUserChannelHistoryWithSearch(dialog_id, UserConfig.getInstance(currentAccount).getCurrentUser());
getMessageHelper().deleteUserChannelHistoryWithSearch(dialog_id, UserConfig.getInstance(currentAccount).getCurrentUser());
}
});
builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null);
@ -8635,9 +8635,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
if (!fromMyName) {
AlertsCreator.showSendMediaAlert(getSendMessagesHelper().sendMessage(arrayList, did == 0 ? dialog_id : did, notify, scheduleDate), this);
} else {
for (MessageObject object : arrayList) {
getSendMessagesHelper().processForwardFromMyName(object, did == 0 ? dialog_id : did, true, notify, scheduleDate);
}
getMessageHelper().processForwardFromMyName(arrayList, did, notify, scheduleDate);
}
}

View File

@ -1589,9 +1589,7 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter
profileActivity.getSendMessagesHelper().sendMessage(message.toString(), did, null, null, null, true, null, null, null, true, 0);
}
if (id == forward_noquote) {
for (MessageObject object : fmessages) {
profileActivity.getSendMessagesHelper().processForwardFromMyName(object, did, true, true, 0);
}
profileActivity.getMessageHelper().processForwardFromMyName(fmessages, did, true, 0);
} else {
profileActivity.getSendMessagesHelper().sendMessage(fmessages, did, true, 0);
}

View File

@ -454,9 +454,7 @@ public class MediaActivity extends BaseFragment implements NotificationCenter.No
SendMessagesHelper.getInstance(currentAccount).sendMessage(message.toString(), did, null, null, null, true, null, null, null, true, 0);
}
if (id == forward_noquote) {
for (MessageObject object : fmessages) {
SendMessagesHelper.getInstance(currentAccount).processForwardFromMyName(object, did, true, true, 0);
}
getMessageHelper().processForwardFromMyName(fmessages, did, true, 0);
} else {
SendMessagesHelper.getInstance(currentAccount).sendMessage(fmessages, did, true, 0);
}

View File

@ -238,6 +238,8 @@ import tw.nekomimi.nekogram.transtale.TranslatorKt;
import tw.nekomimi.nekogram.utils.AlertUtil;
import tw.nekomimi.nekogram.utils.ProxyUtil;
import tw.nekomimi.nekogram.MessageHelper;
@SuppressWarnings("unchecked")
public class PhotoViewer implements NotificationCenter.NotificationCenterDelegate, GestureDetector2.OnGestureListener, GestureDetector2.OnDoubleTapListener {
@ -3472,9 +3474,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat
SendMessagesHelper.getInstance(currentAccount).sendMessage(message.toString(), did, null, null, null, true, null, null, null, true, 0);
}
if (id == gallery_menu_send_noquote) {
for (MessageObject object : fmessages) {
SendMessagesHelper.getInstance(currentAccount).processForwardFromMyName(object, did, true, true, 0);
}
MessageHelper.getInstance(currentAccount).processForwardFromMyName(fmessages, did, true, 0);
} else {
SendMessagesHelper.getInstance(currentAccount).sendMessage(fmessages, did, true, 0);
}

View File

@ -4,6 +4,7 @@ import org.telegram.messenger.AndroidUtilities;
import org.telegram.messenger.BaseController;
import org.telegram.messenger.MessageObject;
import org.telegram.messenger.UserConfig;
import org.telegram.messenger.Utilities;
import org.telegram.tgnet.ConnectionsManager;
import org.telegram.tgnet.TLRPC;
import org.telegram.ui.Cells.ChatMessageCell;
@ -12,6 +13,7 @@ import java.util.ArrayList;
import java.util.HashSet;
import tw.nekomimi.nekogram.utils.AlertUtil;
import java.util.HashMap;
public class MessageHelper extends BaseController {
@ -51,6 +53,73 @@ public class MessageHelper extends BaseController {
return localInstance;
}
public void processForwardFromMyName(ArrayList<MessageObject> messages, long did, boolean notify, int scheduleDate) {
Long groupId = Utilities.random.nextLong();
for (int i = 0; i < messages.size(); i++) {
MessageObject messageObject = messages.get(i);
if (messageObject.messageOwner.media != null && !(messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaEmpty) && !(messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaWebPage) && !(messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaGame) && !(messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaInvoice)) {
HashMap<String, String> params = null;
if ((int) did == 0 && messageObject.messageOwner.to_id != null && (messageObject.messageOwner.media.photo instanceof TLRPC.TL_photo || messageObject.messageOwner.media.document instanceof TLRPC.TL_document)) {
params = new HashMap<>();
params.put("parentObject", "sent_" + messageObject.messageOwner.to_id.channel_id + "_" + messageObject.getId());
}
if (messageObject.messageOwner.grouped_id != 0) {
if (params == null) {
params = new HashMap<>();
}
params.put("groupId", groupId + "");
if (i == messages.size() - 1) {
params.put("final", "true");
}
}
if (messageObject.messageOwner.media.photo instanceof TLRPC.TL_photo) {
getSendMessagesHelper().sendMessage((TLRPC.TL_photo) messageObject.messageOwner.media.photo, null, did, null, messageObject.messageOwner.message, messageObject.messageOwner.entities, null, params, notify, scheduleDate, messageObject.messageOwner.media.ttl_seconds, messageObject);
} else if (messageObject.messageOwner.media.document instanceof TLRPC.TL_document) {
getSendMessagesHelper().sendMessage((TLRPC.TL_document) messageObject.messageOwner.media.document, null, messageObject.messageOwner.attachPath, did, null, messageObject.messageOwner.message, messageObject.messageOwner.entities, null, params, notify, scheduleDate, messageObject.messageOwner.media.ttl_seconds, messageObject);
} else if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaVenue || messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaGeo) {
getSendMessagesHelper().sendMessage(messageObject.messageOwner.media, did, null, null, null, notify, scheduleDate);
} else if (messageObject.messageOwner.media.phone_number != null) {
TLRPC.User user = new TLRPC.TL_userContact_old2();
user.phone = messageObject.messageOwner.media.phone_number;
user.first_name = messageObject.messageOwner.media.first_name;
user.last_name = messageObject.messageOwner.media.last_name;
user.id = messageObject.messageOwner.media.user_id;
getSendMessagesHelper().sendMessage(user, did, null, null, null, notify, scheduleDate);
} else if ((int) did != 0) {
ArrayList<MessageObject> arrayList = new ArrayList<>();
arrayList.add(messageObject);
getSendMessagesHelper().sendMessage(arrayList, did, notify, scheduleDate);
}
} else if (messageObject.messageOwner.message != null) {
TLRPC.WebPage webPage = null;
if (messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaWebPage) {
webPage = messageObject.messageOwner.media.webpage;
}
ArrayList<TLRPC.MessageEntity> entities;
if (messageObject.messageOwner.entities != null && !messageObject.messageOwner.entities.isEmpty()) {
entities = new ArrayList<>();
for (int a = 0; a < messageObject.messageOwner.entities.size(); a++) {
TLRPC.MessageEntity entity = messageObject.messageOwner.entities.get(a);
if (entity instanceof TLRPC.TL_messageEntityBold ||
entity instanceof TLRPC.TL_messageEntityItalic ||
entity instanceof TLRPC.TL_messageEntityPre ||
entity instanceof TLRPC.TL_messageEntityCode ||
entity instanceof TLRPC.TL_messageEntityTextUrl) {
entities.add(entity);
}
}
} else {
entities = null;
}
getSendMessagesHelper().sendMessage(messageObject.messageOwner.message, did, null, webPage, true, entities, null, null, notify, scheduleDate);
} else if ((int) did != 0) {
ArrayList<MessageObject> arrayList = new ArrayList<>();
arrayList.add(messageObject);
getSendMessagesHelper().sendMessage(arrayList, did, notify, scheduleDate);
}
}
}
public void deleteUserChannelHistoryWithSearch(final long dialog_id, final TLRPC.User user) {
deleteUserChannelHistoryWithSearch(dialog_id, user, 0);
}