Add AtomEnvironment::restoreStateIntoEnvironment

This takes an existing Atom environment and restores a saved state from
the IndexDB state storage into it by:

1. Serializing the existing pane items
2. Restoring the saved state
3. Deserializing the saved pane items into the newly restored
environment
This commit is contained in:
Katrina Uychaco
2017-03-08 14:15:36 -08:00
committed by Michelle Tilley
parent b701bc790e
commit 12ea7a7300

View File

@@ -863,6 +863,22 @@ class AtomEnvironment extends Model
@pickFolder (selectedPaths = []) =>
@project.addPath(selectedPath) for selectedPath in selectedPaths
restoreStateIntoEnvironment: (state) ->
shouldSerializeItem = (item) ->
return true unless item instanceof TextEditor
item.getPath() or item.isModified()
serializedOpenItems = (item.serialize() for item in @workspace.getPaneItems() when shouldSerializeItem(item))
serializedBuffers = (buffer.serialize() for buffer in @project.buffers)
state.fullScreen = @isFullScreen()
pane.destroy() for pane in @workspace.getPanes()
@deserialize(state)
savedBuffers = (TextBuffer.deserialize(serializedBuffer) for serializedBuffer in serializedBuffers)
@project.buffers = @project.buffers.concat(savedBuffers)
items = (@deserializers.deserialize(itemState) for itemState in serializedOpenItems)
@workspace.getPanes()[0].addItems(items, 0)
showSaveDialog: (callback) ->
callback(@showSaveDialogSync())