Commit 2b15ac63 authored by DrKLO's avatar DrKLO

Continue upload file after app restart, bug fixes

parent 8b73d93d
...@@ -80,7 +80,7 @@ android { ...@@ -80,7 +80,7 @@ android {
defaultConfig { defaultConfig {
minSdkVersion 8 minSdkVersion 8
targetSdkVersion 19 targetSdkVersion 19
versionCode 310 versionCode 311
versionName "1.8.0" versionName "1.8.0"
} }
} }
...@@ -53,13 +53,6 @@ public class GcmBroadcastReceiver extends BroadcastReceiver { ...@@ -53,13 +53,6 @@ public class GcmBroadcastReceiver extends BroadcastReceiver {
FileLog.e("tmessages", e); FileLog.e("tmessages", e);
} }
/*SharedPreferences preferences = context.getSharedPreferences("Notifications", Context.MODE_PRIVATE);
boolean globalEnabled = preferences.getBoolean("EnableAll", true);
if (!globalEnabled) {
FileLog.d("tmessages", "GCM disabled");
return;
}*/
ConnectionsManager.getInstance().resumeNetworkMaybe(); ConnectionsManager.getInstance().resumeNetworkMaybe();
} }
}); });
......
...@@ -628,7 +628,7 @@ public class ImageLoader { ...@@ -628,7 +628,7 @@ public class ImageLoader {
} }
} }
public BitmapDrawable getImageFromMemory(TLRPC.FileLocation url, String httpUrl, String filter) { public BitmapDrawable getImageFromMemory(TLRPC.FileLocation url, String httpUrl, String filter, ImageReceiver imageReceiver) {
if (url == null && httpUrl == null) { if (url == null && httpUrl == null) {
return null; return null;
} }
...@@ -641,6 +641,15 @@ public class ImageLoader { ...@@ -641,6 +641,15 @@ public class ImageLoader {
if (filter != null) { if (filter != null) {
key += "@" + filter; key += "@" + filter;
} }
if (imageReceiver != null) {
Integer TAG = imageReceiver.getTag();
if (TAG != null) {
CacheImage alreadyLoadingImage = imageLoadingByTag.get(TAG);
if (alreadyLoadingImage != null) {
alreadyLoadingImage.removeImageView(imageReceiver);
}
}
}
return memCache.get(key); return memCache.get(key);
} }
...@@ -668,8 +677,8 @@ public class ImageLoader { ...@@ -668,8 +677,8 @@ public class ImageLoader {
String url; String url;
String key; String key;
if (httpUrl != null) { if (httpUrl != null) {
url = httpUrl;
key = Utilities.MD5(httpUrl); key = Utilities.MD5(httpUrl);
url = key + ".jpg";
} else { } else {
key = fileLocation.volume_id + "_" + fileLocation.local_id; key = fileLocation.volume_id + "_" + fileLocation.local_id;
url = key + ".jpg"; url = key + ".jpg";
......
...@@ -88,14 +88,14 @@ public class ImageReceiver { ...@@ -88,14 +88,14 @@ public class ImageReceiver {
if (currentImage != null) { if (currentImage != null) {
return; return;
} else { } else {
img = ImageLoader.getInstance().getImageFromMemory(fileLocation, httpUrl, filter); img = ImageLoader.getInstance().getImageFromMemory(fileLocation, httpUrl, filter, this);
} }
} else { } else {
img = ImageLoader.getInstance().getImageFromMemory(fileLocation, httpUrl, filter); img = ImageLoader.getInstance().getImageFromMemory(fileLocation, httpUrl, filter, this);
recycleBitmap(img); recycleBitmap(img);
} }
} }
img = ImageLoader.getInstance().getImageFromMemory(fileLocation, httpUrl, filter); img = ImageLoader.getInstance().getImageFromMemory(fileLocation, httpUrl, filter, this);
currentPath = key; currentPath = key;
last_path = fileLocation; last_path = fileLocation;
last_httpUrl = httpUrl; last_httpUrl = httpUrl;
......
...@@ -963,7 +963,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter ...@@ -963,7 +963,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
NotificationsController.getInstance().processReadMessages(null, did, 0, Integer.MAX_VALUE, false); NotificationsController.getInstance().processReadMessages(null, did, 0, Integer.MAX_VALUE, false);
HashMap<Long, Integer> dialogsToUpdate = new HashMap<Long, Integer>(); HashMap<Long, Integer> dialogsToUpdate = new HashMap<Long, Integer>();
dialogsToUpdate.put(did, 0); dialogsToUpdate.put(did, 0);
NotificationsController.getInstance().processDialogsUpdateRead(dialogsToUpdate, true); NotificationsController.getInstance().processDialogsUpdateRead(dialogsToUpdate);
} }
}); });
} }
...@@ -1395,7 +1395,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter ...@@ -1395,7 +1395,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
currentDialog.unread_count = entry.getValue(); currentDialog.unread_count = entry.getValue();
} }
} }
NotificationsController.getInstance().processDialogsUpdateRead(dialogsToUpdate, true); NotificationsController.getInstance().processDialogsUpdateRead(dialogsToUpdate);
NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload); NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload);
} }
}); });
...@@ -1491,7 +1491,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter ...@@ -1491,7 +1491,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
dialogsServerOnly.add(d); dialogsServerOnly.add(d);
} }
} }
NotificationsController.getInstance().processDialogsUpdateRead(dialogsToUpdate, true); NotificationsController.getInstance().processDialogsUpdateRead(dialogsToUpdate);
NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload); NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload);
} }
}); });
...@@ -1711,12 +1711,12 @@ public class MessagesController implements NotificationCenter.NotificationCenter ...@@ -1711,12 +1711,12 @@ public class MessagesController implements NotificationCenter.NotificationCenter
NotificationsController.getInstance().processReadMessages(null, dialog_id, 0, max_positive_id, false); NotificationsController.getInstance().processReadMessages(null, dialog_id, 0, max_positive_id, false);
HashMap<Long, Integer> dialogsToUpdate = new HashMap<Long, Integer>(); HashMap<Long, Integer> dialogsToUpdate = new HashMap<Long, Integer>();
dialogsToUpdate.put(dialog_id, 0); dialogsToUpdate.put(dialog_id, 0);
NotificationsController.getInstance().processDialogsUpdateRead(dialogsToUpdate, true); NotificationsController.getInstance().processDialogsUpdateRead(dialogsToUpdate);
} else { } else {
NotificationsController.getInstance().processReadMessages(null, dialog_id, 0, max_positive_id, true); NotificationsController.getInstance().processReadMessages(null, dialog_id, 0, max_positive_id, true);
HashMap<Long, Integer> dialogsToUpdate = new HashMap<Long, Integer>(); HashMap<Long, Integer> dialogsToUpdate = new HashMap<Long, Integer>();
dialogsToUpdate.put(dialog_id, 2000001); dialogsToUpdate.put(dialog_id, -1);
NotificationsController.getInstance().processDialogsUpdateRead(dialogsToUpdate, false); NotificationsController.getInstance().processDialogsUpdateRead(dialogsToUpdate);
} }
} }
}); });
...@@ -1784,7 +1784,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter ...@@ -1784,7 +1784,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
} }
HashMap<Long, Integer> dialogsToUpdate = new HashMap<Long, Integer>(); HashMap<Long, Integer> dialogsToUpdate = new HashMap<Long, Integer>();
dialogsToUpdate.put(dialog_id, 0); dialogsToUpdate.put(dialog_id, 0);
NotificationsController.getInstance().processDialogsUpdateRead(dialogsToUpdate, true); NotificationsController.getInstance().processDialogsUpdateRead(dialogsToUpdate);
} }
}); });
} }
...@@ -3417,27 +3417,6 @@ public class MessagesController implements NotificationCenter.NotificationCenter ...@@ -3417,27 +3417,6 @@ public class MessagesController implements NotificationCenter.NotificationCenter
return false; return false;
} }
public void dialogsUnreadCountIncr(final HashMap<Long, Integer> values) {
AndroidUtilities.RunOnUIThread(new Runnable() {
@Override
public void run() {
for (HashMap.Entry<Long, Integer> entry : values.entrySet()) {
TLRPC.TL_dialog dialog = dialogs_dict.get(entry.getKey());
if (dialog != null) {
int value = entry.getValue();
if (value < 0) {
dialog.unread_count = -value;
} else {
dialog.unread_count += value;
}
}
}
NotificationsController.getInstance().processDialogsUpdateRead(values, false);
NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload);
}
});
}
protected void updateInterfaceWithMessages(long uid, ArrayList<MessageObject> messages) { protected void updateInterfaceWithMessages(long uid, ArrayList<MessageObject> messages) {
updateInterfaceWithMessages(uid, messages, false); updateInterfaceWithMessages(uid, messages, false);
} }
...@@ -3718,7 +3697,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter ...@@ -3718,7 +3697,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
NotificationsController.getInstance().processReadMessages(null, did, 0, Integer.MAX_VALUE, false); NotificationsController.getInstance().processReadMessages(null, did, 0, Integer.MAX_VALUE, false);
HashMap<Long, Integer> dialogsToUpdate = new HashMap<Long, Integer>(); HashMap<Long, Integer> dialogsToUpdate = new HashMap<Long, Integer>();
dialogsToUpdate.put(did, 0); dialogsToUpdate.put(did, 0);
NotificationsController.getInstance().processDialogsUpdateRead(dialogsToUpdate, true); NotificationsController.getInstance().processDialogsUpdateRead(dialogsToUpdate);
} }
}); });
} }
......
...@@ -419,7 +419,7 @@ public class NotificationsController { ...@@ -419,7 +419,7 @@ public class NotificationsController {
} }
if (photoPath != null) { if (photoPath != null) {
BitmapDrawable img = ImageLoader.getInstance().getImageFromMemory(photoPath, null, "50_50"); BitmapDrawable img = ImageLoader.getInstance().getImageFromMemory(photoPath, null, "50_50", null);
if (img != null) { if (img != null) {
mBuilder.setLargeIcon(img.getBitmap()); mBuilder.setLargeIcon(img.getBitmap());
} }
...@@ -596,50 +596,40 @@ public class NotificationsController { ...@@ -596,50 +596,40 @@ public class NotificationsController {
} }
} }
public void processDialogsUpdateRead(final HashMap<Long, Integer> dialogsToUpdate, boolean replace) { public void processDialogsUpdateRead(final HashMap<Long, Integer> dialogsToUpdate) {
int old_unread_count = total_unread_count; int old_unread_count = total_unread_count;
SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Context.MODE_PRIVATE); SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("Notifications", Context.MODE_PRIVATE);
for (HashMap.Entry<Long, Integer> entry : dialogsToUpdate.entrySet()) { for (HashMap.Entry<Long, Integer> entry : dialogsToUpdate.entrySet()) {
long dialog_id = entry.getKey(); long dialog_id = entry.getKey();
int notify_override = preferences.getInt("notify2_" + dialog_id, 0); int notify_override = preferences.getInt("notify2_" + dialog_id, 0);
boolean isChat = (int)dialog_id < 0; boolean canAddValue = !(notify_override == 2 || (!preferences.getBoolean("EnableAll", true) || ((int)dialog_id < 0) && !preferences.getBoolean("EnableGroup", true)) && notify_override == 0);
Integer currentCount = pushDialogs.get(dialog_id);
boolean canAddValue = !(notify_override == 2 || (!preferences.getBoolean("EnableAll", true) || isChat && !preferences.getBoolean("EnableGroup", true)) && notify_override == 0);
Integer currentCount = pushDialogs.get(dialog_id);
Integer newCount = entry.getValue(); Integer newCount = entry.getValue();
if (replace || newCount < 0) { if (newCount < 0) {
if (newCount < 0) { if (currentCount == null) {
newCount *= -1; continue;
}
if (currentCount != null) {
total_unread_count -= currentCount;
} }
if (newCount == 0) { newCount = currentCount + newCount;
pushDialogs.remove(dialog_id); }
for (int a = 0; a < pushMessages.size(); a++) { if (currentCount != null) {
MessageObject messageObject = pushMessages.get(a); total_unread_count -= currentCount;
if (messageObject.getDialogId() == dialog_id) { }
pushMessages.remove(a); if (newCount == 0) {
a--; pushDialogs.remove(dialog_id);
pushMessagesDict.remove(messageObject.messageOwner.id); for (int a = 0; a < pushMessages.size(); a++) {
popupMessages.remove(messageObject); MessageObject messageObject = pushMessages.get(a);
} if (messageObject.getDialogId() == dialog_id) {
pushMessages.remove(a);
a--;
pushMessagesDict.remove(messageObject.messageOwner.id);
popupMessages.remove(messageObject);
} }
} else if (canAddValue) {
total_unread_count += newCount;
pushDialogs.put(dialog_id, newCount);
} }
} else if (canAddValue) { } else if (canAddValue) {
if (newCount > 2000000) {
newCount = 2000000 - newCount;
}
if (currentCount == null) {
currentCount = 0;
}
currentCount += newCount;
total_unread_count += newCount; total_unread_count += newCount;
pushDialogs.put(dialog_id, currentCount); pushDialogs.put(dialog_id, newCount);
} }
} }
if (old_unread_count != total_unread_count) { if (old_unread_count != total_unread_count) {
......
...@@ -147,6 +147,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter ...@@ -147,6 +147,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
for (int a = 0; a < arr.size(); a++) { for (int a = 0; a < arr.size(); a++) {
DelayedMessage obj = arr.get(a); DelayedMessage obj = arr.get(a);
if (enc && obj.sendEncryptedRequest != null || !enc && obj.sendRequest != null) { if (enc && obj.sendEncryptedRequest != null || !enc && obj.sendRequest != null) {
MessagesStorage.getInstance().markMessageAsSendError(obj.obj.messageOwner.id);
obj.obj.messageOwner.send_state = MessageObject.MESSAGE_SEND_STATE_SEND_ERROR; obj.obj.messageOwner.send_state = MessageObject.MESSAGE_SEND_STATE_SEND_ERROR;
arr.remove(a); arr.remove(a);
a--; a--;
...@@ -392,6 +393,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter ...@@ -392,6 +393,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
newMsg.from_id = UserConfig.getClientUserId(); newMsg.from_id = UserConfig.getClientUserId();
newMsg.out = true; newMsg.out = true;
newMsg.date = ConnectionsManager.getInstance().getCurrentTime(); newMsg.date = ConnectionsManager.getInstance().getCurrentTime();
UserConfig.saveConfig(false);
} }
if (newMsg.random_id == 0) { if (newMsg.random_id == 0) {
newMsg.random_id = getNextRandomId(); newMsg.random_id = getNextRandomId();
...@@ -453,11 +455,11 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter ...@@ -453,11 +455,11 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
newMsg.ttl = encryptedChat.ttl; newMsg.ttl = encryptedChat.ttl;
} }
UserConfig.saveConfig(false);
final MessageObject newMsgObj = new MessageObject(newMsg, null, 2); MessageObject newMsgObj = new MessageObject(newMsg, null, 2);
newMsgObj.messageOwner.send_state = MessageObject.MESSAGE_SEND_STATE_SENDING; newMsgObj.messageOwner.send_state = MessageObject.MESSAGE_SEND_STATE_SENDING;
final ArrayList<MessageObject> objArr = new ArrayList<MessageObject>(); ArrayList<MessageObject> objArr = new ArrayList<MessageObject>();
objArr.add(newMsgObj); objArr.add(newMsgObj);
ArrayList<TLRPC.Message> arr = new ArrayList<TLRPC.Message>(); ArrayList<TLRPC.Message> arr = new ArrayList<TLRPC.Message>();
arr.add(newMsg); arr.add(newMsg);
...@@ -553,7 +555,6 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter ...@@ -553,7 +555,6 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
delayedMessage.obj = newMsgObj; delayedMessage.obj = newMsgObj;
delayedMessage.documentLocation = document; delayedMessage.documentLocation = document;
delayedMessage.location = document.thumb.location; delayedMessage.location = document.thumb.location;
performSendDelayedMessage(delayedMessage);
} else { } else {
TLRPC.TL_inputMediaDocument media = new TLRPC.TL_inputMediaDocument(); TLRPC.TL_inputMediaDocument media = new TLRPC.TL_inputMediaDocument();
media.id = new TLRPC.TL_inputDocument(); media.id = new TLRPC.TL_inputDocument();
...@@ -889,6 +890,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter ...@@ -889,6 +890,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
} }
}); });
} else { } else {
MessagesStorage.getInstance().markMessageAsSendError(newMsgObj.messageOwner.id);
AndroidUtilities.RunOnUIThread(new Runnable() { AndroidUtilities.RunOnUIThread(new Runnable() {
@Override @Override
public void run() { public void run() {
...@@ -994,6 +996,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter ...@@ -994,6 +996,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
} }
}); });
} else { } else {
MessagesStorage.getInstance().markMessageAsSendError(newMsgObj.messageOwner.id);
AndroidUtilities.RunOnUIThread(new Runnable() { AndroidUtilities.RunOnUIThread(new Runnable() {
@Override @Override
public void run() { public void run() {
......
...@@ -988,7 +988,6 @@ public class ConnectionsManager implements Action.ActionDelegate, TcpConnection. ...@@ -988,7 +988,6 @@ public class ConnectionsManager implements Action.ActionDelegate, TcpConnection.
} }
} catch(Exception e) { } catch(Exception e) {
FileLog.e("tmessages", e); FileLog.e("tmessages", e);
return true;
} }
return false; return false;
} }
......
...@@ -166,7 +166,7 @@ public class Utilities { ...@@ -166,7 +166,7 @@ public class Utilities {
public static String bytesToHex(byte[] bytes) { public static String bytesToHex(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2]; char[] hexChars = new char[bytes.length * 2];
int v; int v;
for ( int j = 0; j < bytes.length; j++ ) { for (int j = 0; j < bytes.length; j++) {
v = bytes[j] & 0xFF; v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4]; hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F]; hexChars[j * 2 + 1] = hexArray[v & 0x0F];
...@@ -174,6 +174,15 @@ public class Utilities { ...@@ -174,6 +174,15 @@ public class Utilities {
return new String(hexChars); return new String(hexChars);
} }
public static byte[] hexToBytes(String hex) {
int len = hex.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4) + Character.digit(hex.charAt(i + 1), 16));
}
return data;
}
public static boolean isGoodPrime(byte[] prime, int g) { public static boolean isGoodPrime(byte[] prime, int g) {
if (!(g >= 2 && g <= 7)) { if (!(g >= 2 && g <= 7)) {
return false; return false;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment