diff --git a/client/api/reader.js b/client/api/reader.js index f93efc39..4ae05dae 100644 --- a/client/api/reader.js +++ b/client/api/reader.js @@ -226,16 +226,18 @@ class Reader { return response; } - async uploadFileBuf(buf, urlCallback) { + makeUrlFromBuf(buf) { const key = utils.toHex(cryptoUtils.sha256(buf)); - const url = `disk://${key}`; + return `disk://${key}`; + } - if (urlCallback) - urlCallback(url); + async uploadFileBuf(buf, url) { + if (!url) + url = this.makeUrlFromBuf(buf); let response; try { - await axios.head(`/upload/${key}`, {headers: {'Cache-Control': 'no-cache'}}); + await axios.head(url.replace('disk://', '/upload/'), {headers: {'Cache-Control': 'no-cache'}}); response = await wsc.message(await wsc.send({action: 'upload-file-touch', url})); } catch (e) { response = await wsc.message(await wsc.send({action: 'upload-file-buf', buf})); diff --git a/client/components/Reader/share/bookManager.js b/client/components/Reader/share/bookManager.js index 193f5c4d..69709162 100644 --- a/client/components/Reader/share/bookManager.js +++ b/client/components/Reader/share/bookManager.js @@ -351,6 +351,8 @@ class BookManager { //cover page let coverPageUrl = ''; if (parsed.coverPageId && parsed.binary[parsed.coverPageId]) { + if (callback) callback(90); + const bin = parsed.binary[parsed.coverPageId]; let dataUrl = `data:${bin.type};base64,${bin.data}`; try { @@ -359,18 +361,22 @@ class BookManager { console.error(e); } - //отправим dataUrl на сервер в /upload - try { - await readerApi.uploadFileBuf(dataUrl, (url) => { - coverPageUrl = url; - }); - } catch (e) { - console.error(e); - } + coverPageUrl = readerApi.makeUrlFromBuf(dataUrl); - //сохраним в storage - if (coverPageUrl) + if (callback) callback(100); + + //далее асинхронно + (async() => { + //отправим dataUrl на сервер в /upload + try { + await readerApi.uploadFileBuf(dataUrl, coverPageUrl); + } catch (e) { + console.error(e); + } + + //сохраним в storage await coversStorage.setData(coverPageUrl, dataUrl); + })(); } const result = Object.assign({}, meta, parsedMeta, {