File indexing completed on 2024-05-12 04:50:59

0001 /*
0002     SPDX-FileCopyrightText: 2010 Michal Malek <michalm@jabster.pl>
0003     SPDX-FileCopyrightText: 1998-2008 Sebastian Trueg <trueg@k3b.org>
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "k3baudiocdtracksource.h"
0008 #include "k3baudiocdtrackreader.h"
0009 #include "k3baudiodoc.h"
0010 #include "k3baudiotrack.h"
0011 #include "k3bcore.h"
0012 #include "k3bdevice.h"
0013 #include "k3bdevicemanager.h"
0014 #include "k3bdeviceselectiondialog.h"
0015 #include "k3bthreadwidget.h"
0016 #include "k3btoc.h"
0017 #include "k3b_i18n.h"
0018 
0019 #include <QDebug>
0020 
0021 
0022 class K3b::AudioCdTrackSource::Private
0023 {
0024 public:
0025     Private( AudioCdTrackSource* source ) : q( source ) {}
0026 
0027     AudioCdTrackSource* q;
0028     unsigned int discId;
0029     Msf length;
0030     Device::Toc toc;
0031     int cdTrackNumber;
0032 
0033     QString artist;
0034     QString title;
0035     QString cdArtist;
0036     QString cdTitle;
0037 
0038     // ripping
0039     // we only save the device we last saw the CD in
0040     Device::Device* lastUsedDevice;
0041     Msf position;
0042     bool initialized;
0043 
0044     bool searchForAudioCD( Device::Device* ) const;
0045 };
0046 
0047 
0048 bool K3b::AudioCdTrackSource::Private::searchForAudioCD( K3b::Device::Device* dev ) const
0049 {
0050     qDebug() << "(K3b::AudioCdTrackSource::searchForAudioCD(" << dev->description() << ")";
0051     K3b::Device::Toc toc = dev->readToc();
0052     return ( toc.discId() == discId );
0053 }
0054 
0055 
0056 K3b::AudioCdTrackSource::AudioCdTrackSource( const K3b::Device::Toc& toc, int cdTrackNumber,
0057                                               const QString& artist, const QString& title,
0058                                               const QString& cdartist, const QString& cdtitle,
0059                                               K3b::Device::Device* dev )
0060     : K3b::AudioDataSource(),
0061       d( new Private( this ) )
0062 {
0063     d->discId = toc.discId();
0064     d->length = toc[cdTrackNumber-1].length();
0065     d->toc = toc;
0066     d->cdTrackNumber = cdTrackNumber;
0067     d->artist = artist;
0068     d->title = title;
0069     d->cdArtist = cdartist;
0070     d->cdTitle = cdtitle;
0071     d->lastUsedDevice = dev;
0072     d->initialized = false;
0073 }
0074 
0075 
0076 K3b::AudioCdTrackSource::AudioCdTrackSource( unsigned int discid, const K3b::Msf& length, int cdTrackNumber,
0077                                               const QString& artist, const QString& title,
0078                                               const QString& cdArtist, const QString& cdTitle )
0079     : K3b::AudioDataSource(),
0080       d( new Private( this ) )
0081 {
0082     d->discId = discid;
0083     d->length = length;
0084     d->cdTrackNumber = cdTrackNumber;
0085     d->artist = artist;
0086     d->title = title;
0087     d->cdArtist = cdArtist;
0088     d->cdTitle = cdTitle;
0089     d->lastUsedDevice = 0;
0090     d->initialized = false;
0091 }
0092 
0093 
0094 K3b::AudioCdTrackSource::AudioCdTrackSource( const K3b::AudioCdTrackSource& source )
0095     : K3b::AudioDataSource( source ),
0096       d( new Private( this ) )
0097 {
0098     d->discId = source.d->discId;
0099     d->toc = source.d->toc;
0100     d->cdTrackNumber = source.d->cdTrackNumber;
0101     d->artist = source.d->artist;
0102     d->title = source.d->title;
0103     d->cdArtist = source.d->cdArtist;
0104     d->cdTitle = source.d->cdTitle;
0105     d->lastUsedDevice = source.d->lastUsedDevice;
0106     d->initialized = false;
0107 }
0108 
0109 
0110 K3b::AudioCdTrackSource::~AudioCdTrackSource()
0111 {
0112 }
0113 
0114 
0115 unsigned int K3b::AudioCdTrackSource::discId() const
0116 {
0117     return d->discId;
0118 }
0119 
0120 
0121 int K3b::AudioCdTrackSource::cdTrackNumber() const
0122 {
0123     return d->cdTrackNumber;
0124 }
0125 
0126 
0127 QString K3b::AudioCdTrackSource::artist() const
0128 {
0129     return d->artist;
0130 }
0131 
0132 
0133 QString K3b::AudioCdTrackSource::title() const
0134 {
0135     return d->title;
0136 }
0137 
0138 
0139 QString K3b::AudioCdTrackSource::cdArtist() const
0140 {
0141     return d->cdArtist;
0142 }
0143 
0144 
0145 QString K3b::AudioCdTrackSource::cdTitle() const
0146 {
0147     return d->cdTitle;
0148 }
0149 
0150 
0151 K3b::Device::Device* K3b::AudioCdTrackSource::searchForAudioCD() const
0152 {
0153     qDebug() << "(K3b::AudioCdTrackSource::searchForAudioCD()";
0154     // first try the saved device
0155     if( d->lastUsedDevice && d->searchForAudioCD( d->lastUsedDevice ) )
0156         return d->lastUsedDevice;
0157 
0158     QList<K3b::Device::Device*> devices = k3bcore->deviceManager()->readingDevices();
0159     Q_FOREACH( K3b::Device::Device* dev, devices ) {
0160         if( d->searchForAudioCD( dev ) ) {
0161             return dev;
0162         }
0163     }
0164 
0165     qDebug() << "(K3b::AudioCdTrackSource::searchForAudioCD) failed.";
0166 
0167     return 0;
0168 }
0169 
0170 
0171 void K3b::AudioCdTrackSource::setDevice( K3b::Device::Device* dev )
0172 {
0173     if( dev && dev != d->lastUsedDevice ) {
0174         d->lastUsedDevice = dev;
0175         if( d->initialized ) {
0176         }
0177     }
0178 }
0179 
0180 
0181 const K3b::Device::Toc& K3b::AudioCdTrackSource::toc() const
0182 {
0183     return d->toc;
0184 }
0185 
0186 
0187 void K3b::AudioCdTrackSource::setToc( const Device::Toc& toc )
0188 {
0189     d->toc = toc;
0190 }
0191 
0192 
0193 K3b::Msf K3b::AudioCdTrackSource::originalLength() const
0194 {
0195     return d->length;
0196 }
0197 
0198 
0199 QString K3b::AudioCdTrackSource::type() const
0200 {
0201     return i18n("CD Track");
0202 }
0203 
0204 
0205 QString K3b::AudioCdTrackSource::sourceComment() const
0206 {
0207     return ki18n("Track %1 from Audio CD %2").subs(d->cdTrackNumber).subs(d->discId,0,16).toString();
0208 }
0209 
0210 
0211 K3b::AudioDataSource* K3b::AudioCdTrackSource::copy() const
0212 {
0213     return new K3b::AudioCdTrackSource( *this );
0214 }
0215 
0216 
0217 QIODevice* K3b::AudioCdTrackSource::createReader( QObject* parent )
0218 {
0219     return new AudioCdTrackReader( *this, parent );
0220 }