Skip to content

Commit

Permalink
Update to 2.3.2
Browse files Browse the repository at this point in the history
  • Loading branch information
DrKLO committed Jan 9, 2015
1 parent 4e03bc1 commit 213c226
Show file tree
Hide file tree
Showing 14 changed files with 234 additions and 66 deletions.
4 changes: 2 additions & 2 deletions TMessagesProj/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ android {
defaultConfig {
minSdkVersion 8
targetSdkVersion 21
versionCode 414
versionName "2.3.1"
versionCode 415
versionName "2.3.2"
}
}
12 changes: 10 additions & 2 deletions TMessagesProj/jni/Android.mk
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,11 @@ LOCAL_SRC_FILES := \
include $(BUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_ARM_MODE := arm
ifeq ($(TARGET_ARCH_ABI),armeabi)
LOCAL_ARM_MODE := thumb
else
LOCAL_ARM_MODE := arm
endif
LOCAL_MODULE := sqlite
LOCAL_CFLAGS := -w -std=gnu99 -O2 -DNULL=0 -DSOCKLEN_T=socklen_t -DLOCALE_NOT_USED -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
LOCAL_CFLAGS += -DANDROID_NDK -DDISABLE_IMPORTGL -fno-strict-aliasing -fprefetch-loop-arrays -DAVOID_TABLES -DANDROID_TILE_BASED_DECODE -DANDROID_ARMV6_IDCT -DHAVE_STRCHRNUL=0
Expand All @@ -106,7 +110,11 @@ LOCAL_CFLAGS += -Drestrict='' -D__EMX__ -DOPUS_BUILD -DFIXED_POINT -DUSE_ALLOCA
LOCAL_CFLAGS += -DANDROID_NDK -DDISABLE_IMPORTGL -fno-strict-aliasing -fprefetch-loop-arrays -DAVOID_TABLES -DANDROID_TILE_BASED_DECODE -DANDROID_ARMV6_IDCT -ffast-math
LOCAL_CPPFLAGS := -DBSD=1 -ffast-math -O2 -funroll-loops
LOCAL_LDLIBS := -ljnigraphics -llog
LOCAL_ARM_MODE := arm
ifeq ($(TARGET_ARCH_ABI),armeabi)
LOCAL_ARM_MODE := thumb
else
LOCAL_ARM_MODE := arm
endif

LOCAL_SRC_FILES := \
./opus/src/opus.c \
Expand Down
Binary file modified TMessagesProj/libs/armeabi/libtmessages.5.so
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -1350,9 +1350,13 @@ public void onCompletion(MediaPlayer mediaPlayer) {
fileDecodingQueue.postRunnable(new Runnable() {
@Override
public void run() {
if (playingMessageObject != null && playingMessageObject.audioProgress != 0) {
lastPlayPcm = (long)(currentTotalPcmDuration * playingMessageObject.audioProgress);
seekOpusFile(playingMessageObject.audioProgress);
try {
if (playingMessageObject != null && playingMessageObject.audioProgress != 0) {
lastPlayPcm = (long)(currentTotalPcmDuration * playingMessageObject.audioProgress);
seekOpusFile(playingMessageObject.audioProgress);
}
} catch (Exception e) {
FileLog.e("tmessages", e);
}
synchronized (playerSync) {
freePlayerBuffers.addAll(usedPlayerBuffers);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ public class MessagesController implements NotificationCenter.NotificationCenter
private ArrayList<Integer> loadingFullChats = new ArrayList<>();
private ArrayList<Integer> loadedFullChats = new ArrayList<>();

private ArrayList<Integer> reloadingMessages = new ArrayList<>();

private boolean gettingNewDeleteTask = false;
private int currentDeletingTaskTime = 0;
private ArrayList<Integer> currentDeletingTaskMids = null;
Expand Down Expand Up @@ -314,6 +316,7 @@ public void cleanUp() {
loadedFullUsers.clear();
loadingFullUsers.clear();
loadedFullUsers.clear();
reloadingMessages.clear();

updatesStartWaitTime = 0;
currentDeletingTaskTime = 0;
Expand Down Expand Up @@ -548,6 +551,47 @@ public void run() {
ConnectionsManager.getInstance().bindRequestToGuid(reqId, classGuid);
}

private void reloadMessages(final ArrayList<Integer> mids, final long dialog_id) {
final TLRPC.TL_messages_getMessages req = new TLRPC.TL_messages_getMessages();
for (Integer mid : mids) {
if (reloadingMessages.contains(mid)) {
continue;
}
req.id.add(mid);
}
if (req.id.isEmpty()) {
return;
}
reloadingMessages.addAll(req.id);
ConnectionsManager.getInstance().performRpc(req, new RPCRequest.RPCRequestDelegate() {
@Override
public void run(TLObject response, TLRPC.TL_error error) {
if (error == null) {
TLRPC.messages_Messages messagesRes = (TLRPC.messages_Messages) response;
MessagesStorage.getInstance().putMessages(messagesRes, dialog_id);

final ArrayList<MessageObject> objects = new ArrayList<>();
ArrayList<Integer> messagesToReload = null;
for (TLRPC.Message message : messagesRes.messages) {
message.dialog_id = dialog_id;
final HashMap<Integer, TLRPC.User> usersLocal = new HashMap<>();
for (TLRPC.User u : messagesRes.users) {
usersLocal.put(u.id, u);
}
objects.add(new MessageObject(message, usersLocal, 2));
}
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public void run() {
NotificationCenter.getInstance().postNotificationName(NotificationCenter.replaceMessagesObjects, dialog_id, objects);
}
});
}
reloadingMessages.removeAll(req.id);
}
});
}

protected void processNewDifferenceParams(int seq, int pts, int date) {
if (MessagesStorage.lastSeqValue + 1 == seq) {
if (seq != -1) {
Expand Down Expand Up @@ -1443,9 +1487,21 @@ public void run() {
usersLocal.put(u.id, u);
}
final ArrayList<MessageObject> objects = new ArrayList<>();
ArrayList<Integer> messagesToReload = null;
for (TLRPC.Message message : messagesRes.messages) {
message.dialog_id = dialog_id;
objects.add(new MessageObject(message, usersLocal, 2));
if (isCache && message.media instanceof TLRPC.TL_messageMediaUnsupported) {
if (message.media.bytes.length == 0 || message.media.bytes.length == 1 && message.media.bytes[0] < TLRPC.LAYER) {
if (messagesToReload == null) {
messagesToReload = new ArrayList<>();
}
messagesToReload.add(message.id);
}
}
}
if (messagesToReload != null) {
reloadMessages(messagesToReload, dialog_id);
}
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2734,6 +2734,8 @@ private void putMessagesInternal(final ArrayList<TLRPC.Message> messages, final

int downloadMediaMask = 0;
for (TLRPC.Message message : messages) {
fixUnsupportedMedia(message);

long dialog_id = message.dialog_id;
if (dialog_id == 0) {
if (message.to_id.chat_id != 0) {
Expand Down Expand Up @@ -3499,6 +3501,15 @@ public void run() {
}
}

private void fixUnsupportedMedia(TLRPC.Message message) {
if (message != null && message.media instanceof TLRPC.TL_messageMediaUnsupported && message.media.bytes != null) {
if (message.media.bytes.length == 0) {
message.media.bytes = new byte[1];
message.media.bytes[0] = TLRPC.LAYER;
}
}
}

public void putMessages(final TLRPC.messages_Messages messages, final long dialog_id) {
if (messages.messages.isEmpty()) {
return;
Expand All @@ -3512,6 +3523,7 @@ public void run() {
SQLitePreparedStatement state = database.executeFast("REPLACE INTO messages VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)");
SQLitePreparedStatement state2 = database.executeFast("REPLACE INTO media VALUES(?, ?, ?, ?)");
for (TLRPC.Message message : messages.messages) {
fixUnsupportedMedia(message);
state.requery();
ByteBufferDesc data = buffersStorage.getFreeBuffer(message.getObjectSize());
message.serializeToStream(data);
Expand Down Expand Up @@ -3680,6 +3692,7 @@ public void run() {
uid = -dialog.peer.chat_id;
}
TLRPC.Message message = new_dialogMessage.get(dialog.top_message);
fixUnsupportedMedia(message);
ByteBufferDesc data = buffersStorage.getFreeBuffer(message.getObjectSize());
message.serializeToStream(data);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ public class NotificationCenter {
public static final int privacyRulesUpdated = totalEvents++;
public static final int updateMessageMedia = totalEvents++;
public static final int recentImagesDidLoaded = totalEvents++;
public static final int replaceMessagesObjects = totalEvents++;

public static final int httpFileDidLoaded = totalEvents++;
public static final int httpFileDidFailedLoad = totalEvents++;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@

public class SecretChatHelper {

public static final int CURRENT_SECRET_CHAT_LAYER = 20;
public static final int CURRENT_SECRET_CHAT_LAYER = 23;

private ArrayList<Integer> sendingNotifyLayer = new ArrayList<>();
private HashMap<Integer, ArrayList<TLRPC.TL_decryptedMessageHolder>> secretHolesQueue = new HashMap<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1032,38 +1032,57 @@ private void sendMessage(String message, Double lat, Double lon, TLRPC.TL_photo
reqSend.media.user_id = user.id;
SecretChatHelper.getInstance().performSendEncryptedRequest(reqSend, newMsgObj.messageOwner, encryptedChat, null, null);
} else if (type == 7) {
reqSend.media = new TLRPC.TL_decryptedMessageMediaDocument();
reqSend.media.size = document.size;
if (!(document.thumb instanceof TLRPC.TL_photoSizeEmpty)) {
reqSend.media.thumb = document.thumb.bytes;
reqSend.media.thumb_h = document.thumb.h;
reqSend.media.thumb_w = document.thumb.w;
} else {
reqSend.media.thumb = new byte[0];
reqSend.media.thumb_h = 0;
reqSend.media.thumb_w = 0;
}
reqSend.media.file_name = FileLoader.getDocumentFileName(document);
reqSend.media.mime_type = document.mime_type;
if (document.access_hash == 0) {
DelayedMessage delayedMessage = new DelayedMessage();
delayedMessage.originalPath = originalPath;
delayedMessage.sendEncryptedRequest = reqSend;
delayedMessage.type = 2;
delayedMessage.obj = newMsgObj;
delayedMessage.encryptedChat = encryptedChat;
if (path != null && path.length() > 0 && path.startsWith("http")) {
delayedMessage.httpLocation = path;
boolean isSticker = false;
for (TLRPC.DocumentAttribute attribute : document.attributes) {
if (attribute instanceof TLRPC.TL_documentAttributeSticker) {
isSticker = true;
}
delayedMessage.documentLocation = document;
performSendDelayedMessage(delayedMessage);
}
if (isSticker) {
reqSend.media = new TLRPC.TL_decryptedMessageMediaExternalDocument();
reqSend.media.id = document.id;
reqSend.media.date = document.date;
reqSend.media.mime_type = document.mime_type;
reqSend.media.size = document.size;
((TLRPC.TL_decryptedMessageMediaExternalDocument) reqSend.media).thumbImage = document.thumb;
reqSend.media.dc_id = document.dc_id;
reqSend.media.attributes = document.attributes;
SecretChatHelper.getInstance().performSendEncryptedRequest(reqSend, newMsgObj.messageOwner, encryptedChat, null, null);
} else {
TLRPC.TL_inputEncryptedFile encryptedFile = new TLRPC.TL_inputEncryptedFile();
encryptedFile.id = document.id;
encryptedFile.access_hash = document.access_hash;
reqSend.media.key = document.key;
reqSend.media.iv = document.iv;
SecretChatHelper.getInstance().performSendEncryptedRequest(reqSend, newMsgObj.messageOwner, encryptedChat, encryptedFile, null);
reqSend.media = new TLRPC.TL_decryptedMessageMediaDocument();
reqSend.media.size = document.size;
if (!(document.thumb instanceof TLRPC.TL_photoSizeEmpty)) {
reqSend.media.thumb = document.thumb.bytes;
reqSend.media.thumb_h = document.thumb.h;
reqSend.media.thumb_w = document.thumb.w;
} else {
reqSend.media.thumb = new byte[0];
reqSend.media.thumb_h = 0;
reqSend.media.thumb_w = 0;
}
reqSend.media.file_name = FileLoader.getDocumentFileName(document);
reqSend.media.mime_type = document.mime_type;

if (document.access_hash == 0) {
DelayedMessage delayedMessage = new DelayedMessage();
delayedMessage.originalPath = originalPath;
delayedMessage.sendEncryptedRequest = reqSend;
delayedMessage.type = 2;
delayedMessage.obj = newMsgObj;
delayedMessage.encryptedChat = encryptedChat;
if (path != null && path.length() > 0 && path.startsWith("http")) {
delayedMessage.httpLocation = path;
}
delayedMessage.documentLocation = document;
performSendDelayedMessage(delayedMessage);
} else {
TLRPC.TL_inputEncryptedFile encryptedFile = new TLRPC.TL_inputEncryptedFile();
encryptedFile.id = document.id;
encryptedFile.access_hash = document.access_hash;
reqSend.media.key = document.key;
reqSend.media.iv = document.iv;
SecretChatHelper.getInstance().performSendEncryptedRequest(reqSend, newMsgObj.messageOwner, encryptedChat, encryptedFile, null);
}
}
} else if (type == 8) {
if (AndroidUtilities.getPeerLayerVersion(encryptedChat.layer) >= 17) {
Expand Down Expand Up @@ -1544,6 +1563,7 @@ private static boolean prepareSendingDocumentInternal(String path, String origin
}

boolean isEncrypted = (int)dialog_id == 0;
boolean allowSticker = !isEncrypted;

String name = f.getName();
if (name == null) {
Expand Down Expand Up @@ -1591,7 +1611,7 @@ private static boolean prepareSendingDocumentInternal(String path, String origin
FileLog.e("tmessages", e);
}
}
if (document.mime_type.equals("image/webp") && !isEncrypted) {
if (document.mime_type.equals("image/webp") && allowSticker) {
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
try {
bmOptions.inJustDecodeBounds = true;
Expand Down
7 changes: 4 additions & 3 deletions TMessagesProj/src/main/java/org/telegram/messenger/TLRPC.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@
@SuppressWarnings("unchecked")
public class TLRPC {

public static int MESSAGE_FLAG_UNREAD = 1;
public static int MESSAGE_FLAG_OUT = 2;
public static final int MESSAGE_FLAG_UNREAD = 1;
public static final int MESSAGE_FLAG_OUT = 2;
public static final int LAYER = 22;

public static class ChatPhoto extends TLObject {
public FileLocation photo_small;
Expand Down Expand Up @@ -10831,7 +10832,7 @@ public void serializeToStream(AbsSerializedData stream) {
public static class invokeWithLayer extends TLObject {
public static int constructor = 0xda9b0d0d;

public int layer = 22;
public int layer = LAYER;
public TLObject query;

public void serializeToStream(AbsSerializedData stream) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -210,15 +210,17 @@ public void run() {
}
final HashMap<String, ArrayList<TLRPC.Document>> result = new HashMap<>();
for (TLRPC.TL_stickerPack stickerPack : res.packs) {
ArrayList<TLRPC.Document> arrayList = result.get(stickerPack.emoticon);
for (Long id : stickerPack.documents) {
TLRPC.Document document = documents.get(id);
if (document != null) {
if (arrayList == null) {
arrayList = new ArrayList<>();
result.put(stickerPack.emoticon, arrayList);
if (stickerPack != null && stickerPack.emoticon != null) {
ArrayList<TLRPC.Document> arrayList = result.get(stickerPack.emoticon);
for (Long id : stickerPack.documents) {
TLRPC.Document document = documents.get(id);
if (document != null) {
if (arrayList == null) {
arrayList = new ArrayList<>();
result.put(stickerPack.emoticon, arrayList);
}
arrayList.add(document);
}
arrayList.add(document);
}
}
}
Expand Down
Loading

0 comments on commit 213c226

Please sign in to comment.