#include "ardour/template_utils.h"
#include "ardour/tempo.h"
#include "ardour/ticker.h"
+#include "ardour/transport_master_manager.h"
#include "ardour/types_convert.h"
#include "ardour/user_bundle.h"
#include "ardour/vca.h"
error << string_compose(_("Could not remove session file at path \"%1\" (%2)"),
xml_path, g_strerror (errno)) << endmsg;
}
+
+ StateSaved (snapshot_name); /* EMIT SIGNAL */
}
/** @param snapshot_name Name to save under, without .ardour / .pending prefix */
}
}
+ //Mixbus auto-backup mechanism
+ if(Profile->get_mixbus()) {
+ if (pending) { //"pending" save means it's a backup, or some other non-user-initiated save; a good time to make a backup
+ // make a serialized safety backup
+ // (will make one periodically but only one per hour is left on disk)
+ // these backup files go into a separated folder
+ char timebuf[128];
+ time_t n;
+ struct tm local_time;
+ time (&n);
+ localtime_r (&n, &local_time);
+ strftime (timebuf, sizeof(timebuf), "%y-%m-%d.%H", &local_time);
+ std::string save_path(session_directory().backup_path());
+ save_path += G_DIR_SEPARATOR;
+ save_path += legalize_for_path(_current_snapshot_name);
+ save_path += "-";
+ save_path += timebuf;
+ save_path += statefile_suffix;
+ if ( !tree.write (save_path) )
+ error << string_compose(_("Could not save backup file at path \"%1\" (%2)"),
+ save_path, g_strerror (errno)) << endmsg;
+ }
+
+ StateSaved (snapshot_name); /* EMIT SIGNAL */
+ }
+
if (!pending && !for_archive) {
save_history (snapshot_name);
gain_child->add_child_nocopy (_click_gain->get_state ());
}
- if (_ltc_input) {
- XMLNode* ltc_input_child = node->add_child ("LTC-In");
- ltc_input_child->add_child_nocopy (_ltc_input->get_state ());
- }
-
- if (_ltc_input) {
+ if (_ltc_output) {
XMLNode* ltc_output_child = node->add_child ("LTC-Out");
ltc_output_child->add_child_nocopy (_ltc_output->get_state ());
}
XMLNode&
Session::get_control_protocol_state ()
{
- ControlProtocolManager& cpm (ControlProtocolManager::instance());
- return cpm.get_state();
+ return ControlProtocolManager::instance().get_state ();
}
int
}
if ((child = find_named_node (node, ControlProtocolManager::state_node_name)) != 0) {
- ControlProtocolManager::instance().set_state (*child, version);
+ ControlProtocolManager::instance().set_state (*child, 1 /* here: session-specific state */);
}
if ((child = find_named_node (node, "Script"))) {
}
/* never mark session dirty during loading */
- if (_state_of_the_state & Loading) {
+ if (_state_of_the_state & (Loading | Deletion)) {
return;
}
first_file_data_format_reset = false;
} else if (p == "external-sync") {
- if (!config.get_external_sync()) {
- drop_sync_source ();
- } else {
- switch_to_sync_source (Config->get_sync_source());
- }
+ request_sync_source (TransportMasterManager::instance().current());
} else if (p == "denormal-model") {
setup_fpu ();
} else if (p == "history-depth") {
last_timecode_valid = false;
} else if (p == "playback-buffer-seconds") {
AudioSource::allocate_working_buffers (sample_rate());
- } else if (p == "ltc-source-port") {
- reconnect_ltc_input ();
} else if (p == "ltc-sink-port") {
reconnect_ltc_output ();
} else if (p == "timecode-generator-offset") {