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 }