File indexing completed on 2024-04-14 04:44:42

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