Download/upload cancel draft
This commit is contained in:
parent
8e97680c4f
commit
b65b932dbf
@ -791,7 +791,7 @@ angular.module('myApp.directives', ['myApp.filters'])
|
||||
</div>\
|
||||
<div class="video_full_error_wrap" ng-if="error">\
|
||||
<div class="video_full_error" ng-if="error.html" ng-bind-html="error.html"></div>\
|
||||
<div class="video_full_error" ng-if="error.text">{{error.text}}</div>\
|
||||
<div class="video_full_error" ng-if="error.text" ng-bind="error.text"></div>\
|
||||
</div>\
|
||||
</div>',
|
||||
scope: {
|
||||
@ -819,7 +819,7 @@ angular.module('myApp.directives', ['myApp.filters'])
|
||||
}
|
||||
}
|
||||
|
||||
MtpApiFileManager.downloadFile($scope.video.dc_id, inputLocation, $scope.video.size, null, {mime: 'video/mp4'}).then(function (url) {
|
||||
var promise = MtpApiFileManager.downloadFile($scope.video.dc_id, inputLocation, $scope.video.size, null, {mime: 'video/mp4'}).then(function (url) {
|
||||
$scope.progress.enabled = false;
|
||||
// $scope.progress = {enabled: true, percent: 50};
|
||||
$scope.player.hasQuicktime = hasQt;
|
||||
@ -839,6 +839,10 @@ angular.module('myApp.directives', ['myApp.filters'])
|
||||
}, function (progress) {
|
||||
$scope.progress.percent = Math.max(1, Math.floor(100 * progress.done / progress.total));
|
||||
});
|
||||
|
||||
$scope.$on('$destroy', function () {
|
||||
promise.cancel();
|
||||
});
|
||||
}
|
||||
|
||||
})
|
||||
|
@ -2927,6 +2927,8 @@ factory('MtpApiFileManager', function (MtpApiManager, $q, $window) {
|
||||
}
|
||||
|
||||
var deferred = $q.defer(),
|
||||
canceled = false,
|
||||
resolved = false,
|
||||
cacheFileWriter,
|
||||
errorHandler = function (error) {
|
||||
console.error(error);
|
||||
@ -2948,7 +2950,10 @@ factory('MtpApiFileManager', function (MtpApiManager, $q, $window) {
|
||||
writeFileDeferred = $q.defer();
|
||||
(function (isFinal, offset, writeFileDeferred, writeFilePromise) {
|
||||
return downloadRequest(dcID, function () {
|
||||
// console.log('next big promise');
|
||||
// console.log('next big promise');
|
||||
if (canceled) {
|
||||
return $q.when();
|
||||
}
|
||||
return MtpApiManager.invokeApi('upload.getFile', {
|
||||
location: location,
|
||||
offset: offset,
|
||||
@ -2964,6 +2969,9 @@ factory('MtpApiFileManager', function (MtpApiManager, $q, $window) {
|
||||
// console.log('waiting for file promise', offset);
|
||||
writeFilePromise.then(function () {
|
||||
// console.log('resolved file promise', offset);
|
||||
if (canceled) {
|
||||
return $q.when();
|
||||
}
|
||||
|
||||
return fileWriteBytes(fileWriter, result.bytes).then(function () {
|
||||
|
||||
@ -2974,6 +2982,7 @@ factory('MtpApiFileManager', function (MtpApiManager, $q, $window) {
|
||||
|
||||
if (isFinal) {
|
||||
// console.timeEnd(fileName + ' ' + (size / 1024));
|
||||
resolved = true;
|
||||
deferred.resolve(cachedDownloads[fileName] = fileEntry.toURL(options.mime || 'image/jpeg'));
|
||||
} else {
|
||||
// console.log('notify', {done: offset + limit, total: size});
|
||||
@ -3003,6 +3012,7 @@ factory('MtpApiFileManager', function (MtpApiManager, $q, $window) {
|
||||
fileEntry.file(function(file) {
|
||||
// console.log(dT(), 'Check size', file.size, size);
|
||||
if (file.size >= size/* && false*/) {
|
||||
resolved = true;
|
||||
deferred.resolve(cachedDownloads[fileName] = fileEntry.toURL());
|
||||
} else {
|
||||
console.log('File bad size', file, size);
|
||||
@ -3022,6 +3032,9 @@ factory('MtpApiFileManager', function (MtpApiManager, $q, $window) {
|
||||
writeBlobDeferred = $q.defer();
|
||||
(function (isFinal, offset, writeBlobDeferred, writeBlobPromise) {
|
||||
return downloadRequest(dcID, function () {
|
||||
if (canceled) {
|
||||
return $q.when();
|
||||
}
|
||||
return MtpApiManager.invokeApi('upload.getFile', {
|
||||
location: location,
|
||||
offset: offset,
|
||||
@ -3033,6 +3046,9 @@ factory('MtpApiFileManager', function (MtpApiManager, $q, $window) {
|
||||
});
|
||||
}, 6).then(function (result) {
|
||||
writeBlobPromise.then(function () {
|
||||
if (canceled) {
|
||||
return $q.when();
|
||||
}
|
||||
try {
|
||||
blobParts.push(bytesToArrayBuffer(result.bytes));
|
||||
writeBlobDeferred.resolve();
|
||||
@ -3049,8 +3065,8 @@ factory('MtpApiFileManager', function (MtpApiManager, $q, $window) {
|
||||
var blob = bb.getBlob(options.mime || 'image/jpeg');
|
||||
}
|
||||
|
||||
|
||||
window.URL = window.URL || window.webkitURL;
|
||||
resolved = true;
|
||||
deferred.resolve(cachedDownloads[fileName] = URL.createObjectURL(blob));
|
||||
} else {
|
||||
deferred.notify({done: offset + limit, total: size});
|
||||
@ -3071,6 +3087,14 @@ factory('MtpApiFileManager', function (MtpApiManager, $q, $window) {
|
||||
});
|
||||
}
|
||||
|
||||
deferred.promise.cancel = function () {
|
||||
if (!canceled && !resolved) {
|
||||
canceled = true;
|
||||
delete cachedDownloadPromises[fileName];
|
||||
errorHandler({type: 'DOWNLOAD_CANCELED'});
|
||||
}
|
||||
}
|
||||
|
||||
return cachedDownloadPromises[fileName] = deferred.promise;
|
||||
}
|
||||
|
||||
@ -3106,8 +3130,11 @@ factory('MtpApiFileManager', function (MtpApiManager, $q, $window) {
|
||||
function uploadFile (file) {
|
||||
var fileSize = file.size,
|
||||
// partSize = fileSize > 102400 ? 65536 : 4096,
|
||||
partSize = fileSize > 102400 ? 524288 : 4096,
|
||||
// partSize = fileSize > 102400 ? 524288 : 4096,
|
||||
partSize = fileSize > 102400 ? 524288 : 30720,
|
||||
totalParts = Math.ceil(fileSize / partSize),
|
||||
canceled = false,
|
||||
resolved = false,
|
||||
doneParts = 0;
|
||||
|
||||
if (totalParts > 1500) {
|
||||
@ -3143,7 +3170,7 @@ factory('MtpApiFileManager', function (MtpApiManager, $q, $window) {
|
||||
var blob = file.slice(offset, offset + partSize);
|
||||
|
||||
reader.onloadend = function (e) {
|
||||
if (e.target.readyState != FileReader.DONE) {
|
||||
if (canceled || e.target.readyState != FileReader.DONE) {
|
||||
return;
|
||||
}
|
||||
var apiCurPromise = apiUploadPromise = apiUploadPromise.then(function () {
|
||||
@ -3162,6 +3189,7 @@ factory('MtpApiFileManager', function (MtpApiManager, $q, $window) {
|
||||
fileReadDeferred.resolve();
|
||||
if (doneParts >= totalParts) {
|
||||
deferred.resolve(resultInputFile);
|
||||
resolved = true;
|
||||
} else {
|
||||
console.log(dT(), 'Progress', doneParts * partSize / fileSize);
|
||||
deferred.notify({done: doneParts * partSize, total: fileSize});
|
||||
@ -3176,6 +3204,13 @@ factory('MtpApiFileManager', function (MtpApiManager, $q, $window) {
|
||||
})(offset, part++);
|
||||
}
|
||||
|
||||
deferred.promise.cancel = function () {
|
||||
if (!canceled && !resolved) {
|
||||
canceled = true;
|
||||
errorHandler({type: 'UPLOAD_CANCELED'});
|
||||
}
|
||||
}
|
||||
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
|
@ -1214,7 +1214,9 @@ angular.module('myApp.services', [])
|
||||
}
|
||||
|
||||
message.send = function () {
|
||||
MtpApiFileManager.uploadFile(file).then(function (inputFile) {
|
||||
var uploaded = false;
|
||||
var promise = MtpApiFileManager.uploadFile(file).then(function (inputFile) {
|
||||
uploaded = true;
|
||||
var inputMedia;
|
||||
switch (attachType) {
|
||||
case 'photo':
|
||||
@ -1274,6 +1276,13 @@ angular.module('myApp.services', [])
|
||||
$rootScope.$broadcast('history_update', {peerID: peerID});
|
||||
}
|
||||
});
|
||||
|
||||
media.progress.cancel = function () {
|
||||
if (!uploaded) {
|
||||
promise.cancel();
|
||||
cancelPendingMessage(randomID);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
saveMessages([message]);
|
||||
@ -1395,6 +1404,36 @@ angular.module('myApp.services', [])
|
||||
});
|
||||
};
|
||||
|
||||
function cancelPendingMessage (randomID) {
|
||||
var pendingData = pendingByRandomID[randomID];
|
||||
|
||||
if (pendingData) {
|
||||
var peerID = pendingData[0],
|
||||
tempID = pendingData[1],
|
||||
historyStorage = historiesStorage[peerID],
|
||||
i;
|
||||
|
||||
for (i = 0; i < historyStorage.pending.length; i++) {
|
||||
if (historyStorage.pending[i] == tempID) {
|
||||
historyStorage.pending.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
delete messagesForHistory[tempID];
|
||||
delete messagesStorage[tempID];
|
||||
|
||||
ApiUpdatesManager.saveUpdate({
|
||||
_: 'updateDeleteMessages',
|
||||
messages: [tempID]
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function finalizePendingMessage(randomID, finalMessage) {
|
||||
var pendingData = pendingByRandomID[randomID];
|
||||
// console.log('pdata', randomID, pendingData);
|
||||
@ -1494,6 +1533,10 @@ angular.module('myApp.services', [])
|
||||
|
||||
var message = angular.copy(messagesStorage[msgID]) || {id: msgID};
|
||||
|
||||
if (message.progress) {
|
||||
message.progress = messagesStorage[msgID].progress;
|
||||
}
|
||||
|
||||
message.fromUser = AppUsersManager.getUser(message.from_id);
|
||||
message.fromPhoto = AppUsersManager.getUserPhoto(message.from_id, 'User');
|
||||
|
||||
|
@ -221,6 +221,7 @@
|
||||
<span class="im_message_document_name" bo-bind="historyMessage.media.file_name"></span>
|
||||
<span class="im_message_document_size" ng-if="historyMessage.media.progress" ng-bind="historyMessage.media.progress | formatSizeProgress"></span>
|
||||
</div>
|
||||
<!-- <a href="" class="pull-right" ng-click="historyMessage.media.progress.cancel()">Cancel</a> -->
|
||||
<div class="im_message_download_progress_wrap">
|
||||
<div class="progress tg_down_progress">
|
||||
<div class="progress-bar progress-bar-success" role="progressbar" ng-style="{width: historyMessage.media.progress.percent + '%'}"></div>
|
||||
|
Loading…
x
Reference in New Issue
Block a user