Browse Source

Merge branch 'release/0.11.8-1'

Book Pauk 3 years ago
parent
commit
371ff64a95

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

+ 29 - 12
client/components/Reader/RecentBooksPage/RecentBooksPage.vue

@@ -105,7 +105,7 @@
                     </div>
 
                     <div class="row-part column justify-center items-stretch" style="width: 80px">
-                        <div class="col row justify-center items-center clickable" style="padding: 4px" @click="loadBook(item)">
+                        <div class="col row justify-center items-center clickable" style="padding: 0 2px 0 2px" @click="loadBook(item)">
                             <div v-show="isLoadedCover(item.coverPageUrl)" style="height: 80px" v-html="getCoverHtml(item.coverPageUrl)" />
                             <q-icon v-show="!isLoadedCover(item.coverPageUrl)" name="la la-book" size="40px" style="color: #dddddd" />
                         </div>
@@ -243,6 +243,7 @@ class RecentBooksPage {
     archive = false;
 
     covers = {};
+    coversLoadFunc = {};
 
     created() {
         this.commit = this.$store.commit;
@@ -669,20 +670,36 @@ class RecentBooksPage {
             return false;
 
         let loadedCover = this.covers[coverPageUrl];
+
+        if (loadedCover == 'error')
+            return false;
+
         if (!loadedCover) {
             (async() => {
-                //сначала заглянем в storage
-                let data = await coversStorage.getData(coverPageUrl);
-                if (data) {
-                   this.covers[coverPageUrl] = this.makeCoverHtml(data);
-                } else {//иначе идем на сервер
-                    try {
-                        data = await readerApi.getUploadedFileBuf(coverPageUrl);
-                        await coversStorage.setData(coverPageUrl, data);
-                        this.covers[coverPageUrl] = this.makeCoverHtml(data);
-                    } catch (e) {
-                        console.error(e);
+                if (this.coversLoadFunc[coverPageUrl])
+                    return;
+
+                this.coversLoadFunc[coverPageUrl] = (async() => {
+                    //сначала заглянем в storage
+                    let data = await coversStorage.getData(coverPageUrl);
+                    if (data) {
+                       this.covers[coverPageUrl] = this.makeCoverHtml(data);
+                    } else {//иначе идем на сервер
+                        try {
+                            data = await readerApi.getUploadedFileBuf(coverPageUrl);
+                            await coversStorage.setData(coverPageUrl, data);
+                            this.covers[coverPageUrl] = this.makeCoverHtml(data);
+                        } catch (e) {
+                            console.error(e);
+                            this.covers[coverPageUrl] = 'error';
+                        }
                     }
+                });
+
+                try {
+                    await this.coversLoadFunc[coverPageUrl]();
+                } finally {
+                    this.coversLoadFunc[coverPageUrl] = null;
                 }
             })();
         }

+ 23 - 0
client/components/Reader/SettingsPage/SettingsPage.vue

@@ -5,6 +5,8 @@
         </template>
 
         <div class="col row">
+            <a ref="download" style="display: none;" target="_blank"></a>
+
             <div class="full-height">
                 <q-tabs
                     ref="tabs"
@@ -674,6 +676,27 @@ class SettingsPage {
         }
     }
 
+    async downloadWallpaper() {
+        if (this.wallpaper.indexOf('user-paper') != 0)
+            return;
+
+        try {
+            const d = this.$refs.download;
+
+            const dataUrl = await wallpaperStorage.getData(this.wallpaper);
+
+            if (!dataUrl)
+                throw new Error('Файл обоев не найден');
+
+            d.href = dataUrl;
+            d.download = `wallpaper-#${this.wallpaper.replace('user-paper', '').substring(0, 4)}`;
+
+            d.click();
+        } catch (e) {
+            this.$root.stdDialog.alert(e.message, 'Ошибка', {color: 'negative'});
+        }
+    }
+
     keyHook(event) {
         if (!this.$root.stdDialog.active && event.type == 'keydown' && event.key == 'Escape') {
             this.close();

+ 5 - 0
client/components/Reader/SettingsPage/ViewTab/Color.inc

@@ -102,6 +102,11 @@
                                             Удалить выбранные обои
                                         </q-tooltip>
                                     </q-btn>
+                                    <q-btn v-show="wallpaper.indexOf('user-paper') === 0" class="q-ml-sm" round dense color="blue" icon="la la-file-download" @click.stop="downloadWallpaper">
+                                        <q-tooltip :delay="1500" anchor="bottom middle" content-style="font-size: 80%">
+                                            Скачать выбранные обои
+                                        </q-tooltip>
+                                    </q-btn>
                                 </div>
                             </div>
 

+ 12 - 10
client/components/Reader/share/bookManager.js

@@ -359,18 +359,20 @@ class BookManager {
                 console.error(e);
             }
 
-            //отправим dataUrl на сервер в /upload
-            try {
-                await readerApi.uploadFileBuf(dataUrl, (url) => {
-                    coverPageUrl = url;
-                });
-            } catch (e) {
-                console.error(e);
-            }
+            coverPageUrl = readerApi.makeUrlFromBuf(dataUrl);
+
+            //далее асинхронно 
+            (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, {