Merge branch 'release/0.11.8-1'
This commit is contained in:
@@ -226,16 +226,18 @@ class Reader {
|
|||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
async uploadFileBuf(buf, urlCallback) {
|
makeUrlFromBuf(buf) {
|
||||||
const key = utils.toHex(cryptoUtils.sha256(buf));
|
const key = utils.toHex(cryptoUtils.sha256(buf));
|
||||||
const url = `disk://${key}`;
|
return `disk://${key}`;
|
||||||
|
}
|
||||||
|
|
||||||
if (urlCallback)
|
async uploadFileBuf(buf, url) {
|
||||||
urlCallback(url);
|
if (!url)
|
||||||
|
url = this.makeUrlFromBuf(buf);
|
||||||
|
|
||||||
let response;
|
let response;
|
||||||
try {
|
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}));
|
response = await wsc.message(await wsc.send({action: 'upload-file-touch', url}));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
response = await wsc.message(await wsc.send({action: 'upload-file-buf', buf}));
|
response = await wsc.message(await wsc.send({action: 'upload-file-buf', buf}));
|
||||||
|
|||||||
@@ -105,7 +105,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row-part column justify-center items-stretch" style="width: 80px">
|
<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)" />
|
<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" />
|
<q-icon v-show="!isLoadedCover(item.coverPageUrl)" name="la la-book" size="40px" style="color: #dddddd" />
|
||||||
</div>
|
</div>
|
||||||
@@ -243,6 +243,7 @@ class RecentBooksPage {
|
|||||||
archive = false;
|
archive = false;
|
||||||
|
|
||||||
covers = {};
|
covers = {};
|
||||||
|
coversLoadFunc = {};
|
||||||
|
|
||||||
created() {
|
created() {
|
||||||
this.commit = this.$store.commit;
|
this.commit = this.$store.commit;
|
||||||
@@ -669,8 +670,16 @@ class RecentBooksPage {
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
let loadedCover = this.covers[coverPageUrl];
|
let loadedCover = this.covers[coverPageUrl];
|
||||||
|
|
||||||
|
if (loadedCover == 'error')
|
||||||
|
return false;
|
||||||
|
|
||||||
if (!loadedCover) {
|
if (!loadedCover) {
|
||||||
(async() => {
|
(async() => {
|
||||||
|
if (this.coversLoadFunc[coverPageUrl])
|
||||||
|
return;
|
||||||
|
|
||||||
|
this.coversLoadFunc[coverPageUrl] = (async() => {
|
||||||
//сначала заглянем в storage
|
//сначала заглянем в storage
|
||||||
let data = await coversStorage.getData(coverPageUrl);
|
let data = await coversStorage.getData(coverPageUrl);
|
||||||
if (data) {
|
if (data) {
|
||||||
@@ -682,8 +691,16 @@ class RecentBooksPage {
|
|||||||
this.covers[coverPageUrl] = this.makeCoverHtml(data);
|
this.covers[coverPageUrl] = this.makeCoverHtml(data);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
|
this.covers[coverPageUrl] = 'error';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
await this.coversLoadFunc[coverPageUrl]();
|
||||||
|
} finally {
|
||||||
|
this.coversLoadFunc[coverPageUrl] = null;
|
||||||
|
}
|
||||||
})();
|
})();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<div class="col row">
|
<div class="col row">
|
||||||
|
<a ref="download" style="display: none;" target="_blank"></a>
|
||||||
|
|
||||||
<div class="full-height">
|
<div class="full-height">
|
||||||
<q-tabs
|
<q-tabs
|
||||||
ref="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) {
|
keyHook(event) {
|
||||||
if (!this.$root.stdDialog.active && event.type == 'keydown' && event.key == 'Escape') {
|
if (!this.$root.stdDialog.active && event.type == 'keydown' && event.key == 'Escape') {
|
||||||
this.close();
|
this.close();
|
||||||
|
|||||||
@@ -102,6 +102,11 @@
|
|||||||
Удалить выбранные обои
|
Удалить выбранные обои
|
||||||
</q-tooltip>
|
</q-tooltip>
|
||||||
</q-btn>
|
</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>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -359,18 +359,20 @@ class BookManager {
|
|||||||
console.error(e);
|
console.error(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
coverPageUrl = readerApi.makeUrlFromBuf(dataUrl);
|
||||||
|
|
||||||
|
//далее асинхронно
|
||||||
|
(async() => {
|
||||||
//отправим dataUrl на сервер в /upload
|
//отправим dataUrl на сервер в /upload
|
||||||
try {
|
try {
|
||||||
await readerApi.uploadFileBuf(dataUrl, (url) => {
|
await readerApi.uploadFileBuf(dataUrl, coverPageUrl);
|
||||||
coverPageUrl = url;
|
|
||||||
});
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
//сохраним в storage
|
//сохраним в storage
|
||||||
if (coverPageUrl)
|
|
||||||
await coversStorage.setData(coverPageUrl, dataUrl);
|
await coversStorage.setData(coverPageUrl, dataUrl);
|
||||||
|
})();
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = Object.assign({}, meta, parsedMeta, {
|
const result = Object.assign({}, meta, parsedMeta, {
|
||||||
|
|||||||
Reference in New Issue
Block a user