Merge branch 'release/0.11.8-1'
This commit is contained in:
@@ -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}));
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
})();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
//сохраним в storage
|
||||
if (coverPageUrl)
|
||||
//далее асинхронно
|
||||
(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, {
|
||||
|
||||
Reference in New Issue
Block a user