File indexing completed on 2024-05-12 04:50:59
0001 /* 0002 SPDX-FileCopyrightText: 2005-2009 Sebastian Trueg <trueg@k3b.org> 0003 SPDX-FileCopyrightText: 1998-2009 Sebastian Trueg <trueg@k3b.org> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "k3baudiocdtrackdrag.h" 0009 0010 #include "k3bdevice.h" 0011 #include "k3bdevicemanager.h" 0012 #include "k3btoc.h" 0013 #include "k3btrack.h" 0014 #include "k3bcore.h" 0015 0016 #include <QDataStream> 0017 #include <QMimeData> 0018 0019 0020 // FIXME: multiple tracks 0021 K3b::AudioCdTrackDrag::AudioCdTrackDrag() 0022 : m_device( 0 ) 0023 { 0024 } 0025 0026 0027 K3b::AudioCdTrackDrag::AudioCdTrackDrag( const K3b::Device::Toc& toc, 0028 const QList<int>& trackNumbers, 0029 const KCDDB::CDInfo& cddb, 0030 K3b::Device::Device* lastDev ) 0031 : m_toc(toc), 0032 m_trackNumbers(trackNumbers), 0033 m_cddb(cddb), 0034 m_device(lastDev) 0035 { 0036 } 0037 0038 0039 void K3b::AudioCdTrackDrag::populateMimeData( QMimeData* mime ) 0040 { 0041 QByteArray data; 0042 QDataStream s( &data, QIODevice::WriteOnly ); 0043 0044 // encode TOC 0045 s << m_toc.count(); 0046 for( K3b::Device::Toc::const_iterator it = m_toc.constBegin(); it != m_toc.constEnd(); ++it ) { 0047 const K3b::Device::Track& track = *it; 0048 s << track.firstSector().lba() << track.lastSector().lba(); 0049 } 0050 0051 // encode CDDB 0052 s << m_cddb.get( KCDDB::Artist ).toString() 0053 << m_cddb.get( KCDDB::Title ).toString(); 0054 for( int i = 0; i < m_toc.count(); ++i ) { 0055 s << m_cddb.track( i ).get( KCDDB::Artist ).toString() 0056 << m_cddb.track( i ).get( KCDDB::Title ).toString(); 0057 } 0058 0059 // encode dragged track numbers 0060 s << m_trackNumbers.count(); 0061 foreach( int trackNumber, m_trackNumbers ) 0062 s << trackNumber; 0063 0064 // encode last used device 0065 if( m_device ) 0066 s << m_device->blockDeviceName(); 0067 else 0068 s << QString(); 0069 0070 // TODO: the rest 0071 mime->setData( mimeDataTypes().first(), data ); 0072 } 0073 0074 0075 K3b::AudioCdTrackDrag K3b::AudioCdTrackDrag::fromMimeData( const QMimeData* mime ) 0076 { 0077 AudioCdTrackDrag drag; 0078 0079 QByteArray data = mime->data( mimeDataTypes().first() ); 0080 0081 QDataStream s( data ); 0082 0083 // decode TOC 0084 int trackCnt; 0085 s >> trackCnt; 0086 for( int i = 0; i < trackCnt; ++i ) { 0087 int fs, ls; 0088 s >> fs; 0089 s >> ls; 0090 drag.m_toc.append( K3b::Device::Track( fs, ls, K3b::Device::Track::TYPE_AUDIO ) ); 0091 qDebug() << "decoded track:" << drag.m_toc.last(); 0092 } 0093 0094 // decode cddb 0095 drag.m_cddb.clear(); 0096 QString str; 0097 s >> str; 0098 drag.m_cddb.set( KCDDB::Artist, str ); 0099 s >> str; 0100 drag.m_cddb.set( KCDDB::Title, str ); 0101 for( int i = 0; i < trackCnt; ++i ) { 0102 s >> str; 0103 qDebug() << "Decoded artist for track" << ( i+1 ) << str; 0104 drag.m_cddb.track( i ).set( KCDDB::Artist, str ); 0105 s >> str; 0106 qDebug() << "Decoded title for track" << ( i+1 ) << str; 0107 drag.m_cddb.track( i ).set( KCDDB::Title, str ); 0108 } 0109 0110 // decode track numbers 0111 s >> trackCnt; 0112 drag.m_trackNumbers.clear(); 0113 for( int i = 0; i < trackCnt; ++i ) { 0114 int track = 0; 0115 s >> track; 0116 drag.m_trackNumbers.append( track ); 0117 } 0118 0119 // decoce last used device 0120 s >> str; 0121 if( !str.isEmpty() ) 0122 drag.m_device = k3bcore->deviceManager()->findDevice( str ); 0123 0124 return drag; 0125 } 0126 0127 0128 QStringList K3b::AudioCdTrackDrag::mimeDataTypes() 0129 { 0130 return QStringList() << QLatin1String( "k3b/audio_track_list" ); 0131 } 0132 0133 0134 bool K3b::AudioCdTrackDrag::canDecode( const QMimeData* s ) 0135 { 0136 return s->hasFormat( mimeDataTypes().first() ); 0137 }