Добавлена синхронизация файлов обоев
This commit is contained in:
@@ -174,11 +174,10 @@ class Reader {
|
||||
return await axios.get(url, options);
|
||||
}
|
||||
|
||||
async uploadFile(file, maxUploadFileSize, callback) {
|
||||
if (!maxUploadFileSize)
|
||||
maxUploadFileSize = 10*1024*1024;
|
||||
async uploadFile(file, maxUploadFileSize = 10*1024*1024, callback) {
|
||||
if (file.size > maxUploadFileSize)
|
||||
throw new Error(`Размер файла превышает ${maxUploadFileSize} байт`);
|
||||
|
||||
let formData = new FormData();
|
||||
formData.append('file', file, file.name);
|
||||
|
||||
@@ -225,6 +224,21 @@ class Reader {
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
async uploadFileBuf(buf) {
|
||||
const response = await wsc.message(await wsc.send({action: 'upload-file-buf', buf}));
|
||||
|
||||
if (response.error)
|
||||
throw new Error(response.error);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
async getUploadedFileBuf(url) {
|
||||
url = url.replace('disk://', '/upload/');
|
||||
return (await axios.get(url)).data;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default new Reader();
|
||||
@@ -450,22 +450,47 @@ class Reader {
|
||||
|
||||
//wallpaper css
|
||||
async loadWallpapers() {
|
||||
const wallpaperDataLength = await wallpaperStorage.getLength();
|
||||
if (wallpaperDataLength !== this.wallpaperDataLength) {//оптимизация
|
||||
this.wallpaperDataLength = wallpaperDataLength;
|
||||
if (!_.isEqual(this.userWallpapers, this.prevUserWallpapers)) {//оптимизация
|
||||
this.prevUserWallpapers = _.cloneDeep(this.userWallpapers);
|
||||
|
||||
let newCss = '';
|
||||
let updated = false;
|
||||
const wallpaperExists = new Set();
|
||||
for (const wp of this.userWallpapers) {
|
||||
const data = await wallpaperStorage.getData(wp.cssClass);
|
||||
wallpaperExists.add(wp.cssClass);
|
||||
|
||||
let data = await wallpaperStorage.getData(wp.cssClass);
|
||||
if (!data) {
|
||||
//здесь будем восстанавливать данные с сервера
|
||||
const url = `disk://${wp.cssClass.replace('user-paper', '')}`;
|
||||
try {
|
||||
data = await readerApi.getUploadedFileBuf(url);
|
||||
await wallpaperStorage.setData(wp.cssClass, data);
|
||||
updated = true;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
|
||||
if (data) {
|
||||
newCss += `.${wp.cssClass} {background: url(${data}) center; background-size: 100% 100%;}`;
|
||||
}
|
||||
}
|
||||
|
||||
//почистим wallpaperStorage
|
||||
for (const key of await wallpaperStorage.getKeys()) {
|
||||
if (!wallpaperExists.has(key)) {
|
||||
await wallpaperStorage.removeData(key);
|
||||
}
|
||||
}
|
||||
|
||||
//обновим settings, если загружали обои из /upload/
|
||||
if (updated) {
|
||||
const newSettings = _.cloneDeep(this.settings);
|
||||
newSettings.needUpdateSettingsView = (newSettings.needUpdateSettingsView < 10 ? newSettings.needUpdateSettingsView + 1 : 0);
|
||||
this.commit('reader/setSettings', newSettings);
|
||||
}
|
||||
|
||||
dynamicCss.replace('wallpapers', newCss);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,6 +124,7 @@ import NumInput from '../../share/NumInput.vue';
|
||||
import UserHotKeys from './UserHotKeys/UserHotKeys.vue';
|
||||
import wallpaperStorage from '../share/wallpaperStorage';
|
||||
|
||||
import readerApi from '../../../api/reader';
|
||||
import rstore from '../../../store/modules/reader';
|
||||
import defPalette from './defPalette';
|
||||
|
||||
@@ -636,8 +637,17 @@ class SettingsPage {
|
||||
|
||||
if (index < 0)
|
||||
newUserWallpapers.push({label, cssClass});
|
||||
if (!wallpaperStorage.keyExists(cssClass))
|
||||
if (!wallpaperStorage.keyExists(cssClass)) {
|
||||
await wallpaperStorage.setData(cssClass, data);
|
||||
//отправим data на сервер в файл `/upload/${key}`
|
||||
try {
|
||||
//const res =
|
||||
await readerApi.uploadFileBuf(data);
|
||||
//console.log(res);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
|
||||
this.userWallpapers = newUserWallpapers;
|
||||
this.wallpaper = cssClass;
|
||||
|
||||
@@ -32,6 +32,10 @@ class WallpaperStorage {
|
||||
this.cachedKeys = await wpStore.keys();
|
||||
}
|
||||
|
||||
async getKeys() {
|
||||
return await wpStore.keys();
|
||||
}
|
||||
|
||||
keyExists(key) {//не асинхронная
|
||||
return this.cachedKeys.includes(key);
|
||||
}
|
||||
|
||||
@@ -191,6 +191,8 @@ const settingDefaults = {
|
||||
|
||||
recentShowSameBook: false,
|
||||
recentSortMethod: '',
|
||||
|
||||
needUpdateSettingsView: 0,
|
||||
};
|
||||
|
||||
for (const font of fonts)
|
||||
|
||||
Reference in New Issue
Block a user