浏览代码

Local file saving

main
Steve Ruiz 4 年前
父节点
当前提交
110d8fe0b1
共有 3 个文件被更改,包括 46 次插入12 次删除
  1. 3
    2
      state/state.ts
  2. 30
    7
      state/storage.ts
  3. 13
    3
      todo.md

+ 3
- 2
state/state.ts 查看文件

1499
     },
1499
     },
1500
 
1500
 
1501
     forceSave(data) {
1501
     forceSave(data) {
1502
-      storage.saveToLocalStorage(data)
1502
+      // storage.saveToLocalStorage(data)
1503
+      storage.saveToFileSystem(data)
1503
     },
1504
     },
1504
 
1505
 
1505
     savePage(data) {
1506
     savePage(data) {
1516
     },
1517
     },
1517
 
1518
 
1518
     restoreSavedData(data) {
1519
     restoreSavedData(data) {
1519
-      storage.loadDocumentFromLocalStorage(data)
1520
+      storage.firstLoad(data)
1520
     },
1521
     },
1521
 
1522
 
1522
     clearBoundsRotation(data) {
1523
     clearBoundsRotation(data) {

+ 30
- 7
state/storage.ts 查看文件

12
 }
12
 }
13
 
13
 
14
 class Storage {
14
 class Storage {
15
+  previousSaveHandle?: fa.FileSystemHandle
16
+
17
+  firstLoad(data: Data) {
18
+    const lastOpened = localStorage.getItem(`${CURRENT_VERSION}_lastOpened`)
19
+    this.loadDocumentFromLocalStorage(data, lastOpened || DOCUMENT_ID)
20
+  }
21
+
15
   load(data: Data, restoredData: any) {
22
   load(data: Data, restoredData: any) {
16
     // Empty shapes in state for each page
23
     // Empty shapes in state for each page
17
     for (let key in restoredData.document.pages) {
24
     for (let key in restoredData.document.pages) {
36
       ...restoredData.document,
43
       ...restoredData.document,
37
     }
44
     }
38
 
45
 
46
+    localStorage.setItem(`${CURRENT_VERSION}_lastOpened`, data.document.id)
47
+
39
     // Load current page
48
     // Load current page
40
     this.loadPage(data, data.currentPageId)
49
     this.loadPage(data, data.currentPageId)
41
   }
50
   }
54
       return
63
       return
55
     }
64
     }
56
 
65
 
66
+    // Save blob for future saves
67
+    this.previousSaveHandle = blob.handle
68
+
57
     state.send('LOADED_FROM_FILE', { restoredData })
69
     state.send('LOADED_FROM_FILE', { restoredData })
58
   }
70
   }
59
 
71
 
64
     // Load data from local storage
76
     // Load data from local storage
65
     const savedData = localStorage.getItem(fileId)
77
     const savedData = localStorage.getItem(fileId)
66
 
78
 
67
-    if (savedData === null) return false
79
+    if (savedData === null) {
80
+      // If we're going to use the default data, assign the
81
+      // current document a fresh random id.
82
+      data.document.id = uuid()
83
+      return false
84
+    }
68
 
85
 
69
     const restoredData = JSON.parse(savedData)
86
     const restoredData = JSON.parse(savedData)
70
 
87
 
118
       type: 'application/vnd.tldraw+json',
135
       type: 'application/vnd.tldraw+json',
119
     })
136
     })
120
 
137
 
121
-    fa.fileSave(blob, {
122
-      fileName: `${data.document.name}.tldr`,
123
-      description: 'tldraw file',
124
-      extensions: ['.tldr'],
125
-    })
126
-      .then(() => {
138
+    fa.fileSave(
139
+      blob,
140
+      {
141
+        fileName: `${data.document.name}.tldr`,
142
+        description: 'tldraw file',
143
+        extensions: ['.tldr'],
144
+      },
145
+      this.previousSaveHandle,
146
+      true
147
+    )
148
+      .then((handle) => {
149
+        this.previousSaveHandle = handle
127
         state.send('SAVED_FILE_TO_FILE_SYSTEM')
150
         state.send('SAVED_FILE_TO_FILE_SYSTEM')
128
       })
151
       })
129
       .catch((e) => {
152
       .catch((e) => {

+ 13
- 3
todo.md 查看文件

29
 ## Context Menu
29
 ## Context Menu
30
 
30
 
31
 - [x] Create context Menu
31
 - [x] Create context Menu
32
-- [ ] Wire up events
32
+- [x] Wire up events
33
 
33
 
34
 ## Move to Page
34
 ## Move to Page
35
 
35
 
36
-- [ ] Move to Page Command
37
-- [ ] Dialog
36
+- [x] Move to Page Command
37
+- [x] Picker for pages (provisional)
38
+
39
+## Local File System
40
+
41
+- [x] Save to local file
42
+- [x] Load from local file
43
+
44
+## Clipboard
45
+
46
+- [ ] Copy
47
+- [ ] Paste

正在加载...
取消
保存