save recent templates analogously to recent sessions
This commit is contained in:
parent
0365c5cc47
commit
445d742af1
|
@ -176,6 +176,7 @@ CONFIG_VARIABLE (bool, allow_special_bus_removal, "allow-special-bus-removal", f
|
|||
CONFIG_VARIABLE (int32_t, processor_usage, "processor-usage", -1)
|
||||
CONFIG_VARIABLE (gain_t, max_gain, "max-gain", 2.0) /* +6.0dB */
|
||||
CONFIG_VARIABLE (uint32_t, max_recent_sessions, "max-recent-sessions", 10)
|
||||
CONFIG_VARIABLE (uint32_t, max_recent_templates, "max-recent-templates", 10)
|
||||
CONFIG_VARIABLE (double, automation_thinning_factor, "automation-thinning-factor", 20.0)
|
||||
CONFIG_VARIABLE (std::string, freesound_download_dir, "freesound-download-dir", Glib::get_home_dir() + "/Freesound/snd")
|
||||
CONFIG_VARIABLE (framecnt_t, range_location_minimum, "range-location-minimum", 128) /* samples */
|
||||
|
|
|
@ -30,8 +30,11 @@ namespace ARDOUR {
|
|||
typedef std::deque<std::pair<std::string,std::string> > RecentSessions;
|
||||
|
||||
LIBARDOUR_API int read_recent_sessions (RecentSessions& rs);
|
||||
LIBARDOUR_API int read_recent_templates (std::deque<std::string>& rt);
|
||||
LIBARDOUR_API int store_recent_sessions (std::string name, std::string path);
|
||||
LIBARDOUR_API int store_recent_templates (const std::string& session_template_full_name);
|
||||
LIBARDOUR_API int write_recent_sessions (RecentSessions& rs);
|
||||
LIBARDOUR_API int write_recent_templates (std::deque<std::string>& rt);
|
||||
LIBARDOUR_API int remove_recent_sessions (const std::string& path);
|
||||
}; // namespace ARDOUR
|
||||
|
||||
|
|
|
@ -39,6 +39,7 @@ using namespace PBD;
|
|||
namespace {
|
||||
|
||||
const char * const recent_file_name = "recent";
|
||||
const char * const recent_templates_file_name = "recent_templates";
|
||||
|
||||
} // anonymous
|
||||
|
||||
|
@ -84,6 +85,38 @@ ARDOUR::read_recent_sessions (RecentSessions& rs)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
ARDOUR::read_recent_templates (std::deque<std::string>& rt)
|
||||
{
|
||||
std::string path = Glib::build_filename (user_config_directory(), recent_templates_file_name);
|
||||
|
||||
ifstream recent (path.c_str());
|
||||
|
||||
if (!recent) {
|
||||
if (errno != ENOENT) {
|
||||
error << string_compose (_("cannot open recent template file %1 (%2)"), path, strerror (errno)) << endmsg;
|
||||
return -1;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
while (true) {
|
||||
|
||||
std::string session_template_full_name;
|
||||
|
||||
getline(recent, session_template_full_name);
|
||||
|
||||
if (!recent.good()) {
|
||||
break;
|
||||
}
|
||||
|
||||
rt.push_back (session_template_full_name);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
ARDOUR::write_recent_sessions (RecentSessions& rs)
|
||||
{
|
||||
|
@ -102,6 +135,24 @@ ARDOUR::write_recent_sessions (RecentSessions& rs)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
ARDOUR::write_recent_templates (std::deque<std::string>& rt)
|
||||
{
|
||||
std::string path = Glib::build_filename (user_config_directory(), recent_templates_file_name);
|
||||
|
||||
std::ofstream recent (path.c_str());
|
||||
|
||||
if (!recent) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (std::deque<std::string>::const_iterator i = rt.begin(); i != rt.end(); ++i) {
|
||||
recent << (*i) << std::endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
ARDOUR::store_recent_sessions (string name, string path)
|
||||
{
|
||||
|
@ -129,6 +180,28 @@ ARDOUR::store_recent_sessions (string name, string path)
|
|||
return ARDOUR::write_recent_sessions (rs);
|
||||
}
|
||||
|
||||
int
|
||||
ARDOUR::store_recent_templates (const std::string& session_template_full_name)
|
||||
{
|
||||
std::deque<std::string> rt;
|
||||
|
||||
if (ARDOUR::read_recent_templates (rt) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
rt.erase(remove (rt.begin(), rt.end(), session_template_full_name), rt.end());
|
||||
|
||||
rt.push_front (session_template_full_name);
|
||||
|
||||
uint32_t max_recent_templates = Config->get_max_recent_templates ();
|
||||
|
||||
if (rt.size() > max_recent_templates) {
|
||||
rt.erase( rt.begin() + max_recent_templates, rt.end ());
|
||||
}
|
||||
|
||||
return ARDOUR::write_recent_templates (rt);
|
||||
}
|
||||
|
||||
int
|
||||
ARDOUR::remove_recent_sessions (const string& path)
|
||||
{
|
||||
|
|
|
@ -306,8 +306,11 @@ Session::Session (AudioEngine &eng,
|
|||
* of a template.
|
||||
*/
|
||||
|
||||
if (!mix_template.empty() && load_state (_current_snapshot_name)) {
|
||||
throw failed_constructor ();
|
||||
if (!mix_template.empty()) {
|
||||
if (load_state (_current_snapshot_name)) {
|
||||
throw failed_constructor ();
|
||||
}
|
||||
store_recent_templates (mix_template);
|
||||
}
|
||||
|
||||
/* load default session properties - if any */
|
||||
|
|
|
@ -100,6 +100,7 @@
|
|||
#include "ardour/playlist_source.h"
|
||||
#include "ardour/port.h"
|
||||
#include "ardour/processor.h"
|
||||
#include "ardour/profile.h"
|
||||
#include "ardour/proxy_controllable.h"
|
||||
#include "ardour/recent_sessions.h"
|
||||
#include "ardour/region_factory.h"
|
||||
|
@ -2072,6 +2073,8 @@ Session::save_template (string template_name)
|
|||
copy_files (plugins_dir(), template_plugin_state_path);
|
||||
}
|
||||
|
||||
store_recent_templates (template_file_path);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue