diff --git a/package.json b/package.json index 3f72d07..34917da 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,6 @@ "@testing-library/jest-dom": "^4.2.4", "@testing-library/react": "^9.3.2", "@testing-library/user-event": "^7.1.2", - "blob-to-buffer": "^1.2.8", "dexie": "^2.0.4", "interactjs": "^1.9.7", "js-binarypack": "^0.0.9", diff --git a/src/helpers/Peer.js b/src/helpers/Peer.js index b3aa6e0..04d8893 100644 --- a/src/helpers/Peer.js +++ b/src/helpers/Peer.js @@ -1,8 +1,9 @@ import SimplePeer from "simple-peer"; import BinaryPack from "js-binarypack"; -import toBuffer from "blob-to-buffer"; import shortid from "shortid"; +import blobToBuffer from "./blobToBuffer"; + // Limit buffer size to 16kb to avoid issues with chrome packet size // http://viblast.com/blog/2015/2/5/webrtc-data-channel-message-size/ const MAX_BUFFER_SIZE = 16000; @@ -40,13 +41,9 @@ class Peer extends SimplePeer { }); } - sendPackedData(packedData) { - toBuffer(packedData, (error, buffer) => { - if (error) { - throw error; - } - super.send(buffer); - }); + async sendPackedData(packedData) { + const buffer = await blobToBuffer(packedData); + super.send(buffer); } send(data) { diff --git a/src/helpers/blobToBuffer.js b/src/helpers/blobToBuffer.js new file mode 100644 index 0000000..55eb6d7 --- /dev/null +++ b/src/helpers/blobToBuffer.js @@ -0,0 +1,13 @@ +async function blobToBuffer(blob) { + if (blob.arrayBuffer) { + const arrayBuffer = await blob.arrayBuffer(); + const buffer = Buffer.from(arrayBuffer); + return buffer; + } else { + const arrayBuffer = await new Response(blob).arrayBuffer(); + const buffer = Buffer.from(arrayBuffer); + return buffer; + } +} + +export default blobToBuffer; diff --git a/src/modals/SelectMapModal.js b/src/modals/SelectMapModal.js index 0b2281a..951b764 100644 --- a/src/modals/SelectMapModal.js +++ b/src/modals/SelectMapModal.js @@ -11,6 +11,7 @@ import MapSettings from "../components/map/MapSettings"; import AuthContext from "../contexts/AuthContext"; import usePrevious from "../helpers/usePrevious"; +import blobToBuffer from "../helpers/blobToBuffer"; import { maps as defaultMaps } from "../maps"; @@ -140,11 +141,14 @@ function SelectMapModal({ } let image = new Image(); setImageLoading(true); + + // Copy file to avoid permissions issues + const copy = new Blob([file], { type: file.type }); // Create and load the image temporarily to get its dimensions - const url = URL.createObjectURL(file); + const url = URL.createObjectURL(copy); image.onload = function () { handleMapAdd({ - file, + file: copy, name, type: "file", gridX: fileGridX, diff --git a/yarn.lock b/yarn.lock index 2a3a068..437efce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2711,11 +2711,6 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -blob-to-buffer@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/blob-to-buffer/-/blob-to-buffer-1.2.8.tgz#78eeeb332f1280ed0ca6fb2b60693a8c6d36903a" - integrity sha512-re0AIxakF504MgeMtIyJkVcZ8T5aUxtp/QmTMlmjyb3P44E1BEv5x3LATBGApWAJATyXHtkXRD+gWTmeyYLiQA== - blob@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683"