diff --git a/libs/ardour/ardour/mixer_snapshot_manager.h b/libs/ardour/ardour/mixer_snapshot_manager.h index 0890702adb..e11aa9383b 100644 --- a/libs/ardour/ardour/mixer_snapshot_manager.h +++ b/libs/ardour/ardour/mixer_snapshot_manager.h @@ -49,7 +49,7 @@ public: void refresh(); void clear() { _global_snapshots.clear(); _local_snapshots.clear(); }; private: - + void ensure_snapshot_dir(bool global); std::string _global_path; std::string _local_path; diff --git a/libs/ardour/mixer_snapshot_manager.cc b/libs/ardour/mixer_snapshot_manager.cc index b5372bdc3d..a1f83eed40 100644 --- a/libs/ardour/mixer_snapshot_manager.cc +++ b/libs/ardour/mixer_snapshot_manager.cc @@ -31,6 +31,7 @@ #include "pbd/basename.h" #include "pbd/file_utils.h" +#include "pbd/gstdio_compat.h" using namespace ARDOUR; using namespace std; @@ -48,6 +49,14 @@ MixerSnapshotManager::MixerSnapshotManager (Session* s) refresh(); } +void MixerSnapshotManager::ensure_snapshot_dir(bool global) +{ + const string path = global ? _global_path : _local_path; + if(!Glib::file_test(path.c_str(), Glib::FILE_TEST_EXISTS & Glib::FILE_TEST_IS_DIR)) { + ::g_mkdir(path.c_str(), 0775); + } +} + void MixerSnapshotManager::refresh() { clear(); @@ -96,7 +105,8 @@ void MixerSnapshotManager::refresh() void MixerSnapshotManager::create_snapshot(std::string const& label, RouteList& rl, bool global) { - const string path = global?_global_path:_local_path; + ensure_snapshot_dir(global); + const string path = global ? _global_path : _local_path; MixerSnapshot* snapshot = new MixerSnapshot(_session); snapshot->snap(rl); snapshot->set_label(label); @@ -113,7 +123,8 @@ void MixerSnapshotManager::create_snapshot(std::string const& label, RouteList& void MixerSnapshotManager::create_snapshot(std::string const& label, std::string const& from_path, bool global) { - const string path = global?_global_path:_local_path; + ensure_snapshot_dir(global); + const string path = global ? _global_path : _local_path; MixerSnapshot* snapshot = new MixerSnapshot(_session, from_path); snapshot->set_label(label); snapshot->write(path);