Docblock
This commit is contained in:
parent
35ddcb27f0
commit
2cd7839da3
2 changed files with 19 additions and 4 deletions
|
@ -44,6 +44,19 @@ class Api {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Publishes to a topic using XMLHttpRequest (XHR), and returns a Promise with the active request.
|
||||||
|
* Unfortunately, fetch() does not support a progress hook, which is why XHR has to be used.
|
||||||
|
*
|
||||||
|
* Firefox XHR bug:
|
||||||
|
* Firefox has a bug(?), which returns 0 and "" for all fields of the XHR response in the case of an error,
|
||||||
|
* so we cannot determine the exact error. It also sometimes complains about CORS violations, even when the
|
||||||
|
* correct headers are clearly set. It's quite the odd behavior.
|
||||||
|
*
|
||||||
|
* There is an example, and the bug report here:
|
||||||
|
* - https://bugzilla.mozilla.org/show_bug.cgi?id=1733755
|
||||||
|
* - https://gist.github.com/binwiederhier/627f146d1959799be207ad8c17a8f345
|
||||||
|
*/
|
||||||
publishXHR(baseUrl, topic, body, headers, onProgress) {
|
publishXHR(baseUrl, topic, body, headers, onProgress) {
|
||||||
const url = topicUrl(baseUrl, topic);
|
const url = topicUrl(baseUrl, topic);
|
||||||
const xhr = new XMLHttpRequest();
|
const xhr = new XMLHttpRequest();
|
||||||
|
@ -63,6 +76,7 @@ class Api {
|
||||||
console.log(`[Api] Publish successful (HTTP ${xhr.status})`, xhr.response);
|
console.log(`[Api] Publish successful (HTTP ${xhr.status})`, xhr.response);
|
||||||
resolve(xhr.response);
|
resolve(xhr.response);
|
||||||
} else if (xhr.readyState === 4) {
|
} else if (xhr.readyState === 4) {
|
||||||
|
// Firefox bug; see description above!
|
||||||
console.log(`[Api] Publish failed (HTTP ${xhr.status})`, xhr.responseText);
|
console.log(`[Api] Publish failed (HTTP ${xhr.status})`, xhr.responseText);
|
||||||
let errorText;
|
let errorText;
|
||||||
try {
|
try {
|
||||||
|
@ -109,7 +123,9 @@ class Api {
|
||||||
if (response.status !== 200) {
|
if (response.status !== 200) {
|
||||||
throw new Error(`Unexpected server response ${response.status}`);
|
throw new Error(`Unexpected server response ${response.status}`);
|
||||||
}
|
}
|
||||||
return response.json();
|
const stats = response.json();
|
||||||
|
console.log(`[Api] Stats`, stats);
|
||||||
|
return stats;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -147,17 +147,16 @@ const SendDialog = (props) => {
|
||||||
try {
|
try {
|
||||||
const { baseUrl } = splitTopicUrl(topicUrl);
|
const { baseUrl } = splitTopicUrl(topicUrl);
|
||||||
const stats = await api.userStats(baseUrl);
|
const stats = await api.userStats(baseUrl);
|
||||||
console.log(`[SendDialog] Visitor attachment limits`, stats);
|
|
||||||
const fileSizeLimit = stats.attachmentFileSizeLimit ?? 0;
|
const fileSizeLimit = stats.attachmentFileSizeLimit ?? 0;
|
||||||
const remainingBytes = stats.visitorAttachmentBytesRemaining ?? 0;
|
const remainingBytes = stats.visitorAttachmentBytesRemaining ?? 0;
|
||||||
const fileSizeLimitReached = fileSizeLimit > 0 && file.size > fileSizeLimit;
|
const fileSizeLimitReached = fileSizeLimit > 0 && file.size > fileSizeLimit;
|
||||||
const quotaReached = remainingBytes > 0 && file.size > remainingBytes;
|
const quotaReached = remainingBytes > 0 && file.size > remainingBytes;
|
||||||
if (fileSizeLimitReached && quotaReached) {
|
if (fileSizeLimitReached && quotaReached) {
|
||||||
return setAttachFileError(`exceeds ${formatBytes(fileSizeLimit)} file limit, and quota reached, ${formatBytes(remainingBytes)} remaining`);
|
return setAttachFileError(`exceeds ${formatBytes(fileSizeLimit)} file limit and quota, ${formatBytes(remainingBytes)} remaining`);
|
||||||
} else if (fileSizeLimitReached) {
|
} else if (fileSizeLimitReached) {
|
||||||
return setAttachFileError(`exceeds ${formatBytes(fileSizeLimit)} file limit`);
|
return setAttachFileError(`exceeds ${formatBytes(fileSizeLimit)} file limit`);
|
||||||
} else if (quotaReached) {
|
} else if (quotaReached) {
|
||||||
return setAttachFileError(`quota reached, ${formatBytes(remainingBytes)} remaining`);
|
return setAttachFileError(`exceeds quota, ${formatBytes(remainingBytes)} remaining`);
|
||||||
}
|
}
|
||||||
setAttachFileError("");
|
setAttachFileError("");
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
Loading…
Reference in a new issue