2022-09-01 Fred Gleason <fredg@paravelsystems.com>

* Added CD-Text support to rdlibrary(1).

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason
2022-09-01 10:33:39 -04:00
parent 4071607711
commit 6606e39f6d
26 changed files with 984 additions and 227 deletions

View File

@@ -2,7 +2,7 @@
//
// Container Class for Compact Disc Metadata
//
// (C) Copyright 2003-2021 Fred Gleason <fredg@paravelsystems.com>
// (C) Copyright 2003-2022 Fred Gleason <fredg@paravelsystems.com>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU Library General Public License
@@ -18,6 +18,8 @@
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
#include <QObject>
#include "rddiscrecord.h"
RDDiscRecord::RDDiscRecord()
@@ -28,12 +30,23 @@ RDDiscRecord::RDDiscRecord()
void RDDiscRecord::clear()
{
for(int i=0;i<CDROM_LEADOUT;i++) {
disc_track_title[RDDiscRecord::LocalSource][i]=
QObject::tr("Track")+QString().sprintf(" %d",i+1);
disc_track_title[RDDiscRecord::RemoteSource][i]="";
}
for(int i=0;i<RDDiscRecord::LastSource;i++) {
disc_has_data[i]=false;
disc_disc_title[i]="";
disc_disc_artist[i]="";
disc_disc_album[i]="";
for(int j=0;j<CDROM_LEADOUT;j++) {
disc_track_artist[i][j]="";
}
}
disc_tracks=0;
disc_disc_id=0;
disc_disc_length=0;
disc_disc_title="";
disc_disc_artist="";
disc_disc_album="";
disc_disc_author="";
disc_disc_year=0;
disc_disc_genre="";
@@ -41,9 +54,7 @@ void RDDiscRecord::clear()
disc_disc_playorder="";
disc_disc_release_mb_id="";
for(int i=0;i<CDROM_LEADOUT;i++) {
disc_track_title[i]="";
disc_track_extended[i]="";
disc_track_artist[i]="";
disc_track_isrc[i]="";
disc_track_offset[i]=0;
disc_track_recording_mb_id[i]="";
@@ -63,6 +74,12 @@ void RDDiscRecord::setTracks(int num)
}
bool RDDiscRecord::hasData(RDDiscRecord::DataSource src) const
{
return disc_has_data[src];
}
unsigned RDDiscRecord::discLength() const
{
return disc_disc_length;
@@ -107,7 +124,7 @@ QString RDDiscRecord::mcn() const
void RDDiscRecord::setMcn(const QString &mcn)
{
disc_mcn=mcn;
disc_mcn=mcn.trimmed();
}
@@ -119,7 +136,7 @@ QString RDDiscRecord::trackRecordingMbId(int track) const
void RDDiscRecord::setTrackRecordingMbId(int track,const QString &str)
{
disc_track_recording_mb_id[track]=str;
disc_track_recording_mb_id[track]=str.trimmed();
}
@@ -131,7 +148,7 @@ QString RDDiscRecord::discReleaseMbId() const
void RDDiscRecord::setDiscReleaseMbId(const QString &mbid)
{
disc_disc_release_mb_id=mbid;
disc_disc_release_mb_id=mbid.trimmed();
}
@@ -143,55 +160,62 @@ QString RDDiscRecord::mbSubmissionUrl() const
void RDDiscRecord::setMbSubmissionUrl(const QString &url)
{
disc_mb_submission_url=url;
disc_mb_submission_url=url.trimmed();
}
QString RDDiscRecord::discTitle() const
QString RDDiscRecord::discTitle(RDDiscRecord::DataSource src) const
{
return disc_disc_title;
return disc_disc_title[src];
}
void RDDiscRecord::setDiscTitle(QString title)
void RDDiscRecord::setDiscTitle(RDDiscRecord::DataSource src,
const QString &title)
{
int n;
disc_disc_title=title;
disc_disc_title[src]=title;
disc_has_data[src]=true;
disc_disc_title[src]=title.trimmed();
if((n=title.indexOf(" / "))!=-1) {
disc_disc_artist=title.left(n);
disc_disc_album=title.right(title.length()-n-3);
disc_disc_artist[src]=title.left(n).trimmed();
disc_disc_album[src]=title.right(title.length()-n-3).trimmed();
disc_disc_author="";
}
else {
disc_disc_album=title;
disc_disc_artist=title;
disc_disc_album[src]=title.trimmed();
disc_disc_artist[src]=title.trimmed();
disc_disc_author="";
}
}
QString RDDiscRecord::discArtist() const
QString RDDiscRecord::discArtist(RDDiscRecord::DataSource src) const
{
return disc_disc_artist;
return disc_disc_artist[src];
}
void RDDiscRecord::setDiscArtist(QString artist)
void RDDiscRecord::setDiscArtist(RDDiscRecord::DataSource src,
const QString &artist)
{
disc_disc_artist=artist;
disc_has_data[src]=true;
disc_disc_artist[src]=artist.trimmed();
}
QString RDDiscRecord::discAlbum() const
QString RDDiscRecord::discAlbum(RDDiscRecord::DataSource src) const
{
return disc_disc_album;
return disc_disc_album[src];
}
void RDDiscRecord::setDiscAlbum(QString album)
void RDDiscRecord::setDiscAlbum(RDDiscRecord::DataSource src,
const QString &album)
{
disc_disc_album=album;
disc_has_data[src]=true;
disc_disc_album[src]=album.trimmed();
}
@@ -203,7 +227,7 @@ QString RDDiscRecord::discAuthor() const
void RDDiscRecord::setDiscAuthor(QString author)
{
disc_disc_author=author;
disc_disc_author=author.trimmed();
}
@@ -227,7 +251,7 @@ QString RDDiscRecord::discGenre() const
void RDDiscRecord::setDiscGenre(QString genre)
{
disc_disc_genre=genre;
disc_disc_genre=genre.trimmed();
}
@@ -239,7 +263,7 @@ QString RDDiscRecord::discLabel() const
void RDDiscRecord::setDiscLabel(const QString &str)
{
disc_disc_label=str;
disc_disc_label=str.trimmed();
}
@@ -263,7 +287,7 @@ QString RDDiscRecord::discPlayOrder() const
void RDDiscRecord::setDiscPlayOrder(QString order)
{
disc_disc_playorder=order;
disc_disc_playorder=order.trimmed();
}
@@ -284,19 +308,21 @@ void RDDiscRecord::setTrackOffset(int track,unsigned frames)
}
QString RDDiscRecord::trackTitle(int track) const
QString RDDiscRecord::trackTitle(RDDiscRecord::DataSource src,int track) const
{
if(track<CDROM_LEADOUT) {
return disc_track_title[track];
return disc_track_title[src][track];
}
return QString();
}
void RDDiscRecord::setTrackTitle(int track,QString title)
void RDDiscRecord::setTrackTitle(RDDiscRecord::DataSource src,int track,
const QString &title)
{
if(track<CDROM_LEADOUT) {
disc_track_title[track]=title;
disc_has_data[src]=true;
disc_track_title[src][track]=title.trimmed();
}
}
@@ -313,24 +339,26 @@ QString RDDiscRecord::trackExtended(int track) const
void RDDiscRecord::setTrackExtended(int track,QString text)
{
if(track<CDROM_LEADOUT) {
disc_track_extended[track]=text;
disc_track_extended[track]=text.trimmed();
}
}
QString RDDiscRecord::trackArtist(int track) const
QString RDDiscRecord::trackArtist(RDDiscRecord::DataSource src,int track) const
{
if(track<CDROM_LEADOUT) {
return disc_track_artist[track];
return disc_track_artist[src][track];
}
return QString();
}
void RDDiscRecord::setTrackArtist(int track,QString artist)
void RDDiscRecord::setTrackArtist(RDDiscRecord::DataSource src,int track,
const QString &artist)
{
if(track<CDROM_LEADOUT) {
disc_track_artist[track]=artist;
disc_has_data[src]=true;
disc_track_artist[src][track]=artist.trimmed();
}
}
@@ -355,17 +383,39 @@ QString RDDiscRecord::isrc(int track) const
}
void RDDiscRecord::setIsrc(int track,QString isrc)
void RDDiscRecord::setIsrc(int track,const QString &isrc)
{
if(track<CDROM_LEADOUT) {
disc_track_isrc[track]=isrc;
disc_track_isrc[track]=isrc.trimmed();
}
}
QString RDDiscRecord::dump()
QString RDDiscRecord::summary(RDDiscRecord::DataSource src) const
{
QString ret="RDDiscRecord::dump()\n";
QString ret;
if(!discTitle(src).isEmpty()) {
ret+="<strong>"+QObject::tr("Disc Title")+"</strong>: "+
discTitle(src)+"<br>\n";
}
if(!discArtist(src).isEmpty()) {
ret+="<strong>"+QObject::tr("Disc Artist")+"</strong>: "+
discArtist(src)+"<br>\n";
}
for(int i=0;i<tracks();i++) {
ret+="<strong>"+QObject::tr("Track")+QString().sprintf(" %2d: ",i+1)+
"</strong>"+trackTitle(src,i)+"<br>\n";
}
return ret;
}
QString RDDiscRecord::dump(RDDiscRecord::DataSource src) const
{
QString ret=QString().sprintf("RDDiscRecord::dump(%u)\n",src);
ret+=QString::asprintf("tracks: %d\n",tracks());
ret+=QString::asprintf("discLength: %d\n",discLength());
@@ -373,9 +423,9 @@ QString RDDiscRecord::dump()
ret+="mcn: "+mcn()+"\n";
ret+="discMbId: "+discMbId()+"\n";
ret+="mbSubmissionUrl: "+mbSubmissionUrl()+"\n";
ret+="discTitle: "+discTitle()+"\n";
ret+="discArtist: "+discArtist()+"\n";
ret+="discAlbum: "+discAlbum()+"\n";
ret+="discTitle: "+discTitle(src)+"\n";
ret+="discArtist: "+discArtist(src)+"\n";
ret+="discAlbum: "+discAlbum(src)+"\n";
ret+="discAuthor: "+discAuthor()+"\n";
ret+=QString::asprintf("discYear: %u\n",discYear());
ret+="discGenre: "+discGenre()+"\n";
@@ -385,7 +435,7 @@ QString RDDiscRecord::dump()
for(int i=0;i<tracks();i++) {
QString num=QString::asprintf("(%d): ",i+1);
ret+="trackOffset"+num+QString::asprintf("%u",trackOffset(i))+"\n";
ret+="trackTitle"+num+trackTitle(i)+"\n";
ret+="trackTitle"+num+trackTitle(src,i)+"\n";
ret+="trackExtended"+num+trackExtended(i)+"\n";
ret+="trackRecordingMbId"+num+trackRecordingMbId(i)+"\n";
ret+="isrc"+num+isrc(i)+"\n";