Replace all trivial Promise.defer usages with regular Promises
This commit is contained in:
parent
cc9ef57f0e
commit
44401d73b4
5 changed files with 122 additions and 138 deletions
|
@ -59,8 +59,7 @@ export class UploadCanceledError extends Error {}
|
||||||
* and a thumbnail key.
|
* and a thumbnail key.
|
||||||
*/
|
*/
|
||||||
function createThumbnail(element, inputWidth, inputHeight, mimeType) {
|
function createThumbnail(element, inputWidth, inputHeight, mimeType) {
|
||||||
const deferred = Promise.defer();
|
return new Promise((resolve) => {
|
||||||
|
|
||||||
let targetWidth = inputWidth;
|
let targetWidth = inputWidth;
|
||||||
let targetHeight = inputHeight;
|
let targetHeight = inputHeight;
|
||||||
if (targetHeight > MAX_HEIGHT) {
|
if (targetHeight > MAX_HEIGHT) {
|
||||||
|
@ -77,7 +76,7 @@ function createThumbnail(element, inputWidth, inputHeight, mimeType) {
|
||||||
canvas.height = targetHeight;
|
canvas.height = targetHeight;
|
||||||
canvas.getContext("2d").drawImage(element, 0, 0, targetWidth, targetHeight);
|
canvas.getContext("2d").drawImage(element, 0, 0, targetWidth, targetHeight);
|
||||||
canvas.toBlob(function(thumbnail) {
|
canvas.toBlob(function(thumbnail) {
|
||||||
deferred.resolve({
|
resolve({
|
||||||
info: {
|
info: {
|
||||||
thumbnail_info: {
|
thumbnail_info: {
|
||||||
w: targetWidth,
|
w: targetWidth,
|
||||||
|
@ -91,8 +90,7 @@ function createThumbnail(element, inputWidth, inputHeight, mimeType) {
|
||||||
thumbnail: thumbnail,
|
thumbnail: thumbnail,
|
||||||
});
|
});
|
||||||
}, mimeType);
|
}, mimeType);
|
||||||
|
});
|
||||||
return deferred.promise;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -179,30 +177,29 @@ function infoForImageFile(matrixClient, roomId, imageFile) {
|
||||||
* @return {Promise} A promise that resolves with the video image element.
|
* @return {Promise} A promise that resolves with the video image element.
|
||||||
*/
|
*/
|
||||||
function loadVideoElement(videoFile) {
|
function loadVideoElement(videoFile) {
|
||||||
const deferred = Promise.defer();
|
return new Promise((resolve, reject) => {
|
||||||
|
|
||||||
// Load the file into an html element
|
// Load the file into an html element
|
||||||
const video = document.createElement("video");
|
const video = document.createElement("video");
|
||||||
|
|
||||||
const reader = new FileReader();
|
const reader = new FileReader();
|
||||||
|
|
||||||
reader.onload = function(e) {
|
reader.onload = function(e) {
|
||||||
video.src = e.target.result;
|
video.src = e.target.result;
|
||||||
|
|
||||||
// Once ready, returns its size
|
// Once ready, returns its size
|
||||||
// Wait until we have enough data to thumbnail the first frame.
|
// Wait until we have enough data to thumbnail the first frame.
|
||||||
video.onloadeddata = function() {
|
video.onloadeddata = function() {
|
||||||
deferred.resolve(video);
|
resolve(video);
|
||||||
};
|
};
|
||||||
video.onerror = function(e) {
|
video.onerror = function(e) {
|
||||||
deferred.reject(e);
|
reject(e);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
reader.onerror = function(e) {
|
reader.onerror = function(e) {
|
||||||
deferred.reject(e);
|
reject(e);
|
||||||
};
|
};
|
||||||
reader.readAsDataURL(videoFile);
|
reader.readAsDataURL(videoFile);
|
||||||
|
});
|
||||||
return deferred.promise;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -236,16 +233,16 @@ function infoForVideoFile(matrixClient, roomId, videoFile) {
|
||||||
* is read.
|
* is read.
|
||||||
*/
|
*/
|
||||||
function readFileAsArrayBuffer(file) {
|
function readFileAsArrayBuffer(file) {
|
||||||
const deferred = Promise.defer();
|
return new Promise((resolve, reject) => {
|
||||||
const reader = new FileReader();
|
const reader = new FileReader();
|
||||||
reader.onload = function(e) {
|
reader.onload = function(e) {
|
||||||
deferred.resolve(e.target.result);
|
resolve(e.target.result);
|
||||||
};
|
};
|
||||||
reader.onerror = function(e) {
|
reader.onerror = function(e) {
|
||||||
deferred.reject(e);
|
reject(e);
|
||||||
};
|
};
|
||||||
reader.readAsArrayBuffer(file);
|
reader.readAsArrayBuffer(file);
|
||||||
return deferred.promise;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -461,33 +458,34 @@ export default class ContentMessages {
|
||||||
content.info.mimetype = file.type;
|
content.info.mimetype = file.type;
|
||||||
}
|
}
|
||||||
|
|
||||||
const def = Promise.defer();
|
const prom = new Promise((resolve) => {
|
||||||
if (file.type.indexOf('image/') == 0) {
|
if (file.type.indexOf('image/') == 0) {
|
||||||
content.msgtype = 'm.image';
|
content.msgtype = 'm.image';
|
||||||
infoForImageFile(matrixClient, roomId, file).then((imageInfo)=>{
|
infoForImageFile(matrixClient, roomId, file).then((imageInfo)=>{
|
||||||
extend(content.info, imageInfo);
|
extend(content.info, imageInfo);
|
||||||
def.resolve();
|
resolve();
|
||||||
}, (error)=>{
|
}, (error)=>{
|
||||||
console.error(error);
|
console.error(error);
|
||||||
content.msgtype = 'm.file';
|
content.msgtype = 'm.file';
|
||||||
def.resolve();
|
resolve();
|
||||||
});
|
});
|
||||||
} else if (file.type.indexOf('audio/') == 0) {
|
} else if (file.type.indexOf('audio/') == 0) {
|
||||||
content.msgtype = 'm.audio';
|
content.msgtype = 'm.audio';
|
||||||
def.resolve();
|
resolve();
|
||||||
} else if (file.type.indexOf('video/') == 0) {
|
} else if (file.type.indexOf('video/') == 0) {
|
||||||
content.msgtype = 'm.video';
|
content.msgtype = 'm.video';
|
||||||
infoForVideoFile(matrixClient, roomId, file).then((videoInfo)=>{
|
infoForVideoFile(matrixClient, roomId, file).then((videoInfo)=>{
|
||||||
extend(content.info, videoInfo);
|
extend(content.info, videoInfo);
|
||||||
def.resolve();
|
resolve();
|
||||||
}, (error)=>{
|
}, (error)=>{
|
||||||
content.msgtype = 'm.file';
|
content.msgtype = 'm.file';
|
||||||
def.resolve();
|
resolve();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
content.msgtype = 'm.file';
|
content.msgtype = 'm.file';
|
||||||
def.resolve();
|
resolve();
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const upload = {
|
const upload = {
|
||||||
fileName: file.name || 'Attachment',
|
fileName: file.name || 'Attachment',
|
||||||
|
@ -509,7 +507,7 @@ export default class ContentMessages {
|
||||||
dis.dispatch({action: 'upload_progress', upload: upload});
|
dis.dispatch({action: 'upload_progress', upload: upload});
|
||||||
}
|
}
|
||||||
|
|
||||||
return def.promise.then(function() {
|
return prom.then(function() {
|
||||||
// XXX: upload.promise must be the promise that
|
// XXX: upload.promise must be the promise that
|
||||||
// is returned by uploadFile as it has an abort()
|
// is returned by uploadFile as it has an abort()
|
||||||
// method hacked onto it.
|
// method hacked onto it.
|
||||||
|
|
|
@ -312,18 +312,14 @@ async function _restoreFromLocalStorage(opts) {
|
||||||
function _handleLoadSessionFailure(e) {
|
function _handleLoadSessionFailure(e) {
|
||||||
console.error("Unable to load session", e);
|
console.error("Unable to load session", e);
|
||||||
|
|
||||||
const def = Promise.defer();
|
|
||||||
const SessionRestoreErrorDialog =
|
const SessionRestoreErrorDialog =
|
||||||
sdk.getComponent('views.dialogs.SessionRestoreErrorDialog');
|
sdk.getComponent('views.dialogs.SessionRestoreErrorDialog');
|
||||||
|
|
||||||
Modal.createTrackedDialog('Session Restore Error', '', SessionRestoreErrorDialog, {
|
const modal = Modal.createTrackedDialog('Session Restore Error', '', SessionRestoreErrorDialog, {
|
||||||
error: e.message,
|
error: e.message,
|
||||||
onFinished: (success) => {
|
|
||||||
def.resolve(success);
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return def.promise.then((success) => {
|
return modal.finished.then(([success]) => {
|
||||||
if (success) {
|
if (success) {
|
||||||
// user clicked continue.
|
// user clicked continue.
|
||||||
_clearStorage();
|
_clearStorage();
|
||||||
|
|
|
@ -26,6 +26,7 @@ import { Room } from 'matrix-js-sdk';
|
||||||
|
|
||||||
import SettingsStore from "../../../settings/SettingsStore";
|
import SettingsStore from "../../../settings/SettingsStore";
|
||||||
import Autocompleter from '../../../autocomplete/Autocompleter';
|
import Autocompleter from '../../../autocomplete/Autocompleter';
|
||||||
|
import {sleep} from "../../../utils/promise";
|
||||||
|
|
||||||
const COMPOSER_SELECTED = 0;
|
const COMPOSER_SELECTED = 0;
|
||||||
|
|
||||||
|
@ -105,13 +106,11 @@ export default class Autocomplete extends React.Component {
|
||||||
autocompleteDelay = 0;
|
autocompleteDelay = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const deferred = Promise.defer();
|
return new Promise((resolve) => {
|
||||||
this.debounceCompletionsRequest = setTimeout(() => {
|
this.debounceCompletionsRequest = setTimeout(() => {
|
||||||
this.processQuery(query, selection).then(() => {
|
resolve(this.processQuery(query, selection));
|
||||||
deferred.resolve();
|
|
||||||
});
|
|
||||||
}, autocompleteDelay);
|
}, autocompleteDelay);
|
||||||
return deferred.promise;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
processQuery(query, selection) {
|
processQuery(query, selection) {
|
||||||
|
@ -197,16 +196,16 @@ export default class Autocomplete extends React.Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
forceComplete() {
|
forceComplete() {
|
||||||
const done = Promise.defer();
|
return new Promise((resolve) => {
|
||||||
this.setState({
|
this.setState({
|
||||||
forceComplete: true,
|
forceComplete: true,
|
||||||
hide: false,
|
hide: false,
|
||||||
}, () => {
|
}, () => {
|
||||||
this.complete(this.props.query, this.props.selection).then(() => {
|
this.complete(this.props.query, this.props.selection).then(() => {
|
||||||
done.resolve(this.countCompletions());
|
resolve(this.countCompletions());
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
return done.promise;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onCompletionClicked(selectionOffset: number): boolean {
|
onCompletionClicked(selectionOffset: number): boolean {
|
||||||
|
|
|
@ -178,17 +178,12 @@ module.exports = createReactClass({
|
||||||
},
|
},
|
||||||
|
|
||||||
_optionallySetEmail: function() {
|
_optionallySetEmail: function() {
|
||||||
const deferred = Promise.defer();
|
|
||||||
// Ask for an email otherwise the user has no way to reset their password
|
// Ask for an email otherwise the user has no way to reset their password
|
||||||
const SetEmailDialog = sdk.getComponent("dialogs.SetEmailDialog");
|
const SetEmailDialog = sdk.getComponent("dialogs.SetEmailDialog");
|
||||||
Modal.createTrackedDialog('Do you want to set an email address?', '', SetEmailDialog, {
|
const modal = Modal.createTrackedDialog('Do you want to set an email address?', '', SetEmailDialog, {
|
||||||
title: _t('Do you want to set an email address?'),
|
title: _t('Do you want to set an email address?'),
|
||||||
onFinished: (confirmed) => {
|
|
||||||
// ignore confirmed, setting an email is optional
|
|
||||||
deferred.resolve(confirmed);
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
return deferred.promise;
|
return modal.finished.then(([confirmed]) => confirmed);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onExportE2eKeysClicked: function() {
|
_onExportE2eKeysClicked: function() {
|
||||||
|
|
|
@ -105,8 +105,7 @@ export default async function sendBugReport(bugReportEndpoint, opts) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function _submitReport(endpoint, body, progressCallback) {
|
function _submitReport(endpoint, body, progressCallback) {
|
||||||
const deferred = Promise.defer();
|
return new Promise((resolve, reject) => {
|
||||||
|
|
||||||
const req = new XMLHttpRequest();
|
const req = new XMLHttpRequest();
|
||||||
req.open("POST", endpoint);
|
req.open("POST", endpoint);
|
||||||
req.timeout = 5 * 60 * 1000;
|
req.timeout = 5 * 60 * 1000;
|
||||||
|
@ -114,17 +113,14 @@ function _submitReport(endpoint, body, progressCallback) {
|
||||||
if (req.readyState === XMLHttpRequest.LOADING) {
|
if (req.readyState === XMLHttpRequest.LOADING) {
|
||||||
progressCallback(_t("Waiting for response from server"));
|
progressCallback(_t("Waiting for response from server"));
|
||||||
} else if (req.readyState === XMLHttpRequest.DONE) {
|
} else if (req.readyState === XMLHttpRequest.DONE) {
|
||||||
on_done();
|
// on done
|
||||||
|
if (req.status < 200 || req.status >= 400) {
|
||||||
|
reject(new Error(`HTTP ${req.status}`));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
resolve();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
req.send(body);
|
req.send(body);
|
||||||
return deferred.promise;
|
});
|
||||||
|
|
||||||
function on_done() {
|
|
||||||
if (req.status < 200 || req.status >= 400) {
|
|
||||||
deferred.reject(new Error(`HTTP ${req.status}`));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
deferred.resolve();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue