Skip to content

Commit 213c226

Browse files
author
DrKLO
committed
Update to 2.3.2
1 parent 4e03bc1 commit 213c226

File tree

14 files changed

+234
-66
lines changed

14 files changed

+234
-66
lines changed

TMessagesProj/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ android {
8282
defaultConfig {
8383
minSdkVersion 8
8484
targetSdkVersion 21
85-
versionCode 414
86-
versionName "2.3.1"
85+
versionCode 415
86+
versionName "2.3.2"
8787
}
8888
}

TMessagesProj/jni/Android.mk

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,11 @@ LOCAL_SRC_FILES := \
8787
include $(BUILD_STATIC_LIBRARY)
8888

8989
include $(CLEAR_VARS)
90-
LOCAL_ARM_MODE := arm
90+
ifeq ($(TARGET_ARCH_ABI),armeabi)
91+
LOCAL_ARM_MODE := thumb
92+
else
93+
LOCAL_ARM_MODE := arm
94+
endif
9195
LOCAL_MODULE := sqlite
9296
LOCAL_CFLAGS := -w -std=gnu99 -O2 -DNULL=0 -DSOCKLEN_T=socklen_t -DLOCALE_NOT_USED -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
9397
LOCAL_CFLAGS += -DANDROID_NDK -DDISABLE_IMPORTGL -fno-strict-aliasing -fprefetch-loop-arrays -DAVOID_TABLES -DANDROID_TILE_BASED_DECODE -DANDROID_ARMV6_IDCT -DHAVE_STRCHRNUL=0
@@ -106,7 +110,11 @@ LOCAL_CFLAGS += -Drestrict='' -D__EMX__ -DOPUS_BUILD -DFIXED_POINT -DUSE_ALLOCA
106110
LOCAL_CFLAGS += -DANDROID_NDK -DDISABLE_IMPORTGL -fno-strict-aliasing -fprefetch-loop-arrays -DAVOID_TABLES -DANDROID_TILE_BASED_DECODE -DANDROID_ARMV6_IDCT -ffast-math
107111
LOCAL_CPPFLAGS := -DBSD=1 -ffast-math -O2 -funroll-loops
108112
LOCAL_LDLIBS := -ljnigraphics -llog
109-
LOCAL_ARM_MODE := arm
113+
ifeq ($(TARGET_ARCH_ABI),armeabi)
114+
LOCAL_ARM_MODE := thumb
115+
else
116+
LOCAL_ARM_MODE := arm
117+
endif
110118

111119
LOCAL_SRC_FILES := \
112120
./opus/src/opus.c \
-452 KB
Binary file not shown.

TMessagesProj/src/main/java/org/telegram/android/MediaController.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1350,9 +1350,13 @@ public void onCompletion(MediaPlayer mediaPlayer) {
13501350
fileDecodingQueue.postRunnable(new Runnable() {
13511351
@Override
13521352
public void run() {
1353-
if (playingMessageObject != null && playingMessageObject.audioProgress != 0) {
1354-
lastPlayPcm = (long)(currentTotalPcmDuration * playingMessageObject.audioProgress);
1355-
seekOpusFile(playingMessageObject.audioProgress);
1353+
try {
1354+
if (playingMessageObject != null && playingMessageObject.audioProgress != 0) {
1355+
lastPlayPcm = (long)(currentTotalPcmDuration * playingMessageObject.audioProgress);
1356+
seekOpusFile(playingMessageObject.audioProgress);
1357+
}
1358+
} catch (Exception e) {
1359+
FileLog.e("tmessages", e);
13561360
}
13571361
synchronized (playerSync) {
13581362
freePlayerBuffers.addAll(usedPlayerBuffers);

TMessagesProj/src/main/java/org/telegram/android/MessagesController.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ public class MessagesController implements NotificationCenter.NotificationCenter
6060
private ArrayList<Integer> loadingFullChats = new ArrayList<>();
6161
private ArrayList<Integer> loadedFullChats = new ArrayList<>();
6262

63+
private ArrayList<Integer> reloadingMessages = new ArrayList<>();
64+
6365
private boolean gettingNewDeleteTask = false;
6466
private int currentDeletingTaskTime = 0;
6567
private ArrayList<Integer> currentDeletingTaskMids = null;
@@ -314,6 +316,7 @@ public void cleanUp() {
314316
loadedFullUsers.clear();
315317
loadingFullUsers.clear();
316318
loadedFullUsers.clear();
319+
reloadingMessages.clear();
317320

318321
updatesStartWaitTime = 0;
319322
currentDeletingTaskTime = 0;
@@ -548,6 +551,47 @@ public void run() {
548551
ConnectionsManager.getInstance().bindRequestToGuid(reqId, classGuid);
549552
}
550553

554+
private void reloadMessages(final ArrayList<Integer> mids, final long dialog_id) {
555+
final TLRPC.TL_messages_getMessages req = new TLRPC.TL_messages_getMessages();
556+
for (Integer mid : mids) {
557+
if (reloadingMessages.contains(mid)) {
558+
continue;
559+
}
560+
req.id.add(mid);
561+
}
562+
if (req.id.isEmpty()) {
563+
return;
564+
}
565+
reloadingMessages.addAll(req.id);
566+
ConnectionsManager.getInstance().performRpc(req, new RPCRequest.RPCRequestDelegate() {
567+
@Override
568+
public void run(TLObject response, TLRPC.TL_error error) {
569+
if (error == null) {
570+
TLRPC.messages_Messages messagesRes = (TLRPC.messages_Messages) response;
571+
MessagesStorage.getInstance().putMessages(messagesRes, dialog_id);
572+
573+
final ArrayList<MessageObject> objects = new ArrayList<>();
574+
ArrayList<Integer> messagesToReload = null;
575+
for (TLRPC.Message message : messagesRes.messages) {
576+
message.dialog_id = dialog_id;
577+
final HashMap<Integer, TLRPC.User> usersLocal = new HashMap<>();
578+
for (TLRPC.User u : messagesRes.users) {
579+
usersLocal.put(u.id, u);
580+
}
581+
objects.add(new MessageObject(message, usersLocal, 2));
582+
}
583+
AndroidUtilities.runOnUIThread(new Runnable() {
584+
@Override
585+
public void run() {
586+
NotificationCenter.getInstance().postNotificationName(NotificationCenter.replaceMessagesObjects, dialog_id, objects);
587+
}
588+
});
589+
}
590+
reloadingMessages.removeAll(req.id);
591+
}
592+
});
593+
}
594+
551595
protected void processNewDifferenceParams(int seq, int pts, int date) {
552596
if (MessagesStorage.lastSeqValue + 1 == seq) {
553597
if (seq != -1) {
@@ -1443,9 +1487,21 @@ public void run() {
14431487
usersLocal.put(u.id, u);
14441488
}
14451489
final ArrayList<MessageObject> objects = new ArrayList<>();
1490+
ArrayList<Integer> messagesToReload = null;
14461491
for (TLRPC.Message message : messagesRes.messages) {
14471492
message.dialog_id = dialog_id;
14481493
objects.add(new MessageObject(message, usersLocal, 2));
1494+
if (isCache && message.media instanceof TLRPC.TL_messageMediaUnsupported) {
1495+
if (message.media.bytes.length == 0 || message.media.bytes.length == 1 && message.media.bytes[0] < TLRPC.LAYER) {
1496+
if (messagesToReload == null) {
1497+
messagesToReload = new ArrayList<>();
1498+
}
1499+
messagesToReload.add(message.id);
1500+
}
1501+
}
1502+
}
1503+
if (messagesToReload != null) {
1504+
reloadMessages(messagesToReload, dialog_id);
14491505
}
14501506
AndroidUtilities.runOnUIThread(new Runnable() {
14511507
@Override

TMessagesProj/src/main/java/org/telegram/android/MessagesStorage.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2734,6 +2734,8 @@ private void putMessagesInternal(final ArrayList<TLRPC.Message> messages, final
27342734

27352735
int downloadMediaMask = 0;
27362736
for (TLRPC.Message message : messages) {
2737+
fixUnsupportedMedia(message);
2738+
27372739
long dialog_id = message.dialog_id;
27382740
if (dialog_id == 0) {
27392741
if (message.to_id.chat_id != 0) {
@@ -3499,6 +3501,15 @@ public void run() {
34993501
}
35003502
}
35013503

3504+
private void fixUnsupportedMedia(TLRPC.Message message) {
3505+
if (message != null && message.media instanceof TLRPC.TL_messageMediaUnsupported && message.media.bytes != null) {
3506+
if (message.media.bytes.length == 0) {
3507+
message.media.bytes = new byte[1];
3508+
message.media.bytes[0] = TLRPC.LAYER;
3509+
}
3510+
}
3511+
}
3512+
35023513
public void putMessages(final TLRPC.messages_Messages messages, final long dialog_id) {
35033514
if (messages.messages.isEmpty()) {
35043515
return;
@@ -3512,6 +3523,7 @@ public void run() {
35123523
SQLitePreparedStatement state = database.executeFast("REPLACE INTO messages VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)");
35133524
SQLitePreparedStatement state2 = database.executeFast("REPLACE INTO media VALUES(?, ?, ?, ?)");
35143525
for (TLRPC.Message message : messages.messages) {
3526+
fixUnsupportedMedia(message);
35153527
state.requery();
35163528
ByteBufferDesc data = buffersStorage.getFreeBuffer(message.getObjectSize());
35173529
message.serializeToStream(data);
@@ -3680,6 +3692,7 @@ public void run() {
36803692
uid = -dialog.peer.chat_id;
36813693
}
36823694
TLRPC.Message message = new_dialogMessage.get(dialog.top_message);
3695+
fixUnsupportedMedia(message);
36833696
ByteBufferDesc data = buffersStorage.getFreeBuffer(message.getObjectSize());
36843697
message.serializeToStream(data);
36853698

TMessagesProj/src/main/java/org/telegram/android/NotificationCenter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public class NotificationCenter {
4747
public static final int privacyRulesUpdated = totalEvents++;
4848
public static final int updateMessageMedia = totalEvents++;
4949
public static final int recentImagesDidLoaded = totalEvents++;
50+
public static final int replaceMessagesObjects = totalEvents++;
5051

5152
public static final int httpFileDidLoaded = totalEvents++;
5253
public static final int httpFileDidFailedLoad = totalEvents++;

TMessagesProj/src/main/java/org/telegram/android/SecretChatHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838

3939
public class SecretChatHelper {
4040

41-
public static final int CURRENT_SECRET_CHAT_LAYER = 20;
41+
public static final int CURRENT_SECRET_CHAT_LAYER = 23;
4242

4343
private ArrayList<Integer> sendingNotifyLayer = new ArrayList<>();
4444
private HashMap<Integer, ArrayList<TLRPC.TL_decryptedMessageHolder>> secretHolesQueue = new HashMap<>();

TMessagesProj/src/main/java/org/telegram/android/SendMessagesHelper.java

Lines changed: 51 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,38 +1032,57 @@ private void sendMessage(String message, Double lat, Double lon, TLRPC.TL_photo
10321032
reqSend.media.user_id = user.id;
10331033
SecretChatHelper.getInstance().performSendEncryptedRequest(reqSend, newMsgObj.messageOwner, encryptedChat, null, null);
10341034
} else if (type == 7) {
1035-
reqSend.media = new TLRPC.TL_decryptedMessageMediaDocument();
1036-
reqSend.media.size = document.size;
1037-
if (!(document.thumb instanceof TLRPC.TL_photoSizeEmpty)) {
1038-
reqSend.media.thumb = document.thumb.bytes;
1039-
reqSend.media.thumb_h = document.thumb.h;
1040-
reqSend.media.thumb_w = document.thumb.w;
1041-
} else {
1042-
reqSend.media.thumb = new byte[0];
1043-
reqSend.media.thumb_h = 0;
1044-
reqSend.media.thumb_w = 0;
1045-
}
1046-
reqSend.media.file_name = FileLoader.getDocumentFileName(document);
1047-
reqSend.media.mime_type = document.mime_type;
1048-
if (document.access_hash == 0) {
1049-
DelayedMessage delayedMessage = new DelayedMessage();
1050-
delayedMessage.originalPath = originalPath;
1051-
delayedMessage.sendEncryptedRequest = reqSend;
1052-
delayedMessage.type = 2;
1053-
delayedMessage.obj = newMsgObj;
1054-
delayedMessage.encryptedChat = encryptedChat;
1055-
if (path != null && path.length() > 0 && path.startsWith("http")) {
1056-
delayedMessage.httpLocation = path;
1035+
boolean isSticker = false;
1036+
for (TLRPC.DocumentAttribute attribute : document.attributes) {
1037+
if (attribute instanceof TLRPC.TL_documentAttributeSticker) {
1038+
isSticker = true;
10571039
}
1058-
delayedMessage.documentLocation = document;
1059-
performSendDelayedMessage(delayedMessage);
1040+
}
1041+
if (isSticker) {
1042+
reqSend.media = new TLRPC.TL_decryptedMessageMediaExternalDocument();
1043+
reqSend.media.id = document.id;
1044+
reqSend.media.date = document.date;
1045+
reqSend.media.mime_type = document.mime_type;
1046+
reqSend.media.size = document.size;
1047+
((TLRPC.TL_decryptedMessageMediaExternalDocument) reqSend.media).thumbImage = document.thumb;
1048+
reqSend.media.dc_id = document.dc_id;
1049+
reqSend.media.attributes = document.attributes;
1050+
SecretChatHelper.getInstance().performSendEncryptedRequest(reqSend, newMsgObj.messageOwner, encryptedChat, null, null);
10601051
} else {
1061-
TLRPC.TL_inputEncryptedFile encryptedFile = new TLRPC.TL_inputEncryptedFile();
1062-
encryptedFile.id = document.id;
1063-
encryptedFile.access_hash = document.access_hash;
1064-
reqSend.media.key = document.key;
1065-
reqSend.media.iv = document.iv;
1066-
SecretChatHelper.getInstance().performSendEncryptedRequest(reqSend, newMsgObj.messageOwner, encryptedChat, encryptedFile, null);
1052+
reqSend.media = new TLRPC.TL_decryptedMessageMediaDocument();
1053+
reqSend.media.size = document.size;
1054+
if (!(document.thumb instanceof TLRPC.TL_photoSizeEmpty)) {
1055+
reqSend.media.thumb = document.thumb.bytes;
1056+
reqSend.media.thumb_h = document.thumb.h;
1057+
reqSend.media.thumb_w = document.thumb.w;
1058+
} else {
1059+
reqSend.media.thumb = new byte[0];
1060+
reqSend.media.thumb_h = 0;
1061+
reqSend.media.thumb_w = 0;
1062+
}
1063+
reqSend.media.file_name = FileLoader.getDocumentFileName(document);
1064+
reqSend.media.mime_type = document.mime_type;
1065+
1066+
if (document.access_hash == 0) {
1067+
DelayedMessage delayedMessage = new DelayedMessage();
1068+
delayedMessage.originalPath = originalPath;
1069+
delayedMessage.sendEncryptedRequest = reqSend;
1070+
delayedMessage.type = 2;
1071+
delayedMessage.obj = newMsgObj;
1072+
delayedMessage.encryptedChat = encryptedChat;
1073+
if (path != null && path.length() > 0 && path.startsWith("http")) {
1074+
delayedMessage.httpLocation = path;
1075+
}
1076+
delayedMessage.documentLocation = document;
1077+
performSendDelayedMessage(delayedMessage);
1078+
} else {
1079+
TLRPC.TL_inputEncryptedFile encryptedFile = new TLRPC.TL_inputEncryptedFile();
1080+
encryptedFile.id = document.id;
1081+
encryptedFile.access_hash = document.access_hash;
1082+
reqSend.media.key = document.key;
1083+
reqSend.media.iv = document.iv;
1084+
SecretChatHelper.getInstance().performSendEncryptedRequest(reqSend, newMsgObj.messageOwner, encryptedChat, encryptedFile, null);
1085+
}
10671086
}
10681087
} else if (type == 8) {
10691088
if (AndroidUtilities.getPeerLayerVersion(encryptedChat.layer) >= 17) {
@@ -1544,6 +1563,7 @@ private static boolean prepareSendingDocumentInternal(String path, String origin
15441563
}
15451564

15461565
boolean isEncrypted = (int)dialog_id == 0;
1566+
boolean allowSticker = !isEncrypted;
15471567

15481568
String name = f.getName();
15491569
if (name == null) {
@@ -1591,7 +1611,7 @@ private static boolean prepareSendingDocumentInternal(String path, String origin
15911611
FileLog.e("tmessages", e);
15921612
}
15931613
}
1594-
if (document.mime_type.equals("image/webp") && !isEncrypted) {
1614+
if (document.mime_type.equals("image/webp") && allowSticker) {
15951615
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
15961616
try {
15971617
bmOptions.inJustDecodeBounds = true;

TMessagesProj/src/main/java/org/telegram/messenger/TLRPC.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@
1414
@SuppressWarnings("unchecked")
1515
public class TLRPC {
1616

17-
public static int MESSAGE_FLAG_UNREAD = 1;
18-
public static int MESSAGE_FLAG_OUT = 2;
17+
public static final int MESSAGE_FLAG_UNREAD = 1;
18+
public static final int MESSAGE_FLAG_OUT = 2;
19+
public static final int LAYER = 22;
1920

2021
public static class ChatPhoto extends TLObject {
2122
public FileLocation photo_small;
@@ -10831,7 +10832,7 @@ public void serializeToStream(AbsSerializedData stream) {
1083110832
public static class invokeWithLayer extends TLObject {
1083210833
public static int constructor = 0xda9b0d0d;
1083310834

10834-
public int layer = 22;
10835+
public int layer = LAYER;
1083510836
public TLObject query;
1083610837

1083710838
public void serializeToStream(AbsSerializedData stream) {

0 commit comments

Comments
 (0)