alter config file copying infrastructure so it can be used at a suitable time in the instance's lifetime

This commit is contained in:
Paul Davis 2015-03-12 17:44:50 -05:00
parent b8e9e17fac
commit 9a05a0fbfb
2 changed files with 45 additions and 32 deletions

View file

@ -83,7 +83,12 @@ namespace ARDOUR {
LIBARDOUR_API void setup_fpu ();
LIBARDOUR_API std::vector<SyncSource> get_available_sync_options();
LIBARDOUR_API int copy_configuration_files (std::string const & old_dir, std::string const & new_dir, int old_version);
/* the @param ui_handler will be called if there are old configuration
* files to be copied. It should (probably) ask the user about the
* action, and return true or false depending on whether or not the
* copy should take place.
*/
LIBARDOUR_API int check_for_old_configuration_files (boost::function<bool (std::string const&, std::string const&, int)> ui_handler);
}
#endif /* __ardour_ardour_h__ */

View file

@ -244,49 +244,55 @@ lotsa_files_please ()
#endif
}
int
ARDOUR::copy_configuration_files (string const & old_dir, string const & new_dir, int old_version)
static int
copy_configuration_files (string const & old_dir, string const & new_dir, int old_version)
{
string old_name;
string new_name;
/* ensure target directory exists */
if (g_mkdir_with_parents (new_dir.c_str(), 0755)) {
return -1;
}
if (old_version == 3) {
old_name = Glib::build_filename (old_dir, "recent");
new_name = Glib::build_filename (new_dir, "recent");
old_name = Glib::build_filename (old_dir, X_("recent"));
new_name = Glib::build_filename (new_dir, X_("recent"));
copy_file (old_name, new_name);
/* can only copy ardour.rc - UI config is not compatible */
old_name = Glib::build_filename (old_dir, "ardour.rc");
new_name = Glib::build_filename (new_dir, "config");
old_name = Glib::build_filename (old_dir, X_("ardour.rc"));
new_name = Glib::build_filename (new_dir, X_("config"));
copy_file (old_name, new_name);
/* copy templates and route templates */
old_name = Glib::build_filename (old_dir, "templates");
new_name = Glib::build_filename (new_dir, "templates");
old_name = Glib::build_filename (old_dir, X_("templates"));
new_name = Glib::build_filename (new_dir, X_("templates"));
copy_recurse (old_name, new_name);
old_name = Glib::build_filename (old_dir, "route_templates");
new_name = Glib::build_filename (new_dir, "route_templates");
old_name = Glib::build_filename (old_dir, X_("route_templates"));
new_name = Glib::build_filename (new_dir, X_("route_templates"));
copy_recurse (old_name, new_name);
/* presets */
old_name = Glib::build_filename (old_dir, "presets");
new_name = Glib::build_filename (new_dir, "presets");
old_name = Glib::build_filename (old_dir, X_("presets"));
new_name = Glib::build_filename (new_dir, X_("presets"));
copy_recurse (old_name, new_name);
/* presets */
old_name = Glib::build_filename (old_dir, "plugin_statuses");
new_name = Glib::build_filename (new_dir, "plugin_statuses");
old_name = Glib::build_filename (old_dir, X_("plugin_statuses"));
new_name = Glib::build_filename (new_dir, X_("plugin_statuses"));
copy_file (old_name, new_name);
@ -297,7 +303,7 @@ ARDOUR::copy_configuration_files (string const & old_dir, string const & new_dir
vector<string> export_formats;
g_mkdir_with_parents (Glib::build_filename (new_dir, export_formats_dir_name).c_str(), 0755);
find_files_matching_pattern (export_formats, old_name, "*.format");
find_files_matching_pattern (export_formats, old_name, X_("*.format"));
for (vector<string>::iterator i = export_formats.begin(); i != export_formats.end(); ++i) {
std::string from = *i;
std::string to = Glib::build_filename (new_name, Glib::path_get_basename (*i));
@ -308,28 +314,32 @@ ARDOUR::copy_configuration_files (string const & old_dir, string const & new_dir
return 0;
}
static void
maybe_copy_old_configuration_files ()
int
ARDOUR::check_for_old_configuration_files (boost::function<bool (std::string const&, std::string const&, int)> ui_handler)
{
int version = atoi (X_(PROGRAM_VERSION));
if (version <= 1) {
return;
int current_version = atoi (X_(PROGRAM_VERSION));
if (current_version <= 1) {
return 0;
}
version--;
int old_version = current_version - 1;
string old_config_dir = user_config_directory (version);
string old_config_dir = user_config_directory (old_version);
/* pass in the current version explicitly to avoid creation */
string current_config_dir = user_config_directory (current_version);
if (Glib::file_test (old_config_dir, Glib::FILE_TEST_IS_DIR)) {
string current_config_dir = user_config_directory ();
boost::optional<bool> r = CopyConfigurationFiles (old_config_dir, current_config_dir, version); /* EMIT SIGNAL */
if (r) {
if (r.get()) {
copy_configuration_files (old_config_dir, current_config_dir, version);
if (!Glib::file_test (current_config_dir, Glib::FILE_TEST_IS_DIR)) {
if (Glib::file_test (old_config_dir, Glib::FILE_TEST_IS_DIR)) {
if (ui_handler (old_config_dir, current_config_dir, old_version)) {
copy_configuration_files (old_config_dir, current_config_dir, old_version);
return 1;
}
}
}
return 0;
}
bool
@ -378,8 +388,6 @@ ARDOUR::init (bool use_windows_vst, bool try_optimization, const char* localedir
// allow ardour the absolute maximum number of open files
lotsa_files_please ();
maybe_copy_old_configuration_files ();
#ifdef HAVE_LRDF
lrdf_init();
#endif