diff --git a/calbum.cpp b/calbum.cpp index c6256e1..b182211 100644 --- a/calbum.cpp +++ b/calbum.cpp @@ -1,4 +1,5 @@ #include "calbum.h" +#include "ctrack.h" cAlbum::cAlbum(const QString& szAlbum, const QString &szLeadArtist) : @@ -27,15 +28,33 @@ QString cAlbum::leadArtist() return(m_szLeadArtist); } +cTrack* cAlbum::addTrack(const QString& szTitle, const qint16& trackNumber, const QString& szPartOfSet, const QString& szBand, const QString& szComposer, const QDate &recordingTime) +{ + return(m_trackList.add(this, szTitle, trackNumber, szPartOfSet, szBand, szComposer, recordingTime)); +} + +cTrackList cAlbum::trackList() +{ + return(m_trackList); +} + cAlbum* cAlbumList::add(const QString& szAlbum, const QString& szLeadArtist) { + QString szAlbum1 = szAlbum; + QString szLeadArtist1 = szLeadArtist; + + if(szAlbum1.isEmpty()) + szAlbum1 = "*** NO ALBUM ***"; + if(szLeadArtist1.isEmpty()) + szLeadArtist1 = "*** NO LEAD ARTIST ***"; + for(int x = 0;x < count();x++) { - if(at(x)->album() == szAlbum && at(x)->leadArtist() == szLeadArtist) + if(at(x)->album() == szAlbum1 && at(x)->leadArtist() == szLeadArtist1) return(at(x)); } - cAlbum* lpAlbumNew = new cAlbum(szAlbum, szLeadArtist); + cAlbum* lpAlbumNew = new cAlbum(szAlbum1, szLeadArtist1); append(lpAlbumNew); return(lpAlbumNew); } diff --git a/calbum.h b/calbum.h index abfd490..1dd0f1a 100644 --- a/calbum.h +++ b/calbum.h @@ -2,11 +2,16 @@ #define CALBUM_H +#include "ctrack.h" + #include #include #include +class cTrack; +class cTrackList; + class cAlbum { public: @@ -17,9 +22,13 @@ public: void setLeadArtist(const QString& szLeadArtist); QString leadArtist(); + + cTrack* addTrack(const QString& szTitle, const qint16& trackNumber, const QString& szPartOfSet, const QString& szBand, const QString& szComposer, const QDate& recordingTime); + cTrackList trackList(); private: QString m_szAlbum; QString m_szLeadArtist; + cTrackList m_trackList; }; Q_DECLARE_METATYPE(cAlbum*) diff --git a/cdatabase.cpp b/cdatabase.cpp index c6ab747..8845293 100644 --- a/cdatabase.cpp +++ b/cdatabase.cpp @@ -71,9 +71,7 @@ int cDatabase::initDB() " fileName TEXT, " " fileSize INTEGER, " " fileDate DATE, " - " fileType1 INTEGER, " " fileType TEXT, " - " length1 INTEGER, " " length INTEGER, " " bitrate INTEGER, " " sampleRate INTEGER, " @@ -95,7 +93,7 @@ int cDatabase::initDB() " album TEXT, " " title TEXT, " " copyright TEXT, " - " tracknumber TEXT, " + " tracknumber INTEGER, " " contentGroupDescription TEXT, " " subTitle TEXT, " " originalAlbum TEXT, " diff --git a/cmainwindow.cpp b/cmainwindow.cpp index 5b219ec..a6d3ad1 100644 --- a/cmainwindow.cpp +++ b/cmainwindow.cpp @@ -23,12 +23,14 @@ qDebug() << szFile; cMediaInfo* lpMediaInfo = new cMediaInfo; lpMediaInfo->readFromFile(szFile); + if(lpMediaInfo->isValid()) { m_lpDB->getDB().transaction(); lpMediaInfo->writeToDB(); m_lpDB->getDB().commit(); } + delete lpMediaInfo; } @@ -105,7 +107,7 @@ cMainWindow::cMainWindow(QWidget *parent) : // addPath("C:/Users/vet0572/Music"); // addPath("C:/Temp/Musik"); // addPath("C:/Users/birkeh/Music"); -// addFile("C:/Users/vet0572/Music/Amy MacDonald/Under Stars (Deluxe)/01 - Dream On.mp3"); +// addFile("C:/Users/vet0572/Music/Amy MacDonald/Life In A Beautiful Light/CD1/Amy Macdonald - Life In A Beautiful Light - 18 - Slow It Down (Singalong Instrumental Version).mp3"); } cMainWindow::~cMainWindow() @@ -135,7 +137,7 @@ void cMainWindow::loadDB() QString szAlbum; QString szTitle; qint16 iTrackNumber; - qint16 iPartOfSet; + QString szPartOfSet; QString szLeadArtist; QString szBand; QString szComposer; @@ -155,7 +157,7 @@ void cMainWindow::loadDB() szAlbum = query.value("album").toString(); szTitle = query.value("title").toString(); iTrackNumber = query.value("trackNumber").toInt(); - iPartOfSet = query.value("partOfSet").toInt(); + szPartOfSet = query.value("partOfSet").toString(); szLeadArtist = query.value("leadArtist").toString(); szBand = query.value("band").toString(); szComposer = query.value("composer").toString(); @@ -166,8 +168,11 @@ void cMainWindow::loadDB() szOldLeadArtist = szLeadArtist; szOldAlbum = szAlbum; - cAlbum* lpAlbum = m_albumList.add(szAlbum, szLeadArtist); + lpAlbum = m_albumList.add(szAlbum, szLeadArtist); } + + if(lpAlbum) + lpAlbum->addTrack(szTitle, iTrackNumber, szPartOfSet, szBand, szComposer, recordingTime); } } @@ -217,10 +222,16 @@ void cMainWindow::displayDB() lpLeadArtistItem.at(0)->appendRow(lpAlbumItem); } - QList lpTrackItem; - lpTrackItem.append(new QStandardItem("track 1")); - lpTrackItem.append(new QStandardItem("track 1")); - lpAlbumItem.at(0)->appendRow(lpTrackItem); + cTrackList trackList = lpAlbum->trackList(); + for(int y = 0;y < trackList.count();y++) + { + cTrack* lpTrack = trackList.at(y); + + QList lpTrackItem; + lpTrackItem.append(new QStandardItem(lpTrack->title())); + lpTrackItem.append(new QStandardItem(lpTrack->title())); + lpAlbumItem.at(0)->appendRow(lpTrackItem); + } } } diff --git a/cmainwindow.h b/cmainwindow.h index 1bcecfa..985dd1a 100644 --- a/cmainwindow.h +++ b/cmainwindow.h @@ -5,6 +5,7 @@ #include "cdatabase.h" #include "calbum.h" +#include "ctrack.h" #include diff --git a/cmediainfo.cpp b/cmediainfo.cpp index f8ba38c..ab903d6 100644 --- a/cmediainfo.cpp +++ b/cmediainfo.cpp @@ -487,16 +487,14 @@ qint32 cMediaInfo::writeFilename() } if(query.next()) - query.prepare("UPDATE file SET fileType1=:fileType1, fileType=:fileType, length1=:length1, length=:length, bitrate=:bitrate, sampleRate=:sampleRate, channels=:channels, bitsPerSample=:bitsPerSample, layer=:layer, version=:version, sampleWidth=:sampleWidth, sampleFrames=:sampleFrames, isEncrypted=:isEncrypted, trackGain=:trackGain, albumGain=:albumGain, trackPeak=:trackPeak, albumPeak=:albumPeak, protectionEnabled=:protectionEnabled, channelMode=:channelMode, isCopyrighted=:isCopyrighted, isOriginal=:isOriginal, album=:album, title=:title, copyright=:copyright, tracknumber=:tracknumber, contentGroupDescription=:contentGroupDescription, subTitle=:subTitle, originalAlbum=:originalAlbum, partOfSet=:partOfSet, subTitleOfSet=:subTitleOfSet, internationalStandardRecordingCode=:internationalStandardRecordingCode, leadArtist=:leadArtist, band=:band, conductor=:conductor, interpret=:interpret, originalArtist=:originalArtist, textWriter=:textWriter, originalTextWriter=:originalTextWriter, composer=:composer, encodedBy=:encodedBy, beatsPerMinute=:beatsPerMinute, language=:language, contentType=:contentType, mediaType=:mediaType, mood=:mood, producedNotice=:producedNotice, publisher=:publisher, fileOwner=:fileOwner, internetRadioStationName=:internetRadioStationName, internetRadioStationOwner=:internetRadioStationOwner, originalFilename=:originalFilename, playlistDelay=:playlistDelay, encodingTime=:encodingTime, originalReleaseTime=:originalReleaseTime, recordingTime=:recordingTime, releaseTime=:releaseTime, taggingTime=:taggingTime, swhwSettings=:swhwSettings, albumSortOrder=:albumSortOrder, performerSortOrder=:performerSortOrder, titleSortOrder=:titleSortOrder, synchronizedLyrics=:synchronizedLyrics, unsynchronizedLyrics=:unsynchronizedLyrics WHERE filename=:filename AND filesize=:filesize AND filedate=:filedate;"); + query.prepare("UPDATE file SET fileType=:fileType, length=:length, bitrate=:bitrate, sampleRate=:sampleRate, channels=:channels, bitsPerSample=:bitsPerSample, layer=:layer, version=:version, sampleWidth=:sampleWidth, sampleFrames=:sampleFrames, isEncrypted=:isEncrypted, trackGain=:trackGain, albumGain=:albumGain, trackPeak=:trackPeak, albumPeak=:albumPeak, protectionEnabled=:protectionEnabled, channelMode=:channelMode, isCopyrighted=:isCopyrighted, isOriginal=:isOriginal, album=:album, title=:title, copyright=:copyright, tracknumber=:tracknumber, contentGroupDescription=:contentGroupDescription, subTitle=:subTitle, originalAlbum=:originalAlbum, partOfSet=:partOfSet, subTitleOfSet=:subTitleOfSet, internationalStandardRecordingCode=:internationalStandardRecordingCode, leadArtist=:leadArtist, band=:band, conductor=:conductor, interpret=:interpret, originalArtist=:originalArtist, textWriter=:textWriter, originalTextWriter=:originalTextWriter, composer=:composer, encodedBy=:encodedBy, beatsPerMinute=:beatsPerMinute, language=:language, contentType=:contentType, mediaType=:mediaType, mood=:mood, producedNotice=:producedNotice, publisher=:publisher, fileOwner=:fileOwner, internetRadioStationName=:internetRadioStationName, internetRadioStationOwner=:internetRadioStationOwner, originalFilename=:originalFilename, playlistDelay=:playlistDelay, encodingTime=:encodingTime, originalReleaseTime=:originalReleaseTime, recordingTime=:recordingTime, releaseTime=:releaseTime, taggingTime=:taggingTime, swhwSettings=:swhwSettings, albumSortOrder=:albumSortOrder, performerSortOrder=:performerSortOrder, titleSortOrder=:titleSortOrder, synchronizedLyrics=:synchronizedLyrics, unsynchronizedLyrics=:unsynchronizedLyrics WHERE filename=:filename AND filesize=:filesize AND filedate=:filedate;"); else - query.prepare("INSERT INTO file (fileName, fileSize, fileDate, fileType1, fileType, length1, length, bitrate, sampleRate, channels, bitsPerSample, layer, version, sampleWidth, sampleFrames, isEncrypted, trackGain, albumGain, trackPeak, albumPeak, protectionEnabled, channelMode, isCopyrighted, isOriginal, album, title, copyright, tracknumber, contentGroupDescription, subTitle, originalAlbum, partOfSet, subTitleOfSet, internationalStandardRecordingCode, leadArtist, band, conductor, interpret, originalArtist, textWriter, originalTextWriter, composer, encodedBy, beatsPerMinute, language, contentType, mediaType, mood, producedNotice, publisher, fileOwner, internetRadioStationName, internetRadioStationOwner, originalFilename, playlistDelay, encodingTime, originalReleaseTime, recordingTime, releaseTime, taggingTime, swhwSettings, albumSortOrder, performerSortOrder, titleSortOrder, synchronizedLyrics, unsynchronizedLyrics) VALUES (:fileName, :fileSize, :fileDate, :fileType1, :fileType, :length1, :length, :bitrate, :sampleRate, :channels, :bitsPerSample, :layer, :version, :sampleWidth, :sampleFrames, :isEncrypted, :trackGain, :albumGain, :trackPeak, :albumPeak, :protectionEnabled, :channelMode, :isCopyrighted, :isOriginal, :album, :title, :copyright, :tracknumber, :contentGroupDescription, :subTitle, :originalAlbum, :partOfSet, :subTitleOfSet, :internationalStandardRecordingCode, :leadArtist, :band, :conductor, :interpret, :originalArtist, :textWriter, :originalTextWriter, :composer, :encodedBy, :beatsPerMinute, :language, :contentType, :mediaType, :mood, :producedNotice, :publisher, :fileOwner, :internetRadioStationName, :internetRadioStationOwner, :originalFilename, :playlistDelay, :encodingTime, :originalReleaseTime, :recordingTime, :releaseTime, :taggingTime, :swhwSettings, :albumSortOrder, :performerSortOrder, :titleSortOrder, :synchronizedLyrics, :unsynchronizedLyrics);"); + query.prepare("INSERT INTO file (fileName, fileSize, fileDate, fileType, length, bitrate, sampleRate, channels, bitsPerSample, layer, version, sampleWidth, sampleFrames, isEncrypted, trackGain, albumGain, trackPeak, albumPeak, protectionEnabled, channelMode, isCopyrighted, isOriginal, album, title, copyright, tracknumber, contentGroupDescription, subTitle, originalAlbum, partOfSet, subTitleOfSet, internationalStandardRecordingCode, leadArtist, band, conductor, interpret, originalArtist, textWriter, originalTextWriter, composer, encodedBy, beatsPerMinute, language, contentType, mediaType, mood, producedNotice, publisher, fileOwner, internetRadioStationName, internetRadioStationOwner, originalFilename, playlistDelay, encodingTime, originalReleaseTime, recordingTime, releaseTime, taggingTime, swhwSettings, albumSortOrder, performerSortOrder, titleSortOrder, synchronizedLyrics, unsynchronizedLyrics) VALUES (:fileName, :fileSize, :fileDate, :fileType, :length, :bitrate, :sampleRate, :channels, :bitsPerSample, :layer, :version, :sampleWidth, :sampleFrames, :isEncrypted, :trackGain, :albumGain, :trackPeak, :albumPeak, :protectionEnabled, :channelMode, :isCopyrighted, :isOriginal, :album, :title, :copyright, :tracknumber, :contentGroupDescription, :subTitle, :originalAlbum, :partOfSet, :subTitleOfSet, :internationalStandardRecordingCode, :leadArtist, :band, :conductor, :interpret, :originalArtist, :textWriter, :originalTextWriter, :composer, :encodedBy, :beatsPerMinute, :language, :contentType, :mediaType, :mood, :producedNotice, :publisher, :fileOwner, :internetRadioStationName, :internetRadioStationOwner, :originalFilename, :playlistDelay, :encodingTime, :originalReleaseTime, :recordingTime, :releaseTime, :taggingTime, :swhwSettings, :albumSortOrder, :performerSortOrder, :titleSortOrder, :synchronizedLyrics, :unsynchronizedLyrics);"); query.bindValue(":fileName", fileName()); query.bindValue(":fileSize", fileSize()); query.bindValue(":fileDate", fileDate()); - query.bindValue(":fileType1", fileType1()); query.bindValue(":fileType", fileType()); - query.bindValue(":length1", length1()); query.bindValue(":length", length()); query.bindValue(":bitrate", bitrate()); query.bindValue(":sampleRate", sampleRate()); @@ -628,18 +626,23 @@ bool cMediaInfo::writeToDB() void cMediaInfo::readTagV1(ID3v1::Tag* lpTag) { QString szTmp; - m_szAlbum = QString::fromStdWString(lpTag->album().toWString()); + + if(m_szAlbum.isEmpty()) + m_szAlbum = QString::fromStdWString(lpTag->album().toWString()); szTmp = QString::fromStdWString(lpTag->artist().toWString()); - if(!szTmp.isEmpty()) + if(!szTmp.isEmpty() && m_szArtistList.isEmpty()) m_szArtistList = szTmp.split("\n"); - m_szAlbum = QString::fromStdWString(lpTag->album().toWString()); - m_szComment = QString::fromStdWString(lpTag->comment().toWString()); + if(m_szComment.isEmpty()) + m_szComment = QString::fromStdWString(lpTag->comment().toWString()); szTmp = QString::fromStdWString(lpTag->genre().toWString()); - if(!szTmp.isEmpty()) + if(!szTmp.isEmpty() && m_szGenreList.isEmpty()) m_szGenreList = szTmp.split("\n"); - m_szTitle = QString::fromStdWString(lpTag->title().toWString()); - m_szTrackNumber = QString("%1").arg(lpTag->track()); - m_iYear = lpTag->year(); + if(m_szTitle.isEmpty()) + m_szTitle = QString::fromStdWString(lpTag->title().toWString()); + if(m_szTrackNumber.isEmpty()) + m_szTrackNumber = QString("%1").arg(lpTag->track()); + if(m_iYear == 0) + m_iYear = lpTag->year(); } void cMediaInfo::readTagV2(ID3v2::Tag* lpTag) @@ -876,48 +879,11 @@ QDateTime cMediaInfo::fileDate() return(fileInfo.created()); } -cMediaInfo::MEDIA_TYPE cMediaInfo::fileType1() +cMediaInfo::MEDIA_TYPE cMediaInfo::fileType() { return(m_fileType); } -QString cMediaInfo::fileType1Text() -{ - switch(m_fileType) - { - case MEDIA_TYPE_APE: - return("APE"); - case MEDIA_TYPE_ASF: - return("ASF"); - case MEDIA_TYPE_FLAC: - return("FLAC"); - case MEDIA_TYPE_MP4: - return("MP4"); - case MEDIA_TYPE_MPC: - return("MPC"); - case MEDIA_TYPE_MPEG: - return("MPEG"); - case MEDIA_TYPE_TRUEAUDIO: - return("TrueAudio"); - case MEDIA_TYPE_WAVPACK: - return("WavPack"); - case MEDIA_TYPE_WAV: - return("Wave"); - default: - return("unknown"); - } -} - -qint32 cMediaInfo::length1() -{ - return(m_iLength); -} - -QString cMediaInfo::length1Text() -{ - return("not implemented"); -} - qint16 cMediaInfo::bitrate() { return(m_iBitrate); @@ -1170,11 +1136,6 @@ QStringList cMediaInfo::contentType() return(m_szContentType); } -QString cMediaInfo::fileType() -{ - return(m_szFileType); -} - QStringList cMediaInfo::mediaType() { return(m_szMediaType); diff --git a/cmediainfo.h b/cmediainfo.h index 2f2b881..914cc2c 100644 --- a/cmediainfo.h +++ b/cmediainfo.h @@ -80,12 +80,9 @@ public: QString fileName(); qint64 fileSize(); QDateTime fileDate(); - MEDIA_TYPE fileType1(); - QString fileType1Text(); + cMediaInfo::MEDIA_TYPE fileType(); // - qint32 length1(); - QString length1Text(); qint16 bitrate(); QString bitrateText(); qint32 sampleRate(); @@ -143,7 +140,7 @@ public: // TKEY QStringList language(); // TLAN QStringList contentType(); // TCON - QString fileType(); // TFLT +// QString fileType(); // TFLT QStringList mediaType(); // TMED QString mood(); // TMOO diff --git a/ctrack.cpp b/ctrack.cpp new file mode 100644 index 0000000..86a59fa --- /dev/null +++ b/ctrack.cpp @@ -0,0 +1,101 @@ +#include "ctrack.h" + + +cTrack::cTrack(cAlbum* lpAlbum, const QString& szTitle, const qint16& trackNumber, const QString& szPartOfSet, const QString& szBand, const QString& szComposer, const QDate& recordingTime) : + m_lpAlbum(lpAlbum), + m_szTitle(szTitle), + m_iTrackNumber(trackNumber), + m_szPartOfSet(szPartOfSet), + m_szBand(szBand), + m_szComposer(szComposer), + m_recordingTime(recordingTime) +{ +} + +void cTrack::setAlbum(cAlbum* lpAlbum) +{ + m_lpAlbum = lpAlbum; +} + +cAlbum* cTrack::album() +{ + return(m_lpAlbum); +} + +void cTrack::setTitle(const QString& szTitle) +{ + m_szTitle = szTitle; +} + +QString cTrack::title() +{ + return(m_szTitle); +} + +void cTrack::setTrackNumber(const qint16& trackNumber) +{ + m_iTrackNumber = trackNumber; +} + +qint16 cTrack::trackNumber() +{ + return(m_iTrackNumber); +} + +void cTrack::setPartOfSet(const QString& szPartOfSet) +{ + m_szPartOfSet = szPartOfSet; +} + +QString cTrack::partOfSet() +{ + return(m_szPartOfSet); +} + +void cTrack::setBand(const QString& szBand) +{ + m_szBand = szBand; +} + +QString cTrack::band() +{ + return(m_szBand); +} + +void cTrack::setComposer(const QString& szComposer) +{ + m_szComposer = szComposer; +} + +QString cTrack::composer() +{ + return(m_szComposer); +} + +void cTrack::setRecordingTime(const QDate& recordingTime) +{ + m_recordingTime = recordingTime; +} + +QDate cTrack::recordingTime() +{ + return(m_recordingTime); +} + +cTrack* cTrackList::add(cAlbum* lpAlbum, const QString& szTitle, const qint16& trackNumber, const QString& szPartOfSet, const QString& szBand, const QString& szComposer, const QDate &recordingTime) +{ + QString szTitle1 = szTitle; + QString szBand1 = szBand; + QString szComposer1 = szComposer; + + if(szTitle1.isEmpty()) + szTitle1 = "*** NO TITLE ***"; + if(szBand1.isEmpty()) + szBand1 = "*** NO BAND ***"; + if(szComposer1.isEmpty()) + szComposer1 = "*** NO COMPOSER ***"; + + cTrack* lpTrackNew = new cTrack(lpAlbum, szTitle1, trackNumber, szPartOfSet, szBand1, szComposer1, recordingTime); + append(lpTrackNew); + return(lpTrackNew); +} diff --git a/ctrack.h b/ctrack.h new file mode 100644 index 0000000..bf87cfd --- /dev/null +++ b/ctrack.h @@ -0,0 +1,57 @@ +#ifndef CTRACK_H +#define CTRACK_H + + +#include +#include +#include +#include + + +class cAlbum; + +class cTrack +{ +public: + cTrack(cAlbum* lpAlbum, const QString& szTitle, const qint16& trackNumber, const QString& szPartOfSet, const QString& szBand, const QString& szComposer, const QDate& recordingTime); + + void setAlbum(cAlbum* lpAlbum); + cAlbum* album(); + + void setTitle(const QString& szTitle); + QString title(); + + void setTrackNumber(const qint16& trackNumber); + qint16 trackNumber(); + + void setPartOfSet(const QString& szPartOfSet); + QString partOfSet(); + + void setBand(const QString& szBand); + QString band(); + + void setComposer(const QString& szComposer); + QString composer(); + + void setRecordingTime(const QDate &recordingTime); + QDate recordingTime(); + +private: + cAlbum* m_lpAlbum; + QString m_szTitle; + qint16 m_iTrackNumber; + QString m_szPartOfSet; + QString m_szBand; + QString m_szComposer; + QDate m_recordingTime; +}; + +Q_DECLARE_METATYPE(cTrack*) + +class cTrackList : public QList +{ +public: + cTrack* add(cAlbum* lpAlbum, const QString& szTitle, const qint16& trackNumber, const QString& szPartOfSet, const QString& szBand, const QString& szComposer, const QDate& recordingTime); +}; + +#endif // CTRACK_H diff --git a/qtJukeBox.pro b/qtJukeBox.pro index ef6468f..af89b13 100644 --- a/qtJukeBox.pro +++ b/qtJukeBox.pro @@ -46,7 +46,8 @@ SOURCES += main.cpp\ common.cpp \ cpixmap.cpp \ cmusicviewitemdelegate.cpp \ - calbum.cpp + calbum.cpp \ + ctrack.cpp HEADERS += cmainwindow.h \ cmediainfo.h \ @@ -56,6 +57,7 @@ HEADERS += cmainwindow.h \ common.h \ cpixmap.h \ cmusicviewitemdelegate.h \ - calbum.h + calbum.h \ + ctrack.h FORMS += cmainwindow.ui