File indexing completed on 2025-03-23 04:28:08
0001 /* 0002 SPDX-FileCopyrightText: 1998-2009 Sebastian Trueg <trueg@k3b.org> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #ifndef _K3B_CDTEXT_H_ 0007 #define _K3B_CDTEXT_H_ 0008 0009 #include "k3bdevice_export.h" 0010 0011 #include <QSharedDataPointer> 0012 #include <QString> 0013 0014 namespace K3b { 0015 namespace Device { 0016 class LIBK3BDEVICE_EXPORT TrackCdText 0017 { 0018 public: 0019 TrackCdText(); 0020 TrackCdText( const TrackCdText& ); 0021 ~TrackCdText(); 0022 0023 TrackCdText& operator=( const TrackCdText& ); 0024 0025 void clear(); 0026 0027 QString title() const; 0028 QString performer() const; 0029 QString songwriter() const; 0030 QString composer() const; 0031 QString arranger() const; 0032 QString message() const; 0033 QString isrc() const; 0034 0035 // TODO: use the real CD-TEXT charset (a modified ISO8859-1) 0036 void setTitle( const QString& s ); 0037 void setPerformer( const QString& s ); 0038 void setSongwriter( const QString& s ); 0039 void setComposer( const QString& s ); 0040 void setArranger( const QString& s ); 0041 void setMessage( const QString& s ); 0042 void setIsrc( const QString& s ); 0043 0044 bool isEmpty() const; 0045 0046 bool operator==( const TrackCdText& ) const; 0047 bool operator!=( const TrackCdText& ) const; 0048 0049 private: 0050 class Private; 0051 QSharedDataPointer<Private> d; 0052 0053 friend class CdText; 0054 }; 0055 0056 0057 class LIBK3BDEVICE_EXPORT CdText 0058 { 0059 public: 0060 CdText(); 0061 CdText( const unsigned char* data, int len ); 0062 0063 /** 0064 * \sa setRawPackData 0065 */ 0066 explicit CdText( const QByteArray& ); 0067 CdText( const CdText& ); 0068 ~CdText(); 0069 0070 CdText& operator=( const CdText& ); 0071 0072 int count() const; 0073 0074 /** 0075 * If i < count() behaviour is undefined. 0076 */ 0077 TrackCdText operator[]( int i ) const; 0078 TrackCdText& operator[]( int i ); 0079 0080 void insert( int index, const TrackCdText& ); 0081 0082 /** 0083 * Will create a new empty TrackCdText if i is out of scope. 0084 */ 0085 TrackCdText& track( int i ); 0086 0087 TrackCdText track( int i ) const; 0088 0089 /** 0090 * Parse cd text from raw pack data. The data as provided is cached 0091 * and will be returned by rawPackData until the cdtext object is changed. 0092 */ 0093 void setRawPackData( const unsigned char*, int ); 0094 void setRawPackData( const QByteArray& ); 0095 0096 QByteArray rawPackData() const; 0097 0098 bool empty() const; 0099 bool isEmpty() const; 0100 0101 void clear(); 0102 0103 QString title() const; 0104 QString performer() const; 0105 QString songwriter() const; 0106 QString composer() const; 0107 QString arranger() const; 0108 QString message() const; 0109 QString discId() const; 0110 QString upcEan() const; 0111 0112 // TODO: use the real CD-TEXT charset (a modified ISO8859-1) 0113 void setTitle( const QString& s ); 0114 void setPerformer( const QString& s ); 0115 void setSongwriter( const QString& s ); 0116 void setComposer( const QString& s ); 0117 void setArranger( const QString& s ); 0118 void setMessage( const QString& s ); 0119 void setDiscId( const QString& s ); 0120 void setUpcEan( const QString& s ); 0121 0122 void debug() const; 0123 0124 /** 0125 * Returns false if found a crc error in the raw cdtext block or it has a 0126 * wrong length. 0127 */ 0128 static bool checkCrc( const unsigned char*, int ); 0129 static bool checkCrc( const QByteArray& ); 0130 0131 bool operator==( const CdText& ) const; 0132 bool operator!=( const CdText& ) const; 0133 0134 private: 0135 class Private; 0136 QSharedDataPointer<Private> d; 0137 }; 0138 } 0139 } 0140 0141 #endif