save current state at the beginning in YIndexedDB
This commit is contained in:
parent
9df20fac8a
commit
6f9ae0c4fc
@ -79,9 +79,6 @@ function saveUpdate (room, updateBuffer) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
return updatePut
|
return updatePut
|
||||||
} else {
|
|
||||||
room.createdStructs.push(update)
|
|
||||||
return room.dbPromise
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,8 +106,7 @@ export default class IndexedDBPersistence {
|
|||||||
dbPromise: null,
|
dbPromise: null,
|
||||||
channel: null,
|
channel: null,
|
||||||
mutex: createMutualExclude(),
|
mutex: createMutualExclude(),
|
||||||
y,
|
y
|
||||||
createdStructs: [] // document updates before db created
|
|
||||||
}
|
}
|
||||||
if (typeof BroadcastChannel !== 'undefined') {
|
if (typeof BroadcastChannel !== 'undefined') {
|
||||||
room.channel = new BroadcastChannel('__yjs__' + room)
|
room.channel = new BroadcastChannel('__yjs__' + room)
|
||||||
@ -134,9 +130,7 @@ export default class IndexedDBPersistence {
|
|||||||
room.channel.postMessage(updateBuffer)
|
room.channel.postMessage(updateBuffer)
|
||||||
}
|
}
|
||||||
if (transaction.encodedStructsLen > 0) {
|
if (transaction.encodedStructsLen > 0) {
|
||||||
if (room.db === null) {
|
if (room.db !== null) {
|
||||||
room.createdStructs.push(updateBuffer)
|
|
||||||
} else {
|
|
||||||
saveUpdate(room, updateBuffer)
|
saveUpdate(room, updateBuffer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -148,19 +142,19 @@ export default class IndexedDBPersistence {
|
|||||||
room.db = db
|
room.db = db
|
||||||
const t = room.db.transaction(['updates'], 'readwrite')
|
const t = room.db.transaction(['updates'], 'readwrite')
|
||||||
const updatesStore = t.objectStore('updates')
|
const updatesStore = t.objectStore('updates')
|
||||||
return rtop(updatesStore.getAll()).then(updates => {
|
// write current state as update
|
||||||
// apply all previous updates before deleting them
|
const encoder = new BinaryEncoder()
|
||||||
room.mutex(() => {
|
encodeStructsDS(y, encoder)
|
||||||
y.transact(() => {
|
return rtop(updatesStore.put(encoder.createBuffer())).then(() => {
|
||||||
updates.forEach(update => {
|
// read persisted state
|
||||||
decodePersisted(y, new BinaryDecoder(update))
|
return rtop(updatesStore.getAll()).then(updates => {
|
||||||
})
|
room.mutex(() => {
|
||||||
}, true)
|
y.transact(() => {
|
||||||
})
|
updates.forEach(update => {
|
||||||
return Promise.all(room.createdStructs.map(update => {
|
decodePersisted(y, new BinaryDecoder(update))
|
||||||
return saveUpdate(room, update)
|
})
|
||||||
})).then(() => {
|
}, true)
|
||||||
room.createdStructs = []
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user