summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorLen Ovens <len@ovenwerks.net>2018-02-20 15:48:54 -0800
committerLen Ovens <len@ovenwerks.net>2018-02-20 15:49:37 -0800
commitd4ae858bf6ca9340444b802b53596ef2b8a2298c (patch)
treef4a81ab2d72bae497ea40d751600987328424b45 /libs
parent47970b0cd13e4a77058eb53116a6486ba4fd920e (diff)
OSC: Add session name change
Diffstat (limited to 'libs')
-rw-r--r--libs/surfaces/osc/osc.cc29
-rw-r--r--libs/surfaces/osc/osc.h2
2 files changed, 31 insertions, 0 deletions
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<ARDOUR::Stripable> 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<OSCUIRequest>
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<OSCUIRequest>
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);