File indexing completed on 2024-04-28 04:49:44
0001 /* 0002 SPDX-FileCopyrightText: 1998-2008 Sebastian Trueg <trueg@k3b.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "k3binffilewriter.h" 0008 0009 #include "k3bcdtext.h" 0010 #include "k3btrack.h" 0011 #include "k3bmsf.h" 0012 #include "k3bcore.h" 0013 #include "k3bversion.h" 0014 0015 #include <QDateTime> 0016 #include <QFile> 0017 0018 0019 0020 K3b::InfFileWriter::InfFileWriter() 0021 : m_index0(-1), 0022 m_trackNumber(1), 0023 m_trackStart(0), 0024 m_trackLength(0), 0025 m_preEmphasis(false), 0026 m_copyPermitted(true), 0027 m_bigEndian(false) 0028 { 0029 } 0030 0031 0032 bool K3b::InfFileWriter::save( const QString& filename ) 0033 { 0034 QFile f( filename ); 0035 0036 if( !f.open( QIODevice::WriteOnly ) ) { 0037 qDebug() << "(K3b::InfFileWriter) could not open file " << f.fileName(); 0038 return false; 0039 } 0040 0041 QTextStream s( &f ); 0042 0043 return save( s ); 0044 } 0045 0046 0047 bool K3b::InfFileWriter::save( QTextStream& s ) 0048 { 0049 // now write the inf data 0050 // ---------------------- 0051 // header 0052 s << "# Cdrecord-Inf-File written by K3b " << k3bcore->version() 0053 << ", " << QDateTime::currentDateTime().toString() << Qt::endl 0054 << "#" << Qt::endl; 0055 0056 s << "ISRC=\t\t" << m_isrc << Qt::endl; 0057 s << "MCN=\t\t" << m_mcn << Qt::endl; 0058 0059 // CD-Text 0060 s << "Albumperformer=\t" << "'" << m_albumPerformer << "'" << Qt::endl; 0061 s << "Albumtitle=\t" << "'" << m_albumTitle << "'" << Qt::endl; 0062 0063 s << "Performer=\t" << "'" << m_trackPerformer << "'" << Qt::endl; 0064 s << "Songwriter=\t" << "'" << m_trackSongwriter << "'" << Qt::endl; 0065 s << "Composer=\t" << "'" << m_trackComposer << "'" << Qt::endl; 0066 s << "Arranger=\t" << "'" << m_trackArranger << "'" << Qt::endl; 0067 s << "Message=\t" << "'" << m_trackMessage << "'" << Qt::endl; 0068 0069 s << "Tracktitle=\t" << "'" << m_trackTitle << "'" << Qt::endl; 0070 0071 s << "Tracknumber=\t" << m_trackNumber << Qt::endl; 0072 0073 // track start 0074 s << "Trackstart=\t" << m_trackStart.lba() << Qt::endl; 0075 0076 // track length 0077 s << "# Tracklength: " << m_trackLength.toString() << Qt::endl; 0078 s << "Tracklength=\t" << m_trackLength.totalFrames() << ", 0" << Qt::endl; 0079 0080 // pre-emphasis 0081 s << "Pre-emphasis=\t"; 0082 if( m_preEmphasis ) 0083 s << "yes"; 0084 else 0085 s << "no"; 0086 s << Qt::endl; 0087 0088 // channels (always 2) 0089 s << "Channels=\t2" << Qt::endl; 0090 0091 // copy-permitted 0092 // TODO: not sure about this! 0093 // there are three options: yes, no, once 0094 // but using "once" gives the same result as with cdrdao 0095 // and that's important. 0096 s << "Copy_permitted=\t"; 0097 if( m_copyPermitted ) 0098 s << "yes"; 0099 else 0100 s << "once"; 0101 s << Qt::endl; 0102 0103 // endianess - wav is little -> onthefly: big, with images: little 0104 s << "Endianess=\t"; 0105 if( m_bigEndian ) 0106 s << "big"; 0107 else 0108 s << "little"; 0109 s << Qt::endl; 0110 0111 // write indices 0112 // the current tracks' data contains the pregap of the next track 0113 // if the pregap has length 0 we need no index 0 0114 if( m_indices.isEmpty() ) 0115 s << "Index=\t\t0" << Qt::endl; 0116 else { 0117 for( int i = 0; i < m_indices.count(); ++i ) 0118 s << "Index=\t\t" << m_indices[i] << Qt::endl; 0119 } 0120 0121 s << "Index0=\t\t" << m_index0 << Qt::endl; 0122 0123 return ( s.status() == QTextStream::Ok ); 0124 } 0125 0126 0127 void K3b::InfFileWriter::setTrack( const K3b::Device::Track& track ) 0128 { 0129 m_indices.clear(); 0130 0131 // the first index always has to be a zero (cdrecord manpage) 0132 m_indices.append( 0 ); 0133 0134 QList<K3b::Msf> indexList = track.indices(); 0135 for( int i = 0; i < indexList.count(); ++i ) 0136 m_indices.append( indexList[i].lba() ); 0137 0138 if( track.index0() > 0 ) 0139 m_index0 = track.index0().lba(); 0140 else 0141 m_index0 = -1; 0142 0143 setPreEmphasis( track.preEmphasis() ); 0144 setCopyPermitted( track.copyPermitted() ); 0145 0146 setTrackStart( track.firstSector() ); 0147 setTrackLength( track.length() ); 0148 0149 setIsrc( track.isrc() ); 0150 0151 setBigEndian( true ); 0152 } 0153 0154 0155 void K3b::InfFileWriter::addIndex( long i ) 0156 { 0157 m_indices.append( i ); 0158 } 0159 0160 0161 void K3b::InfFileWriter::setTrackCdText( const K3b::Device::TrackCdText& cdtext ) 0162 { 0163 setTrackTitle( cdtext.title() ); 0164 setTrackPerformer( cdtext.performer() ); 0165 setTrackSongwriter( cdtext.songwriter() ); 0166 setTrackComposer( cdtext.composer() ); 0167 setTrackArranger( cdtext.arranger() ); 0168 setTrackMessage( cdtext.message() ); 0169 } 0170 0171 0172 void K3b::InfFileWriter::setCdText( const K3b::Device::CdText& cdtext ) 0173 { 0174 setAlbumTitle( cdtext.title() ); 0175 setAlbumPerformer( cdtext.performer() ); 0176 }