2017-10-16 Fred Gleason <fredg@paravelsystems.com>

* Implemented '%k', '%K', '%q' and '%Q' metadata wildcards for
	rdimport(1).
This commit is contained in:
Fred Gleason 2017-10-16 14:21:51 -04:00
parent 9a5db7b408
commit 1dade3e38e
6 changed files with 188 additions and 64 deletions

View File

@ -16162,3 +16162,6 @@
2017-10-16 Fred Gleason <fredg@paravelsystems.com>
* Fixed a bug in 'RDCut::autoSegue()' that caused an error when
setting segues by level [Github issue #000182].
2017-10-16 Fred Gleason <fredg@paravelsystems.com>
* Implemented '%k', '%K', '%q' and '%Q' metadata wildcards for
rdimport(1).

View File

@ -294,6 +294,22 @@
</listitem>
</varlistentry>
<varlistentry>
<term><userinput>%k</userinput></term>
<listitem>
<para>Time component of the cut start date/time, in
format <userinput>HH:MM:SS</userinput></para>
</listitem>
</varlistentry>
<varlistentry>
<term><userinput>%K</userinput></term>
<listitem>
<para>Time component of the cut end date/time, in
format <userinput>HH:MM:SS</userinput></para>
</listitem>
</varlistentry>
<varlistentry>
<term><userinput>%l</userinput></term>
<listitem>
@ -329,6 +345,29 @@
</listitem>
</varlistentry>
<varlistentry>
<term><userinput>%q</userinput></term>
<listitem>
<para>Date component of the cut start date/time, in
format <userinput>YYYY-MM-DD</userinput></para>
</listitem>
</varlistentry>
<varlistentry>
<term><userinput>%Q</userinput></term>
<listitem>
<para>Date component of the cut end date/time, in
format <userinput>YYYY-MM-DD</userinput></para>
</listitem>
</varlistentry>
<varlistentry>
<term><userinput>%l</userinput></term>
<listitem>
<para>Album</para>
</listitem>
</varlistentry>
<varlistentry>
<term><userinput>%r</userinput></term>
<listitem>

View File

@ -17,13 +17,13 @@ Now Next Field
%h %H Event length (in milliseconds)
%i %I Cut Description
%j %J Cut Number
%k %K [Unassigned]
%k %K Start [%k]/end [%K] time for rdimport(1) [HH:MM:SS]
%l %L Album
%m %M Composer
%n %N The Rivendell cart number
%o %O Outcue
%p %P Publisher
%q %Q [Unassigned]
%q %Q Start [%q]/end [%Q] date for rdimport(1) [YYYY-MM-DD]
%r %R Conductor
%s %S Song ID
%t %T Title

View File

@ -806,6 +806,7 @@ QDate RDWaveData::startDate() const
void RDWaveData::setStartDate(const QDate &date)
{
data_start_date=date;
data_datetime_set=true;
}
@ -818,6 +819,13 @@ QTime RDWaveData::startTime() const
void RDWaveData::setStartTime(const QTime &time)
{
data_start_time=time;
data_datetime_set=true;
}
QDateTime RDWaveData::startDateTime() const
{
return QDateTime(data_start_date,data_start_time);
}
@ -854,6 +862,7 @@ QDate RDWaveData::endDate() const
void RDWaveData::setEndDate(const QDate &date)
{
data_end_date=date;
data_datetime_set=true;
}
@ -866,6 +875,13 @@ QTime RDWaveData::endTime() const
void RDWaveData::setEndTime(const QTime &time)
{
data_end_time=time;
data_datetime_set=true;
}
QDateTime RDWaveData::endDateTime() const
{
return QDateTime(data_end_date,data_end_time);
}
@ -929,6 +945,24 @@ void RDWaveData::setPlayGain(int lvl)
}
bool RDWaveData::checkDateTimes()
{
if(data_datetime_set) {
if(startDateTime()<endDateTime()) {
return true;
}
else {
setStartDate(QDate());
setEndDate(QDate());
setStartTime(QTime());
setEndTime(QTime());
return false;
}
}
return true;
}
QString RDWaveData::dump() const
{
QString ret="";
@ -1072,6 +1106,7 @@ QString RDWaveData::dump() const
void RDWaveData::clear()
{
data_metadata_found=false;
data_datetime_set=false;
data_cart_number=0;
data_cart_type=RDWaveData::AudioType;
data_cut_number=0;

View File

@ -105,7 +105,6 @@ class RDWaveData
void setOutCue(const QString &str);
RDWaveData::EndType endType() const;
void setEndType(RDWaveData::EndType type);
int forcedLength() const;
void setForcedLength(int msecs);
int averageLength() const;
@ -132,7 +131,6 @@ class RDWaveData
void setOwner(const QString &str);
QDateTime metadataDatetime() const;
void setMetadataDatetime(const QDateTime &dt);
bool dayOfWeek(int dow) const;
void setDayOfWeek(int dow,bool state);
int weight() const;
@ -173,10 +171,12 @@ class RDWaveData
void setStartDate(const QDate &date);
QTime startTime() const;
void setStartTime(const QTime &time);
QDateTime startDateTime() const;
QDate endDate() const;
void setEndDate(const QDate &date);
QTime endTime() const;
void setEndTime(const QTime &time);
QDateTime endDateTime() const;
QTime daypartStartTime() const;
void setDaypartStartTime(const QTime &time);
QTime daypartEndTime() const;
@ -187,6 +187,7 @@ class RDWaveData
void setAudioSettings(const RDSettings &settings);
int playGain() const;
void setPlayGain(int lvl);
bool checkDateTimes();
QString dump() const;
void clear();
static QString endTypeText(EndType type);
@ -195,6 +196,7 @@ class RDWaveData
private:
bool data_metadata_found;
bool data_datetime_set;
unsigned data_cart_number;
CartType data_cart_type;
int data_cut_number;

View File

@ -1039,6 +1039,12 @@ MainObject::Result MainObject::ImportFile(const QString &filename,
QString groupname=effective_group->name();
found_cart=RunPattern(import_metadata_pattern,RDGetBasePart(filename),
wavedata,&groupname);
if(!wavedata->checkDateTimes()) {
PrintLogDateTime(stderr);
fprintf(stderr,
" File \"%s\": End date/time cannot be prior to start date/time, ignoring...\n",
(const char *)filename.utf8());
}
if(groupname!=effective_group->name()) {
delete effective_group;
effective_group=new RDGroup(groupname);
@ -1652,6 +1658,8 @@ bool MainObject::RunPattern(const QString &pattern,const QString &filename,
QString value;
QChar delimiter;
bool found_cartnum=false;
QTime time;
QDate date;
//
// Initialize Pattern Parser
@ -1701,6 +1709,22 @@ bool MainObject::RunPattern(const QString &pattern,const QString &filename,
wavedata->setMetadataFound(true);
break;
case 'k':
time=QTime::fromString(value);
if(time.isValid()) {
wavedata->setStartTime(time);
wavedata->setMetadataFound(true);
}
break;
case 'K':
time=QTime::fromString(value);
if(time.isValid()) {
wavedata->setEndTime(time);
wavedata->setMetadataFound(true);
}
break;
case 'l':
wavedata->setAlbum(value);
wavedata->setMetadataFound(true);
@ -1727,6 +1751,22 @@ bool MainObject::RunPattern(const QString &pattern,const QString &filename,
wavedata->setMetadataFound(true);
break;
case 'q':
date=QDate::fromString(value,Qt::ISODate);
if(date.isValid()) {
wavedata->setStartDate(date);
wavedata->setMetadataFound(true);
}
break;
case 'Q':
date=QDate::fromString(value,Qt::ISODate);
if(date.isValid()) {
wavedata->setEndDate(date);
wavedata->setMetadataFound(true);
}
break;
case 'r':
wavedata->setConductor(value);
wavedata->setMetadataFound(true);
@ -1792,6 +1832,7 @@ bool MainObject::RunPattern(const QString &pattern,const QString &filename,
}
}
}
return found_cartnum;
}
@ -1812,11 +1853,15 @@ bool MainObject::VerifyPattern(const QString &pattern)
case 'e':
case 'g':
case 'i':
case 'k':
case 'K':
case 'l':
case 'm':
case 'n':
case 'o':
case 'p':
case 'q':
case 'Q':
case 'r':
case 's':
case 't':