Partly revert last commit

This commit is contained in:
DrKLO 2014-06-16 18:31:12 +04:00
parent 358a067acc
commit 69c3c6066e
5 changed files with 16 additions and 133 deletions

View file

@ -337,7 +337,7 @@ public class FileLoader {
return memCache.get(key) != null; return memCache.get(key) != null;
} }
public void uploadFile(final String location, final String originalLocation, final boolean encrypted) { public void uploadFile(final String location, final boolean encrypted) {
fileLoaderQueue.postRunnable(new Runnable() { fileLoaderQueue.postRunnable(new Runnable() {
@Override @Override
public void run() { public void run() {
@ -350,7 +350,7 @@ public class FileLoader {
return; return;
} }
} }
FileUploadOperation operation = new FileUploadOperation(location, originalLocation, encrypted); FileUploadOperation operation = new FileUploadOperation(location, encrypted);
if (encrypted) { if (encrypted) {
uploadOperationPathsEnc.put(location, operation); uploadOperationPathsEnc.put(location, operation);
} else { } else {

View file

@ -13,14 +13,11 @@ import java.io.FileInputStream;
import java.math.BigInteger; import java.math.BigInteger;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Locale; import java.util.Locale;
import java.util.concurrent.Semaphore;
public class FileUploadOperation { public class FileUploadOperation {
private int uploadChunkSize = 1024 * 32; private int uploadChunkSize = 1024 * 32;
private String uploadingFilePath; private String uploadingFilePath;
private String originalPath;
public int state = 0; public int state = 0;
private byte[] readBuffer; private byte[] readBuffer;
public FileUploadOperationDelegate delegate; public FileUploadOperationDelegate delegate;
@ -45,9 +42,8 @@ public class FileUploadOperation {
public abstract void didChangedUploadProgress(FileUploadOperation operation, float progress); public abstract void didChangedUploadProgress(FileUploadOperation operation, float progress);
} }
public FileUploadOperation(String location, String originalLocaltion, boolean encrypted) { public FileUploadOperation(String location, boolean encrypted) {
uploadingFilePath = location; uploadingFilePath = location;
originalPath = originalLocaltion;
if (encrypted) { if (encrypted) {
iv = new byte[32]; iv = new byte[32];
key = new byte[32]; key = new byte[32];
@ -106,26 +102,6 @@ public class FileUploadOperation {
try { try {
if (stream == null) { if (stream == null) {
if (originalPath != null) {
Semaphore semaphore = new Semaphore(0);
ArrayList<TLObject> result = new ArrayList<TLObject>();
String path = originalPath;
if (key != null) {
path += "e";
}
MessagesStorage.getInstance().getSentFile(path, semaphore, result);
semaphore.acquire();
if (!result.isEmpty()) {
TLObject object = result.get(0);
if (object instanceof TLRPC.InputFile) {
delegate.didFinishUploadingFile(FileUploadOperation.this, (TLRPC.InputFile) object, null);
return;
} else if (object instanceof TLRPC.InputEncryptedFile) {
delegate.didFinishUploadingFile(FileUploadOperation.this, null, (TLRPC.InputEncryptedFile) object);
return;
}
}
}
File cacheFile = new File(uploadingFilePath); File cacheFile = new File(uploadingFilePath);
stream = new FileInputStream(cacheFile); stream = new FileInputStream(cacheFile);
totalFileSize = cacheFile.length(); totalFileSize = cacheFile.length();
@ -210,9 +186,6 @@ public class FileUploadOperation {
result.id = currentFileId; result.id = currentFileId;
result.name = uploadingFilePath.substring(uploadingFilePath.lastIndexOf("/") + 1); result.name = uploadingFilePath.substring(uploadingFilePath.lastIndexOf("/") + 1);
delegate.didFinishUploadingFile(FileUploadOperation.this, result, null); delegate.didFinishUploadingFile(FileUploadOperation.this, result, null);
if (originalPath != null) {
MessagesStorage.getInstance().putSentFile(originalPath, result, null, null);
}
} else { } else {
TLRPC.InputEncryptedFile result; TLRPC.InputEncryptedFile result;
if (isBigFile) { if (isBigFile) {
@ -227,9 +200,6 @@ public class FileUploadOperation {
result.iv = iv; result.iv = iv;
result.key = key; result.key = key;
delegate.didFinishUploadingFile(FileUploadOperation.this, null, result); delegate.didFinishUploadingFile(FileUploadOperation.this, null, result);
if (originalPath != null) {
MessagesStorage.getInstance().putSentFile(originalPath + "e", result, key, iv);
}
} }
} else { } else {
startUploadRequest(); startUploadRequest();

View file

@ -127,7 +127,6 @@ public class MessagesController implements NotificationCenter.NotificationCenter
public TLRPC.TL_messages_sendMedia sendRequest; public TLRPC.TL_messages_sendMedia sendRequest;
public TLRPC.TL_decryptedMessage sendEncryptedRequest; public TLRPC.TL_decryptedMessage sendEncryptedRequest;
public int type; public int type;
public String originalPath;
public TLRPC.FileLocation location; public TLRPC.FileLocation location;
public TLRPC.TL_video videoLocation; public TLRPC.TL_video videoLocation;
public TLRPC.TL_audio audioLocation; public TLRPC.TL_audio audioLocation;
@ -588,7 +587,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
public void uploadAndApplyUserAvatar(TLRPC.PhotoSize bigPhoto) { public void uploadAndApplyUserAvatar(TLRPC.PhotoSize bigPhoto) {
if (bigPhoto != null) { if (bigPhoto != null) {
uploadingAvatar = Utilities.getCacheDir() + "/" + bigPhoto.location.volume_id + "_" + bigPhoto.location.local_id + ".jpg"; uploadingAvatar = Utilities.getCacheDir() + "/" + bigPhoto.location.volume_id + "_" + bigPhoto.location.local_id + ".jpg";
FileLoader.getInstance().uploadFile(uploadingAvatar, null, false); FileLoader.getInstance().uploadFile(uploadingAvatar, false);
} }
} }
@ -1732,7 +1731,7 @@ public class MessagesController implements NotificationCenter.NotificationCenter
type = 2; type = 2;
newMsg.message = "-1"; newMsg.message = "-1";
TLRPC.FileLocation location1 = photo.sizes.get(photo.sizes.size() - 1).location; TLRPC.FileLocation location1 = photo.sizes.get(photo.sizes.size() - 1).location;
newMsg.attachPath = originalPath; newMsg.attachPath = Utilities.getCacheDir() + "/" + location1.volume_id + "_" + location1.local_id + ".jpg";
} else if (video != null) { } else if (video != null) {
newMsg = new TLRPC.TL_message(); newMsg = new TLRPC.TL_message();
newMsg.media = new TLRPC.TL_messageMediaVideo(); newMsg.media = new TLRPC.TL_messageMediaVideo();
@ -1883,7 +1882,6 @@ public class MessagesController implements NotificationCenter.NotificationCenter
} else if (type == 2) { } else if (type == 2) {
reqSend.media = new TLRPC.TL_inputMediaUploadedPhoto(); reqSend.media = new TLRPC.TL_inputMediaUploadedPhoto();
DelayedMessage delayedMessage = new DelayedMessage(); DelayedMessage delayedMessage = new DelayedMessage();
delayedMessage.originalPath = originalPath;
delayedMessage.sendRequest = reqSend; delayedMessage.sendRequest = reqSend;
delayedMessage.type = 0; delayedMessage.type = 0;
delayedMessage.obj = newMsgObj; delayedMessage.obj = newMsgObj;
@ -1895,7 +1893,6 @@ public class MessagesController implements NotificationCenter.NotificationCenter
reqSend.media.w = video.w; reqSend.media.w = video.w;
reqSend.media.h = video.h; reqSend.media.h = video.h;
DelayedMessage delayedMessage = new DelayedMessage(); DelayedMessage delayedMessage = new DelayedMessage();
delayedMessage.originalPath = originalPath;
delayedMessage.sendRequest = reqSend; delayedMessage.sendRequest = reqSend;
delayedMessage.type = 1; delayedMessage.type = 1;
delayedMessage.obj = newMsgObj; delayedMessage.obj = newMsgObj;
@ -1924,7 +1921,6 @@ public class MessagesController implements NotificationCenter.NotificationCenter
reqSend.media.mime_type = document.mime_type; reqSend.media.mime_type = document.mime_type;
reqSend.media.file_name = document.file_name; reqSend.media.file_name = document.file_name;
DelayedMessage delayedMessage = new DelayedMessage(); DelayedMessage delayedMessage = new DelayedMessage();
delayedMessage.originalPath = originalPath;
delayedMessage.sendRequest = reqSend; delayedMessage.sendRequest = reqSend;
delayedMessage.type = 2; delayedMessage.type = 2;
delayedMessage.obj = newMsgObj; delayedMessage.obj = newMsgObj;
@ -1935,7 +1931,6 @@ public class MessagesController implements NotificationCenter.NotificationCenter
reqSend.media = new TLRPC.TL_inputMediaUploadedAudio(); reqSend.media = new TLRPC.TL_inputMediaUploadedAudio();
reqSend.media.duration = audio.duration; reqSend.media.duration = audio.duration;
DelayedMessage delayedMessage = new DelayedMessage(); DelayedMessage delayedMessage = new DelayedMessage();
delayedMessage.originalPath = originalPath;
delayedMessage.sendRequest = reqSend; delayedMessage.sendRequest = reqSend;
delayedMessage.type = 3; delayedMessage.type = 3;
delayedMessage.obj = newMsgObj; delayedMessage.obj = newMsgObj;
@ -1965,7 +1960,6 @@ public class MessagesController implements NotificationCenter.NotificationCenter
reqSend.media.size = big.size; reqSend.media.size = big.size;
DelayedMessage delayedMessage = new DelayedMessage(); DelayedMessage delayedMessage = new DelayedMessage();
delayedMessage.originalPath = originalPath;
delayedMessage.sendEncryptedRequest = reqSend; delayedMessage.sendEncryptedRequest = reqSend;
delayedMessage.type = 0; delayedMessage.type = 0;
delayedMessage.obj = newMsgObj; delayedMessage.obj = newMsgObj;
@ -1983,7 +1977,6 @@ public class MessagesController implements NotificationCenter.NotificationCenter
reqSend.media.thumb_w = video.thumb.w; reqSend.media.thumb_w = video.thumb.w;
DelayedMessage delayedMessage = new DelayedMessage(); DelayedMessage delayedMessage = new DelayedMessage();
delayedMessage.originalPath = originalPath;
delayedMessage.sendEncryptedRequest = reqSend; delayedMessage.sendEncryptedRequest = reqSend;
delayedMessage.type = 1; delayedMessage.type = 1;
delayedMessage.obj = newMsgObj; delayedMessage.obj = newMsgObj;
@ -2015,7 +2008,6 @@ public class MessagesController implements NotificationCenter.NotificationCenter
reqSend.media.mime_type = document.mime_type; reqSend.media.mime_type = document.mime_type;
DelayedMessage delayedMessage = new DelayedMessage(); DelayedMessage delayedMessage = new DelayedMessage();
delayedMessage.originalPath = originalPath;
delayedMessage.sendEncryptedRequest = reqSend; delayedMessage.sendEncryptedRequest = reqSend;
delayedMessage.type = 2; delayedMessage.type = 2;
delayedMessage.obj = newMsgObj; delayedMessage.obj = newMsgObj;
@ -2028,7 +2020,6 @@ public class MessagesController implements NotificationCenter.NotificationCenter
reqSend.media.size = audio.size; reqSend.media.size = audio.size;
DelayedMessage delayedMessage = new DelayedMessage(); DelayedMessage delayedMessage = new DelayedMessage();
delayedMessage.originalPath = originalPath;
delayedMessage.sendEncryptedRequest = reqSend; delayedMessage.sendEncryptedRequest = reqSend;
delayedMessage.type = 3; delayedMessage.type = 3;
delayedMessage.obj = newMsgObj; delayedMessage.obj = newMsgObj;
@ -2463,23 +2454,23 @@ public class MessagesController implements NotificationCenter.NotificationCenter
String location = Utilities.getCacheDir() + "/" + message.location.volume_id + "_" + message.location.local_id + ".jpg"; String location = Utilities.getCacheDir() + "/" + message.location.volume_id + "_" + message.location.local_id + ".jpg";
putToDelayedMessages(location, message); putToDelayedMessages(location, message);
if (message.sendRequest != null) { if (message.sendRequest != null) {
FileLoader.getInstance().uploadFile(location, message.originalPath, false); FileLoader.getInstance().uploadFile(location, false);
} else { } else {
FileLoader.getInstance().uploadFile(location, message.originalPath, true); FileLoader.getInstance().uploadFile(location, true);
} }
} else if (message.type == 1) { } else if (message.type == 1) {
if (message.sendRequest != null) { if (message.sendRequest != null) {
if (message.sendRequest.media.thumb == null) { if (message.sendRequest.media.thumb == null) {
String location = Utilities.getCacheDir() + "/" + message.location.volume_id + "_" + message.location.local_id + ".jpg"; String location = Utilities.getCacheDir() + "/" + message.location.volume_id + "_" + message.location.local_id + ".jpg";
putToDelayedMessages(location, message); putToDelayedMessages(location, message);
FileLoader.getInstance().uploadFile(location, message.originalPath + "thumb", false); FileLoader.getInstance().uploadFile(location, false);
} else { } else {
String location = message.videoLocation.path; String location = message.videoLocation.path;
if (location == null) { if (location == null) {
location = Utilities.getCacheDir() + "/" + message.videoLocation.id + ".mp4"; location = Utilities.getCacheDir() + "/" + message.videoLocation.id + ".mp4";
} }
putToDelayedMessages(location, message); putToDelayedMessages(location, message);
FileLoader.getInstance().uploadFile(location, message.originalPath, false); FileLoader.getInstance().uploadFile(location, false);
} }
} else { } else {
String location = message.videoLocation.path; String location = message.videoLocation.path;
@ -2487,29 +2478,29 @@ public class MessagesController implements NotificationCenter.NotificationCenter
location = Utilities.getCacheDir() + "/" + message.videoLocation.id + ".mp4"; location = Utilities.getCacheDir() + "/" + message.videoLocation.id + ".mp4";
} }
putToDelayedMessages(location, message); putToDelayedMessages(location, message);
FileLoader.getInstance().uploadFile(location, message.originalPath, true); FileLoader.getInstance().uploadFile(location, true);
} }
} else if (message.type == 2) { } else if (message.type == 2) {
if (message.sendRequest != null && message.sendRequest.media.thumb == null && message.location != null) { if (message.sendRequest != null && message.sendRequest.media.thumb == null && message.location != null) {
String location = Utilities.getCacheDir() + "/" + message.location.volume_id + "_" + message.location.local_id + ".jpg"; String location = Utilities.getCacheDir() + "/" + message.location.volume_id + "_" + message.location.local_id + ".jpg";
putToDelayedMessages(location, message); putToDelayedMessages(location, message);
FileLoader.getInstance().uploadFile(location, message.originalPath + "thumb", false); FileLoader.getInstance().uploadFile(location, false);
} else { } else {
String location = message.documentLocation.path; String location = message.documentLocation.path;
putToDelayedMessages(location, message); putToDelayedMessages(location, message);
if (message.sendRequest != null) { if (message.sendRequest != null) {
FileLoader.getInstance().uploadFile(location, message.originalPath, false); FileLoader.getInstance().uploadFile(location, false);
} else { } else {
FileLoader.getInstance().uploadFile(location, message.originalPath, true); FileLoader.getInstance().uploadFile(location, true);
} }
} }
} else if (message.type == 3) { } else if (message.type == 3) {
String location = message.audioLocation.path; String location = message.audioLocation.path;
putToDelayedMessages(location, message); putToDelayedMessages(location, message);
if (message.sendRequest != null) { if (message.sendRequest != null) {
FileLoader.getInstance().uploadFile(location, null, false); FileLoader.getInstance().uploadFile(location, false);
} else { } else {
FileLoader.getInstance().uploadFile(location, null, true); FileLoader.getInstance().uploadFile(location, true);
} }
} }
} }

View file

@ -97,8 +97,6 @@ public class MessagesStorage {
database.executeFast("CREATE TABLE user_contacts_v6(uid INTEGER PRIMARY KEY, fname TEXT, sname TEXT)").stepThis().dispose(); database.executeFast("CREATE TABLE user_contacts_v6(uid INTEGER PRIMARY KEY, fname TEXT, sname TEXT)").stepThis().dispose();
database.executeFast("CREATE TABLE user_phones_v6(uid INTEGER, phone TEXT, sphone TEXT, deleted INTEGER, PRIMARY KEY (uid, phone))").stepThis().dispose(); database.executeFast("CREATE TABLE user_phones_v6(uid INTEGER, phone TEXT, sphone TEXT, deleted INTEGER, PRIMARY KEY (uid, phone))").stepThis().dispose();
database.executeFast("CREATE TABLE sent_files(uid TEXT PRIMARY KEY, data BLOB, key BLOB, iv BLOB)").stepThis().dispose();
database.executeFast("CREATE INDEX IF NOT EXISTS mid_idx_randoms ON randoms(mid);").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS mid_idx_randoms ON randoms(mid);").stepThis().dispose();
database.executeFast("CREATE INDEX IF NOT EXISTS sphone_deleted_idx_user_phones ON user_phones_v6(sphone, deleted);").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS sphone_deleted_idx_user_phones ON user_phones_v6(sphone, deleted);").stepThis().dispose();
@ -168,8 +166,6 @@ public class MessagesStorage {
database.executeFast("CREATE INDEX IF NOT EXISTS sphone_deleted_idx_user_phones ON user_phones_v6(sphone, deleted);").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS sphone_deleted_idx_user_phones ON user_phones_v6(sphone, deleted);").stepThis().dispose();
database.executeFast("CREATE INDEX IF NOT EXISTS mid_idx_randoms ON randoms(mid);").stepThis().dispose(); database.executeFast("CREATE INDEX IF NOT EXISTS mid_idx_randoms ON randoms(mid);").stepThis().dispose();
database.executeFast("CREATE TABLE IF NOT EXISTS sent_files(uid TEXT PRIMARY KEY, data BLOB, key BLOB, iv BLOB)").stepThis().dispose();
} }
} catch (Exception e) { } catch (Exception e) {
FileLog.e("tmessages", e); FileLog.e("tmessages", e);
@ -1500,80 +1496,6 @@ public class MessagesStorage {
}); });
} }
public void getSentFile(final String path, final Semaphore semaphore, final ArrayList<TLObject> result) {
if (path == null || semaphore == null || result == null) {
return;
}
storageQueue.postRunnable(new Runnable() {
@Override
public void run() {
try {
String id = Utilities.MD5(path);
if (id != null) {
SQLiteCursor cursor = database.queryFinalized("SELECT data, key, iv FROM sent_files WHERE uid = '" + id + "'");
if (cursor.next()) {
byte[] fileData = cursor.byteArrayValue(0);
if (fileData != null) {
SerializedData data = new SerializedData(fileData);
TLObject file = TLClassStore.Instance().TLdeserialize(data, data.readInt32());
if (file instanceof TLRPC.InputEncryptedFile) {
TLRPC.InputEncryptedFile encFile = (TLRPC.InputEncryptedFile)file;
encFile.key = cursor.byteArrayValue(1);
encFile.iv = cursor.byteArrayValue(2);
if (encFile.key != null && encFile.iv != null) {
result.add(file);
}
} else if (file instanceof TLRPC.InputFile) {
result.add(file);
}
}
}
cursor.dispose();
}
} catch (Exception e) {
FileLog.e("tmessages", e);
} finally {
semaphore.release();
}
}
});
}
public void putSentFile(final String path, final TLObject file, final byte[] key, final byte[] iv) {
if (path == null || file == null) {
return;
}
storageQueue.postRunnable(new Runnable() {
@Override
public void run() {
try {
String id = Utilities.MD5(path);
if (id != null) {
SQLitePreparedStatement state = null;
if (key != null && iv != null) {
state = database.executeFast("REPLACE INTO sent_files VALUES(?, ?, ?, ?)");
} else {
state = database.executeFast("REPLACE INTO sent_files VALUES(?, ?, NULL, NULL)");
}
state.requery();
SerializedData data = new SerializedData();
file.serializeToStream(data);
state.bindString(1, id);
state.bindByteArray(2, data.toByteArray());
if (key != null && iv != null) {
state.bindByteArray(3, key);
state.bindByteArray(4, iv);
}
state.step();
state.dispose();
}
} catch (Exception e) {
FileLog.e("tmessages", e);
}
}
});
}
public void getEncryptedChat(final int chat_id, final Semaphore semaphore, final ArrayList<TLObject> result) { public void getEncryptedChat(final int chat_id, final Semaphore semaphore, final ArrayList<TLObject> result) {
if (semaphore == null || result == null) { if (semaphore == null || result == null) {
return; return;

View file

@ -129,7 +129,7 @@ public class AvatarUpdater implements NotificationCenter.NotificationCenterDeleg
uploadingAvatar = Utilities.getCacheDir() + "/" + bigPhoto.location.volume_id + "_" + bigPhoto.location.local_id + ".jpg"; uploadingAvatar = Utilities.getCacheDir() + "/" + bigPhoto.location.volume_id + "_" + bigPhoto.location.local_id + ".jpg";
NotificationCenter.getInstance().addObserver(AvatarUpdater.this, FileLoader.FileDidUpload); NotificationCenter.getInstance().addObserver(AvatarUpdater.this, FileLoader.FileDidUpload);
NotificationCenter.getInstance().addObserver(AvatarUpdater.this, FileLoader.FileDidFailUpload); NotificationCenter.getInstance().addObserver(AvatarUpdater.this, FileLoader.FileDidFailUpload);
FileLoader.getInstance().uploadFile(uploadingAvatar, null, false); FileLoader.getInstance().uploadFile(uploadingAvatar, false);
} }
} }
} }