From 2b2c6bcf2ee42dba44c563d481d4f7cdb0e94a44 Mon Sep 17 00:00:00 2001 From: yflory Date: Thu, 19 Sep 2019 14:17:07 +0200 Subject: [PATCH] Handle multiple file uploaders on the same page --- www/common/sframe-common-file.js | 20 +++++++++++++------- www/common/sframe-common-outer.js | 7 ++++++- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/www/common/sframe-common-file.js b/www/common/sframe-common-file.js index 573182c7f..68793e690 100644 --- a/www/common/sframe-common-file.js +++ b/www/common/sframe-common-file.js @@ -32,6 +32,7 @@ define([ module.create = function (common, config) { var File = {}; var origin = common.getMetadataMgr().getPrivateData().origin; + var response = Util.response(); var teamId = config.teamId; // XXX Teams file upload as a team @@ -75,21 +76,25 @@ define([ var sframeChan = common.getSframeChannel(); var onError = $.noop, - onComplete = $.noop, updateProgress = $.noop, onPending = $.noop; sframeChan.on('EV_FILE_UPLOAD_STATE', function (data) { - if (data.error) { + if (data.error && response.expected(data.uid)) { + response.clear(data.uid); return void onError(data.error); } - if (data.complete && data.href) { - return void onComplete(data.href); + if (data.complete && data.href && data.uid) { + if (response.expected(data.uid)) { + response.handle(data.uid, [data.href]); + } + return; } - if (typeof data.progress !== "undefined") { + if (typeof data.progress !== "undefined" && response.expected(data.uid)) { return void updateProgress(data.progress); } }); sframeChan.on('Q_CANCEL_PENDING_FILE_UPLOAD', function (data, cb) { + if (!response.expected(data.uid)) { return; } onPending(cb); }); var upload = function (file) { @@ -121,7 +126,8 @@ define([ }); }; - onComplete = function (href) { + file.uid = Util.uid(); + response.expect(file.uid, function (href) { var mdMgr = common.getMetadataMgr(); var origin = mdMgr.getPrivateData().origin; $link.prepend($('', {'class': 'fa fa-external-link'})); @@ -143,7 +149,7 @@ define([ queue.inProgress = false; queue.next(); - }; + }); onError = function (e) { queue.inProgress = false; diff --git a/www/common/sframe-common-outer.js b/www/common/sframe-common-outer.js index 134534eff..52f6f017e 100644 --- a/www/common/sframe-common-outer.js +++ b/www/common/sframe-common-outer.js @@ -723,22 +723,27 @@ define([ }; var updateProgress = function (progressValue) { sendEvent({ + uid: data.uid, progress: progressValue }); }; var onComplete = function (href) { sendEvent({ complete: true, + uid: data.uid, href: href }); }; var onError = function (e) { sendEvent({ + uid: data.uid, error: e }); }; var onPending = function (cb) { - sframeChan.query('Q_CANCEL_PENDING_FILE_UPLOAD', null, function (err, data) { + sframeChan.query('Q_CANCEL_PENDING_FILE_UPLOAD', { + uid: data.uid + }, function (err, data) { if (data) { cb(); }