save recent templates analogously to recent sessions

This commit is contained in:
Paul Davis 2015-05-08 12:07:33 -04:00
parent 0365c5cc47
commit 445d742af1
5 changed files with 85 additions and 2 deletions

View File

@ -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 */

View File

@ -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

View File

@ -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)
{

View File

@ -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 */

View File

@ -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;
}