aboutsummaryrefslogtreecommitdiff
path: root/ext/js/language/dictionary-importer.js
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2021-07-31 12:30:31 -0400
committerGitHub <noreply@github.com>2021-07-31 12:30:31 -0400
commit00c5ae79833a641ccc5f7d31b6eea3e91db4cb71 (patch)
treee21cb14527e2bf6e74b36eeab75e994d52df37b6 /ext/js/language/dictionary-importer.js
parent2d57d69b9ed3adf1241074f7eb29a588bec817a2 (diff)
DictionaryImporterMediaLoader (#1860)
* Rename param for consistency * Move media loading functionality into DictionaryImporterMediaLoader * Create test class for media loading * Remove unnecessary Blob/Image/URL functionality
Diffstat (limited to 'ext/js/language/dictionary-importer.js')
-rw-r--r--ext/js/language/dictionary-importer.js41
1 files changed, 5 insertions, 36 deletions
diff --git a/ext/js/language/dictionary-importer.js b/ext/js/language/dictionary-importer.js
index 27b3c44e..b931c929 100644
--- a/ext/js/language/dictionary-importer.js
+++ b/ext/js/language/dictionary-importer.js
@@ -22,11 +22,12 @@
*/
class DictionaryImporter {
- constructor() {
+ constructor(mediaLoader) {
+ this._mediaLoader = mediaLoader;
this._schemas = new Map();
}
- async importDictionary(dictionaryDatabase, archiveSource, details, onProgress) {
+ async importDictionary(dictionaryDatabase, archiveContent, details, onProgress) {
if (!dictionaryDatabase) {
throw new Error('Invalid database');
}
@@ -37,7 +38,7 @@ class DictionaryImporter {
const hasOnProgress = (typeof onProgress === 'function');
// Read archive
- const archive = await JSZip.loadAsync(archiveSource);
+ const archive = await JSZip.loadAsync(archiveContent);
// Read and validate index
const indexFileName = 'index.json';
@@ -469,7 +470,7 @@ class DictionaryImporter {
let width;
let height;
try {
- ({width, height} = await this._getImageResolution(mediaType, content));
+ ({width, height} = await this._mediaLoader.getImageResolution(mediaType, content));
} catch (e) {
throw createError('Could not load image');
}
@@ -502,36 +503,4 @@ class DictionaryImporter {
}
return await response.json();
}
-
- /**
- * Attempts to load an image using a base64 encoded content and a media type
- * and returns its resolution.
- * @param mediaType The media type for the image content.
- * @param content The binary content for the image, encoded in base64.
- * @returns A Promise which resolves with {width, height} on success,
- * otherwise an error is thrown.
- */
- _getImageResolution(mediaType, content) {
- return new Promise((resolve, reject) => {
- const image = new Image();
- const eventListeners = new EventListenerCollection();
- const cleanup = () => {
- image.removeAttribute('src');
- URL.revokeObjectURL(url);
- eventListeners.removeAllEventListeners();
- };
- eventListeners.addEventListener(image, 'load', () => {
- const {naturalWidth: width, naturalHeight: height} = image;
- cleanup();
- resolve({width, height});
- }, false);
- eventListeners.addEventListener(image, 'error', () => {
- cleanup();
- reject(new Error('Image failed to load'));
- }, false);
- const blob = MediaUtil.createBlobFromBase64Content(content, mediaType);
- const url = URL.createObjectURL(blob);
- image.src = url;
- });
- }
}