diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index 14cdf04bd8..3aff9c3c9f 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -504,6 +504,7 @@ OSC::register_callbacks() REGISTER_CALLBACK (serv, X_("/quick_snapshot_switch"), "f", quick_snapshot_switch); REGISTER_CALLBACK (serv, X_("/quick_snapshot_stay"), "", quick_snapshot_stay); REGISTER_CALLBACK (serv, X_("/quick_snapshot_stay"), "f", quick_snapshot_stay); + REGISTER_CALLBACK (serv, X_("/session_name"), "s", name_session); REGISTER_CALLBACK (serv, X_("/fit_1_track"), "", fit_1_track); REGISTER_CALLBACK (serv, X_("/fit_1_track"), "f", fit_1_track); REGISTER_CALLBACK (serv, X_("/fit_2_tracks"), "", fit_2_tracks); @@ -2523,6 +2524,34 @@ OSC::use_group (float value, lo_message msg) return 0; } +int +OSC::name_session (char *n, lo_message msg) +{ + if (!session) { + return -1; + } + string new_name = n; + char illegal = Session::session_name_is_legal (new_name); + + if (illegal) { + PBD::warning << (string_compose (_("To ensure compatibility with various systems\n" + "session names may not contain a '%1' character"), illegal)) << endmsg; + return -1; + } + switch (session->rename (new_name)) { + case -1: + PBD::warning << (_("That name is already in use by another directory/folder. Please try again.")) << endmsg; + break; + case 0: + return 0; + break; + default: + PBD::warning << (_("Renaming this session failed.\nThings could be seriously messed up at this point")) << endmsg; + break; + } + return -1; +} + uint32_t OSC::get_sid (boost::shared_ptr strip, lo_address addr) { diff --git a/libs/surfaces/osc/osc.h b/libs/surfaces/osc/osc.h index 57f0bc9e5a..75c88f8e1c 100644 --- a/libs/surfaces/osc/osc.h +++ b/libs/surfaces/osc/osc.h @@ -493,6 +493,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI PATH_CALLBACK1_MSG(jog_mode,f); PATH_CALLBACK1_MSG(bank_delta,f); PATH_CALLBACK1_MSG(use_group,f); + PATH_CALLBACK1_MSG_s(name_session,s); PATH_CALLBACK1_MSG_s(sel_group,s); PATH_CALLBACK1_MSG_s(sel_rename,s); PATH_CALLBACK1_MSG_s(sel_comment,s); @@ -688,6 +689,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI int refresh_surface (lo_message msg); int custom_clear (lo_message msg); int custom_mode (float state, lo_message msg); + int name_session (char *n, lo_message msg); // select int sel_send_pagesize (uint32_t size, lo_message msg); int sel_send_page (int page, lo_message msg);