Added other upload queue for small files

This commit is contained in:
DrKLO 2014-09-01 19:43:03 +04:00
parent b8ecf4e083
commit 8eea00b7b4
6 changed files with 107 additions and 45 deletions

View file

@ -80,7 +80,7 @@ android {
defaultConfig { defaultConfig {
minSdkVersion 8 minSdkVersion 8
targetSdkVersion 19 targetSdkVersion 19
versionCode 319 versionCode 320
versionName "1.8.0" versionName "1.8.0"
} }
} }

View file

@ -583,9 +583,10 @@ public class MediaController implements NotificationCenter.NotificationCenterDel
queue = documentDownloadQueue; queue = documentDownloadQueue;
} }
queue.addAll(objects); queue.addAll(objects);
for (DownloadObject downloadObject : queue) { for (int a = 0; a < queue.size(); a++) {
String path = FileLoader.getAttachFileName(downloadObject.object); DownloadObject downloadObject = queue.get(a);
downloadQueueKeys.put(path, downloadObject);
boolean added = true;
if (downloadObject.object instanceof TLRPC.Audio) { if (downloadObject.object instanceof TLRPC.Audio) {
FileLoader.getInstance().loadFile((TLRPC.Audio)downloadObject.object, false); FileLoader.getInstance().loadFile((TLRPC.Audio)downloadObject.object, false);
} else if (downloadObject.object instanceof TLRPC.PhotoSize) { } else if (downloadObject.object instanceof TLRPC.PhotoSize) {
@ -594,6 +595,15 @@ public class MediaController implements NotificationCenter.NotificationCenterDel
FileLoader.getInstance().loadFile((TLRPC.Video)downloadObject.object); FileLoader.getInstance().loadFile((TLRPC.Video)downloadObject.object);
} else if (downloadObject.object instanceof TLRPC.Document) { } else if (downloadObject.object instanceof TLRPC.Document) {
FileLoader.getInstance().loadFile((TLRPC.Document)downloadObject.object); FileLoader.getInstance().loadFile((TLRPC.Document)downloadObject.object);
} else {
added = false;
queue.remove(a);
a--;
}
if (added) {
String path = FileLoader.getAttachFileName(downloadObject.object);
downloadQueueKeys.put(path, downloadObject);
FileLog.e("tmessages", "download file " + path);
} }
} }
} }
@ -617,6 +627,7 @@ public class MediaController implements NotificationCenter.NotificationCenterDel
private void checkDownloadFinished(String fileName, boolean canceled) { private void checkDownloadFinished(String fileName, boolean canceled) {
DownloadObject downloadObject = downloadQueueKeys.get(fileName); DownloadObject downloadObject = downloadQueueKeys.get(fileName);
if (downloadObject != null) { if (downloadObject != null) {
FileLog.e("tmessages", "check download finished " + fileName + " canceled = " + canceled);
downloadQueueKeys.remove(fileName); downloadQueueKeys.remove(fileName);
if (!canceled) { if (!canceled) {
MessagesStorage.getInstance().removeFromDownloadQueue(downloadObject.id, downloadObject.type); MessagesStorage.getInstance().removeFromDownloadQueue(downloadObject.id, downloadObject.type);

View file

@ -909,7 +909,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 = AndroidUtilities.getCacheDir() + "/" + bigPhoto.location.volume_id + "_" + bigPhoto.location.local_id + ".jpg"; uploadingAvatar = AndroidUtilities.getCacheDir() + "/" + bigPhoto.location.volume_id + "_" + bigPhoto.location.local_id + ".jpg";
FileLoader.getInstance().uploadFile(uploadingAvatar, false); FileLoader.getInstance().uploadFile(uploadingAvatar, false, true);
} }
} }

View file

@ -766,9 +766,9 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
String location = AndroidUtilities.getCacheDir() + "/" + message.location.volume_id + "_" + message.location.local_id + ".jpg"; String location = AndroidUtilities.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, false); FileLoader.getInstance().uploadFile(location, false, true);
} else { } else {
FileLoader.getInstance().uploadFile(location, true); FileLoader.getInstance().uploadFile(location, true, true);
} }
} else if (message.type == 1) { } else if (message.type == 1) {
if (message.sendRequest != null) { if (message.sendRequest != null) {
@ -781,14 +781,14 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
if (media.thumb == null) { if (media.thumb == null) {
String location = AndroidUtilities.getCacheDir() + "/" + message.location.volume_id + "_" + message.location.local_id + ".jpg"; String location = AndroidUtilities.getCacheDir() + "/" + message.location.volume_id + "_" + message.location.local_id + ".jpg";
putToDelayedMessages(location, message); putToDelayedMessages(location, message);
FileLoader.getInstance().uploadFile(location, false); FileLoader.getInstance().uploadFile(location, false, true);
} else { } else {
String location = message.videoLocation.path; String location = message.videoLocation.path;
if (location == null) { if (location == null) {
location = AndroidUtilities.getCacheDir() + "/" + message.videoLocation.id + ".mp4"; location = AndroidUtilities.getCacheDir() + "/" + message.videoLocation.id + ".mp4";
} }
putToDelayedMessages(location, message); putToDelayedMessages(location, message);
FileLoader.getInstance().uploadFile(location, false); FileLoader.getInstance().uploadFile(location, false, false);
} }
} else { } else {
String location = message.videoLocation.path; String location = message.videoLocation.path;
@ -796,7 +796,7 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
location = AndroidUtilities.getCacheDir() + "/" + message.videoLocation.id + ".mp4"; location = AndroidUtilities.getCacheDir() + "/" + message.videoLocation.id + ".mp4";
} }
putToDelayedMessages(location, message); putToDelayedMessages(location, message);
FileLoader.getInstance().uploadFile(location, true); FileLoader.getInstance().uploadFile(location, true, false);
} }
} else if (message.type == 2) { } else if (message.type == 2) {
TLRPC.InputMedia media = null; TLRPC.InputMedia media = null;
@ -808,23 +808,23 @@ public class SendMessagesHelper implements NotificationCenter.NotificationCenter
if (message.sendRequest != null && media.thumb == null && message.location != null) { if (message.sendRequest != null && media.thumb == null && message.location != null) {
String location = AndroidUtilities.getCacheDir() + "/" + message.location.volume_id + "_" + message.location.local_id + ".jpg"; String location = AndroidUtilities.getCacheDir() + "/" + message.location.volume_id + "_" + message.location.local_id + ".jpg";
putToDelayedMessages(location, message); putToDelayedMessages(location, message);
FileLoader.getInstance().uploadFile(location, false); FileLoader.getInstance().uploadFile(location, false, true);
} 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, false); FileLoader.getInstance().uploadFile(location, false, false);
} else { } else {
FileLoader.getInstance().uploadFile(location, true); FileLoader.getInstance().uploadFile(location, true, false);
} }
} }
} 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, false); FileLoader.getInstance().uploadFile(location, false, true);
} else { } else {
FileLoader.getInstance().uploadFile(location, true); FileLoader.getInstance().uploadFile(location, true, true);
} }
} }
} }

View file

@ -29,6 +29,7 @@ public class FileLoader {
private volatile DispatchQueue fileLoaderQueue = new DispatchQueue("fileUploadQueue"); private volatile DispatchQueue fileLoaderQueue = new DispatchQueue("fileUploadQueue");
private LinkedList<FileUploadOperation> uploadOperationQueue = new LinkedList<FileUploadOperation>(); private LinkedList<FileUploadOperation> uploadOperationQueue = new LinkedList<FileUploadOperation>();
private LinkedList<FileUploadOperation> uploadSmallOperationQueue = new LinkedList<FileUploadOperation>();
private LinkedList<FileLoadOperation> loadOperationQueue = new LinkedList<FileLoadOperation>(); private LinkedList<FileLoadOperation> loadOperationQueue = new LinkedList<FileLoadOperation>();
private LinkedList<FileLoadOperation> audioLoadOperationQueue = new LinkedList<FileLoadOperation>(); private LinkedList<FileLoadOperation> audioLoadOperationQueue = new LinkedList<FileLoadOperation>();
private LinkedList<FileLoadOperation> photoLoadOperationQueue = new LinkedList<FileLoadOperation>(); private LinkedList<FileLoadOperation> photoLoadOperationQueue = new LinkedList<FileLoadOperation>();
@ -43,6 +44,7 @@ public class FileLoader {
private int currentAudioLoadOperationsCount = 0; private int currentAudioLoadOperationsCount = 0;
private int currentPhotoLoadOperationsCount = 0; private int currentPhotoLoadOperationsCount = 0;
private int currentUploadOperationsCount = 0; private int currentUploadOperationsCount = 0;
private int currentUploadSmallOperationsCount = 0;
private static volatile FileLoader Instance = null; private static volatile FileLoader Instance = null;
public static FileLoader getInstance() { public static FileLoader getInstance() {
@ -62,18 +64,16 @@ public class FileLoader {
fileLoaderQueue.postRunnable(new Runnable() { fileLoaderQueue.postRunnable(new Runnable() {
@Override @Override
public void run() { public void run() {
FileUploadOperation operation = null;
if (!enc) { if (!enc) {
FileUploadOperation operation = uploadOperationPaths.get(location); operation = uploadOperationPaths.get(location);
if (operation != null) {
uploadOperationQueue.remove(operation);
operation.cancel();
}
} else { } else {
FileUploadOperation operation = uploadOperationPathsEnc.get(location); operation = uploadOperationPathsEnc.get(location);
if (operation != null) { }
uploadOperationQueue.remove(operation); if (operation != null) {
operation.cancel(); uploadOperationQueue.remove(operation);
} uploadSmallOperationQueue.remove(operation);
operation.cancel();
} }
} }
}); });
@ -83,7 +83,7 @@ public class FileLoader {
return fileProgresses.get(location); return fileProgresses.get(location);
} }
public void uploadFile(final String location, final boolean encrypted) { public void uploadFile(final String location, final boolean encrypted, final boolean small) {
fileLoaderQueue.postRunnable(new Runnable() { fileLoaderQueue.postRunnable(new Runnable() {
@Override @Override
public void run() { public void run() {
@ -113,12 +113,23 @@ public class FileLoader {
} else { } else {
uploadOperationPaths.remove(location); uploadOperationPaths.remove(location);
} }
currentUploadOperationsCount--; if (small) {
if (currentUploadOperationsCount < 2) { currentUploadSmallOperationsCount--;
FileUploadOperation operation = uploadOperationQueue.poll(); if (currentUploadSmallOperationsCount < 2) {
if (operation != null) { FileUploadOperation operation = uploadSmallOperationQueue.poll();
currentUploadOperationsCount++; if (operation != null) {
operation.start(); currentUploadSmallOperationsCount++;
operation.start();
}
}
} else {
currentUploadOperationsCount--;
if (currentUploadOperationsCount < 2) {
FileUploadOperation operation = uploadOperationQueue.poll();
if (operation != null) {
currentUploadOperationsCount++;
operation.start();
}
} }
} }
if (delegate != null) { if (delegate != null) {
@ -153,12 +164,23 @@ public class FileLoader {
fileProgresses.remove(location); fileProgresses.remove(location);
} }
}); });
currentUploadOperationsCount--; if (small) {
if (currentUploadOperationsCount < 2) { currentUploadSmallOperationsCount--;
FileUploadOperation operation = uploadOperationQueue.poll(); if (currentUploadSmallOperationsCount < 2) {
if (operation != null) { FileUploadOperation operation = uploadSmallOperationQueue.poll();
currentUploadOperationsCount++; if (operation != null) {
operation.start(); currentUploadSmallOperationsCount++;
operation.start();
}
}
} else {
currentUploadOperationsCount--;
if (currentUploadOperationsCount < 2) {
FileUploadOperation operation = uploadOperationQueue.poll();
if (operation != null) {
currentUploadOperationsCount++;
operation.start();
}
} }
} }
} }
@ -175,11 +197,20 @@ public class FileLoader {
} }
} }
}; };
if (currentUploadOperationsCount < 2) { if (small) {
currentUploadOperationsCount++; if (currentUploadSmallOperationsCount < 2) {
operation.start(); currentUploadSmallOperationsCount++;
operation.start();
} else {
uploadSmallOperationQueue.add(operation);
}
} else { } else {
uploadOperationQueue.add(operation); if (currentUploadOperationsCount < 2) {
currentUploadOperationsCount++;
operation.start();
} else {
uploadOperationQueue.add(operation);
}
} }
} }
}); });
@ -296,10 +327,30 @@ public class FileLoader {
if (fileName == null || fileName.contains("" + Integer.MIN_VALUE)) { if (fileName == null || fileName.contains("" + Integer.MIN_VALUE)) {
return; return;
} }
if (loadOperationPaths.containsKey(fileName)) {
FileLoadOperation operation = null;
operation = loadOperationPaths.get(fileName);
if (operation != null) {
if (force) {
LinkedList<FileLoadOperation> downloadQueue = null;
if (audio != null) {
downloadQueue = audioLoadOperationQueue;
} else if (location != null) {
downloadQueue = photoLoadOperationQueue;
} else {
downloadQueue = loadOperationQueue;
}
if (downloadQueue != null) {
int index = downloadQueue.indexOf(operation);
if (index != -1) {
downloadQueue.remove(index);
downloadQueue.add(0, operation);
}
}
}
return; return;
} }
FileLoadOperation operation = null;
if (video != null) { if (video != null) {
operation = new FileLoadOperation(video); operation = new FileLoadOperation(video);
} else if (location != null) { } else if (location != null) {

View file

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