2020-02-05 Fred Gleason <fredg@paravelsystems.com>

* Added support for the '%wi', '%wm' and '%wr' wildcards to
	the '--metadata-pattern=' switch in rdexport(1).
This commit is contained in:
Fred Gleason 2020-02-05 08:03:25 -05:00
parent cf5018c32e
commit 6eee8cb9d9
5 changed files with 150 additions and 39 deletions

View File

@ -19514,3 +19514,6 @@
2020-02-04 Fred Gleason <fredg@paravelsystems.com>
* Added '--set-string-isrc', '--set-string-recording-mbid' and
'--set-string-release-mbid' switches to rdimport(1).
2020-02-05 Fred Gleason <fredg@paravelsystems.com>
* Added support for the '%wi', '%wm' and '%wr' wildcards to
the '--metadata-pattern=' switch in rdexport(1).

View File

@ -248,7 +248,9 @@
<varlistentry>
<term><userinput>%g</userinput></term>
<listitem>
<para>Rivendell group name</para>
<para>
Rivendell Group Name
</para>
</listitem>
</varlistentry>
@ -336,6 +338,34 @@
</listitem>
</varlistentry>
<varlistentry>
<term><userinput>%v</userinput></term>
<listitem>
<para>Event length in seconds (rounded down)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><userinput>%wi</userinput></term>
<listitem>
<para>International Standard Recording Code [ISRC]</para>
</listitem>
</varlistentry>
<varlistentry>
<term><userinput>%wm</userinput></term>
<listitem>
<para>MusicBrainz Recording ID</para>
</listitem>
</varlistentry>
<varlistentry>
<term><userinput>%wr</userinput></term>
<listitem>
<para>MusicBrainz Release ID</para>
</listitem>
</varlistentry>
<varlistentry>
<term><userinput>%y</userinput></term>
<listitem>
@ -343,6 +373,13 @@
</listitem>
</varlistentry>
<varlistentry>
<term><userinput>%%</userinput></term>
<listitem>
<para>A literal '%'</para>
</listitem>
</varlistentry>
</variablelist>
</listitem>
</varlistentry>

View File

@ -1861,6 +1861,22 @@ RDLogLine::State RDLogLine::setEvent(int mach,RDLogLine::TransType next_type,
void RDLogLine::loadCart(int cartnum,RDLogLine::TransType next_type,int mach,
bool timescale,RDLogLine::TransType type,int len)
{
loadCart(cartnum);
if(len>=0) {
log_forced_length=len;
log_enforce_length=true;
}
if(type!=RDLogLine::NoTrans) {
log_trans_type=type;
}
log_state=setEvent(mach,next_type,timescale);
log_timescaling_active=log_enforce_length&&timescale;
}
void RDLogLine::loadCart(int cartnum,int cutnum)
{
QString sql=QString("select ")+
"CART.TYPE,"+ // 00
@ -1919,7 +1935,6 @@ void RDLogLine::loadCart(int cartnum,RDLogLine::TransType next_type,int mach,
log_artist=q->value(3).toString();
log_album=q->value(4).toString();
log_year=q->value(5).toDate();
// log_isrc=q->value(6).toString();
log_label=q->value(6).toString();
log_client=q->value(7).toString();
log_agency=q->value(8).toString();
@ -1931,15 +1946,9 @@ void RDLogLine::loadCart(int cartnum,RDLogLine::TransType next_type,int mach,
log_play_order=(RDCart::PlayOrder)q->value(15).toInt();
log_start_datetime=q->value(16).toDateTime();
log_end_datetime=q->value(17).toDateTime();
log_forced_length=q->value(12).toUInt();
log_enforce_length=RDBool(q->value(18).toString());
log_preserve_pitch=RDBool(q->value(19).toString());
if(len<0) {
log_forced_length=q->value(12).toUInt();
log_enforce_length=RDBool(q->value(18).toString());
}
else {
log_forced_length=len;
log_enforce_length=true;
}
log_now_next_enabled=RDBool(q->value(20).toString());
log_asyncronous=RDBool(q->value(21).toString());
log_publisher=q->value(22).toString();
@ -1949,12 +1958,89 @@ void RDLogLine::loadCart(int cartnum,RDLogLine::TransType next_type,int mach,
log_cart_notes=q->value(26).toString();
log_group_color=QColor(q->value(27).toString());
log_play_source=RDLogLine::UnknownSource;
if(type!=RDLogLine::NoTrans) {
log_trans_type=type;
}
delete q;
log_state=setEvent(mach,next_type,timescale);
log_timescaling_active=log_enforce_length&&timescale;
if(cutnum>0) {
sql=QString("select ")+
"LENGTH,"+ // 00
"START_POINT,"+ // 01
"END_POINT,"+ // 02
"SEGUE_START_POINT,"+ // 03
"SEGUE_END_POINT,"+ // 04
"SEGUE_GAIN,"+ // 05
"TALK_START_POINT,"+ // 06
"TALK_END_POINT,"+ // 07
"HOOK_START_POINT,"+ // 08
"HOOK_END_POINT,"+ // 09
"OUTCUE,"+ // 10
"ISRC,"+ // 11
"ISCI,"+ // 12
"DESCRIPTION,"+ // 13
"RECORDING_MBID,"+ // 14
"RELEASE_MBID "+ // 15
"from CUTS where CUT_NAME=\""+RDCut::cutName(cartnum,cutnum)+"\"";
q=new RDSqlQuery(sql);
if(q->first()) {
if(log_hook_mode &&(q->value(8).toInt()>=0)&&(q->value(9).toInt()>=0)) {
log_start_point[0]=q->value(8).toInt();
log_end_point[0]=q->value(9).toInt();
log_segue_start_point[0]=-1;
log_segue_end_point[0]=-1;
log_talk_start=-1;
log_talk_end=-1;
}
else {
log_start_point[0]=q->value(1).toInt();
log_end_point[0]=q->value(2).toInt();
if(log_start_point[RDLogLine::LogPointer]>=0 ||
log_end_point[RDLogLine::LogPointer]>=0) {
log_effective_length=log_end_point[RDLogLine::LogPointer]-
log_start_point[RDLogLine::LogPointer];
}
else {
log_effective_length=q->value(0).toUInt();
}
log_segue_start_point[0]=q->value(3).toInt();
log_segue_end_point[0]=q->value(4).toInt();
log_talk_start=q->value(6).toInt();
log_talk_end=q->value(7).toInt();
}
log_hook_start=q->value(8).toInt();
log_hook_end=q->value(9).toInt();
if(log_talk_end>log_end_point[RDLogLine::LogPointer] &&
log_end_point[RDLogLine::LogPointer]>=0) {
log_talk_end=log_end_point[RDLogLine::LogPointer];
}
if(log_talk_end<log_start_point[RDLogLine::LogPointer]) {
log_talk_end=0;
log_talk_start=0;
}
else {
if(log_talk_start<log_start_point[RDLogLine::LogPointer]) {
log_talk_start=0;
log_talk_end-=log_start_point[RDLogLine::LogPointer];
}
if(log_talk_start>log_end_point[RDLogLine::LogPointer] &&
log_end_point[RDLogLine::LogPointer]>=0) {
log_talk_start=0;
log_talk_end=0;
}
}
log_talk_length=log_talk_end-log_talk_start;
}
if(segueStartPoint(RDLogLine::AutoPointer)>=0) {
log_average_segue_length=segueStartPoint(RDLogLine::AutoPointer)-
startPoint(RDLogLine::AutoPointer);
}
log_outcue=q->value(10).toString();
log_isrc=q->value(11).toString();
log_isci=q->value(12).toString();
log_description=q->value(13).toString();
log_recording_mbid=q->value(14).toString();
log_release_mbid=q->value(15).toString();
log_segue_gain_cut=q->value(5).toInt();
delete q;
}
}
@ -2147,10 +2233,11 @@ QString RDLogLine::resolveNowNextDateTime(const QString &str,
}
QString RDLogLine::resolveWildcards(unsigned cartnum,const QString &pattern)
QString RDLogLine::resolveWildcards(unsigned cartnum,const QString &pattern,
int cutnum)
{
RDLogLine logline;
logline.loadCart(cartnum,RDLogLine::Play,0,false);
logline.loadCart(cartnum,cutnum);
return logline.resolveWildcards(pattern);
}

View File

@ -261,11 +261,13 @@ class RDLogLine
void loadCart(int cartnum,RDLogLine::TransType next_type,int mach,
bool timescale,RDLogLine::TransType type=RDLogLine::NoTrans,
int len=-1);
void loadCart(int cartnum,int cutnum=-1);
void refreshPointers();
QString xml(int line) const;
static QString resolveNowNextDateTime(const QString &str,const QString &code,
const QDateTime &dt);
static QString resolveWildcards(unsigned cartnum,const QString &pattern);
static QString resolveWildcards(unsigned cartnum,const QString &pattern,
int cutnum=-1);
static QString startSourceText(RDLogLine::StartSource src);
static QString transText(RDLogLine::TransType trans);
static QString typeText(RDLogLine::Type type);

View File

@ -466,27 +466,9 @@ void MainObject::ExportCut(RDCart *cart,RDCut *cut)
QString MainObject::ResolveOutputName(RDCart *cart,RDCut *cut,
const QString &exten)
{
QString name=export_metadata_pattern;
name.replace("%a",cart->artist());
name.replace("%b",cart->label());
name.replace("%c",cart->client());
name.replace("%e",cart->agency());
name.replace("%g",cart->groupName());
name.replace("%h",QString().sprintf("%d",cut->length()));
name.replace("%i",cut->description());
name.replace("%j",QString().sprintf("%03d",RDCut::cutNumber(cut->cutName())));
name.replace("%l",cart->album());
name.replace("%m",cart->composer());
name.replace("%n",QString().sprintf("%06u",cart->number()));
name.replace("%o",cut->outcue());
name.replace("%p",cart->publisher());
name.replace("%r",cart->conductor());
name.replace("%s",cart->songId());
name.replace("%t",cart->title());
name.replace("%u",cart->userDefined());
name.replace("%y",QString().sprintf("%d",cart->year()));
QString name=
RDLogLine::resolveWildcards(cart->number(),export_metadata_pattern,
cut->cutNumber());
QString ret=SanitizePath(name);
if(!export_allow_clobber) {
int count=1;