|
61 | 61 | function getFileContentAsync(id) { |
62 | 62 | if (diskMode && M._disk && M._disk.isConnected()) { |
63 | 63 | var file = findFileById(id); |
64 | | - if (file) return M._disk.readFile(file.name); |
| 64 | + // Use readFileFromPath so subdirectory files (e.g. "notes/ideas.md") resolve correctly |
| 65 | + if (file) return M._disk.readFileFromPath(file.name); |
65 | 66 | } |
66 | 67 | return Promise.resolve(getFileContent(id)); |
67 | 68 | } |
68 | 69 |
|
69 | 70 | function setFileContent(id, content) { |
70 | 71 | try { |
71 | 72 | localStorage.setItem(FILE_PREFIX + id, content); |
72 | | - } catch (e) { console.warn('File save failed:', e); } |
| 73 | + } catch (e) { |
| 74 | + console.warn('File save failed:', e); |
| 75 | + if (M.showToast) M.showToast('⚠️ Save failed — browser storage is full. Free space or connect a folder.', 'error'); |
| 76 | + } |
73 | 77 | // Also write to disk when in disk mode |
74 | 78 | if (diskMode && M._disk && M._disk.isConnected()) { |
75 | 79 | var file = findFileById(id); |
76 | 80 | if (file) { |
77 | | - M._disk.writeFile(file.name, content).catch(function (e) { |
| 81 | + M._disk.writeFileToPath(file.name, content).catch(function (e) { |
78 | 82 | console.warn('Disk file write failed:', e); |
79 | 83 | }); |
80 | 84 | } |
|
86 | 90 | if (diskMode && M._disk && M._disk.isConnected()) { |
87 | 91 | var file = findFileById(id); |
88 | 92 | if (file) { |
89 | | - M._disk.deleteFile(file.name).catch(function (e) { |
| 93 | + M._disk.deleteFileFromPath(file.name).catch(function (e) { |
90 | 94 | console.warn('Disk file delete failed:', e); |
91 | 95 | }); |
92 | 96 | } |
|
335 | 339 | function openDiskFile(entry) { |
336 | 340 | if (!M._disk || !M._disk.isConnected()) return; |
337 | 341 |
|
| 342 | + // If we were viewing a shared doc, break out of that session |
| 343 | + if (M.isViewingSharedDoc) M.clearCloudSession(); |
| 344 | + // Reset cloud doc binding so each file gets its own cloud doc |
| 345 | + else if (M.resetCloudForFileSwitch) M.resetCloudForFileSwitch(); |
338 | 346 | // Save current file |
339 | 347 | M.wsSaveCurrent(); |
340 | 348 |
|
|
535 | 543 | M.wsDiskMode = false; |
536 | 544 |
|
537 | 545 | M.wsCreateFile = function (name) { |
| 546 | + // If we were viewing a shared doc, break out of that session |
| 547 | + if (M.isViewingSharedDoc) M.clearCloudSession(); |
| 548 | + // Reset cloud doc binding so new file gets its own cloud doc |
| 549 | + else if (M.resetCloudForFileSwitch) M.resetCloudForFileSwitch(); |
538 | 550 | // Save current document first |
539 | 551 | M.wsSaveCurrent(); |
540 | 552 | var id = generateId(); |
|
572 | 584 | if (id === workspace.activeFileId) return; |
573 | 585 | var file = findFileById(id); |
574 | 586 | if (!file) return; |
| 587 | + // If we were viewing a shared doc, break out of that session |
| 588 | + if (M.isViewingSharedDoc) M.clearCloudSession(); |
| 589 | + // Reset cloud doc binding so each file gets its own cloud doc |
| 590 | + else if (M.resetCloudForFileSwitch) M.resetCloudForFileSwitch(); |
575 | 591 | // Save current |
576 | 592 | M.wsSaveCurrent(); |
577 | 593 | // Switch |
|
802 | 818 | // Load active file content |
803 | 819 | var activeFile = findFileById(workspace.activeFileId); |
804 | 820 | if (activeFile) { |
805 | | - var content = await M._disk.readFile(activeFile.name); |
| 821 | + var content = await M._disk.readFileFromPath(activeFile.name); |
806 | 822 | M.markdownEditor.value = content; |
807 | 823 | // Cache in localStorage |
808 | 824 | localStorage.setItem(FILE_PREFIX + workspace.activeFileId, content); |
|
829 | 845 | if (!M._disk) return; |
830 | 846 | // Save current to localStorage before disconnecting |
831 | 847 | M.wsSaveCurrent(); |
| 848 | + // Stop cloud auto-save timer so it doesn't create unwanted cloud docs |
| 849 | + if (M.clearCloudSession) M.clearCloudSession(); |
832 | 850 | await M._disk.disconnect(); |
833 | 851 | diskMode = false; |
834 | 852 | M.wsDiskMode = false; |
|
874 | 892 | // Reload active file content from disk |
875 | 893 | var activeFile = findFileById(workspace.activeFileId); |
876 | 894 | if (activeFile) { |
877 | | - var content = await M._disk.readFile(activeFile.name); |
| 895 | + var content = await M._disk.readFileFromPath(activeFile.name); |
878 | 896 | M.markdownEditor.value = content; |
879 | 897 | localStorage.setItem(FILE_PREFIX + workspace.activeFileId, content); |
880 | 898 | M.renderMarkdown(); |
|
918 | 936 | saveWorkspace(); |
919 | 937 | var activeFile = findFileById(workspace.activeFileId); |
920 | 938 | if (activeFile) { |
921 | | - var content = await M._disk.readFile(activeFile.name); |
| 939 | + var content = await M._disk.readFileFromPath(activeFile.name); |
922 | 940 | M.markdownEditor.value = content; |
923 | 941 | localStorage.setItem(FILE_PREFIX + workspace.activeFileId, content); |
924 | 942 | M.renderMarkdown(); |
|
0 commit comments