mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-07-31 16:09:35 +02:00
2017-10-16 Fred Gleason <fredg@paravelsystems.com>
* Implemented '%k', '%K', '%q' and '%Q' metadata wildcards for rdimport(1).
This commit is contained in:
parent
9a5db7b408
commit
1dade3e38e
@ -16162,3 +16162,6 @@
|
|||||||
2017-10-16 Fred Gleason <fredg@paravelsystems.com>
|
2017-10-16 Fred Gleason <fredg@paravelsystems.com>
|
||||||
* Fixed a bug in 'RDCut::autoSegue()' that caused an error when
|
* Fixed a bug in 'RDCut::autoSegue()' that caused an error when
|
||||||
setting segues by level [Github issue #000182].
|
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).
|
||||||
|
@ -294,6 +294,22 @@
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</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>
|
<varlistentry>
|
||||||
<term><userinput>%l</userinput></term>
|
<term><userinput>%l</userinput></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
@ -329,6 +345,29 @@
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</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>
|
<varlistentry>
|
||||||
<term><userinput>%r</userinput></term>
|
<term><userinput>%r</userinput></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
@ -17,13 +17,13 @@ Now Next Field
|
|||||||
%h %H Event length (in milliseconds)
|
%h %H Event length (in milliseconds)
|
||||||
%i %I Cut Description
|
%i %I Cut Description
|
||||||
%j %J Cut Number
|
%j %J Cut Number
|
||||||
%k %K [Unassigned]
|
%k %K Start [%k]/end [%K] time for rdimport(1) [HH:MM:SS]
|
||||||
%l %L Album
|
%l %L Album
|
||||||
%m %M Composer
|
%m %M Composer
|
||||||
%n %N The Rivendell cart number
|
%n %N The Rivendell cart number
|
||||||
%o %O Outcue
|
%o %O Outcue
|
||||||
%p %P Publisher
|
%p %P Publisher
|
||||||
%q %Q [Unassigned]
|
%q %Q Start [%q]/end [%Q] date for rdimport(1) [YYYY-MM-DD]
|
||||||
%r %R Conductor
|
%r %R Conductor
|
||||||
%s %S Song ID
|
%s %S Song ID
|
||||||
%t %T Title
|
%t %T Title
|
||||||
|
@ -806,6 +806,7 @@ QDate RDWaveData::startDate() const
|
|||||||
void RDWaveData::setStartDate(const QDate &date)
|
void RDWaveData::setStartDate(const QDate &date)
|
||||||
{
|
{
|
||||||
data_start_date=date;
|
data_start_date=date;
|
||||||
|
data_datetime_set=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -818,6 +819,13 @@ QTime RDWaveData::startTime() const
|
|||||||
void RDWaveData::setStartTime(const QTime &time)
|
void RDWaveData::setStartTime(const QTime &time)
|
||||||
{
|
{
|
||||||
data_start_time=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)
|
void RDWaveData::setEndDate(const QDate &date)
|
||||||
{
|
{
|
||||||
data_end_date=date;
|
data_end_date=date;
|
||||||
|
data_datetime_set=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -866,6 +875,13 @@ QTime RDWaveData::endTime() const
|
|||||||
void RDWaveData::setEndTime(const QTime &time)
|
void RDWaveData::setEndTime(const QTime &time)
|
||||||
{
|
{
|
||||||
data_end_time=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 RDWaveData::dump() const
|
||||||
{
|
{
|
||||||
QString ret="";
|
QString ret="";
|
||||||
@ -1072,6 +1106,7 @@ QString RDWaveData::dump() const
|
|||||||
void RDWaveData::clear()
|
void RDWaveData::clear()
|
||||||
{
|
{
|
||||||
data_metadata_found=false;
|
data_metadata_found=false;
|
||||||
|
data_datetime_set=false;
|
||||||
data_cart_number=0;
|
data_cart_number=0;
|
||||||
data_cart_type=RDWaveData::AudioType;
|
data_cart_type=RDWaveData::AudioType;
|
||||||
data_cut_number=0;
|
data_cut_number=0;
|
||||||
|
@ -105,7 +105,6 @@ class RDWaveData
|
|||||||
void setOutCue(const QString &str);
|
void setOutCue(const QString &str);
|
||||||
RDWaveData::EndType endType() const;
|
RDWaveData::EndType endType() const;
|
||||||
void setEndType(RDWaveData::EndType type);
|
void setEndType(RDWaveData::EndType type);
|
||||||
|
|
||||||
int forcedLength() const;
|
int forcedLength() const;
|
||||||
void setForcedLength(int msecs);
|
void setForcedLength(int msecs);
|
||||||
int averageLength() const;
|
int averageLength() const;
|
||||||
@ -132,7 +131,6 @@ class RDWaveData
|
|||||||
void setOwner(const QString &str);
|
void setOwner(const QString &str);
|
||||||
QDateTime metadataDatetime() const;
|
QDateTime metadataDatetime() const;
|
||||||
void setMetadataDatetime(const QDateTime &dt);
|
void setMetadataDatetime(const QDateTime &dt);
|
||||||
|
|
||||||
bool dayOfWeek(int dow) const;
|
bool dayOfWeek(int dow) const;
|
||||||
void setDayOfWeek(int dow,bool state);
|
void setDayOfWeek(int dow,bool state);
|
||||||
int weight() const;
|
int weight() const;
|
||||||
@ -173,10 +171,12 @@ class RDWaveData
|
|||||||
void setStartDate(const QDate &date);
|
void setStartDate(const QDate &date);
|
||||||
QTime startTime() const;
|
QTime startTime() const;
|
||||||
void setStartTime(const QTime &time);
|
void setStartTime(const QTime &time);
|
||||||
|
QDateTime startDateTime() const;
|
||||||
QDate endDate() const;
|
QDate endDate() const;
|
||||||
void setEndDate(const QDate &date);
|
void setEndDate(const QDate &date);
|
||||||
QTime endTime() const;
|
QTime endTime() const;
|
||||||
void setEndTime(const QTime &time);
|
void setEndTime(const QTime &time);
|
||||||
|
QDateTime endDateTime() const;
|
||||||
QTime daypartStartTime() const;
|
QTime daypartStartTime() const;
|
||||||
void setDaypartStartTime(const QTime &time);
|
void setDaypartStartTime(const QTime &time);
|
||||||
QTime daypartEndTime() const;
|
QTime daypartEndTime() const;
|
||||||
@ -187,6 +187,7 @@ class RDWaveData
|
|||||||
void setAudioSettings(const RDSettings &settings);
|
void setAudioSettings(const RDSettings &settings);
|
||||||
int playGain() const;
|
int playGain() const;
|
||||||
void setPlayGain(int lvl);
|
void setPlayGain(int lvl);
|
||||||
|
bool checkDateTimes();
|
||||||
QString dump() const;
|
QString dump() const;
|
||||||
void clear();
|
void clear();
|
||||||
static QString endTypeText(EndType type);
|
static QString endTypeText(EndType type);
|
||||||
@ -195,6 +196,7 @@ class RDWaveData
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
bool data_metadata_found;
|
bool data_metadata_found;
|
||||||
|
bool data_datetime_set;
|
||||||
unsigned data_cart_number;
|
unsigned data_cart_number;
|
||||||
CartType data_cart_type;
|
CartType data_cart_type;
|
||||||
int data_cut_number;
|
int data_cut_number;
|
||||||
|
@ -1039,6 +1039,12 @@ MainObject::Result MainObject::ImportFile(const QString &filename,
|
|||||||
QString groupname=effective_group->name();
|
QString groupname=effective_group->name();
|
||||||
found_cart=RunPattern(import_metadata_pattern,RDGetBasePart(filename),
|
found_cart=RunPattern(import_metadata_pattern,RDGetBasePart(filename),
|
||||||
wavedata,&groupname);
|
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()) {
|
if(groupname!=effective_group->name()) {
|
||||||
delete effective_group;
|
delete effective_group;
|
||||||
effective_group=new RDGroup(groupname);
|
effective_group=new RDGroup(groupname);
|
||||||
@ -1652,6 +1658,8 @@ bool MainObject::RunPattern(const QString &pattern,const QString &filename,
|
|||||||
QString value;
|
QString value;
|
||||||
QChar delimiter;
|
QChar delimiter;
|
||||||
bool found_cartnum=false;
|
bool found_cartnum=false;
|
||||||
|
QTime time;
|
||||||
|
QDate date;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Initialize Pattern Parser
|
// Initialize Pattern Parser
|
||||||
@ -1672,85 +1680,117 @@ bool MainObject::RunPattern(const QString &pattern,const QString &filename,
|
|||||||
if(macro_active) {
|
if(macro_active) {
|
||||||
if((filename.at(i)==delimiter)||(i==filename.length())) {
|
if((filename.at(i)==delimiter)||(i==filename.length())) {
|
||||||
switch(field) {
|
switch(field) {
|
||||||
case 'a':
|
case 'a':
|
||||||
wavedata->setArtist(value);
|
wavedata->setArtist(value);
|
||||||
wavedata->setMetadataFound(true);
|
wavedata->setMetadataFound(true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'b':
|
||||||
|
wavedata->setLabel(value);
|
||||||
|
wavedata->setMetadataFound(true);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'b':
|
case 'c':
|
||||||
wavedata->setLabel(value);
|
wavedata->setClient(value);
|
||||||
wavedata->setMetadataFound(true);
|
wavedata->setMetadataFound(true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'c':
|
case 'e':
|
||||||
wavedata->setClient(value);
|
wavedata->setAgency(value);
|
||||||
wavedata->setMetadataFound(true);
|
wavedata->setMetadataFound(true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'e':
|
case 'g':
|
||||||
wavedata->setAgency(value);
|
*groupname=value;
|
||||||
wavedata->setMetadataFound(true);
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case 'g':
|
case 'i':
|
||||||
*groupname=value;
|
wavedata->setDescription(value);
|
||||||
break;
|
wavedata->setMetadataFound(true);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'i':
|
case 'k':
|
||||||
wavedata->setDescription(value);
|
time=QTime::fromString(value);
|
||||||
|
if(time.isValid()) {
|
||||||
|
wavedata->setStartTime(time);
|
||||||
wavedata->setMetadataFound(true);
|
wavedata->setMetadataFound(true);
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 'l':
|
case 'K':
|
||||||
wavedata->setAlbum(value);
|
time=QTime::fromString(value);
|
||||||
|
if(time.isValid()) {
|
||||||
|
wavedata->setEndTime(time);
|
||||||
wavedata->setMetadataFound(true);
|
wavedata->setMetadataFound(true);
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 'm':
|
case 'l':
|
||||||
wavedata->setComposer(value);
|
wavedata->setAlbum(value);
|
||||||
wavedata->setMetadataFound(true);
|
wavedata->setMetadataFound(true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'n':
|
case 'm':
|
||||||
wavedata->setCutId(value);
|
wavedata->setComposer(value);
|
||||||
wavedata->setMetadataFound(true);
|
wavedata->setMetadataFound(true);
|
||||||
found_cartnum=true;
|
break;
|
||||||
break;
|
|
||||||
|
|
||||||
case 'o':
|
case 'n':
|
||||||
wavedata->setOutCue(value);
|
wavedata->setCutId(value);
|
||||||
wavedata->setMetadataFound(true);
|
wavedata->setMetadataFound(true);
|
||||||
break;
|
found_cartnum=true;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'p':
|
case 'o':
|
||||||
wavedata->setPublisher(value);
|
wavedata->setOutCue(value);
|
||||||
wavedata->setMetadataFound(true);
|
wavedata->setMetadataFound(true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'r':
|
case 'p':
|
||||||
wavedata->setConductor(value);
|
wavedata->setPublisher(value);
|
||||||
wavedata->setMetadataFound(true);
|
wavedata->setMetadataFound(true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 's':
|
case 'q':
|
||||||
wavedata->setTmciSongId(value);
|
date=QDate::fromString(value,Qt::ISODate);
|
||||||
|
if(date.isValid()) {
|
||||||
|
wavedata->setStartDate(date);
|
||||||
wavedata->setMetadataFound(true);
|
wavedata->setMetadataFound(true);
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 't':
|
case 'Q':
|
||||||
wavedata->setTitle(value);
|
date=QDate::fromString(value,Qt::ISODate);
|
||||||
|
if(date.isValid()) {
|
||||||
|
wavedata->setEndDate(date);
|
||||||
wavedata->setMetadataFound(true);
|
wavedata->setMetadataFound(true);
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 'u':
|
case 'r':
|
||||||
wavedata->setUserDefined(value);
|
wavedata->setConductor(value);
|
||||||
wavedata->setMetadataFound(true);
|
wavedata->setMetadataFound(true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'y':
|
case 's':
|
||||||
wavedata->setReleaseYear(value.toInt());
|
wavedata->setTmciSongId(value);
|
||||||
wavedata->setMetadataFound(true);
|
wavedata->setMetadataFound(true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 't':
|
||||||
|
wavedata->setTitle(value);
|
||||||
|
wavedata->setMetadataFound(true);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'u':
|
||||||
|
wavedata->setUserDefined(value);
|
||||||
|
wavedata->setMetadataFound(true);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'y':
|
||||||
|
wavedata->setReleaseYear(value.toInt());
|
||||||
|
wavedata->setMetadataFound(true);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
value="";
|
value="";
|
||||||
if((ptr>=pattern.length())||(i==filename.length())) {
|
if((ptr>=pattern.length())||(i==filename.length())) {
|
||||||
@ -1792,6 +1832,7 @@ bool MainObject::RunPattern(const QString &pattern,const QString &filename,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return found_cartnum;
|
return found_cartnum;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1812,11 +1853,15 @@ bool MainObject::VerifyPattern(const QString &pattern)
|
|||||||
case 'e':
|
case 'e':
|
||||||
case 'g':
|
case 'g':
|
||||||
case 'i':
|
case 'i':
|
||||||
|
case 'k':
|
||||||
|
case 'K':
|
||||||
case 'l':
|
case 'l':
|
||||||
case 'm':
|
case 'm':
|
||||||
case 'n':
|
case 'n':
|
||||||
case 'o':
|
case 'o':
|
||||||
case 'p':
|
case 'p':
|
||||||
|
case 'q':
|
||||||
|
case 'Q':
|
||||||
case 'r':
|
case 'r':
|
||||||
case 's':
|
case 's':
|
||||||
case 't':
|
case 't':
|
||||||
|
Loading…
x
Reference in New Issue
Block a user