13 : storageManager_(std::move(storageManager)) {
14 if (!storageManager_) {
15 throw std::invalid_argument(
"WorkspaceSession requires a storage manager");
22 return storageManager_->currentPath();
26 onStateChanged_ = std::move(cb);
30 errorReporter_ = std::move(reporter);
34 storageManager_->setAtomicStoreSave(std::move(saveFn));
38 storageManager_->setAtomicStoreLoad(std::move(loadFn));
42 onDeletionImpact_ = std::move(cb);
43 storageManager_->setDeletionImpactCallback([
this](
const DeletionImpact& impact) {
45 if (onDeletionImpact_) {
46 onDeletionImpact_(impact);
50 "WorkspaceSession::setDeletionImpactCallback",
51 std::current_exception());
57 const auto path = storageManager_->loadLatestPath();
63 document_ = storageManager_->loadFrom(*path);
67 "WorkspaceSession::openLatest",
68 std::current_exception());
75 storageManager_->createNew(path);
82 document_ = storageManager_->loadFrom(path);
86 "WorkspaceSession::openFile",
87 std::current_exception());
93 storageManager_->save(document_);
97 storageManager_->saveAs(path, document_);
102 const std::string& path = storageManager_->currentPath();
104 storageManager_->save(document_);
108 "WorkspaceSession::commit",
109 std::current_exception());
117 if (onStateChanged_) {
118 onStateChanged_(document_);
122 "WorkspaceSession::notifyState",
123 std::current_exception());
129 std::exception_ptr exception)
const {
130 if (!errorReporter_) {
134 errorReporter_->reportException(severity, origin, exception);
Declares the mutable workspace session that ties in-memory state to storage.
void setAtomicStoreLoad(core::ports::storage::IStorageManager::AtomicStoreLoad loadFn)
void newFile(const std::string &path)
void setDeletionImpactCallback(core::ports::storage::IStorageManager::DeletionImpactCallback cb)
void setStateChangedCallback(StateChanged cb)
void setErrorReporter(std::shared_ptr< core::ports::diagnostics::IErrorReporter > reporter)
void commit()
Persists the session when a file is open and notifies listeners.
void saveFileAs(const std::string &path)
const std::string & currentPath() const noexcept
void openFile(const std::string &path)
std::function< void(const core::application::workspace::WorkspaceSessionState &)> StateChanged
void setAtomicStoreSave(core::ports::storage::IStorageManager::AtomicStoreSave saveFn)
WorkspaceSession(std::unique_ptr< core::ports::storage::IStorageManager > storageManager)
Creates a session over an existing storage manager.
std::function< void(const core::domain::DeletionImpact &)> DeletionImpactCallback
std::function< core::application::workspace::WorkspaceSessionState(const std::string &dbPath)> AtomicStoreLoad
std::function< core::domain::DeletionImpact(const std::string &dbPath, const core::application::workspace::WorkspaceSessionState &document)> AtomicStoreSave
Destroy the storage manager port.
ErrorSeverity
Severity level for structured error events.
Lists entity identifiers removed by cascading workspace operations.