1
0
mirror of https://github.com/MGislv/NekoX.git synced 2024-07-02 10:33:36 +00:00

Bug fixes

This commit is contained in:
DrKLO 2014-10-29 00:27:44 +03:00
parent a4af1fb2f7
commit 5ddd8a0940

View File

@ -2513,9 +2513,11 @@ public class MessagesController implements NotificationCenter.NotificationCenter
if (!res.new_messages.isEmpty() || !res.new_encrypted_messages.isEmpty()) { if (!res.new_messages.isEmpty() || !res.new_encrypted_messages.isEmpty()) {
final HashMap<Long, ArrayList<MessageObject>> messages = new HashMap<Long, ArrayList<MessageObject>>(); final HashMap<Long, ArrayList<MessageObject>> messages = new HashMap<Long, ArrayList<MessageObject>>();
for (TLRPC.EncryptedMessage encryptedMessage : res.new_encrypted_messages) { for (TLRPC.EncryptedMessage encryptedMessage : res.new_encrypted_messages) {
TLRPC.Message message = decryptMessage(encryptedMessage); ArrayList<TLRPC.Message> decryptedMessages = decryptMessage(encryptedMessage);
if (message != null) { if (decryptedMessages != null && !decryptedMessages.isEmpty()) {
res.new_messages.add(message); for (TLRPC.Message message : decryptedMessages) {
res.new_messages.add(message);
}
} }
} }
@ -3063,19 +3065,21 @@ public class MessagesController implements NotificationCenter.NotificationCenter
//DEPRECATED //DEPRECATED
} else if (update instanceof TLRPC.TL_updateNewEncryptedMessage) { } else if (update instanceof TLRPC.TL_updateNewEncryptedMessage) {
MessagesStorage.lastQtsValue = update.qts; MessagesStorage.lastQtsValue = update.qts;
TLRPC.Message message = decryptMessage(((TLRPC.TL_updateNewEncryptedMessage)update).message); ArrayList<TLRPC.Message> decryptedMessages = decryptMessage(((TLRPC.TL_updateNewEncryptedMessage)update).message);
if (message != null) { if (decryptedMessages != null && !decryptedMessages.isEmpty()) {
int cid = ((TLRPC.TL_updateNewEncryptedMessage)update).message.chat_id; int cid = ((TLRPC.TL_updateNewEncryptedMessage)update).message.chat_id;
messagesArr.add(message); long uid = ((long) cid) << 32;
MessageObject obj = new MessageObject(message, usersDict, 2);
long uid = ((long)cid) << 32;
ArrayList<MessageObject> arr = messages.get(uid); ArrayList<MessageObject> arr = messages.get(uid);
if (arr == null) { if (arr == null) {
arr = new ArrayList<MessageObject>(); arr = new ArrayList<MessageObject>();
messages.put(uid, arr); messages.put(uid, arr);
} }
arr.add(obj); for (TLRPC.Message message : decryptedMessages) {
pushMessages.add(obj); messagesArr.add(message);
MessageObject obj = new MessageObject(message, usersDict, 2);
arr.add(obj);
pushMessages.add(obj);
}
} }
} else if (update instanceof TLRPC.TL_updateEncryptedChatTyping) { } else if (update instanceof TLRPC.TL_updateEncryptedChatTyping) {
TLRPC.EncryptedChat encryptedChat = getEncryptedChatDB(update.chat_id); TLRPC.EncryptedChat encryptedChat = getEncryptedChatDB(update.chat_id);
@ -3809,33 +3813,27 @@ public class MessagesController implements NotificationCenter.NotificationCenter
return null; return null;
} }
public ArrayList<TLRPC.Message> checkSecretHoles(int enc_id) { public void checkSecretHoles(TLRPC.EncryptedChat chat, ArrayList<TLRPC.Message> messages) {
ArrayList<TLRPC.TL_decryptedMessageHolder> holes = secretHolesQueue.get(enc_id); ArrayList<TLRPC.TL_decryptedMessageHolder> holes = secretHolesQueue.get(chat.id);
if (holes == null) { if (holes == null) {
return null; return;
}
TLRPC.EncryptedChat chat = getEncryptedChatDB(enc_id);
if (chat == null) {
return null;
} }
Collections.sort(holes, new Comparator<TLRPC.TL_decryptedMessageHolder>() { Collections.sort(holes, new Comparator<TLRPC.TL_decryptedMessageHolder>() {
@Override @Override
public int compare(TLRPC.TL_decryptedMessageHolder lhs, TLRPC.TL_decryptedMessageHolder rhs) { public int compare(TLRPC.TL_decryptedMessageHolder lhs, TLRPC.TL_decryptedMessageHolder rhs) {
if (lhs.layer.out_seq_no < rhs.layer.out_seq_no) { if (lhs.layer.out_seq_no > rhs.layer.out_seq_no) {
return 1; return 1;
} else if (lhs.layer.out_seq_no > rhs.layer.out_seq_no) { } else if (lhs.layer.out_seq_no < rhs.layer.out_seq_no) {
return -1; return -1;
} }
return 0; return 0;
} }
}); });
final ArrayList<TLRPC.Message> messagesArr = new ArrayList<TLRPC.Message>();
boolean update = false; boolean update = false;
for (int a = 0; a < holes.size(); a++) { for (int a = 0; a < holes.size(); a++) {
TLRPC.TL_decryptedMessageHolder holder = holes.get(a); TLRPC.TL_decryptedMessageHolder holder = holes.get(a);
if (holder.layer.out_seq_no == chat.seq_in || chat.seq_in != holder.layer.out_seq_no - 2) { if (holder.layer.out_seq_no == chat.seq_in || chat.seq_in == holder.layer.out_seq_no - 2) {
chat.seq_in = holder.layer.out_seq_no; chat.seq_in = holder.layer.out_seq_no;
holes.remove(a); holes.remove(a);
a--; a--;
@ -3843,26 +3841,21 @@ public class MessagesController implements NotificationCenter.NotificationCenter
TLRPC.Message message = processDecryptedObject(chat, holder.file, holder.date, holder.random_id, holder.layer.message); TLRPC.Message message = processDecryptedObject(chat, holder.file, holder.date, holder.random_id, holder.layer.message);
if (message != null) { if (message != null) {
messagesArr.add(message); messages.add(message);
} }
} else { } else {
break; break;
} }
} }
if (!messagesArr.isEmpty()) {
MessagesStorage.getInstance().putMessages(messagesArr, true, true, false, MediaController.getInstance().getAutodownloadMask());
}
if (holes.isEmpty()) { if (holes.isEmpty()) {
secretHolesQueue.remove(enc_id); secretHolesQueue.remove(chat.id);
} }
if (update) { if (update) {
MessagesStorage.getInstance().updateEncryptedChatSeq(chat); MessagesStorage.getInstance().updateEncryptedChatSeq(chat);
return messagesArr;
} }
return null;
} }
public TLRPC.Message decryptMessage(TLRPC.EncryptedMessage message) { public ArrayList<TLRPC.Message> decryptMessage(TLRPC.EncryptedMessage message) {
final TLRPC.EncryptedChat chat = getEncryptedChatDB(message.chat_id); final TLRPC.EncryptedChat chat = getEncryptedChatDB(message.chat_id);
if (chat == null || chat instanceof TLRPC.TL_encryptedChatDiscarded) { if (chat == null || chat instanceof TLRPC.TL_encryptedChatDiscarded) {
return null; return null;
@ -3928,7 +3921,13 @@ public class MessagesController implements NotificationCenter.NotificationCenter
MessagesStorage.getInstance().updateEncryptedChatSeq(chat); MessagesStorage.getInstance().updateEncryptedChatSeq(chat);
object = layer.message; object = layer.message;
} }
return processDecryptedObject(chat, message.file, message.date, message.random_id, object); ArrayList<TLRPC.Message> messages = new ArrayList<TLRPC.Message>();
TLRPC.Message decryptedMessage = processDecryptedObject(chat, message.file, message.date, message.random_id, object);
if (decryptedMessage != null) {
messages.add(decryptedMessage);
}
checkSecretHoles(chat, messages);
return messages;
} else { } else {
BuffersStorage.getInstance().reuseFreeBuffer(is); BuffersStorage.getInstance().reuseFreeBuffer(is);
FileLog.e("tmessages", "fingerprint mismatch"); FileLog.e("tmessages", "fingerprint mismatch");