From 774393312f265933d85d1c09702ea7efe2a5e30a Mon Sep 17 00:00:00 2001 From: Phillip Date: Sat, 5 Aug 2023 04:50:33 +0300 Subject: [PATCH] bugfix, use the filereader only one file at a time --- .../core/components/qdn-action-encryption.js | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/plugins/plugins/core/components/qdn-action-encryption.js b/plugins/plugins/core/components/qdn-action-encryption.js index 0da5ca8e..cfd7a092 100644 --- a/plugins/plugins/core/components/qdn-action-encryption.js +++ b/plugins/plugins/core/components/qdn-action-encryption.js @@ -2,12 +2,41 @@ import nacl from '../../../../crypto/api/deps/nacl-fast.js' import ed2curve from '../../../../crypto/api/deps/ed2curve.js' +class Semaphore { + constructor(count) { + this.count = count; + this.waiting = []; + } + + acquire() { + return new Promise(resolve => { + if (this.count > 0) { + this.count--; + resolve(); + } else { + this.waiting.push(resolve); + } + }); + } + + release() { + if (this.waiting.length > 0) { + const resolve = this.waiting.shift(); + resolve(); + } else { + this.count++; + } + } +} + +let semaphore = new Semaphore(1); let reader = new FileReader(); export const fileToBase64 = (file) => - new Promise((resolve, reject) => { + new Promise(async (resolve, reject) => { if (!reader) { reader = new FileReader(); } + await semaphore.acquire(); reader.readAsDataURL(file); reader.onload = () => { const dataUrl = reader.result; @@ -21,11 +50,13 @@ export const fileToBase64 = (file) => reader.onerror = null; reject(new Error('Invalid data URL')); } + semaphore.release(); }; reader.onerror = (error) => { reader.onload = null; reader.onerror = null; reject(error); + semaphore.release(); }; });