Синхронизация recent, пока не оптимизировано

This commit is contained in:
Book Pauk
2019-03-22 14:14:47 +07:00
parent 79ced4eca4
commit 737ae75c28
3 changed files with 37 additions and 19 deletions

View File

@@ -294,10 +294,13 @@ class Reader extends Vue {
this.debouncedUpdateRoute(); this.debouncedUpdateRoute();
} }
bookManagerEvent(eventName) { async bookManagerEvent(eventName) {
const serverStorage = this.$refs.serverStorage; const serverStorage = this.$refs.serverStorage;
if (eventName == 'load-meta-finish') { if (eventName == 'load-meta-finish') {
serverStorage.init(); serverStorage.init();
const result = await bookManager.cleanRecentBooks();
if (result)
this.debouncedSaveRecent();
} }
if (eventName == 'recent-changed') { if (eventName == 'recent-changed') {
@@ -305,8 +308,12 @@ class Reader extends Vue {
const oldBook = this.mostRecentBookReactive; const oldBook = this.mostRecentBookReactive;
const newBook = bookManager.mostRecentBook(); const newBook = bookManager.mostRecentBook();
if (oldBook && newBook && oldBook.key != newBook.key) { if (oldBook && newBook) {
await this.loadBook(newBook); if (oldBook.key != newBook.key) {
await this.loadBook(newBook);
} else if (oldBook.bookPos != newBook.bookPos) {
this.bookPosChanged({bookPos: newBook.bookPos});
}
} }
this.debouncedSaveRecent(); this.debouncedSaveRecent();

View File

@@ -403,8 +403,9 @@ class ServerStorage extends Vue {
if (result.state == 'reject') { if (result.state == 'reject') {
await this.loadRecent(true); await this.loadRecent(true);
const newRecent = utils.applyObjDiff(bm.recent, diff); //похоже это лишнее
await bm.setRecent(newRecent); /*const newRecent = utils.applyObjDiff(bm.recent, diff);
await bm.setRecent(newRecent);*/
} }
tries++; tries++;

View File

@@ -99,7 +99,9 @@ class BookManager {
} }
}*/ }*/
await this.cleanBooks(); await this.cleanBooks();
await this.cleanRecentBooks();
//очистка позже
//await this.cleanRecentBooks();
this.booksCached = {}; this.booksCached = {};
for (const key in this.books) { for (const key in this.books) {
@@ -316,12 +318,17 @@ class BookManager {
const sorted = this.getSortedRecent(); const sorted = this.getSortedRecent();
let isDel = false;
for (let i = 1000; i < sorted.length; i++) { for (let i = 1000; i < sorted.length; i++) {
await bmRecentStore.removeItem(sorted[i].key); await bmRecentStore.removeItem(sorted[i].key);
delete this.recent[sorted[i].key]; delete this.recent[sorted[i].key];
isDel = true;
} }
this.sortedRecentCached = null; this.sortedRecentCached = null;
await bmCacheStore.setItem('recent', this.recent);
return isDel;
} }
mostRecentBook() { mostRecentBook() {
@@ -356,16 +363,19 @@ class BookManager {
return result; return result;
} }
async setRecent(newRecent) { async setRecent(value) {
//this.recent = newRecent;
const mergedRecent = _.cloneDeep(this.recent); const mergedRecent = _.cloneDeep(this.recent);
Object.assign(mergedRecent, newRecent); Object.assign(mergedRecent, value);
const newRecent = {};
for (const rec of Object.values(mergedRecent)) { for (const rec of Object.values(mergedRecent)) {
await bmRecentStore.setItem(rec.key, rec); if (rec.key) {
await bmRecentStore.setItem(rec.key, rec);
newRecent[rec.key] = rec;
}
} }
this.recent = mergedRecent; this.recent = newRecent;
await bmCacheStore.setItem('recent', this.recent); await bmCacheStore.setItem('recent', this.recent);
this.recentLast = null; this.recentLast = null;
@@ -375,18 +385,18 @@ class BookManager {
this.emit('recent-changed'); this.emit('recent-changed');
} }
async setRecentRev(newRecentRev) { async setRecentRev(value) {
await bmRecentStore.setItem('recent-rev', newRecentRev); await bmRecentStore.setItem('recent-rev', value);
this.recentRev = newRecentRev; this.recentRev = value;
} }
async setRecentLast(newRecentLast) { async setRecentLast(value) {
this.recentLast = newRecentLast; this.recentLast = value;
} }
async setRecentLastRev(newRecentLastRev) { async setRecentLastRev(value) {
bmRecentStore.setItem('recent-last-rev', newRecentLastRev); bmRecentStore.setItem('recent-last-rev', value);
this.recentLastRev = newRecentLastRev; this.recentLastRev = value;
} }
addEventListener(listener) { addEventListener(listener) {