瀏覽代碼

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,7 +1499,8 @@ const state = createState({
1499 1499
     },
1500 1500
 
1501 1501
     forceSave(data) {
1502
-      storage.saveToLocalStorage(data)
1502
+      // storage.saveToLocalStorage(data)
1503
+      storage.saveToFileSystem(data)
1503 1504
     },
1504 1505
 
1505 1506
     savePage(data) {
@@ -1516,7 +1517,7 @@ const state = createState({
1516 1517
     },
1517 1518
 
1518 1519
     restoreSavedData(data) {
1519
-      storage.loadDocumentFromLocalStorage(data)
1520
+      storage.firstLoad(data)
1520 1521
     },
1521 1522
 
1522 1523
     clearBoundsRotation(data) {

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

@@ -12,6 +12,13 @@ function storageId(label: string, fileId: string, id: string) {
12 12
 }
13 13
 
14 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 22
   load(data: Data, restoredData: any) {
16 23
     // Empty shapes in state for each page
17 24
     for (let key in restoredData.document.pages) {
@@ -36,6 +43,8 @@ class Storage {
36 43
       ...restoredData.document,
37 44
     }
38 45
 
46
+    localStorage.setItem(`${CURRENT_VERSION}_lastOpened`, data.document.id)
47
+
39 48
     // Load current page
40 49
     this.loadPage(data, data.currentPageId)
41 50
   }
@@ -54,6 +63,9 @@ class Storage {
54 63
       return
55 64
     }
56 65
 
66
+    // Save blob for future saves
67
+    this.previousSaveHandle = blob.handle
68
+
57 69
     state.send('LOADED_FROM_FILE', { restoredData })
58 70
   }
59 71
 
@@ -64,7 +76,12 @@ class Storage {
64 76
     // Load data from local storage
65 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 86
     const restoredData = JSON.parse(savedData)
70 87
 
@@ -118,12 +135,18 @@ class Storage {
118 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 150
         state.send('SAVED_FILE_TO_FILE_SYSTEM')
128 151
       })
129 152
       .catch((e) => {

+ 13
- 3
todo.md 查看文件

@@ -29,9 +29,19 @@
29 29
 ## Context Menu
30 30
 
31 31
 - [x] Create context Menu
32
-- [ ] Wire up events
32
+- [x] Wire up events
33 33
 
34 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

Loading…
取消
儲存