Prepare session-metadata export to external command
This commit is contained in:
parent
0268489c78
commit
d169864b5b
|
@ -132,6 +132,10 @@ class LIBARDOUR_API SessionMetadata : public PBD::StatefulDestructible
|
||||||
void set_organization (const std::string &);
|
void set_organization (const std::string &);
|
||||||
void set_country (const std::string &);
|
void set_country (const std::string &);
|
||||||
|
|
||||||
|
/*** Export ***/
|
||||||
|
typedef std::map<std::string,std::string> MetaDataMap;
|
||||||
|
void av_export_tag (MetaDataMap&) const;
|
||||||
|
|
||||||
/*** Serialization ***/
|
/*** Serialization ***/
|
||||||
XMLNode & get_state (); //serializes stuff in the map, to be stored in session file
|
XMLNode & get_state (); //serializes stuff in the map, to be stored in session file
|
||||||
XMLNode & get_user_state (); //serializes stuff in the user_map, to be stored in user's config file
|
XMLNode & get_user_state (); //serializes stuff in the user_map, to be stored in user's config file
|
||||||
|
|
|
@ -647,3 +647,29 @@ SessionMetadata::set_country (const string & v)
|
||||||
{
|
{
|
||||||
set_value ("user_country", v);
|
set_value ("user_country", v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SessionMetadata::av_export_tag (MetaDataMap& meta) const
|
||||||
|
{
|
||||||
|
if (year() > 0) {
|
||||||
|
std::ostringstream osstream; osstream << year();
|
||||||
|
meta["year"] = osstream.str();
|
||||||
|
}
|
||||||
|
if (track_number() > 0) {
|
||||||
|
std::ostringstream osstream; osstream << track_number();
|
||||||
|
meta["track"] = osstream.str();
|
||||||
|
}
|
||||||
|
if (disc_number() > 0) {
|
||||||
|
std::ostringstream osstream; osstream << disc_number();
|
||||||
|
meta["disc"] = osstream.str();
|
||||||
|
}
|
||||||
|
if (!title().empty()) { meta["title"] = title(); }
|
||||||
|
if (!artist().empty()) { meta["author"] = artist(); }
|
||||||
|
if (!album_artist().empty()) { meta["album_artist"] = album_artist(); }
|
||||||
|
if (!album().empty()) { meta["album"] = album(); }
|
||||||
|
if (!genre().empty()) { meta["genre"] = genre(); }
|
||||||
|
if (!composer().empty()) { meta["composer"] = composer(); }
|
||||||
|
if (!comment().empty()) { meta["comment"] = comment(); }
|
||||||
|
if (!copyright().empty()) { meta["copyright"] = copyright(); }
|
||||||
|
if (!subtitle().empty()) { meta["description"] = subtitle(); }
|
||||||
|
}
|
||||||
|
|
|
@ -118,6 +118,8 @@ class LIBPBD_API SystemExec
|
||||||
|
|
||||||
virtual ~SystemExec ();
|
virtual ~SystemExec ();
|
||||||
|
|
||||||
|
static char* format_key_value_parameter (std::string, std::string);
|
||||||
|
|
||||||
std::string to_s() const;
|
std::string to_s() const;
|
||||||
|
|
||||||
/** fork and execute the given program
|
/** fork and execute the given program
|
||||||
|
|
|
@ -236,6 +236,39 @@ SystemExec::SystemExec (std::string command, const std::map<char, std::string> s
|
||||||
make_envp();
|
make_envp();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char*
|
||||||
|
SystemExec::format_key_value_parameter (std::string key, std::string value)
|
||||||
|
{
|
||||||
|
size_t start_pos = 0;
|
||||||
|
std::string v1 = value;
|
||||||
|
while((start_pos = v1.find_first_not_of(
|
||||||
|
"abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789(),.\"'",
|
||||||
|
start_pos)) != std::string::npos)
|
||||||
|
{
|
||||||
|
v1.replace(start_pos, 1, "_");
|
||||||
|
start_pos += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
start_pos = 0;
|
||||||
|
while((start_pos = v1.find("\"", start_pos)) != std::string::npos) {
|
||||||
|
v1.replace(start_pos, 1, "\\\"");
|
||||||
|
start_pos += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t len = key.length() + v1.length() + 4;
|
||||||
|
char *mds = (char*) calloc(len, sizeof(char));
|
||||||
|
#ifdef PLATFORM_WINDOWS
|
||||||
|
/* SystemExec::make_wargs() adds quotes around the complete argument
|
||||||
|
* windows uses CreateProcess() with a parameter string
|
||||||
|
* (and not an array list of separate arguments)
|
||||||
|
*/
|
||||||
|
snprintf(mds, len, "%s=%s", key.c_str(), v1.c_str());
|
||||||
|
#else
|
||||||
|
snprintf(mds, len, "%s=\"%s\"", key.c_str(), v1.c_str());
|
||||||
|
#endif
|
||||||
|
return mds;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SystemExec::make_argp_escaped(std::string command, const std::map<char, std::string> subs)
|
SystemExec::make_argp_escaped(std::string command, const std::map<char, std::string> subs)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user