| 1130 | } |
| 1131 | |
| 1132 | func (v *Vault) ReadNote(rel string) (NoteContent, error) { |
| 1133 | v.mu.RLock() |
| 1134 | defer v.mu.RUnlock() |
| 1135 | abs, err := SafeJoin(v.root, rel) |
| 1136 | if err != nil { |
| 1137 | return NoteContent{}, err |
| 1138 | } |
| 1139 | info, err := os.Stat(abs) |
| 1140 | if err != nil { |
| 1141 | return NoteContent{}, err |
| 1142 | } |
| 1143 | body, err := os.ReadFile(abs) |
| 1144 | if err != nil { |
| 1145 | return NoteContent{}, err |
| 1146 | } |
| 1147 | folder, _ := v.folderOf(abs) |
| 1148 | bodyStr := string(body) |
| 1149 | rel = filepath.ToSlash(rel) |
| 1150 | title := strings.TrimSuffix(filepath.Base(abs), filepath.Ext(abs)) |
| 1151 | meta := buildNoteMeta(rel, title, folder, info, bodyStr) |
| 1152 | return NoteContent{NoteMeta: meta, Body: bodyStr}, nil |
| 1153 | } |
| 1154 | |
| 1155 | func (v *Vault) WriteNote(rel, body string) (NoteMeta, error) { |
| 1156 | v.mu.Lock() |