浏览代码

Небюольшие оптимизации загрузки обложек

Book Pauk 3 年之前
父节点
当前提交
3d7ad0dd9a
共有 2 个文件被更改,包括 23 次插入15 次删除
  1. 7 5
      client/api/reader.js
  2. 16 10
      client/components/Reader/share/bookManager.js

+ 7 - 5
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}));

+ 16 - 10
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);
+
+            if (callback) callback(100);
+
+            //далее асинхронно 
+            (async() => {
+                //отправим dataUrl на сервер в /upload
+                try {
+                    await readerApi.uploadFileBuf(dataUrl, coverPageUrl);
+                } catch (e) {
+                    console.error(e);
+                }
 
-            //сохраним в storage
-            if (coverPageUrl)
+                //сохраним в storage
                 await coversStorage.setData(coverPageUrl, dataUrl);
+            })();
         }
 
         const result = Object.assign({}, meta, parsedMeta, {