00001 #ifndef CDDB_H_
00002 #define CDDB_H_
00003
00004 #include <QString>
00005 #include <QStringList>
00006 #include <QVector>
00007
00008
00009
00010
00011 struct Cddb
00012 {
00013 typedef unsigned long discid_t;
00014 struct Album;
00015
00016
00017 struct Match
00018 {
00019 QString genre;
00020 discid_t discID;
00021 QString artist;
00022 QString title;
00023
00024 Match() : discID(0) {}
00025 Match(const char *g, discid_t d, const char *a, const char *t) :
00026 genre(g), discID(d), artist(a), title(t)
00027 {}
00028 Match(const QString &g, discid_t d, const QString &a, const QString &t) :
00029 genre(g), discID(d), artist(a), title(t)
00030 {}
00031 Match(const Album& a) : genre(a.genre), discID(a.discID),
00032 artist(a.artist), title(a.title)
00033 {}
00034 };
00035
00036
00037 struct Matches
00038 {
00039 discid_t discID;
00040 bool isExact;
00041 typedef QVector< Match > match_t;
00042 match_t matches;
00043
00044 Matches() : discID(0), isExact(false) {}
00045 };
00046
00047 struct Msf
00048 {
00049 int min, sec, frame;
00050 Msf(int m = 0, int s = 0, int f = 0) : min(m), sec(s), frame(f) {}
00051 };
00052 typedef QVector< Msf > Toc;
00053
00054 struct Track
00055 {
00056 QString artist;
00057 QString title;
00058 };
00059
00060
00061 struct Album
00062 {
00063 QString genre;
00064 discid_t discID;
00065 QString artist;
00066 QString title;
00067 int year;
00068 QString submitter;
00069 int rev;
00070 bool isCompilation;
00071 typedef QVector< Track > track_t;
00072 track_t tracks;
00073 QString extd;
00074 typedef QVector< QString > ext_t;
00075 ext_t ext;
00076 Toc toc;
00077
00078 Album(discid_t d = 0, const char* g = 0) :
00079 genre(g), discID(d), year(0), rev(1), isCompilation(false) {}
00080
00081 Album(const QString& s) { *this = s; }
00082
00083 Album& operator = (const QString&);
00084 operator QString () const;
00085 };
00086
00087
00088 static bool Query(Matches&, const Toc&);
00089 static bool Read(Album&, const QString& genre, discid_t);
00090 static bool Write(const Album&, bool bLocalOnly = true);
00091
00092
00093 static discid_t Discid(unsigned& secs, const Msf [], unsigned tracks);
00094 static void Alias(const Album&, discid_t);
00095 };
00096
00097 #endif //ndef CDDB_H_