AddToObsidian/AddToObsidian/ViewModels/NoteViewModel.swift
Paweł Orzech 6df94cd7fd
Add macOS menu bar app for quick Obsidian notes
- Menu bar app with global hotkey (⌃⌥⌘O) to capture notes
- Notes saved as Markdown with YAML frontmatter
- File naming: yyyy-MM-dd_HH-mm-ss.md
- Settings view for Obsidian vault folder selection
- Carbon API for global keyboard shortcut registration
- Security-scoped bookmarks for persistent folder access
2026-01-19 09:42:22 +00:00

47 lines
1.2 KiB
Swift

import Foundation
import SwiftUI
class NoteViewModel: ObservableObject {
@Published var noteContent: String = ""
@Published var errorMessage: String?
@Published var showError: Bool = false
private let fileService = NoteFileService.shared
let settingsManager = SettingsManager.shared
func saveNote() -> Bool {
let trimmedContent = noteContent.trimmingCharacters(in: .whitespacesAndNewlines)
guard !trimmedContent.isEmpty else {
showErrorMessage("Cannot save an empty note.")
return false
}
let note = Note(content: trimmedContent)
do {
let savedURL = try fileService.save(note: note)
print("Note saved to: \(savedURL.path)")
clearNote()
return true
} catch {
showErrorMessage(error.localizedDescription)
return false
}
}
func clearNote() {
noteContent = ""
errorMessage = nil
showError = false
}
private func showErrorMessage(_ message: String) {
errorMessage = message
showError = true
}
var canSave: Bool {
settingsManager.hasValidVaultPath
}
}