diff --git a/mythplugins/configure b/mythplugins/configure index 62eac704533..bda1fbc0aad 100755 --- a/mythplugins/configure +++ b/mythplugins/configure @@ -295,7 +295,6 @@ DEPEND_LIST=" vorbis flac mp3lame -taglib " enable $PLUGIN_LIST $CONFIG_LIST $DEPEND_LIST @@ -663,24 +662,7 @@ if enabled music ; then echo "MythMusic requires the LAME mp3 encoder." fi - taglib_minor="0" - if test x`which taglib-config` != x"" ; then - taglib_minor=`taglib-config --version | cut -d. -f2` - if test x"$taglib_minor" = x"" ; then - echo "Can't find taglib-config. Assuming 1.6 or later." - taglib_minor="6" - fi - tagprefix=`taglib-config --prefix` - add_cxxflags "-I${tagprefix}/include" - add_ldflags "-L${tagprefix}/lib" - fi - - if test $taglib_minor -lt 6 || ! check_lib_cxx taglib/fileref.h TagLib::FileRef -ltag -lz ; then - disable taglib - echo "MythMusic requires taglib 1.6 or later." - fi - - if disabled vorbis || disabled flac || disabled mp3lame || disabled taglib ; then + if disabled vorbis || disabled flac || disabled mp3lame ; then echo "Disabling MythMusic due to missing dependencies." disable music fi @@ -906,10 +888,6 @@ if enabled music ; then else echo " FFTW support will not be included in MythMusic" fi - - if enabled taglib ; then - echo "INCLUDEPATH += `taglib-config --prefix`/include/taglib" >> ./mythmusic/mythmusic/config.pro - fi fi ########################################################### diff --git a/mythplugins/mythmusic/mythmusic/avfdecoder.h b/mythplugins/mythmusic/mythmusic/avfdecoder.h index 19b3d3795be..52716033766 100644 --- a/mythplugins/mythmusic/mythmusic/avfdecoder.h +++ b/mythplugins/mythmusic/mythmusic/avfdecoder.h @@ -12,8 +12,6 @@ extern "C" { #include } -class Metadata; - class avfDecoder : public Decoder { public: diff --git a/mythplugins/mythmusic/mythmusic/cddecoder.cpp b/mythplugins/mythmusic/mythmusic/cddecoder.cpp index 5048cc1e992..83c4fc35f44 100644 --- a/mythplugins/mythmusic/mythmusic/cddecoder.cpp +++ b/mythplugins/mythmusic/mythmusic/cddecoder.cpp @@ -20,6 +20,7 @@ // MythTV #include #include +#include extern "C" { #include @@ -27,7 +28,6 @@ extern "C" { // MythMusic #include "constants.h" -#include "metadata.h" #include "cddb.h" #define CDEXT ".cda" @@ -507,18 +507,18 @@ int CdDecoder::getNumCDAudioTracks() } //public -Metadata* CdDecoder::getMetadata(int track) +MusicMetadata* CdDecoder::getMetadata(int track) { m_settracknum = track; return getMetadata(); } //public -Metadata *CdDecoder::getLastMetadata() +MusicMetadata *CdDecoder::getLastMetadata() { for(int i = getNumTracks(); i > 0; --i) { - Metadata *m = getMetadata(i); + MusicMetadata *m = getMetadata(i); if(m) return m; } @@ -565,7 +565,7 @@ static Cddb::Toc& GetToc(CdIo_t *cdio, Cddb::Toc& toc) } //virtual -Metadata *CdDecoder::getMetadata() +MusicMetadata *CdDecoder::getMetadata() { QString artist, album, compilation_artist, title, genre; int year = 0; @@ -774,7 +774,7 @@ Metadata *CdDecoder::getMetadata() if (title.isEmpty()) title = QObject::tr("Track %1").arg(tracknum); - Metadata *m = new Metadata(getFilename(), artist, compilation_artist, + MusicMetadata *m = new MusicMetadata(getFilename(), artist, compilation_artist, album, title, genre, year, tracknum, length); if (m) m->setCompilation(isCompilation); @@ -783,7 +783,7 @@ Metadata *CdDecoder::getMetadata() } // virtual -void CdDecoder::commitMetadata(Metadata *mdata) +void CdDecoder::commitMetadata(MusicMetadata *mdata) { QMutexLocker lock(&getCdioMutex()); diff --git a/mythplugins/mythmusic/mythmusic/cddecoder.h b/mythplugins/mythmusic/mythmusic/cddecoder.h index d0f36894094..4054f3f8703 100644 --- a/mythplugins/mythmusic/mythmusic/cddecoder.h +++ b/mythplugins/mythmusic/mythmusic/cddecoder.h @@ -15,7 +15,7 @@ using std::vector; # include #endif -class Metadata; +class MusicMetadata; class CdDecoder : public Decoder { @@ -29,13 +29,14 @@ class CdDecoder : public Decoder virtual void stop(); // Decoder overrides - virtual Metadata *getMetadata(void); - virtual void commitMetadata(Metadata *mdata); - - // The following need to allocate a new Metadata object each time, - // because their callers (e.g. databasebox.cpp) free the returned value - Metadata *getMetadata(int track); - Metadata *getLastMetadata(); + virtual MusicMetadata *getMetadata(void); + virtual void commitMetadata(MusicMetadata *mdata); + + // The following need to allocate a new MusicMetadata object each time, + // because their callers free the returned value + // TODO check this is still true + MusicMetadata *getMetadata(int track); + MusicMetadata *getLastMetadata(); #if CONFIG_DARWIN double lengthInSeconds(); diff --git a/mythplugins/mythmusic/mythmusic/cdrip.cpp b/mythplugins/mythmusic/mythmusic/cdrip.cpp index 02cd2e42cb7..c8d41f2a23d 100644 --- a/mythplugins/mythmusic/mythmusic/cdrip.cpp +++ b/mythplugins/mythmusic/mythmusic/cdrip.cpp @@ -209,7 +209,7 @@ void CDRipperThread::run(void) return; } - Metadata *track = m_tracks->at(0)->metadata; + MusicMetadata *track = m_tracks->at(0)->metadata; QString tots; if (track->Compilation()) @@ -254,7 +254,7 @@ void CDRipperThread::run(void) lcd->switchToGeneric(textItems); } - Metadata *titleTrack = NULL; + MusicMetadata *titleTrack = NULL; QString outfile; std::auto_ptr encoder; @@ -303,20 +303,20 @@ void CDRipperThread::run(void) if (encodertype == "mp3") { outfile += ".mp3"; - encoder.reset(new LameEncoder(gMusicData->musicDir + outfile, m_quality, + encoder.reset(new LameEncoder(getMusicDirectory() + outfile, m_quality, titleTrack, mp3usevbr)); } else // ogg { outfile += ".ogg"; - encoder.reset(new VorbisEncoder(gMusicData->musicDir + outfile, m_quality, + encoder.reset(new VorbisEncoder(getMusicDirectory() + outfile, m_quality, titleTrack)); } } else { outfile += ".flac"; - encoder.reset(new FlacEncoder(gMusicData->musicDir + outfile, m_quality, + encoder.reset(new FlacEncoder(getMusicDirectory() + outfile, m_quality, titleTrack)); } @@ -673,7 +673,7 @@ void Ripper::ScanFinished() if (m_decoder) { QString label; - Metadata *metadata; + MusicMetadata *metadata; m_artistName.clear(); m_albumName.clear(); @@ -779,7 +779,7 @@ bool Ripper::deleteExistingTrack(RipTrack *track) if (!track) return false; - Metadata *metadata = track->metadata; + MusicMetadata *metadata = track->metadata; if (!metadata) return false; @@ -824,7 +824,7 @@ bool Ripper::deleteExistingTrack(RipTrack *track) if (query.next()) { int trackID = query.value(0).toInt(); - QString filename = gMusicData->musicDir + query.value(1).toString(); + QString filename = getMusicDirectory() + query.value(1).toString(); // delete file if (!QFile::remove(filename)) @@ -859,7 +859,7 @@ bool Ripper::somethingWasRipped() void Ripper::artistChanged() { QString newartist = m_artistEdit->GetText(); - Metadata *data; + MusicMetadata *data; if (m_tracks->size() > 0) { @@ -890,7 +890,7 @@ void Ripper::artistChanged() void Ripper::albumChanged() { QString newalbum = m_albumEdit->GetText(); - Metadata *data; + MusicMetadata *data; if (m_tracks->size() > 0) { @@ -909,7 +909,7 @@ void Ripper::albumChanged() void Ripper::genreChanged() { QString newgenre = m_genreEdit->GetText(); - Metadata *data; + MusicMetadata *data; if (m_tracks->size() > 0) { @@ -929,7 +929,7 @@ void Ripper::yearChanged() { QString newyear = m_yearEdit->GetText(); - Metadata *data; + MusicMetadata *data; if (m_tracks->size() > 0) { @@ -949,7 +949,7 @@ void Ripper::compilationChanged(bool state) { if (!state) { - Metadata *data; + MusicMetadata *data; if (m_tracks->size() > 0) { // Update artist MetaData of each track on the ablum... @@ -975,7 +975,7 @@ void Ripper::compilationChanged(bool state) // Update artist MetaData of each track on the album... for (int trackno = 0; trackno < m_tracks->size(); ++trackno) { - Metadata *data; + MusicMetadata *data; data = m_tracks->at(trackno)->metadata; if (data) @@ -998,7 +998,7 @@ void Ripper::switchTitlesAndArtists() if (!m_compilationCheck->GetBooleanCheckState()) return; - Metadata *data; + MusicMetadata *data; // Switch title and artist for each track QString tmp; @@ -1128,7 +1128,7 @@ void Ripper::updateTrackList(void) break; RipTrack *track = m_tracks->at(i); - Metadata *metadata = track->metadata; + MusicMetadata *metadata = track->metadata; MythUIButtonListItem *item = new MythUIButtonListItem(m_trackList,""); @@ -1172,7 +1172,7 @@ void Ripper::updateTrackList(void) void Ripper::searchArtist() { QString msg = tr("Select an Artist"); - QStringList searchList = Metadata::fillFieldList("artist"); + QStringList searchList = MusicMetadata::fillFieldList("artist"); MythScreenStack *popupStack = GetMythMainWindow()->GetStack("popup stack"); MythUISearchDialog *searchDlg = new MythUISearchDialog(popupStack, msg, searchList, false, ""); @@ -1196,7 +1196,7 @@ void Ripper::setArtist(QString artist) void Ripper::searchAlbum() { QString msg = tr("Select an Album"); - QStringList searchList = Metadata::fillFieldList("album"); + QStringList searchList = MusicMetadata::fillFieldList("album"); MythScreenStack *popupStack = GetMythMainWindow()->GetStack("popup stack"); MythUISearchDialog *searchDlg = new MythUISearchDialog(popupStack, msg, searchList, false, ""); @@ -1220,7 +1220,7 @@ void Ripper::setAlbum(QString album) void Ripper::searchGenre() { QString msg = tr("Select a Genre"); - QStringList searchList = Metadata::fillFieldList("genre"); + QStringList searchList = MusicMetadata::fillFieldList("genre"); // load genre list m_searchList.clear(); for (int x = 0; x < genre_table_size; x++) @@ -1256,7 +1256,7 @@ void Ripper::showEditMetadataDialog(MythUIButtonListItem *item) if (!track) return; - Metadata *editMeta = track->metadata; + MusicMetadata *editMeta = track->metadata; MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack(); diff --git a/mythplugins/mythmusic/mythmusic/cdrip.h b/mythplugins/mythmusic/mythmusic/cdrip.h index 7fea6109e7d..fc88a327ab6 100644 --- a/mythplugins/mythmusic/mythmusic/cdrip.h +++ b/mythplugins/mythmusic/mythmusic/cdrip.h @@ -1,14 +1,16 @@ #ifndef CDRIP_H_ #define CDRIP_H_ -#include "metadata.h" - +// qt #include #include +// mythtv +#include #include #include + class MythUIText; class MythUITextEdit; class MythUIImage; @@ -42,10 +44,10 @@ class CDEjectorThread: public MThread typedef struct { - Metadata *metadata; - bool active; - int length; - bool isNew; + MusicMetadata *metadata; + bool active; + int length; + bool isNew; } RipTrack; Q_DECLARE_METATYPE(RipTrack *) diff --git a/mythplugins/mythmusic/mythmusic/dbcheck.cpp b/mythplugins/mythmusic/mythmusic/dbcheck.cpp index 98ebc79d636..dca0a852998 100644 --- a/mythplugins/mythmusic/mythmusic/dbcheck.cpp +++ b/mythplugins/mythmusic/mythmusic/dbcheck.cpp @@ -5,11 +5,12 @@ #include using namespace std; +#include +#include +#include +#include + #include "dbcheck.h" -#include "metadata.h" -#include "mythtv/mythcontext.h" -#include "mythtv/mythdb.h" -#include "mythtv/schemawizard.h" const QString currentDatabaseVersion = "1020"; diff --git a/mythplugins/mythmusic/mythmusic/decoder.cpp b/mythplugins/mythmusic/mythmusic/decoder.cpp index a4043b16359..a2568d6fbd0 100644 --- a/mythplugins/mythmusic/mythmusic/decoder.cpp +++ b/mythplugins/mythmusic/mythmusic/decoder.cpp @@ -4,18 +4,23 @@ // warranty, or liability of any kind. // +// mythmusic #include "decoder.h" #include "constants.h" -#include "metadata.h" -#include "metaio.h" #include "musicplayer.h" +// qt #include +// libmyth #include #include #include +// libmythmetadata +#include "musicmetadata.h" +#include "metaio.h" + QEvent::Type DecoderEvent::Decoding = (QEvent::Type) QEvent::registerEventType(); QEvent::Type DecoderEvent::Stopped = diff --git a/mythplugins/mythmusic/mythmusic/decoder.h b/mythplugins/mythmusic/mythmusic/decoder.h index c74c935cd37..5c736ff3983 100644 --- a/mythplugins/mythmusic/mythmusic/decoder.h +++ b/mythplugins/mythmusic/mythmusic/decoder.h @@ -13,7 +13,7 @@ #include #include -class Metadata; +class MusicMetadata; class MetaIO; class Decoder; class DecoderFactory; diff --git a/mythplugins/mythmusic/mythmusic/decoderhandler.cpp b/mythplugins/mythmusic/mythmusic/decoderhandler.cpp index 5d86dc62496..89fb3b94ab9 100644 --- a/mythplugins/mythmusic/mythmusic/decoderhandler.cpp +++ b/mythplugins/mythmusic/mythmusic/decoderhandler.cpp @@ -15,11 +15,12 @@ #include // For random() on MINGW32 #include #include +#include + // mythmusic #include "decoderhandler.h" #include "decoder.h" -#include "metadata.h" #include "shoutcast.h" /**********************************************************************/ @@ -31,10 +32,10 @@ QEvent::Type DecoderHandlerEvent::OperationStart = (QEvent::Type) QEvent::regist QEvent::Type DecoderHandlerEvent::OperationStop = (QEvent::Type) QEvent::registerEventType(); QEvent::Type DecoderHandlerEvent::Error = (QEvent::Type) QEvent::registerEventType(); -DecoderHandlerEvent::DecoderHandlerEvent(Type t, const Metadata &meta) +DecoderHandlerEvent::DecoderHandlerEvent(Type t, const MusicMetadata &meta) : MythEvent(t), m_msg(NULL), m_meta(NULL), m_available(0), m_maxSize(0) { - m_meta = new Metadata(meta); + m_meta = new MusicMetadata(meta); } DecoderHandlerEvent::~DecoderHandlerEvent(void) @@ -54,7 +55,7 @@ MythEvent* DecoderHandlerEvent::clone(void) const result->m_msg = new QString(*m_msg); if (m_meta) - result->m_meta = new Metadata(*m_meta); + result->m_meta = new MusicMetadata(*m_meta); result->m_available = m_available; result->m_maxSize = m_maxSize; @@ -295,7 +296,7 @@ DecoderHandler::~DecoderHandler(void) stop(); } -void DecoderHandler::start(Metadata *mdata) +void DecoderHandler::start(MusicMetadata *mdata) { m_state = LOADING; diff --git a/mythplugins/mythmusic/mythmusic/decoderhandler.h b/mythplugins/mythmusic/mythmusic/decoderhandler.h index 93bf0b4a604..2e1fd3317d3 100644 --- a/mythplugins/mythmusic/mythmusic/decoderhandler.h +++ b/mythplugins/mythmusic/mythmusic/decoderhandler.h @@ -13,9 +13,10 @@ // mythtv #include +#include // mythmusic -#include "metadata.h" + #include "pls.h" class MusicBuffer; @@ -26,7 +27,7 @@ class QNetworkAccessManager; class QNetworkReply; class Decoder; -class Metadata; +class MusicMetadata; class DecoderIOFactory; class DecoderHandler; class MusicBuffer; @@ -47,11 +48,11 @@ class DecoderHandlerEvent : public MythEvent : MythEvent(t), m_msg(0), m_meta(0), m_available(available), m_maxSize(maxSize) {} - DecoderHandlerEvent(Type t, const Metadata &m); + DecoderHandlerEvent(Type t, const MusicMetadata &m); ~DecoderHandlerEvent(); QString *getMessage(void) const { return m_msg; } - Metadata *getMetadata(void) const { return m_meta; } + MusicMetadata *getMetadata(void) const { return m_meta; } void getBufferStatus(int *available, int *maxSize) const; virtual MythEvent *clone(void) const; @@ -65,7 +66,7 @@ class DecoderHandlerEvent : public MythEvent private: QString *m_msg; - Metadata *m_meta; + MusicMetadata *m_meta; int m_available; int m_maxSize; }; @@ -101,7 +102,7 @@ class DecoderHandler : public QObject, public MythObservable Decoder *getDecoder(void) { return m_decoder; } DecoderIOFactory *getIOFactory(void) { return m_io_factory; } - void start(Metadata *mdata); + void start(MusicMetadata *mdata); void stop(void); void customEvent(QEvent *e); @@ -131,7 +132,7 @@ class DecoderHandler : public QObject, public MythObservable PlayListFile m_playlist; DecoderIOFactory *m_io_factory; Decoder *m_decoder; - Metadata *m_meta; + MusicMetadata *m_meta; bool m_op; uint m_redirects; @@ -154,7 +155,7 @@ class DecoderIOFactory : public QObject, public MythObservable virtual QIODevice *getInput(void) = 0; void setUrl (const QUrl &url) { m_url = url; } - void setMeta (Metadata *meta) { m_meta = *meta; } + void setMeta (MusicMetadata *meta) { m_meta = *meta; } static const uint DefaultPrebufferSize = 128 * 1024; static const uint DefaultBufferSize = 256 * 1024; @@ -166,12 +167,12 @@ class DecoderIOFactory : public QObject, public MythObservable void doFailed(const QString &message); void doOperationStart(const QString &name); void doOperationStop(void); - Metadata& getMetadata() { return m_meta; } + MusicMetadata& getMetadata() { return m_meta; } QUrl& getUrl() { return m_url; } private: DecoderHandler *m_handler; - Metadata m_meta; + MusicMetadata m_meta; QUrl m_url; }; diff --git a/mythplugins/mythmusic/mythmusic/editmetadata.cpp b/mythplugins/mythmusic/mythmusic/editmetadata.cpp index 71d91e603f3..03456b51153 100644 --- a/mythplugins/mythmusic/mythmusic/editmetadata.cpp +++ b/mythplugins/mythmusic/mythmusic/editmetadata.cpp @@ -17,28 +17,30 @@ #include #include #include +#include // mythmusic +#include "musicdata.h" #include "decoder.h" #include "genres.h" #include "metaio.h" #include "musicplayer.h" -#include "musicutils.h" + #include "editmetadata.h" // these need to be static so both screens can pick them up bool EditMetadataCommon::metadataOnly = false; -Metadata *EditMetadataCommon::m_metadata = NULL; -Metadata *EditMetadataCommon::m_sourceMetadata = NULL; +MusicMetadata *EditMetadataCommon::m_metadata = NULL; +MusicMetadata *EditMetadataCommon::m_sourceMetadata = NULL; EditMetadataCommon::EditMetadataCommon(MythScreenStack *parent, - Metadata *source_metadata, + MusicMetadata *source_metadata, const QString &name) : MythScreenType(parent, name), m_doneButton(NULL) { // make a copy so we can abandon changes - m_metadata = new Metadata(*source_metadata); + m_metadata = new MusicMetadata(*source_metadata); m_sourceMetadata = source_metadata; metadataOnly = false; @@ -301,7 +303,7 @@ void EditMetadataCommon::scanForImages(void) /////////////////////////////////////////////////////////////////////////////// // EditMatadataDialog -EditMetadataDialog::EditMetadataDialog(MythScreenStack *parent, Metadata *source_metadata) +EditMetadataDialog::EditMetadataDialog(MythScreenStack *parent, MusicMetadata *source_metadata) : EditMetadataCommon(parent, source_metadata, "EditMetadataDialog") { gCoreContext->addListener(this); @@ -540,7 +542,7 @@ void EditMetadataDialog::checkClicked(bool state) void EditMetadataDialog::searchArtist() { QString msg = tr("Select an Artist"); - QStringList searchList = Metadata::fillFieldList("artist"); + QStringList searchList = MusicMetadata::fillFieldList("artist"); QString s = m_metadata->Artist(); MythScreenStack *popupStack = GetMythMainWindow()->GetStack("popup stack"); @@ -585,7 +587,7 @@ void EditMetadataDialog::updateArtistImage(void) void EditMetadataDialog::searchCompilationArtist() { QString msg = tr("Select a Compilation Artist"); - QStringList searchList = Metadata::fillFieldList("compilation_artist"); + QStringList searchList = MusicMetadata::fillFieldList("compilation_artist"); QString s = m_metadata->CompilationArtist(); MythScreenStack *popupStack = GetMythMainWindow()->GetStack("popup stack"); @@ -610,7 +612,7 @@ void EditMetadataDialog::setCompArtist(QString compArtist) void EditMetadataDialog::searchAlbum() { QString msg = tr("Select an Album"); - QStringList searchList = Metadata::fillFieldList("album"); + QStringList searchList = MusicMetadata::fillFieldList("album"); QString s = m_metadata->Album(); MythScreenStack *popupStack = GetMythMainWindow()->GetStack("popup stack"); @@ -653,7 +655,7 @@ void EditMetadataDialog::updateAlbumImage(void) void EditMetadataDialog::searchGenre() { QString msg = tr("Select a Genre"); - QStringList searchList = Metadata::fillFieldList("genre"); + QStringList searchList = MusicMetadata::fillFieldList("genre"); // load genre list /* searchList.clear(); diff --git a/mythplugins/mythmusic/mythmusic/editmetadata.h b/mythplugins/mythmusic/mythmusic/editmetadata.h index 97c44a05192..1ad51aa087b 100644 --- a/mythplugins/mythmusic/mythmusic/editmetadata.h +++ b/mythplugins/mythmusic/mythmusic/editmetadata.h @@ -5,7 +5,7 @@ using namespace std; #include -#include "metadata.h" +#include class MythUIStateType; class MythUIImage; @@ -20,7 +20,7 @@ class EditMetadataCommon : public MythScreenType Q_OBJECT public: - EditMetadataCommon(MythScreenStack *parent, Metadata *source_metadata, const QString &name); + EditMetadataCommon(MythScreenStack *parent, MusicMetadata *source_metadata, const QString &name); EditMetadataCommon(MythScreenStack *parent, const QString &name); ~EditMetadataCommon(void); @@ -48,7 +48,7 @@ class EditMetadataCommon : public MythScreenType void scanForImages(void); static bool metadataOnly; - static Metadata *m_metadata, *m_sourceMetadata; + static MusicMetadata *m_metadata, *m_sourceMetadata; MythUIButton *m_doneButton; }; @@ -58,7 +58,7 @@ class EditMetadataDialog : public EditMetadataCommon Q_OBJECT public: - EditMetadataDialog(MythScreenStack *parent, Metadata *source_metadata); + EditMetadataDialog(MythScreenStack *parent, MusicMetadata *source_metadata); EditMetadataDialog(MythScreenStack *parent); ~EditMetadataDialog(void); diff --git a/mythplugins/mythmusic/mythmusic/encoder.cpp b/mythplugins/mythmusic/mythmusic/encoder.cpp index ba799a5333b..ca52d4b5917 100644 --- a/mythplugins/mythmusic/mythmusic/encoder.cpp +++ b/mythplugins/mythmusic/mythmusic/encoder.cpp @@ -1,13 +1,14 @@ #include -#include "metadata.h" +#include +#include + #include "encoder.h" -#include using namespace std; -Encoder::Encoder(const QString &outfile, int qualitylevel, Metadata *metadata) +Encoder::Encoder(const QString &outfile, int qualitylevel, MusicMetadata *metadata) : m_outfile(outfile), m_out(NULL), m_quality(qualitylevel), m_metadata(metadata) { diff --git a/mythplugins/mythmusic/mythmusic/encoder.h b/mythplugins/mythmusic/mythmusic/encoder.h index 09a644c8c69..08c7297ee1e 100644 --- a/mythplugins/mythmusic/mythmusic/encoder.h +++ b/mythplugins/mythmusic/mythmusic/encoder.h @@ -8,12 +8,12 @@ #define EPARTIALSAMPLE -2 #define ENOTIMPL -3 -class Metadata; +class MusicMetadata; class Encoder { public: - Encoder(const QString &outfile, int qualitylevel, Metadata *metadata); + Encoder(const QString &outfile, int qualitylevel, MusicMetadata *metadata); virtual ~Encoder(); virtual int addSamples(int16_t * bytes, unsigned int len) = 0; @@ -23,7 +23,7 @@ class Encoder const QString m_outfile; FILE *m_out; int m_quality; - Metadata *m_metadata; + MusicMetadata *m_metadata; }; #endif diff --git a/mythplugins/mythmusic/mythmusic/filescanner.cpp b/mythplugins/mythmusic/mythmusic/filescanner.cpp index 281ffb88af9..7a138a73fe6 100644 --- a/mythplugins/mythmusic/mythmusic/filescanner.cpp +++ b/mythplugins/mythmusic/mythmusic/filescanner.cpp @@ -12,14 +12,13 @@ #include #include #include +#include +#include // MythMusic headers -#include "decoder.h" #include "filescanner.h" -#include "metadata.h" -#include "metaio.h" -FileScanner::FileScanner() : m_decoder(NULL) +FileScanner::FileScanner() { MSqlQuery query(MSqlQuery::InitCon()); @@ -260,7 +259,7 @@ void FileScanner::AddFileToDB(const QString &filename) LOG(VB_FILE, LOG_INFO, QString("Reading metadata from %1").arg(filename)); - Metadata *data = MetaIO::readMetadata(filename); + MusicMetadata *data = MetaIO::readMetadata(filename); data->setFileSize((quint64)QFileInfo(filename).size()); if (data) { @@ -480,8 +479,8 @@ void FileScanner::UpdateFileInDB(const QString &filename) directory.remove(0, m_startdir.length()); directory = directory.section( '/', 0, -2); - Metadata *db_meta = MetaIO::getMetadata(filename); - Metadata *disk_meta = MetaIO::readMetadata(filename); + MusicMetadata *db_meta = MetaIO::getMetadata(filename); + MusicMetadata *disk_meta = MetaIO::readMetadata(filename); if (db_meta && disk_meta) { diff --git a/mythplugins/mythmusic/mythmusic/filescanner.h b/mythplugins/mythmusic/mythmusic/filescanner.h index 585a19619d3..bd2d84e9275 100644 --- a/mythplugins/mythmusic/mythmusic/filescanner.h +++ b/mythplugins/mythmusic/mythmusic/filescanner.h @@ -1,9 +1,6 @@ #ifndef _FILESCANNER_H_ #define _FILESCANNER_H_ -class Metadata; -class Decoder; - typedef QMap IdCache; class FileScanner @@ -39,8 +36,6 @@ class FileScanner IdCache m_artistid; IdCache m_genreid; IdCache m_albumid; - - Decoder *m_decoder; }; #endif // _FILESCANNER_H_ diff --git a/mythplugins/mythmusic/mythmusic/flacencoder.cpp b/mythplugins/mythmusic/mythmusic/flacencoder.cpp index 197116c6a76..df9d4a19bfd 100644 --- a/mythplugins/mythmusic/mythmusic/flacencoder.cpp +++ b/mythplugins/mythmusic/mythmusic/flacencoder.cpp @@ -7,9 +7,11 @@ using namespace std; #include -#include "metadata.h" +// libmythmetadata +#include +#include + #include "flacencoder.h" -#include "metaioflacvorbis.h" #include #if !defined(NEWFLAC) @@ -24,7 +26,7 @@ using namespace std; #include FlacEncoder::FlacEncoder(const QString &outfile, int qualitylevel, - Metadata *metadata) + MusicMetadata *metadata) : Encoder(outfile, qualitylevel, metadata) { sampleindex = 0; diff --git a/mythplugins/mythmusic/mythmusic/flacencoder.h b/mythplugins/mythmusic/mythmusic/flacencoder.h index 0b125a55957..3112a4da1cf 100644 --- a/mythplugins/mythmusic/mythmusic/flacencoder.h +++ b/mythplugins/mythmusic/mythmusic/flacencoder.h @@ -76,13 +76,13 @@ #define MAX_SAMPLES 588 * 4 #define NUM_CHANNELS 2 -class Metadata; +class MusicMetadata; class QString; class FlacEncoder : public Encoder { public: - FlacEncoder(const QString &outfile, int qualitylevel, Metadata *metadata); + FlacEncoder(const QString &outfile, int qualitylevel, MusicMetadata *metadata); ~FlacEncoder(); int addSamples(int16_t *bytes, unsigned int len); diff --git a/mythplugins/mythmusic/mythmusic/importmusic.cpp b/mythplugins/mythmusic/mythmusic/importmusic.cpp index 89e32b2839e..77fe915dbdd 100644 --- a/mythplugins/mythmusic/mythmusic/importmusic.cpp +++ b/mythplugins/mythmusic/mythmusic/importmusic.cpp @@ -7,12 +7,12 @@ #include #include #include +#include // mythmusic #include "importmusic.h" #include "decoder.h" #include "genres.h" -#include "metadata.h" #include "cdrip.h" #include "editmetadata.h" #include "musicplayer.h" @@ -141,7 +141,7 @@ void ImportMusicDialog::fillWidgets() m_currentText->SetText(QString("%1 of %2") .arg(m_currentTrack + 1).arg(m_tracks->size())); - Metadata *meta = m_tracks->at(m_currentTrack)->metadata; + MusicMetadata *meta = m_tracks->at(m_currentTrack)->metadata; m_filenameText->SetText(meta->Filename()); m_compilationCheck->SetCheckState(meta->Compilation()); m_compartistText->SetText(meta->CompilationArtist()); @@ -397,7 +397,7 @@ void ImportMusicDialog::addPressed() if (m_tracks->empty()) return; - Metadata *meta = m_tracks->at(m_currentTrack)->metadata; + MusicMetadata *meta = m_tracks->at(m_currentTrack)->metadata; // is the current track a new file? if (m_tracks->at(m_currentTrack)->isNewTune) @@ -410,10 +410,10 @@ void ImportMusicDialog::addPressed() saveFilename += "." + fi.suffix(); // copy the file to the new location - if (!copyFile(meta->Filename(), gMusicData->musicDir + saveFilename)) + if (!copyFile(meta->Filename(), getMusicDirectory() + saveFilename)) { ShowOkPopup(tr("Copy Failed\nCould not copy file to: %1") - .arg(gMusicData->musicDir + saveFilename)); + .arg(getMusicDirectory() + saveFilename)); return; } @@ -422,7 +422,7 @@ void ImportMusicDialog::addPressed() // do we need to update the tags? if (m_tracks->at(m_currentTrack)->metadataHasChanged) { - MetaIO *tagger = MetaIO::createTagger(gMusicData->musicDir + saveFilename); + MetaIO *tagger = MetaIO::createTagger(getMusicDirectory() + saveFilename); if (tagger) { tagger->write(meta); @@ -574,7 +574,7 @@ void ImportMusicDialog::scanDirectory(QString &directory, vector *tr MetaIO *tagger = MetaIO::createTagger(filename); if (tagger) { - Metadata *metadata = tagger->read(filename); + MusicMetadata *metadata = tagger->read(filename); if (metadata) { TrackInfo * track = new TrackInfo; @@ -597,7 +597,7 @@ void ImportMusicDialog::showEditMetadataDialog() if (m_tracks->empty()) return; - Metadata *editMeta = m_tracks->at(m_currentTrack)->metadata; + MusicMetadata *editMeta = m_tracks->at(m_currentTrack)->metadata; MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack(); @@ -617,7 +617,7 @@ void ImportMusicDialog::showEditMetadataDialog() void ImportMusicDialog::metadataChanged(void) { - Metadata *editMeta = m_tracks->at(m_currentTrack)->metadata; + MusicMetadata *editMeta = m_tracks->at(m_currentTrack)->metadata; m_tracks->at(m_currentTrack)->metadataHasChanged = true; m_tracks->at(m_currentTrack)->isNewTune = isNewTune(editMeta->Artist(), editMeta->Album(), editMeta->Title()); @@ -662,7 +662,7 @@ void ImportMusicDialog::showMenu() void ImportMusicDialog::saveDefaults(void) { - Metadata *data = m_tracks->at(m_currentTrack)->metadata; + MusicMetadata *data = m_tracks->at(m_currentTrack)->metadata; m_defaultCompilation = data->Compilation(); m_defaultCompArtist = data->CompilationArtist(); m_defaultArtist = data->Artist(); @@ -679,7 +679,7 @@ void ImportMusicDialog::setCompilation(void) if (!m_haveDefaults) return; - Metadata *data = m_tracks->at(m_currentTrack)->metadata; + MusicMetadata *data = m_tracks->at(m_currentTrack)->metadata; if (m_defaultCompilation) { @@ -700,7 +700,7 @@ void ImportMusicDialog::setCompilationArtist(void) if (!m_haveDefaults) return; - Metadata *data = m_tracks->at(m_currentTrack)->metadata; + MusicMetadata *data = m_tracks->at(m_currentTrack)->metadata; data->setCompilationArtist(m_defaultCompArtist); fillWidgets(); @@ -711,7 +711,7 @@ void ImportMusicDialog::setArtist(void) if (!m_haveDefaults) return; - Metadata *data = m_tracks->at(m_currentTrack)->metadata; + MusicMetadata *data = m_tracks->at(m_currentTrack)->metadata; data->setArtist(m_defaultArtist); m_tracks->at(m_currentTrack)->isNewTune = @@ -725,7 +725,7 @@ void ImportMusicDialog::setAlbum(void) if (!m_haveDefaults) return; - Metadata *data = m_tracks->at(m_currentTrack)->metadata; + MusicMetadata *data = m_tracks->at(m_currentTrack)->metadata; data->setAlbum(m_defaultAlbum); m_tracks->at(m_currentTrack)->isNewTune = @@ -739,7 +739,7 @@ void ImportMusicDialog::setYear(void) if (!m_haveDefaults) return; - Metadata *data = m_tracks->at(m_currentTrack)->metadata; + MusicMetadata *data = m_tracks->at(m_currentTrack)->metadata; data->setYear(m_defaultYear); fillWidgets(); @@ -747,7 +747,7 @@ void ImportMusicDialog::setYear(void) void ImportMusicDialog::setTrack(void) { - Metadata *data = m_tracks->at(m_currentTrack)->metadata; + MusicMetadata *data = m_tracks->at(m_currentTrack)->metadata; data->setTrack(data->Track() + 100); fillWidgets(); @@ -758,7 +758,7 @@ void ImportMusicDialog::setGenre(void) if (!m_haveDefaults) return; - Metadata *data = m_tracks->at(m_currentTrack)->metadata; + MusicMetadata *data = m_tracks->at(m_currentTrack)->metadata; data->setGenre(m_defaultGenre); fillWidgets(); @@ -769,13 +769,13 @@ void ImportMusicDialog::setRating(void) if (!m_haveDefaults) return; - Metadata *data = m_tracks->at(m_currentTrack)->metadata; + MusicMetadata *data = m_tracks->at(m_currentTrack)->metadata; data->setRating(m_defaultRating); } void ImportMusicDialog::setTitleInitialCap(void) { - Metadata *data = m_tracks->at(m_currentTrack)->metadata; + MusicMetadata *data = m_tracks->at(m_currentTrack)->metadata; QString title = data->Title(); bool bFoundCap = false; @@ -799,7 +799,7 @@ void ImportMusicDialog::setTitleInitialCap(void) void ImportMusicDialog::setTitleWordCaps(void) { - Metadata *data = m_tracks->at(m_currentTrack)->metadata; + MusicMetadata *data = m_tracks->at(m_currentTrack)->metadata; QString title = data->Title(); bool bInWord = false; @@ -862,7 +862,7 @@ void ImportMusicDialog::customEvent(QEvent *event) ImportCoverArtDialog::ImportCoverArtDialog(MythScreenStack *parent, const QString &sourceDir, - Metadata *metadata) : + MusicMetadata *metadata) : MythScreenType(parent, "import_coverart"), m_sourceDir(sourceDir), m_metadata(metadata), @@ -1063,7 +1063,7 @@ void ImportCoverArtDialog::updateStatus() m_coverartImage->SetFilename(m_filelist[m_currentFile]); m_coverartImage->Load(); - QString saveFilename = gMusicData->musicDir + filenameFromMetadata(m_metadata, false); + QString saveFilename = getMusicDirectory() + filenameFromMetadata(m_metadata, false); QFileInfo fi(saveFilename); QString saveDir = fi.absolutePath(); diff --git a/mythplugins/mythmusic/mythmusic/importmusic.h b/mythplugins/mythmusic/mythmusic/importmusic.h index 47cb63a3c82..8367435367d 100644 --- a/mythplugins/mythmusic/mythmusic/importmusic.h +++ b/mythplugins/mythmusic/mythmusic/importmusic.h @@ -10,7 +10,7 @@ using namespace std; #include #include -class Metadata; +class MusicMetadata; class ImportMusicDialog; class MythUIText; @@ -23,9 +23,9 @@ class MythDialogBox; typedef struct { - Metadata *metadata; - bool isNewTune; - bool metadataHasChanged; + MusicMetadata *metadata; + bool isNewTune; + bool metadataHasChanged; } TrackInfo; class FileScannerThread: public MThread @@ -95,7 +95,7 @@ class ImportMusicDialog : public MythScreenType vector *m_tracks; QStringList m_sourceFiles; int m_currentTrack; - Metadata *m_playingMetaData; + MusicMetadata *m_playingMetaData; // GUI stuff MythUITextEdit *m_locationEdit; @@ -123,19 +123,19 @@ class ImportMusicDialog : public MythScreenType MythUIButton *m_addallnewButton; MythUIButton *m_nextnewButton; - MythUICheckBox *m_compilationCheck; + MythUICheckBox *m_compilationCheck; - MythDialogBox *m_popupMenu; + MythDialogBox *m_popupMenu; // default metadata values - bool m_defaultCompilation; - QString m_defaultCompArtist; - QString m_defaultArtist; - QString m_defaultAlbum; - QString m_defaultGenre; - int m_defaultYear; - int m_defaultRating; - bool m_haveDefaults; + bool m_defaultCompilation; + QString m_defaultCompArtist; + QString m_defaultArtist; + QString m_defaultAlbum; + QString m_defaultGenre; + int m_defaultYear; + int m_defaultRating; + bool m_haveDefaults; }; /////////////////////////////////////////////////////////////////////////////// @@ -148,7 +148,7 @@ class ImportCoverArtDialog : public MythScreenType public: ImportCoverArtDialog(MythScreenStack *parent, const QString &sourceDir, - Metadata *metadata); + MusicMetadata *metadata); ~ImportCoverArtDialog(); bool Create(void); @@ -165,11 +165,11 @@ class ImportCoverArtDialog : public MythScreenType void updateStatus(void); void updateTypeSelector(void); - QStringList m_filelist; - QString m_sourceDir; - Metadata *m_metadata; - int m_currentFile; - QString m_saveFilename; + QStringList m_filelist; + QString m_sourceDir; + MusicMetadata *m_metadata; + int m_currentFile; + QString m_saveFilename; // // GUI stuff diff --git a/mythplugins/mythmusic/mythmusic/lameencoder.cpp b/mythplugins/mythmusic/mythmusic/lameencoder.cpp index 027959a517f..7c9b071eeb2 100644 --- a/mythplugins/mythmusic/mythmusic/lameencoder.cpp +++ b/mythplugins/mythmusic/mythmusic/lameencoder.cpp @@ -23,18 +23,21 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +// qt #include #include -#include "metadata.h" -#include "lameencoder.h" -#include "metaioid3.h" - -#include - +// myth #include #include +#include "musicmetadata.h" +#include "metaioid3.h" + +// mythmusic +#include "lameencoder.h" +// c++ +#include using namespace std; static int write_buffer(char *buf, int bufsize, FILE *fp) @@ -96,7 +99,7 @@ int LameEncoder::init_encoder(lame_global_flags *gf, int quality, bool vbr) } LameEncoder::LameEncoder(const QString &outfile, int qualitylevel, - Metadata *metadata, bool vbr) : + MusicMetadata *metadata, bool vbr) : Encoder(outfile, qualitylevel, metadata), bits(16), channels(2), diff --git a/mythplugins/mythmusic/mythmusic/lameencoder.h b/mythplugins/mythmusic/mythmusic/lameencoder.h index b3810260fcc..8529da730f3 100644 --- a/mythplugins/mythmusic/mythmusic/lameencoder.h +++ b/mythplugins/mythmusic/mythmusic/lameencoder.h @@ -27,7 +27,7 @@ #define LAMEENCODER_H_ class QString; -class Metadata; +class MusicMetadata; class Encoder; #ifdef MMX @@ -46,7 +46,7 @@ class Encoder; class LameEncoder : public Encoder { public: - LameEncoder(const QString &outfile, int qualitylevel, Metadata *metadata, + LameEncoder(const QString &outfile, int qualitylevel, MusicMetadata *metadata, bool vbr = false); ~LameEncoder(); int addSamples(int16_t *bytes, unsigned int len); diff --git a/mythplugins/mythmusic/mythmusic/main.cpp b/mythplugins/mythmusic/mythmusic/main.cpp index 56eb4133907..0a38174034d 100644 --- a/mythplugins/mythmusic/mythmusic/main.cpp +++ b/mythplugins/mythmusic/mythmusic/main.cpp @@ -22,10 +22,12 @@ #include #include #include +#include +#include // MythMusic headers +#include "musicdata.h" #include "decoder.h" -#include "metadata.h" #include "playlisteditorview.h" #include "playlistview.h" #include "streamview.h" @@ -83,20 +85,15 @@ static void loadMusic() } } - QString startdir = gCoreContext->GetSetting("MusicLocation"); - startdir = QDir::cleanPath(startdir); - if (!startdir.isEmpty() && !startdir.endsWith("/")) - startdir += "/"; - - gMusicData->musicDir = startdir; + QString musicDir = getMusicDirectory(); // Only search music files if a directory was specified & there // is no data in the database yet (first run). Otherwise, user // can choose "Setup" option from the menu to force it. - if (!gMusicData->musicDir.isEmpty() && !musicdata_exists) + if (!musicDir.isEmpty() && !musicdata_exists) { FileScanner *fscan = new FileScanner(); - fscan->SearchDir(startdir); + fscan->SearchDir(musicDir); delete fscan; } @@ -111,7 +108,7 @@ static void loadMusic() busy = NULL; // Set the various track formatting modes - Metadata::setArtistAndTrackFormats(); + MusicMetadata::setArtistAndTrackFormats(); AllMusic *all_music = new AllMusic(); @@ -130,8 +127,7 @@ static void loadMusic() usleep(50000); } - gMusicData->all_streams->createPlaylist(); - + gPlayer->loadStreamPlaylist(); gPlayer->loadPlaylist(); if (busy) @@ -205,36 +201,26 @@ static void startRipper(void) static void runScan(void) { - // maybe we haven't loaded the music yet in which case we wont have a valid music dir set - if (gMusicData->musicDir.isEmpty()) - { - QString startdir = gCoreContext->GetSetting("MusicLocation"); - startdir = QDir::cleanPath(startdir); - if (!startdir.isEmpty() && !startdir.endsWith("/")) - startdir += "/"; - - gMusicData->musicDir = startdir; - } - - // if we still don't have a valid start dir warn the user and give up - if (gMusicData->musicDir.isEmpty()) + // if we don't have a valid start dir warn the user and give up + if (getMusicDirectory().isEmpty()) { ShowOkPopup(QObject::tr("You need to tell me where to find your music on the " "'General Settings' page of MythMusic's settings pages.")); return; } - if (!QFile::exists(gMusicData->musicDir)) + if (!QFile::exists(getMusicDirectory())) { ShowOkPopup(QObject::tr("Can't find your music directory. Have you set it correctly on the " "'General Settings' page of MythMusic's settings pages?")); return; } - LOG(VB_GENERAL, LOG_INFO, QString("Scanning '%1' for music files").arg(gMusicData->musicDir)); + LOG(VB_GENERAL, LOG_INFO, QString("Scanning '%1' for music files").arg(getMusicDirectory())); FileScanner *fscan = new FileScanner(); - fscan->SearchDir(gMusicData->musicDir); + QString musicDir = getMusicDirectory(); + fscan->SearchDir(musicDir); // save anything that may have changed if (gMusicData->all_music && gMusicData->all_music->cleanOutThreads()) diff --git a/mythplugins/mythmusic/mythmusic/musiccommon.cpp b/mythplugins/mythmusic/mythmusic/musiccommon.cpp index 51dd654154b..7a1950dbf80 100644 --- a/mythplugins/mythmusic/mythmusic/musiccommon.cpp +++ b/mythplugins/mythmusic/mythmusic/musiccommon.cpp @@ -23,9 +23,10 @@ using namespace std; #include #include #include +#include // MythMusic includes -#include "metadata.h" +#include "musicdata.h" #include "constants.h" #include "decoder.h" #include "mainvisual.h" @@ -192,7 +193,7 @@ bool MusicCommon::CreateCommon(void) m_currentTrack = gPlayer->getCurrentTrackPos(); - Metadata *curMeta = gPlayer->getCurrentMetadata(); + MusicMetadata *curMeta = gPlayer->getCurrentMetadata(); if (curMeta) updateTrackInfo(curMeta); @@ -305,7 +306,7 @@ void MusicCommon::updateRepeatMode(void) } // need this to update the next track info - Metadata *curMeta = gPlayer->getCurrentMetadata(); + MusicMetadata *curMeta = gPlayer->getCurrentMetadata(); if (curMeta) updateTrackInfo(curMeta); } @@ -362,7 +363,7 @@ void MusicCommon::updateShuffleMode(bool updateUIList) playFirstTrack(); // need this to update the next track info - Metadata *curMeta = gPlayer->getCurrentMetadata(); + MusicMetadata *curMeta = gPlayer->getCurrentMetadata(); if (curMeta) updateTrackInfo(curMeta); } @@ -666,7 +667,7 @@ bool MusicCommon::keyPressEvent(QKeyEvent *e) { if (m_currentPlaylist->GetItemCurrent()) { - Metadata *mdata = qVariantValue (m_currentPlaylist->GetItemCurrent()->GetData()); + MusicMetadata *mdata = qVariantValue (m_currentPlaylist->GetItemCurrent()->GetData()); if (mdata) { if (action == "INFO") @@ -689,7 +690,7 @@ bool MusicCommon::keyPressEvent(QKeyEvent *e) MythUIButtonListItem *item = m_currentPlaylist->GetItemCurrent(); if (item) { - Metadata *mdata = qVariantValue (item->GetData()); + MusicMetadata *mdata = qVariantValue (item->GetData()); if (mdata) gPlayer->removeTrack(mdata->ID()); } @@ -917,7 +918,7 @@ void MusicCommon::stopVisualizer(void ) gPlayer->removeVisual(m_mainvisual); } -void MusicCommon::setTrackOnLCD(Metadata *mdata) +void MusicCommon::setTrackOnLCD(MusicMetadata *mdata) { LCD *lcd = LCD::Get(); if (!lcd || !mdata) @@ -1053,7 +1054,7 @@ void MusicCommon::changeRating(bool increase) //if (!m_ratingState) // return; - Metadata *curMeta = gPlayer->getCurrentMetadata(); + MusicMetadata *curMeta = gPlayer->getCurrentMetadata(); if (!curMeta) return; @@ -1072,7 +1073,7 @@ void MusicCommon::customEvent(QEvent *event) if (event->type() == OutputEvent::Playing) { - Metadata *curMeta = gPlayer->getCurrentMetadata(); + MusicMetadata *curMeta = gPlayer->getCurrentMetadata(); if (curMeta) updateTrackInfo(curMeta); @@ -1139,7 +1140,7 @@ void MusicCommon::customEvent(QEvent *event) return; int rs = 0; - Metadata *curMeta = gPlayer->getCurrentMetadata(); + MusicMetadata *curMeta = gPlayer->getCurrentMetadata(); if (gPlayer->getPlayMode() == MusicPlayer::PLAYMODE_RADIO) { @@ -1307,7 +1308,7 @@ void MusicCommon::customEvent(QEvent *event) MythUIButtonListItem *item = m_currentPlaylist->GetItemCurrent(); if (item) { - Metadata *mdata = qVariantValue (item->GetData()); + MusicMetadata *mdata = qVariantValue (item->GetData()); if (mdata) gPlayer->removeTrack(mdata->ID()); } @@ -1542,8 +1543,8 @@ void MusicCommon::customEvent(QEvent *event) for (int x = 0; x < m_currentPlaylist->GetCount(); x++) { MythUIButtonListItem *item = m_currentPlaylist->GetItemAt(x); - Metadata *mdata = qVariantValue (item->GetData()); - if (mdata && mdata->ID() == (Metadata::IdType) trackID) + MusicMetadata *mdata = qVariantValue (item->GetData()); + if (mdata && mdata->ID() == (MusicMetadata::IdType) trackID) { // work around a bug in MythUIButtonlist not updating properly after removing the last item if (m_currentPlaylist->GetCount() == 1) @@ -1561,7 +1562,7 @@ void MusicCommon::customEvent(QEvent *event) // move to the next track if (gPlayer->getCurrentMetadata()) { - if (gPlayer->getCurrentMetadata()->ID() == (Metadata::IdType) trackID) + if (gPlayer->getCurrentMetadata()->ID() == (MusicMetadata::IdType) trackID) gPlayer->next(); } @@ -1592,7 +1593,7 @@ void MusicCommon::customEvent(QEvent *event) else { // just one track was added so just add that track to the end of the list - Metadata *mdata = gMusicData->all_music->getMetadata(trackID); + MusicMetadata *mdata = gMusicData->all_music->getMetadata(trackID); if (mdata) { @@ -1652,7 +1653,7 @@ void MusicCommon::customEvent(QEvent *event) for (int x = 0; x < m_currentPlaylist->GetCount(); x++) { MythUIButtonListItem *item = m_currentPlaylist->GetItemAt(x); - Metadata *mdata = qVariantValue (item->GetData()); + MusicMetadata *mdata = qVariantValue (item->GetData()); if (mdata && mdata->ID() == trackID) { @@ -1670,7 +1671,7 @@ void MusicCommon::customEvent(QEvent *event) for (int x = 0; x < m_playedTracksList->GetCount(); x++) { MythUIButtonListItem *item = m_playedTracksList->GetItemAt(x); - Metadata *mdata = qVariantValue (item->GetData()); + MusicMetadata *mdata = qVariantValue (item->GetData()); if (mdata && mdata->ID() == trackID) { @@ -1702,7 +1703,7 @@ void MusicCommon::customEvent(QEvent *event) for (int x = 0; x < m_currentPlaylist->GetCount(); x++) { MythUIButtonListItem *item = m_currentPlaylist->GetItemAt(x); - Metadata *mdata = qVariantValue (item->GetData()); + MusicMetadata *mdata = qVariantValue (item->GetData()); if (mdata && mdata->ID() == trackID) { // reload the albumart image if one has already been loaded for this track @@ -1756,7 +1757,7 @@ void MusicCommon::updateVolume(void) } } -void MusicCommon::editTrackInfo(Metadata *mdata) +void MusicCommon::editTrackInfo(MusicMetadata *mdata) { if (!mdata) return; @@ -1774,12 +1775,12 @@ void MusicCommon::editTrackInfo(Metadata *mdata) mainStack->AddScreen(editDialog); } -void MusicCommon::updateTrackInfo(Metadata *mdata) +void MusicCommon::updateTrackInfo(MusicMetadata *mdata) { if (!mdata) { MetadataMap metadataMap; - Metadata metadata; + MusicMetadata metadata; metadata.toMap(metadataMap); metadata.toMap(metadataMap, "next"); ResetMap(metadataMap); @@ -1811,7 +1812,7 @@ void MusicCommon::updateTrackInfo(Metadata *mdata) mdata->toMap(metadataMap); // add the map from the next track - Metadata *nextMetadata = gPlayer->getNextMetadata(); + MusicMetadata *nextMetadata = gPlayer->getNextMetadata(); if (nextMetadata) nextMetadata->toMap(metadataMap, "next"); @@ -1836,7 +1837,7 @@ void MusicCommon::updateTrackInfo(Metadata *mdata) setTrackOnLCD(mdata); } -void MusicCommon::showTrackInfo(Metadata *mdata) +void MusicCommon::showTrackInfo(MusicMetadata *mdata) { if (!mdata) return; @@ -1880,7 +1881,7 @@ void MusicCommon::playlistItemVisible(MythUIButtonListItem *item) if (!item) return; - Metadata *mdata = qVariantValue (item->GetData()); + MusicMetadata *mdata = qVariantValue (item->GetData()); if (mdata) { if (item->GetImageFilename().isEmpty()) @@ -1921,11 +1922,11 @@ void MusicCommon::updateUIPlaylist(void) Playlist *playlist = gPlayer->getPlaylist(); - QList songlist = playlist->getSongs(); - QList::iterator it = songlist.begin(); + QList songlist = playlist->getSongs(); + QList::iterator it = songlist.begin(); for (; it != songlist.end(); ++it) { - Metadata *mdata = (*it); + MusicMetadata *mdata = (*it); if (mdata) { MythUIButtonListItem *item = @@ -1967,11 +1968,11 @@ void MusicCommon::updateUIPlayedList(void) m_playedTracksList->Reset(); - QList playedList = gPlayer->getPlayedTracksList(); + QList playedList = gPlayer->getPlayedTracksList(); for (int x = playedList.count(); x > 0; x--) { - Metadata *mdata = playedList[x-1]; + MusicMetadata *mdata = playedList[x-1]; MythUIButtonListItem *item = new MythUIButtonListItem(m_playedTracksList, "", qVariantFromValue(mdata)); @@ -2298,7 +2299,7 @@ void MusicCommon::fromCD(void) // get the list of cd tracks for (int x = 1; x <= gMusicData->all_music->getCDTrackCount(); x++) { - Metadata *mdata = gMusicData->all_music->getCDMetadata(x); + MusicMetadata *mdata = gMusicData->all_music->getCDMetadata(x); if (mdata) { m_songList.append((mdata)->ID()); @@ -2310,7 +2311,7 @@ void MusicCommon::fromCD(void) void MusicCommon::byArtist(void) { - Metadata* mdata = gPlayer->getCurrentMetadata(); + MusicMetadata* mdata = gPlayer->getCurrentMetadata(); if (!mdata) return; @@ -2323,7 +2324,7 @@ void MusicCommon::byArtist(void) void MusicCommon::byAlbum(void) { - Metadata* mdata = gPlayer->getCurrentMetadata(); + MusicMetadata* mdata = gPlayer->getCurrentMetadata(); if (!mdata) return; @@ -2336,7 +2337,7 @@ void MusicCommon::byAlbum(void) void MusicCommon::byGenre(void) { - Metadata* mdata = gPlayer->getCurrentMetadata(); + MusicMetadata* mdata = gPlayer->getCurrentMetadata(); if (!mdata) return; @@ -2349,7 +2350,7 @@ void MusicCommon::byGenre(void) void MusicCommon::byYear(void) { - Metadata* mdata = gPlayer->getCurrentMetadata(); + MusicMetadata* mdata = gPlayer->getCurrentMetadata(); if (!mdata) return; @@ -2362,7 +2363,7 @@ void MusicCommon::byYear(void) void MusicCommon::byTitle(void) { - Metadata* mdata = gPlayer->getCurrentMetadata(); + MusicMetadata* mdata = gPlayer->getCurrentMetadata(); if (!mdata) return; @@ -2533,8 +2534,8 @@ bool MusicCommon::restorePosition(int trackID) { for (int x = 0; x < gPlayer->getPlaylist()->getSongs().size(); x++) { - Metadata *mdata = gPlayer->getPlaylist()->getSongs().at(x); - if (mdata && mdata->ID() == (Metadata::IdType) trackID) + MusicMetadata *mdata = gPlayer->getPlaylist()->getSongs().at(x); + if (mdata && mdata->ID() == (MusicMetadata::IdType) trackID) { m_currentTrack = x; if (m_currentPlaylist) @@ -2674,7 +2675,7 @@ void MythMusicVolumeDialog::updateDisplay() //--------------------------------------------------------- // TrackInfoDialog //--------------------------------------------------------- -TrackInfoDialog::TrackInfoDialog(MythScreenStack *parent, Metadata *metadata, const char *name) +TrackInfoDialog::TrackInfoDialog(MythScreenStack *parent, MusicMetadata *metadata, const char *name) : MythScreenType(parent, name, false) { m_metadata = metadata; diff --git a/mythplugins/mythmusic/mythmusic/musiccommon.h b/mythplugins/mythmusic/mythmusic/musiccommon.h index 7a0bdd2e167..4ecf08f209f 100644 --- a/mythplugins/mythmusic/mythmusic/musiccommon.h +++ b/mythplugins/mythmusic/mythmusic/musiccommon.h @@ -8,9 +8,9 @@ // mythtv #include #include +#include // mythmusic -#include "metadata.h" #include "playlist.h" #include "musicplayer.h" @@ -105,10 +105,10 @@ class MPUBLIC MusicCommon : public MythScreenType protected: QString getTimeString(int exTime, int maxTime); void updateProgressBar(void); - void setTrackOnLCD(Metadata *mdata); - void editTrackInfo(Metadata *mdata); - void updateTrackInfo(Metadata *mdata); - void showTrackInfo(Metadata *mdata); + void setTrackOnLCD(MusicMetadata *mdata); + void editTrackInfo(MusicMetadata *mdata); + void updateTrackInfo(MusicMetadata *mdata); + void showTrackInfo(MusicMetadata *mdata); void updateUIPlaylist(void); void updatePlaylistStats(void); void updateUIPlayedList(void); // for streaming @@ -230,14 +230,14 @@ class MPUBLIC TrackInfoDialog : public MythScreenType { Q_OBJECT public: - TrackInfoDialog(MythScreenStack *parent, Metadata *mdata, const char *name); + TrackInfoDialog(MythScreenStack *parent, MusicMetadata *mdata, const char *name); ~TrackInfoDialog(void); bool Create(void); bool keyPressEvent(QKeyEvent *event); protected: - Metadata *m_metadata; + MusicMetadata *m_metadata; }; #endif diff --git a/mythplugins/mythmusic/mythmusic/musicdata.cpp b/mythplugins/mythmusic/mythmusic/musicdata.cpp new file mode 100644 index 00000000000..b458f19b52f --- /dev/null +++ b/mythplugins/mythmusic/mythmusic/musicdata.cpp @@ -0,0 +1,71 @@ +// qt +#include + +// mythtv +#include +#include +#include +#include + +// mythmusic +#include "musicdata.h" + +// this is the global MusicData object shared thoughout MythMusic +MusicData *gMusicData = NULL; + +MusicData::MusicData(void) +{ + all_playlists = NULL; + all_music = NULL; + all_streams = NULL; + initialized = false; +} + +MusicData::~MusicData(void) +{ + if (all_playlists) + { + delete all_playlists; + all_playlists = NULL; + } + + if (all_music) + { + delete all_music; + all_music = NULL; + } + + if (all_streams) + { + delete all_streams; + all_streams = NULL; + } +} + +/// reload music after a scan, rip or import +void MusicData::reloadMusic(void) +{ + if (!all_music || !all_playlists) + return; + + MythScreenStack *popupStack = GetMythMainWindow()->GetStack("popup stack"); + QString message = QObject::tr("Rebuilding music tree"); + + MythUIBusyDialog *busy = new MythUIBusyDialog(message, popupStack, + "musicscanbusydialog"); + + if (busy->Create()) + popupStack->AddScreen(busy, false); + else + busy = NULL; + + all_music->startLoading(); + while (!all_music->doneLoading()) + { + qApp->processEvents(); + usleep(50000); + } + + if (busy) + busy->Close(); +} diff --git a/mythplugins/mythmusic/mythmusic/musicdata.h b/mythplugins/mythmusic/mythmusic/musicdata.h new file mode 100644 index 00000000000..a9a163d2d83 --- /dev/null +++ b/mythplugins/mythmusic/mythmusic/musicdata.h @@ -0,0 +1,38 @@ +#ifndef MUSICDATA_H_ +#define MUSICDATA_H_ + +//#include +#include + +#include "playlistcontainer.h" + +class PlaylistContainer; +class AllMusic; +class AllStream; + +//---------------------------------------------------------------------------- + +class MusicData : public QObject +{ + Q_OBJECT + + public: + + MusicData(); + ~MusicData(); + + public slots: + void reloadMusic(void); + + public: + //QString musicDir; + PlaylistContainer *all_playlists; + AllMusic *all_music; + AllStream *all_streams; + bool initialized; +}; + +// This global variable contains the MusicData instance for the application +extern MPUBLIC MusicData *gMusicData; + +#endif \ No newline at end of file diff --git a/mythplugins/mythmusic/mythmusic/musicplayer.cpp b/mythplugins/mythmusic/mythmusic/musicplayer.cpp index d6184cef5aa..b2b075bd996 100644 --- a/mythplugins/mythmusic/mythmusic/musicplayer.cpp +++ b/mythplugins/mythmusic/mythmusic/musicplayer.cpp @@ -14,8 +14,10 @@ #include #include #include +#include // mythmusic +#include "musicdata.h" #include "musicplayer.h" #include "decoder.h" #include "decoderhandler.h" @@ -246,7 +248,7 @@ void MusicPlayer::loadSettings(void ) } // this stops playing the playlist and plays the file pointed to by mdata -void MusicPlayer::playFile(const Metadata &mdata) +void MusicPlayer::playFile(const MusicMetadata &mdata) { if (m_oneshotMetadata) { @@ -254,7 +256,7 @@ void MusicPlayer::playFile(const Metadata &mdata) m_oneshotMetadata = NULL; } - m_oneshotMetadata = new Metadata(); + m_oneshotMetadata = new MusicMetadata(); *m_oneshotMetadata = mdata; play(); @@ -329,7 +331,7 @@ void MusicPlayer::pause(void) void MusicPlayer::play(void) { - Metadata *meta = getCurrentMetadata(); + MusicMetadata *meta = getCurrentMetadata(); if (!meta) return; @@ -537,7 +539,7 @@ void MusicPlayer::customEvent(QEvent *event) if (!dhe) return; - Metadata *mdata = new Metadata(*dhe->getMetadata()); + MusicMetadata *mdata = new MusicMetadata(*dhe->getMetadata()); m_lastTrackStart += m_currentTime; @@ -639,7 +641,7 @@ void MusicPlayer::customEvent(QEvent *event) if (start != -1 && end != -1 && start != end) { QString filename = me->Message().mid(start + 1, end - start - 1); - Metadata mdata; + MusicMetadata mdata; mdata.setFilename(filename); playFile(mdata); } @@ -653,7 +655,7 @@ void MusicPlayer::customEvent(QEvent *event) if (list.size() == 4) { QString filename = list[3]; - Metadata mdata; + MusicMetadata mdata; mdata.setFilename(filename); playFile(mdata); } @@ -667,7 +669,7 @@ void MusicPlayer::customEvent(QEvent *event) if (list.size() == 4) { int trackID = list[3].toInt(); - Metadata *mdata = gMusicData->all_music->getMetadata(trackID); + MusicMetadata *mdata = gMusicData->all_music->getMetadata(trackID); if (mdata) playFile(*mdata); } @@ -679,7 +681,7 @@ void MusicPlayer::customEvent(QEvent *event) else if (list[2] == "GET_METADATA") { QString mdataStr; - Metadata *mdata = getCurrentMetadata(); + MusicMetadata *mdata = getCurrentMetadata(); if (mdata) mdataStr = QString("%1 by %2 from %3").arg(mdata->Title()).arg(mdata->Artist()).arg(mdata->Album()); else @@ -703,7 +705,7 @@ void MusicPlayer::customEvent(QEvent *event) if (!startdir.isEmpty() && !startdir.endsWith("/")) startdir += "/"; - gMusicData->musicDir = startdir; + setMusicDirectory(startdir); loadSettings(); } @@ -887,6 +889,22 @@ void MusicPlayer::loadPlaylist(void) m_cdWatcher->start(); } +void MusicPlayer::loadStreamPlaylist(void) +{ + // create the radio playlist + gMusicData->all_playlists->getStreamPlaylist()->disableSaves(); + gMusicData->all_playlists->getStreamPlaylist()->removeAllTracks(); + StreamList *list = gMusicData->all_streams->getStreams(); + + for (int x = 0; x < list->count(); x++) + { + MusicMetadata *mdata = list->at(x); + gMusicData->all_playlists->getStreamPlaylist()->addTrack(mdata->ID(), false); + } + + gMusicData->all_playlists->getStreamPlaylist()->enableSaves(); +} + void MusicPlayer::moveTrackUpDown(bool moveUp, int whichTrack) { if (moveUp && whichTrack <= 0) @@ -895,7 +913,7 @@ void MusicPlayer::moveTrackUpDown(bool moveUp, int whichTrack) if (!moveUp && whichTrack >= m_currentPlaylist->getSongs().size() - 1) return; - Metadata *currTrack = m_currentPlaylist->getSongs().at(m_currentTrack); + MusicMetadata *currTrack = m_currentPlaylist->getSongs().at(m_currentTrack); m_currentPlaylist->moveTrackUpDown(moveUp, whichTrack); @@ -1024,7 +1042,7 @@ void MusicPlayer::changeCurrentTrack(int trackNo) } /// get the metadata for the current track in the playlist -Metadata *MusicPlayer::getCurrentMetadata(void) +MusicMetadata *MusicPlayer::getCurrentMetadata(void) { if (m_oneshotMetadata) return m_oneshotMetadata; @@ -1041,7 +1059,7 @@ Metadata *MusicPlayer::getCurrentMetadata(void) } /// get the metadata for the next track in the playlist -Metadata *MusicPlayer::getNextMetadata(void) +MusicMetadata *MusicPlayer::getNextMetadata(void) { if (m_playMode == PLAYMODE_RADIO) return NULL; @@ -1136,8 +1154,8 @@ void MusicPlayer::setShuffleMode(ShuffleMode mode) { for (int x = 0; x < getPlaylist()->getSongs().size(); x++) { - Metadata *mdata = getPlaylist()->getSongs().at(x); - if (mdata && mdata->ID() == (Metadata::IdType) curTrackID) + MusicMetadata *mdata = getPlaylist()->getSongs().at(x); + if (mdata && mdata->ID() == (MusicMetadata::IdType) curTrackID) { m_currentTrack = x; break; @@ -1415,7 +1433,7 @@ void MusicPlayer::decoderHandlerReady(void) void MusicPlayer::removeTrack(int trackID) { - Metadata *mdata = gMusicData->all_music->getMetadata(trackID); + MusicMetadata *mdata = gMusicData->all_music->getMetadata(trackID); if (mdata) { int trackPos = gPlayer->getPlaylist()->getSongs().indexOf(mdata); @@ -1431,6 +1449,11 @@ void MusicPlayer::addTrack(int trackID, bool updateUI) getPlaylist()->addTrack(trackID, updateUI); } +StreamList *MusicPlayer::getStreamList(void) +{ + return gMusicData->all_streams->getStreams(); +} + /////////////////////////////////////////////////////////////////////////////// CDWatcherThread::CDWatcherThread(const QString &dev) @@ -1470,7 +1493,7 @@ void CDWatcherThread::run() else if (numTracks > 0) { // Check the last track to see if it's changed - Metadata *checker = decoder->getLastMetadata(); + MusicMetadata *checker = decoder->getLastMetadata(); if (checker) { if (!gMusicData->all_music->checkCDTrack(checker)) @@ -1497,7 +1520,7 @@ void CDWatcherThread::run() for (int actual_tracknum = 1; redo && actual_tracknum <= tracks; actual_tracknum++) { - Metadata *track = decoder->getMetadata(actual_tracknum); + MusicMetadata *track = decoder->getMetadata(actual_tracknum); if (track) { gMusicData->all_music->addCDTrack(*track); diff --git a/mythplugins/mythmusic/mythmusic/musicplayer.h b/mythplugins/mythmusic/mythmusic/musicplayer.h index 13124db8547..872cccb4fe1 100644 --- a/mythplugins/mythmusic/mythmusic/musicplayer.h +++ b/mythplugins/mythmusic/mythmusic/musicplayer.h @@ -6,8 +6,10 @@ #include #include +// libmythmetadata +#include + // mythmusic -#include "metadata.h" #include "decoderhandler.h" class AudioOutput; @@ -63,7 +65,7 @@ class MusicPlayer : public QObject, public MythObservable void setPlayMode(PlayMode mode); PlayMode getPlayMode(void) { return m_playMode; } - void playFile(const Metadata &meta); + void playFile(const MusicMetadata &meta); void addListener(QObject *listener); void removeListener(QObject *listener); @@ -113,8 +115,9 @@ class MusicPlayer : public QObject, public MythObservable AudioOutput *getOutput(void) { return m_output; } void loadPlaylist(void); + void loadStreamPlaylist(void); Playlist *getPlaylist(void) { return m_currentPlaylist; } - StreamList *getStreamList(void) { return gMusicData->all_streams->getStreams(); } + StreamList *getStreamList(void); // these add and remove tracks from the active playlist void removeTrack(int trackID); @@ -122,7 +125,7 @@ class MusicPlayer : public QObject, public MythObservable void moveTrackUpDown(bool moveUp, int whichTrack); - QList &getPlayedTracksList(void) { return m_playedList; } + QList &getPlayedTracksList(void) { return m_playedList; } int getCurrentTrackPos(void) { return m_currentTrack; } bool setCurrentTrackPos(int pos); @@ -136,8 +139,8 @@ class MusicPlayer : public QObject, public MythObservable void setAllowRestorePos(bool allow) { m_allowRestorePos = allow; } void seek(int pos); - Metadata *getCurrentMetadata(void); - Metadata *getNextMetadata(void); + MusicMetadata *getCurrentMetadata(void); + MusicMetadata *getNextMetadata(void); void sendMetadataChangedEvent(int trackID); void sendTrackStatsChangedEvent(int trackID); void sendAlbumArtChangedEvent(int trackID); @@ -198,8 +201,8 @@ class MusicPlayer : public QObject, public MythObservable int m_currentTrack; int m_currentTime; - Metadata *m_currentMetadata; - Metadata *m_oneshotMetadata; + MusicMetadata *m_currentMetadata; + MusicMetadata *m_oneshotMetadata; AudioOutput *m_output; DecoderHandler *m_decoderHandler; @@ -229,7 +232,7 @@ class MusicPlayer : public QObject, public MythObservable CDWatcherThread *m_cdWatcher; // radio stuff - QList m_playedList; + QList m_playedList; int m_lastTrackStart; int m_bufferAvailable; int m_bufferSize; diff --git a/mythplugins/mythmusic/mythmusic/musicutils.h b/mythplugins/mythmusic/mythmusic/musicutils.h deleted file mode 100644 index 39d04c255d4..00000000000 --- a/mythplugins/mythmusic/mythmusic/musicutils.h +++ /dev/null @@ -1,22 +0,0 @@ -#include - -// these are needed for QT4 compatibility -#undef QStringToTString -#define QStringToTString(s) TagLib::String(s.toUtf8().data(), TagLib::String::UTF8) -#undef TStringToQString -#define TStringToQString(s) QString::fromUtf8(s.toCString(true)) - -/// remove any bad filename characters -QString fixFilename(const QString &filename); - -/// find an image for a artist or genre -QString findIcon(const QString &type, const QString &name); - -/// calculate a tracks length by parsing the frames -uint calcTrackLength(const QString &musicFile); - -/// create a filename using the template in the settings and a Metadata object -QString filenameFromMetadata(Metadata *track, bool createDir = true); - -/// try to find a track in the db using the given artist, album and title -bool isNewTune(const QString &artist, const QString &album, const QString &title); diff --git a/mythplugins/mythmusic/mythmusic/mythmusic.pro b/mythplugins/mythmusic/mythmusic/mythmusic.pro index 8b4767155e7..a565bcdd8d4 100644 --- a/mythplugins/mythmusic/mythmusic/mythmusic.pro +++ b/mythplugins/mythmusic/mythmusic/mythmusic.pro @@ -15,53 +15,51 @@ TARGET = mythmusic target.path = $${LIBDIR}/mythtv/plugins INSTALLS += target +INCLUDEPATH += $${SYSROOT}$${PREFIX}/include/mythtv/metadata +INCLUDEPATH += $${CONFIG_TAGLIB_INCLUDES} + LIBS += -lmythavformat LIBS += -lmythavcodec LIBS += -lmythavutil LIBS += -ltag -logg -lvorbisfile -lvorbis -lvorbisenc -lFLAC -lmp3lame +LIBS += -lmythmetadata-$$LIBVERSION # Input HEADERS += constants.h HEADERS += decoder.h flacencoder.h mainvisual.h -HEADERS += metadata.h playlist.h polygon.h +HEADERS += playlist.h polygon.h HEADERS += synaesthesia.h encoder.h visualize.h avfdecoder.h HEADERS += vorbisencoder.h polygon.h HEADERS += bumpscope.h lameencoder.h dbcheck.h HEADERS += importmusic.h -HEADERS += metaio.h metaiotaglib.h -HEADERS += metaioflacvorbis.h metaioavfcomment.h metaiomp4.h -HEADERS += metaiowavpack.h metaioid3.h metaiooggvorbis.h HEADERS += goom/filters.h goom/goomconfig.h goom/goom_core.h goom/graphic.h HEADERS += goom/ifs.h goom/lines.h goom/mythgoom.h goom/drawmethods.h HEADERS += goom/mmx.h goom/mathtools.h goom/tentacle3d.h goom/v3d.h HEADERS += editmetadata.h smartplaylist.h genres.h HEADERS += filescanner.h musicplayer.h miniplayer.h -HEADERS += playlistcontainer.h +HEADERS += playlistcontainer.h musicdata.h HEADERS += musiccommon.h decoderhandler.h pls.h shoutcast.h HEADERS += playlistview.h playlisteditorview.h -HEADERS += visualizerview.h searchview.h streamview.h musicutils.h +HEADERS += visualizerview.h searchview.h streamview.h HEADERS += generalsettings.h visualizationsettings.h HEADERS += importsettings.h playersettings.h ratingsettings.h SOURCES += decoder.cpp SOURCES += flacencoder.cpp main.cpp -SOURCES += mainvisual.cpp metadata.cpp playlist.cpp +SOURCES += mainvisual.cpp playlist.cpp SOURCES += encoder.cpp dbcheck.cpp SOURCES += synaesthesia.cpp lameencoder.cpp SOURCES += vorbisencoder.cpp visualize.cpp bumpscope.cpp SOURCES += genres.cpp importmusic.cpp -SOURCES += metaio.cpp metaiotaglib.cpp -SOURCES += metaioflacvorbis.cpp metaioavfcomment.cpp metaiomp4.cpp -SOURCES += metaiowavpack.cpp metaioid3.cpp metaiooggvorbis.cpp SOURCES += goom/filters.c goom/goom_core.c goom/graphic.c goom/tentacle3d.c SOURCES += goom/ifs.c goom/ifs_display.c goom/lines.c goom/surf3d.c SOURCES += goom/zoom_filter_mmx.c goom/zoom_filter_xmmx.c goom/mythgoom.cpp SOURCES += avfdecoder.cpp editmetadata.cpp smartplaylist.cpp SOURCES += filescanner.cpp musicplayer.cpp miniplayer.cpp -SOURCES += playlistcontainer.cpp +SOURCES += playlistcontainer.cpp musicdata.cpp SOURCES += musiccommon.cpp decoderhandler.cpp pls.cpp shoutcast.cpp SOURCES += playlistview.cpp playlisteditorview.cpp -SOURCES += visualizerview.cpp searchview.cpp streamview.cpp musicutils.cpp +SOURCES += visualizerview.cpp searchview.cpp streamview.cpp SOURCES += generalsettings.cpp visualizationsettings.cpp SOURCES += importsettings.cpp playersettings.cpp ratingsettings.cpp diff --git a/mythplugins/mythmusic/mythmusic/playlist.cpp b/mythplugins/mythmusic/mythmusic/playlist.cpp index 32ad0c2ae3c..b99193f825c 100644 --- a/mythplugins/mythmusic/mythmusic/playlist.cpp +++ b/mythplugins/mythmusic/mythmusic/playlist.cpp @@ -12,6 +12,7 @@ using namespace std; #include // mythmusic +#include "musicdata.h" #include "playlist.h" #include "playlistcontainer.h" #include "smartplaylist.h" @@ -62,7 +63,7 @@ void Playlist::copyTracks(Playlist *to_ptr, bool update_display) void Playlist::addTrack(int trackID, bool update_display) { int repo = ID_TO_REPO(trackID); - Metadata *mdata = NULL; + MusicMetadata *mdata = NULL; if (repo == RT_Radio) mdata = gMusicData->all_streams->getMetadata(trackID); @@ -76,7 +77,7 @@ void Playlist::addTrack(int trackID, bool update_display) } /// Given a tracks metadata, add that track to this playlist -void Playlist::addTrack(Metadata *mdata, bool update_display) +void Playlist::addTrack(MusicMetadata *mdata, bool update_display) { m_songs.push_back(mdata); m_shuffledSongs.push_back(mdata); @@ -99,7 +100,7 @@ void Playlist::removeAllTracks(void) void Playlist::removeTrack(int the_track) { - QMap::iterator it = m_songMap.find(the_track); + QMap::iterator it = m_songMap.find(the_track); if (it != m_songMap.end()) { m_songMap.remove(the_track); @@ -114,7 +115,7 @@ void Playlist::removeTrack(int the_track) void Playlist::moveTrackUpDown(bool flag, int where_its_at) { - Metadata *the_track = m_shuffledSongs.at(where_its_at); + MusicMetadata *the_track = m_shuffledSongs.at(where_its_at); if (!the_track) { @@ -126,7 +127,7 @@ void Playlist::moveTrackUpDown(bool flag, int where_its_at) moveTrackUpDown(flag, the_track); } -void Playlist::moveTrackUpDown(bool flag, Metadata* mdata) +void Playlist::moveTrackUpDown(bool flag, MusicMetadata* mdata) { uint insertion_point = 0; int where_its_at = m_shuffledSongs.indexOf(mdata); @@ -175,7 +176,7 @@ void Playlist::shuffleTracks(MusicPlayer::ShuffleMode shuffleMode) { case MusicPlayer::SHUFFLE_RANDOM: { - QMultiMap songMap; + QMultiMap songMap; SongList::const_iterator it = m_songs.begin(); for (; it != m_songs.end(); ++it) @@ -183,7 +184,7 @@ void Playlist::shuffleTracks(MusicPlayer::ShuffleMode shuffleMode) songMap.insert(rand(), *it); } - QMultiMap::const_iterator i = songMap.constBegin(); + QMultiMap::const_iterator i = songMap.constBegin(); while (i != songMap.constEnd()) { m_shuffledSongs.append(i.value()); @@ -214,7 +215,7 @@ void Playlist::shuffleTracks(MusicPlayer::ShuffleMode shuffleMode) { if (!(*it)->isCDTrack()) { - Metadata *mdata = (*it); + MusicMetadata *mdata = (*it); if (0 == idx) { @@ -244,7 +245,7 @@ void Playlist::shuffleTracks(MusicPlayer::ShuffleMode shuffleMode) int TotalWeight = RatingWeight + PlayCountWeight + LastPlayWeight; for (int trackItI = 0; trackItI < m_songs.size(); ++trackItI) { - Metadata *mdata = m_songs[trackItI]; + MusicMetadata *mdata = m_songs[trackItI]; if (!mdata->isCDTrack()) { int rating = mdata->Rating(); @@ -317,13 +318,13 @@ void Playlist::shuffleTracks(MusicPlayer::ShuffleMode shuffleMode) } // create a map of tracks sorted by the computed order - QMultiMap songMap; + QMultiMap songMap; it = m_songs.begin(); for (; it != m_songs.end(); ++it) songMap.insert(order[(*it)->ID()], *it); // copy the shuffled tracks to the shuffled song list - QMultiMap::const_iterator i = songMap.constBegin(); + QMultiMap::const_iterator i = songMap.constBegin(); while (i != songMap.constEnd()) { m_shuffledSongs.append(i.value()); @@ -347,7 +348,7 @@ void Playlist::shuffleTracks(MusicPlayer::ShuffleMode shuffleMode) SongList::const_iterator it = m_songs.begin(); for (; it != m_songs.end(); ++it) { - Metadata *mdata = (*it); + MusicMetadata *mdata = (*it); album = mdata->Album() + " ~ " + QString("%1").arg(mdata->getAlbumId()); if ((Ialbum = album_map.find(album)) == album_map.end()) album_map.insert(AlbumMap::value_type(album, 0)); @@ -362,12 +363,12 @@ void Playlist::shuffleTracks(MusicPlayer::ShuffleMode shuffleMode) } // create a map of tracks sorted by the computed order - QMultiMap songMap; + QMultiMap songMap; it = m_songs.begin(); for (; it != m_songs.end(); ++it) { uint32_t album_order; - Metadata *mdata = (*it); + MusicMetadata *mdata = (*it); if (mdata) { album = album = mdata->Album() + " ~ " + QString("%1").arg(mdata->getAlbumId());; @@ -390,7 +391,7 @@ void Playlist::shuffleTracks(MusicPlayer::ShuffleMode shuffleMode) } // copy the shuffled tracks to the shuffled song list - QMultiMap::const_iterator i = songMap.constBegin(); + QMultiMap::const_iterator i = songMap.constBegin(); while (i != songMap.constEnd()) { m_shuffledSongs.append(i.value()); @@ -414,7 +415,7 @@ void Playlist::shuffleTracks(MusicPlayer::ShuffleMode shuffleMode) SongList::const_iterator it = m_songs.begin(); for (; it != m_songs.end(); ++it) { - Metadata *mdata = (*it); + MusicMetadata *mdata = (*it); artist = mdata->Artist() + " ~ " + mdata->Title(); if ((Iartist = artist_map.find(artist)) == artist_map.end()) artist_map.insert(ArtistMap::value_type(artist,0)); @@ -429,12 +430,12 @@ void Playlist::shuffleTracks(MusicPlayer::ShuffleMode shuffleMode) } // create a map of tracks sorted by the computed order - QMultiMap songMap; + QMultiMap songMap; it = m_songs.begin(); for (; it != m_songs.end(); ++it) { uint32_t artist_order; - Metadata *mdata = (*it); + MusicMetadata *mdata = (*it); if (mdata) { artist = mdata->Artist() + " ~ " + mdata->Title(); @@ -457,7 +458,7 @@ void Playlist::shuffleTracks(MusicPlayer::ShuffleMode shuffleMode) } // copy the shuffled tracks to the shuffled song list - QMultiMap::const_iterator i = songMap.constBegin(); + QMultiMap::const_iterator i = songMap.constBegin(); while (i != songMap.constEnd()) { m_shuffledSongs.append(i.value()); @@ -515,7 +516,7 @@ void Playlist::getStats(uint *trackCount, uint *totalLength, uint currenttrack, SongList::const_iterator it = m_shuffledSongs.begin(); for (; it != m_shuffledSongs.end(); ++it, ++track) { - Metadata *mdata = (*it); + MusicMetadata *mdata = (*it); if (mdata) { total += mdata->Length(); @@ -616,7 +617,7 @@ void Playlist::loadPlaylistByID(int id, QString a_host) void Playlist::fillSongsFromSonglist(QString songList) { - Metadata::IdType id; + MusicMetadata::IdType id; bool badTrack = false; QStringList list = songList.split(",", QString::SkipEmptyParts); @@ -630,7 +631,7 @@ void Playlist::fillSongsFromSonglist(QString songList) // check this is a valid stream ID if (gMusicData->all_streams->isValidID(id)) { - Metadata *mdata = gMusicData->all_streams->getMetadata(id); + MusicMetadata *mdata = gMusicData->all_streams->getMetadata(id); m_songs.push_back(mdata); m_songMap.insert(id, mdata); } @@ -645,7 +646,7 @@ void Playlist::fillSongsFromSonglist(QString songList) // check this is a valid track ID if (gMusicData->all_music->isValidID(id)) { - Metadata *mdata = gMusicData->all_music->getMetadata(id); + MusicMetadata *mdata = gMusicData->all_music->getMetadata(id); m_songs.push_back(mdata); m_songMap.insert(id, mdata); } @@ -1048,7 +1049,7 @@ QString Playlist::removeDuplicateTracks(const QString &orig_songlist, const QStr return songlist; } -Metadata* Playlist::getSongAt(int pos) +MusicMetadata* Playlist::getSongAt(int pos) { if (pos >= 0 && pos < m_shuffledSongs.size()) return m_shuffledSongs.at(pos); @@ -1076,7 +1077,7 @@ void Playlist::computeSize(double &size_in_MB, double &size_in_sec) continue; // Normal track - Metadata *tmpdata = (*it); + MusicMetadata *tmpdata = (*it); if (tmpdata) { if (tmpdata->Length() > 0) @@ -1208,7 +1209,7 @@ int Playlist::CreateCDMP3(void) continue; // Normal track - Metadata *tmpdata = (*it); + MusicMetadata *tmpdata = (*it); if (tmpdata) { // check filename.. diff --git a/mythplugins/mythmusic/mythmusic/playlist.h b/mythplugins/mythmusic/mythmusic/playlist.h index 25b84ccbb1f..20711661444 100644 --- a/mythplugins/mythmusic/mythmusic/playlist.h +++ b/mythplugins/mythmusic/mythmusic/playlist.h @@ -1,10 +1,14 @@ #ifndef PLAYLIST_H_ #define PLAYLIST_H_ +// qt #include #include -#include "metadata.h" +// libmythmetadata +#include + +// mythmusic #include "musicplayer.h" class PlaylistContainer; @@ -32,7 +36,7 @@ struct PlaylistOptions PlayPLOption playPLOption; }; -typedef QList SongList; +typedef QList SongList; class Playlist : public QObject { @@ -69,17 +73,17 @@ class Playlist : public QObject QString toRawSonglist(bool shuffled = false); const SongList &getSongs(void) { return m_shuffledSongs; } - Metadata* getSongAt(int pos); + MusicMetadata* getSongAt(int pos); int getCount(void) { return m_songs.count(); } void moveTrackUpDown(bool flag, int where_its_at); - void moveTrackUpDown(bool flag, Metadata *the_track); + void moveTrackUpDown(bool flag, MusicMetadata *the_track); bool checkTrack(int a_track_id) const; void addTrack(int trackID, bool update_display); - void addTrack(Metadata *mdata, bool update_display); + void addTrack(MusicMetadata *mdata, bool update_display); void removeTrack(int the_track_id); void removeAllTracks(void); @@ -119,7 +123,7 @@ class Playlist : public QObject QString m_name; SongList m_songs; SongList m_shuffledSongs; - QMap m_songMap; + QMap m_songMap; PlaylistContainer *m_parent; bool m_changed; bool m_doSave; diff --git a/mythplugins/mythmusic/mythmusic/playlisteditorview.cpp b/mythplugins/mythmusic/mythmusic/playlisteditorview.cpp index efb01417d9e..a39302eae59 100644 --- a/mythplugins/mythmusic/mythmusic/playlisteditorview.cpp +++ b/mythplugins/mythmusic/mythmusic/playlisteditorview.cpp @@ -13,13 +13,14 @@ #include #include #include +#include // mythmusic +#include "musicdata.h" #include "playlistcontainer.h" #include "musiccommon.h" #include "playlisteditorview.h" #include "smartplaylist.h" -#include "musicutils.h" MusicGenericTree::MusicGenericTree(MusicGenericTree *parent, const QString &name, const QString &action, @@ -401,7 +402,7 @@ bool PlaylistEditorView::keyPressEvent(QKeyEvent *event) } else if (mnode->getAction() == "trackid") { - Metadata *mdata = gMusicData->all_music->getMetadata(mnode->getInt()); + MusicMetadata *mdata = gMusicData->all_music->getMetadata(mnode->getInt()); if (mdata) { if (action == "INFO") @@ -578,7 +579,7 @@ void PlaylistEditorView::updateSonglist(MusicGenericTree *node) MetadataPtrList *tracks = qVariantValue (node->GetData()); for (int x = 0; x < tracks->count(); x++) { - Metadata *mdata = tracks->at(x); + MusicMetadata *mdata = tracks->at(x); if (mdata) m_songList.append((int)mdata->ID()); } @@ -742,7 +743,7 @@ void PlaylistEditorView::createRootNode(void ) for (int x = 0; x < alltracks->count(); x++) { - Metadata *mdata = alltracks->at(x); + MusicMetadata *mdata = alltracks->at(x); if (mdata) { if (mdata->Compilation()) @@ -804,7 +805,7 @@ void PlaylistEditorView::treeItemVisible(MythUIButtonListItem *item) if (mnode->getAction() == "trackid") { - Metadata *mdata = gMusicData->all_music->getMetadata(mnode->getInt()); + MusicMetadata *mdata = gMusicData->all_music->getMetadata(mnode->getInt()); if (mdata) artFile = mdata->getAlbumArtFile(); } @@ -814,7 +815,7 @@ void PlaylistEditorView::treeItemVisible(MythUIButtonListItem *item) MetadataPtrList *tracks = qVariantValue (node->GetData()); for (int x = 0; x < tracks->count(); x++) { - Metadata *mdata = tracks->at(x); + MusicMetadata *mdata = tracks->at(x); if (mdata) { artFile = mdata->getAlbumArtFile(); @@ -964,7 +965,7 @@ void PlaylistEditorView::filterTracks(MusicGenericTree *node) for (int x = 0; x < tracks->count(); x++) { - Metadata *mdata = tracks->at(x); + MusicMetadata *mdata = tracks->at(x); if (mdata) { QString key = mdata->Title(); @@ -1000,7 +1001,7 @@ void PlaylistEditorView::filterTracks(MusicGenericTree *node) for (int x = 0; x < tracks->count(); x++) { - Metadata *mdata = tracks->at(x); + MusicMetadata *mdata = tracks->at(x); if (mdata) { if (map.contains(mdata->Artist())) @@ -1034,7 +1035,7 @@ void PlaylistEditorView::filterTracks(MusicGenericTree *node) for (int x = 0; x < tracks->count(); x++) { - Metadata *mdata = tracks->at(x); + MusicMetadata *mdata = tracks->at(x); if (mdata) { if (mdata->CompilationArtist() != mdata->Artist()) @@ -1071,7 +1072,7 @@ void PlaylistEditorView::filterTracks(MusicGenericTree *node) for (int x = 0; x < tracks->count(); x++) { - Metadata *mdata = tracks->at(x); + MusicMetadata *mdata = tracks->at(x); if (mdata) { if (map.contains(mdata->Album())) @@ -1105,7 +1106,7 @@ void PlaylistEditorView::filterTracks(MusicGenericTree *node) for (int x = 0; x < tracks->count(); x++) { - Metadata *mdata = tracks->at(x); + MusicMetadata *mdata = tracks->at(x); if (mdata) { if (map.contains(mdata->Genre())) @@ -1139,7 +1140,7 @@ void PlaylistEditorView::filterTracks(MusicGenericTree *node) for (int x = 0; x < tracks->count(); x++) { - Metadata *mdata = tracks->at(x); + MusicMetadata *mdata = tracks->at(x); if (mdata) { QString ratingStr = tr("%n Star(s)", "", mdata->Rating()); @@ -1172,7 +1173,7 @@ void PlaylistEditorView::filterTracks(MusicGenericTree *node) for (int x = 0; x < tracks->count(); x++) { - Metadata *mdata = tracks->at(x); + MusicMetadata *mdata = tracks->at(x); if (mdata) { QString yearStr = QString("%1").arg(mdata->Year()); @@ -1219,7 +1220,7 @@ void PlaylistEditorView::filterTracks(MusicGenericTree *node) for (int x = 0; x < tracks->count(); x++) { - Metadata *mdata = tracks->at(x); + MusicMetadata *mdata = tracks->at(x); if (mdata) { QString filename = mdata->Filename(false); @@ -1326,7 +1327,7 @@ void PlaylistEditorView::filterTracks(MusicGenericTree *node) MetadataPtrList *tracks = qVariantValue (node->GetData()); for (int x = 0; x < tracks->count(); x++) { - Metadata *mdata = tracks->at(x); + MusicMetadata *mdata = tracks->at(x); if (mdata) { if (mdata->Artist() != mdata->CompilationArtist()) @@ -1551,11 +1552,11 @@ void PlaylistEditorView::getPlaylists(MusicGenericTree *node) void PlaylistEditorView::getPlaylistTracks(MusicGenericTree *node, int playlistID) { Playlist *playlist = gMusicData->all_playlists->getPlaylist(playlistID); - QList songs = playlist->getSongs(); + QList songs = playlist->getSongs(); for (int x = 0; x < songs.count(); x++) { - Metadata *mdata = songs.at(x); + MusicMetadata *mdata = songs.at(x); if (mdata) { MusicGenericTree *newnode = new MusicGenericTree(node, mdata->Title(), "trackid"); diff --git a/mythplugins/mythmusic/mythmusic/searchview.cpp b/mythplugins/mythmusic/mythmusic/searchview.cpp index d356586052c..64a5b5263d3 100644 --- a/mythplugins/mythmusic/mythmusic/searchview.cpp +++ b/mythplugins/mythmusic/mythmusic/searchview.cpp @@ -11,6 +11,7 @@ #include // mythmusic +#include "musicdata.h" #include "musiccommon.h" #include "searchview.h" @@ -101,8 +102,8 @@ void SearchView::customEvent(QEvent *event) for (int x = 0; x < m_tracksList->GetCount(); x++) { MythUIButtonListItem *item = m_tracksList->GetItemAt(x); - Metadata *mdata = qVariantValue (item->GetData()); - if (mdata && (mdata->ID() == (Metadata::IdType) trackID || trackID == -1)) + MusicMetadata *mdata = qVariantValue (item->GetData()); + if (mdata && (mdata->ID() == (MusicMetadata::IdType) trackID || trackID == -1)) { if (gPlayer->getPlaylist()->checkTrack(mdata->ID())) item->DisplayState("on", "selectedstate"); @@ -148,7 +149,7 @@ void SearchView::customEvent(QEvent *event) for (int x = 0; x < m_tracksList->GetCount(); x++) { MythUIButtonListItem *item = m_tracksList->GetItemAt(x); - Metadata *mdata = qVariantValue (item->GetData()); + MusicMetadata *mdata = qVariantValue (item->GetData()); if (mdata && mdata->ID() == trackID) { MetadataMap metadataMap; @@ -225,7 +226,7 @@ bool SearchView::keyPressEvent(QKeyEvent *event) { if (m_tracksList->GetItemCurrent()) { - Metadata *mdata = qVariantValue (m_tracksList->GetItemCurrent()->GetData()); + MusicMetadata *mdata = qVariantValue (m_tracksList->GetItemCurrent()->GetData()); if (mdata) { if (action == "INFO") @@ -276,7 +277,7 @@ void SearchView::ShowMenu(void) MythUIButtonListItem *item = m_tracksList->GetItemCurrent(); if (item) { - Metadata *mdata = qVariantValue (item->GetData()); + MusicMetadata *mdata = qVariantValue (item->GetData()); if (mdata) { if (gPlayer->getPlaylist()->checkTrack(mdata->ID())) @@ -415,7 +416,7 @@ void SearchView::updateTracksList(void) { int trackid = query.value(0).toInt(); - Metadata *mdata = gMusicData->all_music->getMetadata(trackid); + MusicMetadata *mdata = gMusicData->all_music->getMetadata(trackid); if (mdata) { MythUIButtonListItem *newitem = new MythUIButtonListItem(m_tracksList, ""); @@ -441,7 +442,7 @@ void SearchView::updateTracksList(void) void SearchView::trackClicked(MythUIButtonListItem *item) { - Metadata *mdata = qVariantValue (item->GetData()); + MusicMetadata *mdata = qVariantValue (item->GetData()); if (mdata) { if (gPlayer->getPlaylist()->checkTrack(mdata->ID())) @@ -459,7 +460,7 @@ void SearchView::trackVisible(MythUIButtonListItem *item) if (item->GetImageFilename().isEmpty()) { - Metadata *mdata = qVariantValue (item->GetData()); + MusicMetadata *mdata = qVariantValue (item->GetData()); if (mdata) { QString artFile = mdata->getAlbumArtFile(); diff --git a/mythplugins/mythmusic/mythmusic/shoutcast.cpp b/mythplugins/mythmusic/mythmusic/shoutcast.cpp index ca3d7cdbf29..a4ef26de677 100644 --- a/mythplugins/mythmusic/mythmusic/shoutcast.cpp +++ b/mythplugins/mythmusic/mythmusic/shoutcast.cpp @@ -18,9 +18,9 @@ #include #include #include +#include // mythmusic -#include "metadata.h" #include "shoutcast.h" @@ -889,7 +889,7 @@ void DecoderIOFactoryShoutCast::shoutcastMeta(const QString &metadata) ShoutCastMetaMap meta_map = parser.parseMeta(metadata); - Metadata mdata = getMetadata(); + MusicMetadata mdata = getMetadata(); mdata.setTitle(meta_map["title"]); mdata.setArtist(meta_map["artist"]); mdata.setAlbum(meta_map["album"]); diff --git a/mythplugins/mythmusic/mythmusic/smartplaylist.cpp b/mythplugins/mythmusic/mythmusic/smartplaylist.cpp index f26f9d9fffc..78b2cb0c604 100644 --- a/mythplugins/mythmusic/mythmusic/smartplaylist.cpp +++ b/mythplugins/mythmusic/mythmusic/smartplaylist.cpp @@ -22,10 +22,11 @@ using namespace std; #include #include #include +#include // mythmusic +#include "musicdata.h" #include "smartplaylist.h" -#include "metadata.h" #include "musiccommon.h" struct SmartPLField @@ -1584,27 +1585,27 @@ void CriteriaRowEditor::valueButtonClicked(void) if (m_fieldSelector->GetValue() == "Artist") { msg = tr("Select an Artist"); - searchList = Metadata::fillFieldList("artist"); + searchList = MusicMetadata::fillFieldList("artist"); } else if (m_fieldSelector->GetValue() == "Comp. Artist") { msg = tr("Select a Compilation Artist"); - searchList = Metadata::fillFieldList("compilation_artist"); + searchList = MusicMetadata::fillFieldList("compilation_artist"); } else if (m_fieldSelector->GetValue() == "Album") { msg = tr("Select an Album"); - searchList = Metadata::fillFieldList("album"); + searchList = MusicMetadata::fillFieldList("album"); } else if (m_fieldSelector->GetValue() == "Genre") { msg = tr("Select a Genre"); - searchList = Metadata::fillFieldList("genre"); + searchList = MusicMetadata::fillFieldList("genre"); } else if (m_fieldSelector->GetValue() == "Title") { msg = tr("Select a Title"); - searchList = Metadata::fillFieldList("title"); + searchList = MusicMetadata::fillFieldList("title"); } else if (m_fieldSelector->GetValue() == "Last Play") { @@ -1754,7 +1755,7 @@ void SmartPLResultViewer::trackVisible(MythUIButtonListItem *item) if (item->GetImageFilename().isEmpty()) { - Metadata *mdata = qVariantValue (item->GetData()); + MusicMetadata *mdata = qVariantValue (item->GetData()); if (mdata) { QString artFile = mdata->getAlbumArtFile(); @@ -1782,7 +1783,7 @@ void SmartPLResultViewer::showTrackInfo(void) if (!item) return; - Metadata *mdata = qVariantValue (item->GetData()); + MusicMetadata *mdata = qVariantValue (item->GetData()); if (!mdata) return; @@ -1809,7 +1810,7 @@ void SmartPLResultViewer::setSQL(QString sql) { while (query.next()) { - Metadata *mdata = gMusicData->all_music->getMetadata(query.value(0).toInt()); + MusicMetadata *mdata = gMusicData->all_music->getMetadata(query.value(0).toInt()); if (mdata) { MetadataMap metadataMap; diff --git a/mythplugins/mythmusic/mythmusic/streamview.cpp b/mythplugins/mythmusic/mythmusic/streamview.cpp index 2c583de9c0b..7832286597a 100644 --- a/mythplugins/mythmusic/mythmusic/streamview.cpp +++ b/mythplugins/mythmusic/mythmusic/streamview.cpp @@ -19,12 +19,13 @@ #include #include #include +#include // mythmusic +#include "musicdata.h" #include "musiccommon.h" #include "streamview.h" #include "musicplayer.h" -#include "musicutils.h" using namespace std; @@ -117,7 +118,7 @@ void StreamView::customEvent(QEvent *event) // add the new track to the list if (m_playedTracksList && gPlayer->getPlayedTracksList().count()) { - Metadata *mdata = gPlayer->getPlayedTracksList().last(); + MusicMetadata *mdata = gPlayer->getPlayedTracksList().last(); MythUIButtonListItem *item = new MythUIButtonListItem(m_playedTracksList, "", qVariantFromValue(mdata), 0); @@ -236,7 +237,7 @@ void StreamView::customEvent(QEvent *event) for (int x = 0; x < m_streamList->GetCount(); x++) { MythUIButtonListItem *item = m_streamList->GetItemAt(x); - Metadata *mdata = qVariantValue (item->GetData()); + MusicMetadata *mdata = qVariantValue (item->GetData()); if (mdata && mdata->LogoUrl() == url) item->SetImage(filename); } @@ -367,7 +368,7 @@ void StreamView::editStream(void) MythUIButtonListItem *item = m_streamList->GetItemCurrent(); if (item) { - Metadata *mdata = qVariantValue (item->GetData()); + MusicMetadata *mdata = qVariantValue (item->GetData()); MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack(); MythScreenType *screen = new EditStreamMetadata(mainStack, this, mdata); @@ -383,7 +384,7 @@ void StreamView::removeStream(void) MythUIButtonListItem *item = m_streamList->GetItemCurrent(); if (item) { - Metadata *mdata = qVariantValue (item->GetData()); + MusicMetadata *mdata = qVariantValue (item->GetData()); ShowOkPopup(tr("Are you sure you want to delete this Stream?\n" "Station: %1 - Channel: %2") @@ -400,7 +401,7 @@ void StreamView::doRemoveStream(bool ok) MythUIButtonListItem *item = m_streamList->GetItemCurrent(); if (item) { - Metadata *mdata = qVariantValue (item->GetData()); + MusicMetadata *mdata = qVariantValue (item->GetData()); deleteStream(mdata); } } @@ -413,7 +414,7 @@ void StreamView::updateStreamList(void) for (int x = 0; x < gPlayer->getPlaylist()->getSongs().count(); x++) { - Metadata *mdata = gPlayer->getPlaylist()->getSongs().at(x); + MusicMetadata *mdata = gPlayer->getPlaylist()->getSongs().at(x); MythUIButtonListItem *item = new MythUIButtonListItem(m_streamList, "", qVariantFromValue(mdata)); MetadataMap metadataMap; if (mdata) @@ -477,7 +478,7 @@ void StreamView::streamItemVisible(MythUIButtonListItem *item) if (!item->GetText("imageloaded").isEmpty()) return; - Metadata *mdata = qVariantValue (item->GetData()); + MusicMetadata *mdata = qVariantValue (item->GetData()); if (mdata) { if (!mdata->LogoUrl().isEmpty()) @@ -489,7 +490,7 @@ void StreamView::streamItemVisible(MythUIButtonListItem *item) item->SetText(" ", "imageloaded"); } -void StreamView::addStream(Metadata *mdata) +void StreamView::addStream(MusicMetadata *mdata) { // sanity check this is a radio stream int repo = ID_TO_REPO(mdata->ID()); @@ -503,13 +504,15 @@ void StreamView::addStream(Metadata *mdata) gMusicData->all_streams->addStream(mdata); + gPlayer->loadStreamPlaylist(); + updateStreamList(); // find the new stream and make it the active item for (int x = 0; x < m_streamList->GetCount(); x++) { MythUIButtonListItem *item = m_streamList->GetItemAt(x); - Metadata *itemsdata = qVariantValue (item->GetData()); + MusicMetadata *itemsdata = qVariantValue (item->GetData()); if (itemsdata) { if (url == itemsdata->Url()) @@ -522,7 +525,7 @@ void StreamView::addStream(Metadata *mdata) } } -void StreamView::updateStream(Metadata *mdata) +void StreamView::updateStream(MusicMetadata *mdata) { // sanity check this is a radio stream int repo = ID_TO_REPO(mdata->ID()); @@ -532,10 +535,12 @@ void StreamView::updateStream(Metadata *mdata) return; } - Metadata::IdType id = mdata->ID(); + MusicMetadata::IdType id = mdata->ID(); gMusicData->all_streams->updateStream(mdata); + gPlayer->loadStreamPlaylist(); + // update mdata to point to the new item mdata = gMusicData->all_streams->getMetadata(id); @@ -549,7 +554,7 @@ void StreamView::updateStream(Metadata *mdata) updateStreamList(); // if we just edited the currently playing stream update the current metadata to match - Metadata *currentMetadata = gPlayer->getCurrentMetadata(); + MusicMetadata *currentMetadata = gPlayer->getCurrentMetadata(); if (id == currentMetadata->ID()) { currentMetadata->setStation(mdata->Station()); @@ -562,7 +567,7 @@ void StreamView::updateStream(Metadata *mdata) for (int x = 0; x < m_playedTracksList->GetCount(); x++) { MythUIButtonListItem *item = m_playedTracksList->GetItemAt(x); - Metadata *playedmdata = qVariantValue (item->GetData()); + MusicMetadata *playedmdata = qVariantValue (item->GetData()); if (playedmdata && playedmdata->ID() == id) { @@ -580,7 +585,7 @@ void StreamView::updateStream(Metadata *mdata) for (int x = 0; x < m_streamList->GetCount(); x++) { MythUIButtonListItem *item = m_streamList->GetItemAt(x); - Metadata *itemsdata = qVariantValue (item->GetData()); + MusicMetadata *itemsdata = qVariantValue (item->GetData()); if (itemsdata) { if (mdata->ID() == itemsdata->ID()) @@ -593,7 +598,7 @@ void StreamView::updateStream(Metadata *mdata) } } -void StreamView::deleteStream(Metadata *mdata) +void StreamView::deleteStream(MusicMetadata *mdata) { // sanity check this is a radio stream int repo = ID_TO_REPO(mdata->ID()); @@ -605,6 +610,8 @@ void StreamView::deleteStream(Metadata *mdata) gMusicData->all_streams->removeStream(mdata); + gPlayer->loadStreamPlaylist(); + updateStreamList(); } @@ -612,7 +619,7 @@ void StreamView::deleteStream(Metadata *mdata) EditStreamMetadata::EditStreamMetadata(MythScreenStack *parentStack, StreamView *parent, - Metadata *mdata) + MusicMetadata *mdata) : MythScreenType(parentStack, "editstreampopup"), m_parent(parent), m_streamMeta(mdata), m_stationEdit(NULL), m_channelEdit(NULL), m_urlEdit(NULL), @@ -682,7 +689,7 @@ void EditStreamMetadata::saveClicked(void) if (!m_streamMeta) { - m_streamMeta = new Metadata; + m_streamMeta = new MusicMetadata; m_streamMeta->setRepo(RT_Radio); doUpdate = false; } @@ -703,7 +710,7 @@ void EditStreamMetadata::saveClicked(void) Close(); } -void EditStreamMetadata::changeStreamMetadata(Metadata* mdata) +void EditStreamMetadata::changeStreamMetadata(MusicMetadata* mdata) { if (mdata) { @@ -771,7 +778,7 @@ void SearchStream::streamClicked(MythUIButtonListItem *item) if (!item) return; - Metadata *mdata = qVariantValue (item->GetData()); + MusicMetadata *mdata = qVariantValue (item->GetData()); if (mdata) m_parent->changeStreamMetadata(mdata); @@ -783,7 +790,7 @@ void SearchStream::streamVisible(MythUIButtonListItem *item) if (!item) return; - Metadata *mdata = qVariantValue (item->GetData()); + MusicMetadata *mdata = qVariantValue (item->GetData()); if (mdata) { if (item->GetText("dummy") == " ") @@ -837,7 +844,7 @@ void SearchStream::loadStreams(void) { itemNode = itemList.item(i); - Metadata mdata; + MusicMetadata mdata; mdata.setStation(itemNode.namedItem(QString("station")).toElement().text()); mdata.setChannel(itemNode.namedItem(QString("channel")).toElement().text()); mdata.setUrl(itemNode.namedItem(QString("url")).toElement().text()); @@ -897,11 +904,11 @@ void SearchStream::updateStreams(void) bool searchGenre = (genre != tr("")); bool searchChannel = !channel.isEmpty(); - QMap::iterator it; + QMap::iterator it; for (it = m_streams.begin(); it != m_streams.end(); ++it) { - Metadata *mdata = &(*it); + MusicMetadata *mdata = &(*it); if (searchStation && station != mdata->Station()) continue; diff --git a/mythplugins/mythmusic/mythmusic/streamview.h b/mythplugins/mythmusic/mythmusic/streamview.h index 9cb86a7d77d..47ecdb8eecf 100644 --- a/mythplugins/mythmusic/mythmusic/streamview.h +++ b/mythplugins/mythmusic/mythmusic/streamview.h @@ -10,7 +10,6 @@ // mythmusic #include -//#include "metadata.h" class MythUIWebBrowser; class MythUIText; @@ -27,9 +26,9 @@ class StreamView : public MusicCommon bool Create(void); bool keyPressEvent(QKeyEvent *); - void addStream(Metadata *mdata); - void deleteStream(Metadata *mdata); - void updateStream(Metadata *mdata); + void addStream(MusicMetadata *mdata); + void deleteStream(MusicMetadata *mdata); + void updateStream(MusicMetadata *mdata); virtual void ShowMenu(void); @@ -57,10 +56,10 @@ class EditStreamMetadata : public MythScreenType public: EditStreamMetadata(MythScreenStack *parentStack, StreamView *parent, - Metadata *mdata = NULL); + MusicMetadata *mdata = NULL); bool Create(); - void changeStreamMetadata(Metadata *mdata); + void changeStreamMetadata(MusicMetadata *mdata); private slots: void searchClicked(void); @@ -69,7 +68,7 @@ class EditStreamMetadata : public MythScreenType private: StreamView *m_parent; - Metadata *m_streamMeta; + MusicMetadata *m_streamMeta; MythUITextEdit *m_stationEdit; MythUITextEdit *m_channelEdit; @@ -103,7 +102,7 @@ class SearchStream : public MythScreenType void updateGenres(void); EditStreamMetadata *m_parent; - QMap m_streams; + QMap m_streams; QStringList m_stations; QStringList m_genres; diff --git a/mythplugins/mythmusic/mythmusic/visualize.cpp b/mythplugins/mythmusic/mythmusic/visualize.cpp index 86196fea7a5..f13efef1d53 100644 --- a/mythplugins/mythmusic/mythmusic/visualize.cpp +++ b/mythplugins/mythmusic/mythmusic/visualize.cpp @@ -26,13 +26,13 @@ using namespace std; #include #include #include +#include // mythmusic #include "mainvisual.h" #include "visualize.h" #include "inlines.h" #include "decoder.h" -#include "metadata.h" #include "musicplayer.h" #define FFTW_N 512 diff --git a/mythplugins/mythmusic/mythmusic/visualize.h b/mythplugins/mythmusic/mythmusic/visualize.h index 7d4633e947d..72afec80fed 100644 --- a/mythplugins/mythmusic/mythmusic/visualize.h +++ b/mythplugins/mythmusic/mythmusic/visualize.h @@ -18,9 +18,9 @@ // MythTV headers #include +#include // MythMusic headers -#include "metadata.h" #include "constants.h" #include "config.h" @@ -290,7 +290,7 @@ class AlbumArt : public VisualBase ImageType m_currImageType; QImage m_image; - Metadata *m_currentMetadata; + MusicMetadata *m_currentMetadata; QDateTime m_lastCycle; }; diff --git a/mythplugins/mythmusic/mythmusic/visualizerview.cpp b/mythplugins/mythmusic/mythmusic/visualizerview.cpp index 3ce9632f0db..2fe63f6e785 100644 --- a/mythplugins/mythmusic/mythmusic/visualizerview.cpp +++ b/mythplugins/mythmusic/mythmusic/visualizerview.cpp @@ -135,7 +135,7 @@ void VisualizerView::showTrackInfoPopup(void) //--------------------------------------------------------- #define MUSICINFOPOPUPTIME 8 * 1000 -TrackInfoPopup::TrackInfoPopup(MythScreenStack *parent, Metadata *metadata) +TrackInfoPopup::TrackInfoPopup(MythScreenStack *parent, MusicMetadata *metadata) : MythScreenType(parent, "trackinfopopup", false) { m_metadata = metadata; @@ -166,7 +166,7 @@ bool TrackInfoPopup::Create(void) m_metadata->toMap(metadataMap); // add the map from the next track - Metadata *nextMetadata = gPlayer->getNextMetadata(); + MusicMetadata *nextMetadata = gPlayer->getNextMetadata(); if (nextMetadata) nextMetadata->toMap(metadataMap, "next"); diff --git a/mythplugins/mythmusic/mythmusic/visualizerview.h b/mythplugins/mythmusic/mythmusic/visualizerview.h index 77c17194227..d2f881d8300 100644 --- a/mythplugins/mythmusic/mythmusic/visualizerview.h +++ b/mythplugins/mythmusic/mythmusic/visualizerview.h @@ -36,14 +36,14 @@ class MPUBLIC TrackInfoPopup : public MythScreenType { Q_OBJECT public: - TrackInfoPopup(MythScreenStack *parent, Metadata *mdata); + TrackInfoPopup(MythScreenStack *parent, MusicMetadata *mdata); ~TrackInfoPopup(void); bool Create(void); bool keyPressEvent(QKeyEvent *event); protected: - Metadata *m_metadata; + MusicMetadata *m_metadata; QTimer *m_displayTimer; }; diff --git a/mythplugins/mythmusic/mythmusic/vorbisencoder.cpp b/mythplugins/mythmusic/mythmusic/vorbisencoder.cpp index 4ff03df4892..444f4ccac43 100644 --- a/mythplugins/mythmusic/mythmusic/vorbisencoder.cpp +++ b/mythplugins/mythmusic/mythmusic/vorbisencoder.cpp @@ -18,9 +18,9 @@ using namespace std; // MythTV #include #include // For random() on MINGW32 +#include // MythMusic -#include "metadata.h" #include "encoder.h" #include "vorbisencoder.h" #include "metaiooggvorbis.h" @@ -35,7 +35,7 @@ static int write_page(ogg_page *page, FILE *fp) } VorbisEncoder::VorbisEncoder(const QString &outfile, int qualitylevel, - Metadata *metadata) : + MusicMetadata *metadata) : Encoder(outfile, qualitylevel, metadata), packetsdone(0), eos(0), diff --git a/mythplugins/mythmusic/mythmusic/vorbisencoder.h b/mythplugins/mythmusic/mythmusic/vorbisencoder.h index 9e7267b059c..d27fd758fa0 100644 --- a/mythplugins/mythmusic/mythmusic/vorbisencoder.h +++ b/mythplugins/mythmusic/mythmusic/vorbisencoder.h @@ -1,7 +1,7 @@ #ifndef VORBISENCODER_H_ #define VORBISENCODER_H_ -class Metadata; +class MusicMetadata; class Encoder; class QString; @@ -10,7 +10,7 @@ class QString; class VorbisEncoder : public Encoder { public: - VorbisEncoder(const QString &outfile, int qualitylevel, Metadata *metadata); + VorbisEncoder(const QString &outfile, int qualitylevel, MusicMetadata *metadata); ~VorbisEncoder(); int addSamples(int16_t *bytes, unsigned int len); @@ -27,7 +27,7 @@ class VorbisEncoder : public Encoder vorbis_block vb; vorbis_info vi; - Metadata *m_metadata; + MusicMetadata *m_metadata; }; #endif diff --git a/mythtv/configure b/mythtv/configure index 15b7ec7788e..16fbac21361 100755 --- a/mythtv/configure +++ b/mythtv/configure @@ -1767,6 +1767,7 @@ MYTHTV_CONFIG_LIST=' qtdbus quartz_video sdl + taglib v4l2 v4l1 valgrind @@ -2563,6 +2564,7 @@ enable xv disable indevs disable sdl enable libfftw3 +enable taglib # mythtv paths dvb_path_default="${sysroot}/usr/include" @@ -4874,6 +4876,22 @@ if enabled libuuid ; then fi fi +# Check for taglib for libmythmetadata +if enabled taglib; then + taglib_minor="0" + if test x`which taglib-config` != x"" ; then + taglib_minor=`taglib-config --version | cut -d. -f2` + if test x"$taglib_minor" = x"" ; then + echo "Can't find taglib-config. Assuming 1.6 or later." + taglib_minor="6" + fi + fi + + if test $taglib_minor -lt 6 || ! check_lib_cpp taglib/fileref.h TagLib::FileRef -ltag -lz ; then + die "ERROR: cannot find taglib 1.6 or later." + fi +fi + # Attempt to use libudev for mediamonitor enabled libudev && check_lib2 libudev.h udev_new -ludev || disable libudev @@ -5399,6 +5417,11 @@ int main(void) { } EOF +if enabled taglib; then + taglib_include=`taglib-config --prefix`/include/taglib + taglib_libs=`taglib-config --libs` +fi + enabled libudf && check_cc < int main(void){ return UDF_BLOCKSIZE > 0 ? 0 : 1; } @@ -6268,6 +6291,11 @@ if enabled libxml2; then fi fi +if enabled taglib; then + echo "CONFIG_TAGLIB_INCLUDES=$taglib_include" >> $TMPMAK + echo "CONFIG_TAGLIB_LIBS=$taglib_libs" >> $TMPMAK +fi + if enabled libudf; then append CCONFIG "using_libudf" fi diff --git a/mythtv/libs/libmythbase/mythversion.h b/mythtv/libs/libmythbase/mythversion.h index 9a21594c42c..9ce25c3fcca 100644 --- a/mythtv/libs/libmythbase/mythversion.h +++ b/mythtv/libs/libmythbase/mythversion.h @@ -12,7 +12,7 @@ /// Update this whenever the plug-in ABI changes. /// Including changes in the libmythbase, libmyth, libmythtv, libmythav* and /// libmythui class methods in exported headers. -#define MYTH_BINARY_VERSION "0.27.20130419-1" +#define MYTH_BINARY_VERSION "0.27.20130426-1" /** \brief Increment this whenever the MythTV network protocol changes. * diff --git a/mythtv/libs/libmythmetadata/libmythmetadata.pro b/mythtv/libs/libmythmetadata/libmythmetadata.pro index 4c206c8b573..843c3a99817 100644 --- a/mythtv/libs/libmythmetadata/libmythmetadata.pro +++ b/mythtv/libs/libmythmetadata/libmythmetadata.pro @@ -22,6 +22,9 @@ HEADERS += videoscan.h videoutils.h videometadata.h videometadatalistmanager. HEADERS += quicksp.h metadatacommon.h metadatadownload.h metadataimagedownload.h HEADERS += bluraymetadata.h mythmetaexp.h metadatafactory.h mythuimetadataresults.h HEADERS += mythuiimageresults.h +HEADERS += musicmetadata.h musicutils.h metaio.h metaiotaglib.h +HEADERS += metaioflacvorbis.h metaioavfcomment.h metaiomp4.h +HEADERS += metaiowavpack.h metaioid3.h metaiooggvorbis.h SOURCES += cleanup.cpp dbaccess.cpp dirscan.cpp globals.cpp SOURCES += parentalcontrols.cpp videoscan.cpp videoutils.cpp @@ -29,10 +32,17 @@ SOURCES += videometadata.cpp videometadatalistmanager.cpp SOURCES += metadatacommon.cpp metadatadownload.cpp metadataimagedownload.cpp SOURCES += bluraymetadata.cpp metadatafactory.cpp mythuimetadataresults.cpp SOURCES += mythuiimageresults.cpp +SOURCES += musicmetadata.cpp musicutils.cpp metaio.cpp metaiotaglib.cpp +SOURCES += metaioflacvorbis.cpp metaioavfcomment.cpp metaiomp4.cpp +SOURCES += metaiowavpack.cpp metaioid3.cpp metaiooggvorbis.cpp INCLUDEPATH += ../libmythbase ../libmythtv INCLUDEPATH += ../.. ../ ./ ../libmythupnp ../libmythui INCLUDEPATH += ../../external/FFmpeg ../libmyth ../../external/libmythbluray + +# for TagLib +INCLUDEPATH += $${CONFIG_TAGLIB_INCLUDES} + DEPENDPATH += ../libmythsamplerate ../libmythsoundtouch DEPENDPATH += ../libmythfreesurround DEPENDPATH += ../ ../libmythui ../libmythbase @@ -53,6 +63,10 @@ LIBS += -L../libmyth -lmyth-$${LIBVERSION} LIBS += -L../libmythtv -lmythtv-$${LIBVERSION} LIBS += -L../../external/libmythbluray -lmythbluray-$${LIBVERSION} LIBS += -L../../external/FFmpeg/libswscale -lmythswscale + +# for TagLib +LIBS += $${CONFIG_TAGLIB_LIBS} + using_mheg:LIBS += -L../libmythfreemheg -lmythfreemheg-$${LIBVERSION} using_live:LIBS += -L../libmythlivemedia -lmythlivemedia-$${LIBVERSION} @@ -68,6 +82,10 @@ inc.files += videoscan.h videoutils.h videometadata.h videometadatalistmanage inc.files += quicksp.h metadatacommon.h metadatadownload.h metadataimagedownload.h inc.files += bluraymetadata.h mythmetaexp.h metadatafactory.h mythuimetadataresults.h inc.files += mythuiimageresults.h metadataimagehelper.h +inc.files += musicmetadata.h musicutils.h +inc.files += metaio.h metaiotaglib.h +inc.files += metaioflacvorbis.h metaioavfcomment.h metaiomp4.h +inc.files += metaiowavpack.h metaioid3.h metaiooggvorbis.h INSTALLS += inc diff --git a/mythplugins/mythmusic/mythmusic/metaio.cpp b/mythtv/libs/libmythmetadata/metaio.cpp similarity index 87% rename from mythplugins/mythmusic/mythmusic/metaio.cpp rename to mythtv/libs/libmythmetadata/metaio.cpp index f67ed3341ba..8879caabbf8 100644 --- a/mythplugins/mythmusic/mythmusic/metaio.cpp +++ b/mythtv/libs/libmythmetadata/metaio.cpp @@ -1,9 +1,9 @@ // Qt #include -// Mythmusic +// libmythmetadata #include "metaio.h" -#include "metadata.h" +#include "musicmetadata.h" #include "metaioid3.h" #include "metaiooggvorbis.h" #include "metaioflacvorbis.h" @@ -59,9 +59,9 @@ MetaIO* MetaIO::createTagger(const QString& filename) } // static -Metadata* MetaIO::readMetadata(const QString &filename) +MusicMetadata* MetaIO::readMetadata(const QString &filename) { - Metadata *mdata = NULL; + MusicMetadata *mdata = NULL; MetaIO *tagger = MetaIO::createTagger(filename); bool ignoreID3 = (gCoreContext->GetNumSetting("Ignore_ID3", 0) == 1); @@ -87,10 +87,10 @@ Metadata* MetaIO::readMetadata(const QString &filename) } // static -Metadata* MetaIO::getMetadata(const QString &filename) +MusicMetadata* MetaIO::getMetadata(const QString &filename) { - Metadata *mdata = new Metadata(filename); + MusicMetadata *mdata = new MusicMetadata(filename); if (mdata->isInDatabase()) return mdata; @@ -165,7 +165,7 @@ void MetaIO::readFromFilename(const QString &filename, } } -Metadata* MetaIO::readFromFilename(const QString &filename, bool blnLength) +MusicMetadata* MetaIO::readFromFilename(const QString &filename, bool blnLength) { QString artist, album, title, genre; int tracknum = 0, length = 0; @@ -175,18 +175,18 @@ Metadata* MetaIO::readFromFilename(const QString &filename, bool blnLength) if (blnLength) length = getTrackLength(filename); - Metadata *retdata = new Metadata(filename, artist, "", album, - title, genre, 0, tracknum, length); + MusicMetadata *retdata = new MusicMetadata(filename, artist, "", album, + title, genre, 0, tracknum, length); return retdata; } /*! -* \brief Reads Metadata based on the folder/filename. +* \brief Reads MusicMetadata based on the folder/filename. * -* \param metadata Metadata Pointer +* \param metadata MusicMetadata Pointer */ -void MetaIO::readFromFilename(Metadata* metadata) +void MetaIO::readFromFilename(MusicMetadata* metadata) { QString artist, album, title, genre; int tracknum = 0; diff --git a/mythplugins/mythmusic/mythmusic/metaio.h b/mythtv/libs/libmythmetadata/metaio.h similarity index 77% rename from mythplugins/mythmusic/mythmusic/metaio.h rename to mythtv/libs/libmythmetadata/metaio.h index 15219241244..7b9594e93d2 100644 --- a/mythplugins/mythmusic/mythmusic/metaio.h +++ b/mythtv/libs/libmythmetadata/metaio.h @@ -4,12 +4,12 @@ // QT #include -// MythMusic -#include "metadata.h" +// libmythmetadata +#include "musicmetadata.h" #define MYTH_MUSICBRAINZ_ALBUMARTIST_UUID "89ad4ac3-39f7-470e-963a-56509c546377" -class MetaIO +class META_PUBLIC MetaIO { public: MetaIO(void); @@ -18,30 +18,30 @@ class MetaIO /*! * \brief Writes all metadata back to a file * - * \param mdata A pointer to a Metadata object + * \param mdata A pointer to a MusicMetadata object * \returns Boolean to indicate success/failure. */ - virtual bool write(const Metadata* mdata) = 0; + virtual bool write(const MusicMetadata* mdata) = 0; /*! * \brief Writes rating and playcount back to a file * - * \param mdata A pointer to a Metadata object + * \param mdata A pointer to a MusicMetadata object * \returns Boolean to indicate success/failure. */ - virtual bool writeVolatileMetadata(const Metadata* mdata) + virtual bool writeVolatileMetadata(const MusicMetadata* mdata) { (void)mdata; return false; } /*! - * \brief Reads Metadata from a file. + * \brief Reads MusicMetadata from a file. * * \param filename The filename to read metadata from. - * \returns Metadata pointer or NULL on error + * \returns MusicMetadata pointer or NULL on error */ - virtual Metadata* read(const QString &filename) = 0; + virtual MusicMetadata* read(const QString &filename) = 0; /*! * \brief Does the tag support embedded cover art. @@ -99,7 +99,7 @@ class MetaIO } /*! - * \brief Reads Metadata based on the folder/filename. + * \brief Reads MusicMetadata based on the folder/filename. * * \param filename The filename to try and determine metadata for. * \returns artist, album, title, genre & tracknum in parameters. @@ -109,14 +109,14 @@ class MetaIO int &tracknum); /*! - * \brief Reads Metadata based on the folder/filename. + * \brief Reads MusicMetadata based on the folder/filename. * * \param filename The filename to try and determine metadata for. - * \returns Metadata Pointer, or NULL on error. + * \returns MusicMetadata Pointer, or NULL on error. */ - Metadata* readFromFilename(const QString &filename, bool blnLength = false); + MusicMetadata* readFromFilename(const QString &filename, bool blnLength = false); - void readFromFilename(Metadata *metadata); + void readFromFilename(MusicMetadata *metadata); virtual bool TagExists(const QString &filename) { @@ -141,9 +141,9 @@ class MetaIO * Creates a \p MetaIO object using \p MetaIO::createTagger and uses * the MetaIO object to read the metadata. * \param filename The filename to read metadata from. - * \returns an instance of \p Metadata owned by the caller + * \returns an instance of \p MusicMetadata owned by the caller */ - static Metadata *readMetadata(const QString &filename); + static MusicMetadata *readMetadata(const QString &filename); /*! * \brief Get the metadata for \p filename @@ -152,9 +152,9 @@ class MetaIO * is no database entry, it'll call \p MetaIO::readMetadata. * * \param filename The filename to get metadata for. - * \returns an instance of \p Metadata owned by the caller + * \returns an instance of \p MusicMetadata owned by the caller */ - static Metadata *getMetadata(const QString &filename); + static MusicMetadata *getMetadata(const QString &filename); protected: diff --git a/mythplugins/mythmusic/mythmusic/metaioavfcomment.cpp b/mythtv/libs/libmythmetadata/metaioavfcomment.cpp similarity index 92% rename from mythplugins/mythmusic/mythmusic/metaioavfcomment.cpp rename to mythtv/libs/libmythmetadata/metaioavfcomment.cpp index 6dcc22785b0..dae9a7480be 100644 --- a/mythplugins/mythmusic/mythmusic/metaioavfcomment.cpp +++ b/mythtv/libs/libmythmetadata/metaioavfcomment.cpp @@ -1,7 +1,7 @@ -// Mythmusic +// libmythmetadata #include "metaioavfcomment.h" -#include "metadata.h" +#include "musicmetadata.h" // libmyth #include @@ -26,7 +26,7 @@ MetaIOAVFComment::~MetaIOAVFComment(void) /*! * \copydoc MetaIO::write() */ -bool MetaIOAVFComment::write(const Metadata* mdata) +bool MetaIOAVFComment::write(const MusicMetadata* mdata) { // Wont implement.... (void)mdata; // -Wall annoyance @@ -36,7 +36,7 @@ bool MetaIOAVFComment::write(const Metadata* mdata) /*! * \copydoc MetaIO::read() */ -Metadata* MetaIOAVFComment::read(const QString &filename) +MusicMetadata* MetaIOAVFComment::read(const QString &filename) { QString artist, compilation_artist, album, title, genre; int year = 0, tracknum = 0, length = 0; @@ -87,7 +87,7 @@ Metadata* MetaIOAVFComment::read(const QString &filename) length = getTrackLength(p_context); - Metadata *retdata = new Metadata(filename, artist, compilation_artist, album, + MusicMetadata *retdata = new MusicMetadata(filename, artist, compilation_artist, album, title, genre, year, tracknum, length); retdata->determineIfCompilation(); diff --git a/mythplugins/mythmusic/mythmusic/metaioavfcomment.h b/mythtv/libs/libmythmetadata/metaioavfcomment.h similarity index 74% rename from mythplugins/mythmusic/mythmusic/metaioavfcomment.h rename to mythtv/libs/libmythmetadata/metaioavfcomment.h index fad0cae876e..725929796cd 100644 --- a/mythplugins/mythmusic/mythmusic/metaioavfcomment.h +++ b/mythtv/libs/libmythmetadata/metaioavfcomment.h @@ -1,7 +1,7 @@ #ifndef METAIOAVFCOMMENT_H_ #define METAIOAVFCOMMENT_H_ -// Mythmusic +// libmythmetadata #include "metaio.h" struct AVFormatContext; @@ -16,14 +16,14 @@ struct AVFormatContext; * * \copydetails MetaIO */ -class MetaIOAVFComment : public MetaIO +class META_PUBLIC MetaIOAVFComment : public MetaIO { public: MetaIOAVFComment(void); virtual ~MetaIOAVFComment(void); - bool write(const Metadata* mdata); - Metadata* read(const QString &filename); + bool write(const MusicMetadata* mdata); + MusicMetadata* read(const QString &filename); private: int getTrackLength(const QString &filename); diff --git a/mythplugins/mythmusic/mythmusic/metaioflacvorbis.cpp b/mythtv/libs/libmythmetadata/metaioflacvorbis.cpp similarity index 93% rename from mythplugins/mythmusic/mythmusic/metaioflacvorbis.cpp rename to mythtv/libs/libmythmetadata/metaioflacvorbis.cpp index b17920cbab0..824ac4478bb 100644 --- a/mythplugins/mythmusic/mythmusic/metaioflacvorbis.cpp +++ b/mythtv/libs/libmythmetadata/metaioflacvorbis.cpp @@ -5,9 +5,9 @@ // Taglib #include -// Mythmusic +// libmythmetadata #include "metaioflacvorbis.h" -#include "metadata.h" +#include "musicmetadata.h" #include "musicutils.h" MetaIOFLACVorbis::MetaIOFLACVorbis(void) @@ -44,7 +44,7 @@ TagLib::FLAC::File *MetaIOFLACVorbis::OpenFile(const QString &filename) /*! * \copydoc MetaIO::write() */ -bool MetaIOFLACVorbis::write(const Metadata* mdata) +bool MetaIOFLACVorbis::write(const MusicMetadata* mdata) { if (!mdata) return false; @@ -95,7 +95,7 @@ bool MetaIOFLACVorbis::write(const Metadata* mdata) /*! * \copydoc MetaIO::read() */ -Metadata* MetaIOFLACVorbis::read(const QString &filename) +MusicMetadata* MetaIOFLACVorbis::read(const QString &filename) { TagLib::FLAC::File *flacfile = OpenFile(filename); @@ -110,7 +110,7 @@ Metadata* MetaIOFLACVorbis::read(const QString &filename) return NULL; } - Metadata *metadata = new Metadata(filename); + MusicMetadata *metadata = new MusicMetadata(filename); ReadGenericMetadata(tag, metadata); diff --git a/mythplugins/mythmusic/mythmusic/metaioflacvorbis.h b/mythtv/libs/libmythmetadata/metaioflacvorbis.h similarity index 71% rename from mythplugins/mythmusic/mythmusic/metaioflacvorbis.h rename to mythtv/libs/libmythmetadata/metaioflacvorbis.h index 96d7497e1b7..f501b8a19d2 100644 --- a/mythplugins/mythmusic/mythmusic/metaioflacvorbis.h +++ b/mythtv/libs/libmythmetadata/metaioflacvorbis.h @@ -1,9 +1,9 @@ #ifndef METAIOFLACVORBIS_H_ #define METAIOFLACVORBIS_H_ -// Mythmusic +// libmythmetadata #include "metaiotaglib.h" -#include "metadata.h" +#include "musicmetadata.h" // Taglib #include @@ -18,17 +18,17 @@ using TagLib::String; * * \copydetails MetaIO */ -class MetaIOFLACVorbis : public MetaIOTagLib +class META_PUBLIC MetaIOFLACVorbis : public MetaIOTagLib { public: MetaIOFLACVorbis(void); virtual ~MetaIOFLACVorbis(void); - bool write(const Metadata* mdata); - Metadata* read(const QString &filename); + bool write(const MusicMetadata* mdata); + MusicMetadata* read(const QString &filename); virtual bool TagExists(const QString &filename); - + private: TagLib::FLAC::File *OpenFile(const QString &filename); }; diff --git a/mythplugins/mythmusic/mythmusic/metaioid3.cpp b/mythtv/libs/libmythmetadata/metaioid3.cpp similarity index 98% rename from mythplugins/mythmusic/mythmusic/metaioid3.cpp rename to mythtv/libs/libmythmetadata/metaioid3.cpp index 55b57786ff3..714551c04a5 100644 --- a/mythplugins/mythmusic/mythmusic/metaioid3.cpp +++ b/mythtv/libs/libmythmetadata/metaioid3.cpp @@ -10,9 +10,9 @@ #include #include -// MythMusic +// libmythmetadata #include "metaioid3.h" -#include "metadata.h" +#include "musicmetadata.h" #include "musicutils.h" const String email = "music@mythtv.org"; // TODO username/ip/hostname? @@ -154,7 +154,7 @@ TagLib::ID3v1::Tag* MetaIOID3::GetID3v1Tag(bool create) /*! * \copydoc MetaIO::write() */ -bool MetaIOID3::write(const Metadata* mdata) +bool MetaIOID3::write(const MusicMetadata* mdata) { if (!OpenFile(mdata->Filename(), true)) return false; @@ -229,7 +229,7 @@ bool MetaIOID3::write(const Metadata* mdata) /*! * \copydoc MetaIO::read() */ -Metadata *MetaIOID3::read(const QString &filename) +MusicMetadata *MetaIOID3::read(const QString &filename) { if (!OpenFile(filename)) return NULL; @@ -256,7 +256,7 @@ Metadata *MetaIOID3::read(const QString &filename) } } - Metadata *metadata = new Metadata(filename); + MusicMetadata *metadata = new MusicMetadata(filename); ReadGenericMetadata(tag, metadata); @@ -828,7 +828,7 @@ bool MetaIOID3::writePlayCount(TagLib::ID3v2::Tag *tag, int playcount) return true; } -bool MetaIOID3::writeVolatileMetadata(const Metadata* mdata) +bool MetaIOID3::writeVolatileMetadata(const MusicMetadata* mdata) { QString filename = mdata->Filename(); int rating = mdata->Rating(); diff --git a/mythplugins/mythmusic/mythmusic/metaioid3.h b/mythtv/libs/libmythmetadata/metaioid3.h similarity index 89% rename from mythplugins/mythmusic/mythmusic/metaioid3.h rename to mythtv/libs/libmythmetadata/metaioid3.h index 9fbb68bdbf4..4f5360e26da 100644 --- a/mythplugins/mythmusic/mythmusic/metaioid3.h +++ b/mythtv/libs/libmythmetadata/metaioid3.h @@ -1,9 +1,9 @@ #ifndef METAIOID3_H_ #define METAIOID3_H_ -// MythMusic +// libmythmetadata #include "metaiotaglib.h" -#include "metadata.h" +#include "musicmetadata.h" // Taglib #include @@ -30,19 +30,19 @@ using TagLib::ID3v2::AttachedPictureFrame; * * \copydetails MetaIO */ -class MetaIOID3 : public MetaIOTagLib +class META_PUBLIC MetaIOID3 : public MetaIOTagLib { public: MetaIOID3(void); virtual ~MetaIOID3(void); - virtual bool write(const Metadata* mdata); - bool writeVolatileMetadata(const Metadata* mdata); + virtual bool write(const MusicMetadata* mdata); + bool writeVolatileMetadata(const MusicMetadata* mdata); bool writeAlbumArt(const QString &filename, const AlbumArtImage *albumart); bool removeAlbumArt(const QString &filename, const AlbumArtImage *albumart); - Metadata* read(const QString &filename); + MusicMetadata* read(const QString &filename); AlbumArtList getAlbumArtList(const QString &filename); QImage *getAlbumArt(const QString &filename, ImageType type); @@ -57,7 +57,7 @@ class MetaIOID3 : public MetaIOTagLib bool OpenFile(const QString &filename, bool forWriting = false); bool SaveFile(); void CloseFile(); - + TagLib::ID3v2::Tag* GetID3v2Tag(bool create = false); TagLib::ID3v1::Tag* GetID3v1Tag(bool create = false); @@ -72,10 +72,10 @@ class MetaIOID3 : public MetaIOTagLib const AttachedPictureFrame::Type &type, const String &description = String::null); QString getExtFromMimeType(const QString &mimeType); - + TagLib::File *m_file; QString m_filename; - + typedef enum { kMPEG, kFLAC } TagType; TagType m_fileType; }; diff --git a/mythplugins/mythmusic/mythmusic/metaiomp4.cpp b/mythtv/libs/libmythmetadata/metaiomp4.cpp similarity index 96% rename from mythplugins/mythmusic/mythmusic/metaiomp4.cpp rename to mythtv/libs/libmythmetadata/metaiomp4.cpp index cf99ff296a2..0a64b99cfbb 100644 --- a/mythplugins/mythmusic/mythmusic/metaiomp4.cpp +++ b/mythtv/libs/libmythmetadata/metaiomp4.cpp @@ -1,7 +1,7 @@ -// MythMusic +// libmythmetadata #include "metaiomp4.h" -#include "metadata.h" +#include "musicmetadata.h" // Libmyth #include @@ -27,7 +27,7 @@ MetaIOMP4::~MetaIOMP4(void) /*! * \copydoc MetaIO::write() */ -bool MetaIOMP4::write(const Metadata* mdata) +bool MetaIOMP4::write(const MusicMetadata* mdata) { if (!mdata) return false; @@ -77,7 +77,7 @@ bool MetaIOMP4::write(const Metadata* mdata) /*! * \copydoc MetaIO::read() */ -Metadata* MetaIOMP4::read(const QString &filename) +MusicMetadata* MetaIOMP4::read(const QString &filename) { QString title, artist, album, genre; int year = 0, tracknum = 0, length = 0; @@ -134,7 +134,7 @@ Metadata* MetaIOMP4::read(const QString &filename) metadataSanityCheck(&artist, &album, &title, &genre); - Metadata *retdata = new Metadata(filename, + MusicMetadata *retdata = new MusicMetadata(filename, artist, compilation ? artist : "", album, diff --git a/mythplugins/mythmusic/mythmusic/metaiomp4.h b/mythtv/libs/libmythmetadata/metaiomp4.h similarity index 77% rename from mythplugins/mythmusic/mythmusic/metaiomp4.h rename to mythtv/libs/libmythmetadata/metaiomp4.h index 9022f58e022..ae9517db7e6 100644 --- a/mythplugins/mythmusic/mythmusic/metaiomp4.h +++ b/mythtv/libs/libmythmetadata/metaiomp4.h @@ -1,7 +1,7 @@ #ifndef metaioMP4_H_ #define metaioMP4_H_ -// Mythmusic +// libmythmetadata #include "metaio.h" struct AVFormatContext; @@ -13,14 +13,14 @@ struct AVFormatContext; * * \copydetails MetaIO */ -class MetaIOMP4 : public MetaIO +class META_PUBLIC MetaIOMP4 : public MetaIO { public: MetaIOMP4(void); virtual ~MetaIOMP4(void); - bool write(const Metadata* mdata); - Metadata* read(const QString &filename); + bool write(const MusicMetadata* mdata); + MusicMetadata* read(const QString &filename); private: int getTrackLength(const QString &filename); diff --git a/mythplugins/mythmusic/mythmusic/metaiooggvorbis.cpp b/mythtv/libs/libmythmetadata/metaiooggvorbis.cpp similarity index 93% rename from mythplugins/mythmusic/mythmusic/metaiooggvorbis.cpp rename to mythtv/libs/libmythmetadata/metaiooggvorbis.cpp index 88a2c9a2dd1..943737a3c5a 100644 --- a/mythplugins/mythmusic/mythmusic/metaiooggvorbis.cpp +++ b/mythtv/libs/libmythmetadata/metaiooggvorbis.cpp @@ -1,7 +1,7 @@ -// Mythmusic +// libmythmetadata #include "metaiooggvorbis.h" -#include "metadata.h" +#include "musicmetadata.h" #include "musicutils.h" // Libmyth @@ -41,7 +41,7 @@ TagLib::Ogg::Vorbis::File *MetaIOOggVorbis::OpenFile(const QString &filename) /*! * \copydoc MetaIO::write() */ -bool MetaIOOggVorbis::write(const Metadata* mdata) +bool MetaIOOggVorbis::write(const MusicMetadata* mdata) { if (!mdata) return false; @@ -92,7 +92,7 @@ bool MetaIOOggVorbis::write(const Metadata* mdata) /*! * \copydoc MetaIO::read() */ -Metadata* MetaIOOggVorbis::read(const QString &filename) +MusicMetadata* MetaIOOggVorbis::read(const QString &filename) { TagLib::Ogg::Vorbis::File *oggfile = OpenFile(filename); @@ -107,7 +107,7 @@ Metadata* MetaIOOggVorbis::read(const QString &filename) return NULL; } - Metadata *metadata = new Metadata(filename); + MusicMetadata *metadata = new MusicMetadata(filename); ReadGenericMetadata(tag, metadata); diff --git a/mythplugins/mythmusic/mythmusic/metaiooggvorbis.h b/mythtv/libs/libmythmetadata/metaiooggvorbis.h similarity index 69% rename from mythplugins/mythmusic/mythmusic/metaiooggvorbis.h rename to mythtv/libs/libmythmetadata/metaiooggvorbis.h index 9428cff9140..08be021396a 100644 --- a/mythplugins/mythmusic/mythmusic/metaiooggvorbis.h +++ b/mythtv/libs/libmythmetadata/metaiooggvorbis.h @@ -1,9 +1,9 @@ #ifndef METAIOOGGVORBIS_H_ #define METAIOOGGVORBIS_H_ -// Mythmusic +// libmythmetadata #include "metaiotaglib.h" -#include "metadata.h" +#include "musicmetadata.h" // Taglib #include @@ -18,14 +18,14 @@ using TagLib::String; * * \copydetails MetaIO */ -class MetaIOOggVorbis : public MetaIOTagLib +class META_PUBLIC MetaIOOggVorbis : public MetaIOTagLib { public: MetaIOOggVorbis(void); ~MetaIOOggVorbis(void); - bool write(const Metadata* mdata); - Metadata* read(const QString &filename); + bool write(const MusicMetadata* mdata); + MusicMetadata* read(const QString &filename); private: TagLib::Ogg::Vorbis::File *OpenFile(const QString &filename); diff --git a/mythplugins/mythmusic/mythmusic/metaiotaglib.cpp b/mythtv/libs/libmythmetadata/metaiotaglib.cpp similarity index 91% rename from mythplugins/mythmusic/mythmusic/metaiotaglib.cpp rename to mythtv/libs/libmythmetadata/metaiotaglib.cpp index bc486c099ee..fb55de33705 100644 --- a/mythplugins/mythmusic/mythmusic/metaiotaglib.cpp +++ b/mythtv/libs/libmythmetadata/metaiotaglib.cpp @@ -10,9 +10,9 @@ #include #include -// Mythmusic +// libmythmetadata #include "metaiotaglib.h" -#include "metadata.h" +#include "musicmetadata.h" #include "musicutils.h" MetaIOTagLib::MetaIOTagLib() @@ -28,28 +28,28 @@ MetaIOTagLib::~MetaIOTagLib(void) * \brief Writes metadata common to all tag formats to the tag * * \param tag A pointer to the tag -* \param metadata Pointer to the metadata +* \param metadata Pointer to the MusicMetadata */ -void MetaIOTagLib::WriteGenericMetadata(Tag *tag, const Metadata *metadata) +void MetaIOTagLib::WriteGenericMetadata(Tag *tag, const MusicMetadata *metadata) { if (!tag || !metadata) return; if (!metadata->Artist().isEmpty()) tag->setArtist(QStringToTString(metadata->Artist())); - + if (!metadata->Title().isEmpty()) tag->setTitle(QStringToTString(metadata->Title())); - + if (!metadata->Album().isEmpty()) tag->setAlbum(QStringToTString(metadata->Album())); - + if (metadata->Year() > 999 && metadata->Year() < 10000) // 4 digit year. tag->setYear(metadata->Year()); - + if (!metadata->Genre().isEmpty()) tag->setGenre(QStringToTString(metadata->Genre())); - + if (0 != metadata->Track()) tag->setTrack(metadata->Track()); } @@ -58,9 +58,9 @@ void MetaIOTagLib::WriteGenericMetadata(Tag *tag, const Metadata *metadata) * \brief Writes metadata common to all tag formats to the tag * * \param tag A pointer to the tag -* \param metadata Pointer to the metadata +* \param metadata Pointer to the MusicMetadata */ -void MetaIOTagLib::ReadGenericMetadata(Tag *tag, Metadata *metadata) +void MetaIOTagLib::ReadGenericMetadata(Tag *tag, MusicMetadata *metadata) { if (!tag || ! metadata) return; @@ -101,7 +101,7 @@ int MetaIOTagLib::getTrackLength(TagLib::File *file) if (file && file->audioProperties()) milliseconds = file->audioProperties()->length() * 1000; - + return milliseconds; } @@ -127,6 +127,6 @@ int MetaIOTagLib::getTrackLength(const QString &filename) "from '%1'. It may be corrupt.").arg(filename)); delete file; - + return milliseconds; } diff --git a/mythplugins/mythmusic/mythmusic/metaiotaglib.h b/mythtv/libs/libmythmetadata/metaiotaglib.h similarity index 53% rename from mythplugins/mythmusic/mythmusic/metaiotaglib.h rename to mythtv/libs/libmythmetadata/metaiotaglib.h index 18b5bc76410..954de906444 100644 --- a/mythplugins/mythmusic/mythmusic/metaiotaglib.h +++ b/mythtv/libs/libmythmetadata/metaiotaglib.h @@ -1,9 +1,9 @@ #ifndef METAIOTAGLIB_H_ #define METAIOTAGLIB_H_ -// MythMusic +// libmythmetadata #include "metaio.h" -#include "metadata.h" +#include "musicmetadata.h" // Taglib #include @@ -17,20 +17,20 @@ using TagLib::String; * * \brief Base for Taglib metadata classes */ -class MetaIOTagLib : public MetaIO +class META_PUBLIC MetaIOTagLib : public MetaIO { public: MetaIOTagLib(void); virtual ~MetaIOTagLib(void); - virtual bool write(const Metadata* mdata) = 0; - virtual Metadata* read(const QString &filename) = 0; - + virtual bool write(const MusicMetadata* mdata) = 0; + virtual MusicMetadata* read(const QString &filename) = 0; + protected: int getTrackLength(TagLib::File *file); int getTrackLength(const QString &filename); - void ReadGenericMetadata(TagLib::Tag *tag, Metadata *metadata); - void WriteGenericMetadata(TagLib::Tag *tag, const Metadata *metadata); + void ReadGenericMetadata(TagLib::Tag *tag, MusicMetadata *metadata); + void WriteGenericMetadata(TagLib::Tag *tag, const MusicMetadata *metadata); }; #endif diff --git a/mythplugins/mythmusic/mythmusic/metaiowavpack.cpp b/mythtv/libs/libmythmetadata/metaiowavpack.cpp similarity index 91% rename from mythplugins/mythmusic/mythmusic/metaiowavpack.cpp rename to mythtv/libs/libmythmetadata/metaiowavpack.cpp index 549fecf9e69..a4dc5e35e03 100644 --- a/mythplugins/mythmusic/mythmusic/metaiowavpack.cpp +++ b/mythtv/libs/libmythmetadata/metaiowavpack.cpp @@ -1,12 +1,13 @@ #include -#include "metaiowavpack.h" -#include "metadata.h" - #include #include #include + +// libmythmetadata +#include "metaiowavpack.h" +#include "musicmetadata.h" #include "musicutils.h" MetaIOWavPack::MetaIOWavPack(void) @@ -42,7 +43,7 @@ TagLib::WavPack::File *MetaIOWavPack::OpenFile(const QString &filename) /*! * \copydoc MetaIO::write() */ -bool MetaIOWavPack::write(const Metadata* mdata) +bool MetaIOWavPack::write(const MusicMetadata* mdata) { if (!mdata) return false; @@ -84,7 +85,7 @@ bool MetaIOWavPack::write(const Metadata* mdata) /*! * \copydoc MetaIO::read() */ -Metadata* MetaIOWavPack::read(const QString &filename) +MusicMetadata* MetaIOWavPack::read(const QString &filename) { TagLib::WavPack::File *wpfile = OpenFile(filename); @@ -99,7 +100,7 @@ Metadata* MetaIOWavPack::read(const QString &filename) return NULL; } - Metadata *metadata = new Metadata(filename); + MusicMetadata *metadata = new MusicMetadata(filename); ReadGenericMetadata(tag, metadata); diff --git a/mythplugins/mythmusic/mythmusic/metaiowavpack.h b/mythtv/libs/libmythmetadata/metaiowavpack.h similarity index 69% rename from mythplugins/mythmusic/mythmusic/metaiowavpack.h rename to mythtv/libs/libmythmetadata/metaiowavpack.h index 98c70e80662..5ecdc82c90b 100644 --- a/mythplugins/mythmusic/mythmusic/metaiowavpack.h +++ b/mythtv/libs/libmythmetadata/metaiowavpack.h @@ -1,9 +1,9 @@ #ifndef METAIOWAVPACK_H_ #define METAIOWAVPACK_H_ -// Mythmusic +// libmythmetadata #include "metaiotaglib.h" -#include "metadata.h" +#include "musicmetadata.h" // Taglib #include @@ -20,14 +20,14 @@ using TagLib::String; * * \copydetails MetaIO */ -class MetaIOWavPack : public MetaIOTagLib +class META_PUBLIC MetaIOWavPack : public MetaIOTagLib { public: MetaIOWavPack(void); virtual ~MetaIOWavPack(void); - bool write(const Metadata* mdata); - Metadata* read(const QString &filename); + bool write(const MusicMetadata* mdata); + MusicMetadata* read(const QString &filename); private: TagLib::WavPack::File *OpenFile(const QString &filename); diff --git a/mythplugins/mythmusic/mythmusic/metadata.cpp b/mythtv/libs/libmythmetadata/musicmetadata.cpp similarity index 91% rename from mythplugins/mythmusic/mythmusic/metadata.cpp rename to mythtv/libs/libmythmetadata/musicmetadata.cpp index 520997a8470..17930a903f1 100644 --- a/mythplugins/mythmusic/mythmusic/metadata.cpp +++ b/mythtv/libs/libmythmetadata/musicmetadata.cpp @@ -16,8 +16,8 @@ #include #include -// mythmusic -#include "metadata.h" +// libmythmetadata +#include "musicmetadata.h" #include "metaio.h" #include "metaioid3.h" #include "metaiomp4.h" @@ -25,23 +25,18 @@ #include "metaiooggvorbis.h" #include "metaioflacvorbis.h" #include "metaiowavpack.h" -#include "playlist.h" -#include "playlistcontainer.h" #include "musicutils.h" -// this is the global MusicData object shared thoughout MythMusic -MusicData *gMusicData = NULL; - static QString thePrefix = "the "; -bool operator==(const Metadata& a, const Metadata& b) +bool operator==(const MusicMetadata& a, const MusicMetadata& b) { if (a.Filename() == b.Filename()) return true; return false; } -bool operator!=(const Metadata& a, const Metadata& b) +bool operator!=(const MusicMetadata& a, const MusicMetadata& b) { if (a.Filename() != b.Filename()) return true; @@ -49,7 +44,7 @@ bool operator!=(const Metadata& a, const Metadata& b) } // this ctor is for radio streams -Metadata::Metadata(int lid, QString lstation, QString lchannel, QString lurl, +MusicMetadata::MusicMetadata(int lid, QString lstation, QString lchannel, QString lurl, QString llogourl, QString lgenre, QString lmetaformat, QString lformat) : m_artist(""), m_compilation_artist(""), @@ -87,7 +82,7 @@ Metadata::Metadata(int lid, QString lstation, QString lchannel, QString lurl, setRepo(RT_Radio); } -Metadata::~Metadata() +MusicMetadata::~MusicMetadata() { if (m_albumArt) { @@ -97,7 +92,7 @@ Metadata::~Metadata() } -Metadata& Metadata::operator=(const Metadata &rhs) +MusicMetadata& MusicMetadata::operator=(const MusicMetadata &rhs) { m_artist = rhs.m_artist; m_compilation_artist = rhs.m_compilation_artist; @@ -136,7 +131,7 @@ Metadata& Metadata::operator=(const Metadata &rhs) return *this; } -void Metadata::persist() +void MusicMetadata::persist() { if (m_id < 1) return; @@ -161,13 +156,11 @@ void Metadata::persist() if (!query.exec()) MythDB::DBError("music persist", query); - gPlayer->sendTrackStatsChangedEvent(ID()); - m_changed = false; } -void Metadata::UpdateModTime() const +void MusicMetadata::UpdateModTime() const { if (m_id < 1) return; @@ -181,11 +174,11 @@ void Metadata::UpdateModTime() const query.bindValue(":ID", m_id); if (!query.exec()) - MythDB::DBError("Metadata::UpdateModTime", + MythDB::DBError("MusicMetadata::UpdateModTime", query); } -int Metadata::compare(const Metadata *other) const +int MusicMetadata::compare(const MusicMetadata *other) const { if (m_format == "cast") { @@ -210,16 +203,16 @@ int Metadata::compare(const Metadata *other) const } } -bool Metadata::isInDatabase() +bool MusicMetadata::isInDatabase() { bool retval = false; QString sqldir = m_filename.section('/', 0, -2); // Filename is the absolute path, we want the relative path - if (sqldir.startsWith(gMusicData->musicDir)) - sqldir.remove(0, gMusicData->musicDir.length()); - + if (sqldir.startsWith(getMusicDirectory())) + sqldir.remove(0, getMusicDirectory().length()); + QString sqlfilename = m_filename.section('/', -1); MSqlQuery query(MSqlQuery::InitCon()); @@ -269,7 +262,7 @@ bool Metadata::isInDatabase() return retval; } -void Metadata::dumpToDatabase() +void MusicMetadata::dumpToDatabase() { QString sqldir = m_filename.section('/', 0, -2); QString sqlfilename = m_filename.section('/', -1); @@ -500,7 +493,7 @@ void Metadata::dumpToDatabase() query.bindValue(":SIZE", (quint64)m_fileSize); if (!query.exec()) - MythDB::DBError("Metadata::dumpToDatabase - updating music_songs", + MythDB::DBError("MusicMetadata::dumpToDatabase - updating music_songs", query); if (m_id < 1 && query.isActive() && 1 == query.numRowsAffected()) @@ -526,16 +519,16 @@ void Metadata::dumpToDatabase() // Default values for formats // NB These will eventually be customizable.... -QString Metadata::m_formatnormalfileartist = "ARTIST"; -QString Metadata::m_formatnormalfiletrack = "TITLE"; -QString Metadata::m_formatnormalcdartist = "ARTIST"; -QString Metadata::m_formatnormalcdtrack = "TITLE"; -QString Metadata::m_formatcompilationfileartist = "COMPARTIST"; -QString Metadata::m_formatcompilationfiletrack = "TITLE (ARTIST)"; -QString Metadata::m_formatcompilationcdartist = "COMPARTIST"; -QString Metadata::m_formatcompilationcdtrack = "TITLE (ARTIST)"; +QString MusicMetadata::m_formatnormalfileartist = "ARTIST"; +QString MusicMetadata::m_formatnormalfiletrack = "TITLE"; +QString MusicMetadata::m_formatnormalcdartist = "ARTIST"; +QString MusicMetadata::m_formatnormalcdtrack = "TITLE"; +QString MusicMetadata::m_formatcompilationfileartist = "COMPARTIST"; +QString MusicMetadata::m_formatcompilationfiletrack = "TITLE (ARTIST)"; +QString MusicMetadata::m_formatcompilationcdartist = "COMPARTIST"; +QString MusicMetadata::m_formatcompilationcdtrack = "TITLE (ARTIST)"; -void Metadata::setArtistAndTrackFormats() +void MusicMetadata::setArtistAndTrackFormats() { QString tmp; @@ -573,7 +566,7 @@ void Metadata::setArtistAndTrackFormats() } -bool Metadata::determineIfCompilation(bool cd) +bool MusicMetadata::determineIfCompilation(bool cd) { m_compilation = (!m_compilation_artist.isEmpty() && m_artist != m_compilation_artist); @@ -582,7 +575,7 @@ bool Metadata::determineIfCompilation(bool cd) } -inline QString Metadata::formatReplaceSymbols(const QString &format) +inline QString MusicMetadata::formatReplaceSymbols(const QString &format) { QString rv = format; rv.replace("COMPARTIST", m_compilation_artist); @@ -592,7 +585,7 @@ inline QString Metadata::formatReplaceSymbols(const QString &format) return rv; } -void Metadata::checkEmptyFields() +void MusicMetadata::checkEmptyFields() { if (m_artist.isEmpty()) m_artist = QObject::tr("Unknown Artist"); @@ -608,7 +601,7 @@ void Metadata::checkEmptyFields() } -inline void Metadata::setCompilationFormatting(bool cd) +inline void MusicMetadata::setCompilationFormatting(bool cd) { QString format_artist, format_title; @@ -647,7 +640,7 @@ inline void Metadata::setCompilationFormatting(bool cd) } -QString Metadata::FormatArtist() +QString MusicMetadata::FormatArtist() { if (m_formattedartist.isEmpty()) setCompilationFormatting(); @@ -656,7 +649,7 @@ QString Metadata::FormatArtist() } -QString Metadata::FormatTitle() +QString MusicMetadata::FormatTitle() { if (m_formattedtitle.isEmpty()) setCompilationFormatting(); @@ -664,7 +657,7 @@ QString Metadata::FormatTitle() return m_formattedtitle; } -QString Metadata::Filename(bool find) const +QString MusicMetadata::Filename(bool find) const { // if not asked to find the file just return the raw filename from the DB if (find == false) @@ -683,8 +676,8 @@ QString Metadata::Filename(bool find) const return m_filename; // next try appending the start directory - if (QFile::exists(gMusicData->musicDir + m_filename)) - return gMusicData->musicDir + m_filename; + if (QFile::exists(getMusicDirectory() + m_filename)) + return getMusicDirectory() + m_filename; // maybe it's in our 'Music' storage group //FIXME: this is just looking on the master BE @@ -695,12 +688,12 @@ QString Metadata::Filename(bool find) const return filename; // not found - LOG(VB_GENERAL, LOG_ERR, QString("Metadata: Asked to get the filename for a track but no file found: %1") + LOG(VB_GENERAL, LOG_ERR, QString("MusicMetadata: Asked to get the filename for a track but no file found: %1") .arg(m_filename)); return QString(); } -void Metadata::setField(const QString &field, const QString &data) +void MusicMetadata::setField(const QString &field, const QString &data) { if (field == "artist") m_artist = data; @@ -732,7 +725,7 @@ void Metadata::setField(const QString &field, const QString &data) } } -void Metadata::getField(const QString &field, QString *data) +void MusicMetadata::getField(const QString &field, QString *data) { if (field == "artist") *data = FormatArtist(); @@ -750,14 +743,14 @@ void Metadata::getField(const QString &field, QString *data) } } -void Metadata::toMap(MetadataMap &metadataMap, const QString &prefix) +void MusicMetadata::toMap(MetadataMap &metadataMap, const QString &prefix) { using namespace MythDate; metadataMap[prefix + "artist"] = m_artist; metadataMap[prefix + "formatartist"] = FormatArtist(); metadataMap[prefix + "compilationartist"] = m_compilation_artist; - if (m_album.isEmpty() && gPlayer->getPlayMode() == MusicPlayer::PLAYMODE_RADIO) + if (m_album.isEmpty() && ID_TO_REPO(m_id) == RT_Radio) metadataMap[prefix + "album"] = QString("%1 - %2").arg(m_station).arg(m_channel); else metadataMap[prefix + "album"] = m_album; @@ -805,7 +798,7 @@ void Metadata::toMap(MetadataMap &metadataMap, const QString &prefix) metadataMap[prefix + "metadataformat"] = m_metaFormat; } -void Metadata::decRating() +void MusicMetadata::decRating() { if (m_rating > 0) { @@ -814,7 +807,7 @@ void Metadata::decRating() m_changed = true; } -void Metadata::incRating() +void MusicMetadata::incRating() { if (m_rating < 10) { @@ -823,19 +816,19 @@ void Metadata::incRating() m_changed = true; } -void Metadata::setLastPlay() +void MusicMetadata::setLastPlay() { m_templastplay = MythDate::current(); m_changed = true; } -void Metadata::incPlayCount() +void MusicMetadata::incPlayCount() { m_tempplaycount = m_playcount + 1; m_changed = true; } -void Metadata::setEmbeddedAlbumArt(AlbumArtList &albumart) +void MusicMetadata::setEmbeddedAlbumArt(AlbumArtList &albumart) { // add the images found in the tag to the ones we got from the DB @@ -850,7 +843,7 @@ void Metadata::setEmbeddedAlbumArt(AlbumArtList &albumart) m_changed = true; } -QStringList Metadata::fillFieldList(QString field) +QStringList MusicMetadata::fillFieldList(QString field) { QStringList searchList; searchList.clear(); @@ -892,7 +885,7 @@ QStringList Metadata::fillFieldList(QString field) return searchList; } -QString Metadata::getAlbumArtFile(void) +QString MusicMetadata::getAlbumArtFile(void) { if (!m_albumArt) m_albumArt = new AlbumArtImages(this); @@ -994,7 +987,7 @@ QString Metadata::getAlbumArtFile(void) return QString(""); } -QString Metadata::getAlbumArtFile(ImageType type) +QString MusicMetadata::getAlbumArtFile(ImageType type) { if (!m_albumArt) m_albumArt = new AlbumArtImages(this); @@ -1006,7 +999,7 @@ QString Metadata::getAlbumArtFile(ImageType type) return QString(""); } -AlbumArtImages *Metadata::getAlbumArtImages(void) +AlbumArtImages *MusicMetadata::getAlbumArtImages(void) { if (!m_albumArt) m_albumArt = new AlbumArtImages(this); @@ -1014,7 +1007,7 @@ AlbumArtImages *Metadata::getAlbumArtImages(void) return m_albumArt; } -void Metadata::reloadAlbumArtImages(void) +void MusicMetadata::reloadAlbumArtImages(void) { delete m_albumArt; m_albumArt = NULL; //new AlbumArtImages(this); @@ -1023,7 +1016,7 @@ void Metadata::reloadAlbumArtImages(void) // create a MetaIO for the file to read/write any tags etc // NOTE the caller is responsible for deleting it -MetaIO* Metadata::getTagger(void) +MetaIO* MusicMetadata::getTagger(void) { return MetaIO::createTagger(Filename(true)); } @@ -1163,7 +1156,7 @@ void AllMusic::resync() { filename = query.value(12).toString(); - Metadata *mdata = new Metadata( + MusicMetadata *mdata = new MusicMetadata( filename, query.value(2).toString(), // artist query.value(3).toString(), // compilation artist @@ -1222,7 +1215,7 @@ void AllMusic::resync() m_done_loading = true; } -Metadata* AllMusic::getMetadata(int an_id) +MusicMetadata* AllMusic::getMetadata(int an_id) { if (music_map.contains(an_id)) return music_map[an_id]; @@ -1235,11 +1228,11 @@ bool AllMusic::isValidID(int an_id) return music_map.contains(an_id); } -bool AllMusic::updateMetadata(int an_id, Metadata *the_track) +bool AllMusic::updateMetadata(int an_id, MusicMetadata *the_track) { if (an_id > 0) { - Metadata *mdata = getMetadata(an_id); + MusicMetadata *mdata = getMetadata(an_id); if (mdata) { *mdata = *the_track; @@ -1249,7 +1242,7 @@ bool AllMusic::updateMetadata(int an_id, Metadata *the_track) return false; } -/// \brief Check each Metadata entry and save those that have changed (ratings, etc.) +/// \brief Check each MusicMetadata entry and save those that have changed (ratings, etc.) void AllMusic::save(void) { MetadataPtrList::iterator it = m_all_music.begin(); @@ -1272,16 +1265,16 @@ void AllMusic::clearCDData(void) m_cdTitle = QObject::tr("CD -- none"); } -void AllMusic::addCDTrack(const Metadata &the_track) +void AllMusic::addCDTrack(const MusicMetadata &the_track) { - Metadata *mdata = new Metadata(the_track); + MusicMetadata *mdata = new MusicMetadata(the_track); mdata->setID(m_cdData.count() + 1); mdata->setRepo(RT_CD); m_cdData.append(mdata); music_map[mdata->ID()] = mdata; } -bool AllMusic::checkCDTrack(Metadata *the_track) +bool AllMusic::checkCDTrack(MusicMetadata *the_track) { if (m_cdData.count() < 1) return false; @@ -1292,7 +1285,7 @@ bool AllMusic::checkCDTrack(Metadata *the_track) return false; } -Metadata* AllMusic::getCDMetadata(int the_track) +MusicMetadata* AllMusic::getCDMetadata(int the_track) { MetadataPtrList::iterator anit; for (anit = m_cdData.begin(); anit != m_cdData.end(); ++anit) @@ -1322,7 +1315,7 @@ AllStream::~AllStream(void) } } -bool AllStream::isValidID(Metadata::IdType an_id) +bool AllStream::isValidID(MusicMetadata::IdType an_id) { for (int x = 0; x < m_streamList.count(); x++) { @@ -1333,7 +1326,7 @@ bool AllStream::isValidID(Metadata::IdType an_id) return false; } -Metadata *AllStream::getMetadata(Metadata::IdType an_id) +MusicMetadata *AllStream::getMetadata(MusicMetadata::IdType an_id) { for (int x = 0; x < m_streamList.count(); x++) { @@ -1364,7 +1357,7 @@ void AllStream::loadStreams(void) { while (query.next()) { - Metadata *mdata = new Metadata( + MusicMetadata *mdata = new MusicMetadata( query.value(0).toInt(), // intid query.value(1).toString(), // station query.value(2).toString(), // channel @@ -1385,7 +1378,7 @@ void AllStream::loadStreams(void) } } -void AllStream::addStream(Metadata* mdata) +void AllStream::addStream(MusicMetadata* mdata) { // add the stream to the db MSqlQuery query(MSqlQuery::InitCon()); @@ -1409,10 +1402,10 @@ void AllStream::addStream(Metadata* mdata) mdata->setRepo(RT_Radio); loadStreams(); - createPlaylist(); +// createPlaylist(); } -void AllStream::removeStream(Metadata* mdata) +void AllStream::removeStream(MusicMetadata* mdata) { // remove the stream from the db int id = ID_TO_ID(mdata->ID()); @@ -1427,10 +1420,10 @@ void AllStream::removeStream(Metadata* mdata) } loadStreams(); - createPlaylist(); +// createPlaylist(); } -void AllStream::updateStream(Metadata* mdata) +void AllStream::updateStream(MusicMetadata* mdata) { // update the stream in the db int id = ID_TO_ID(mdata->ID()); @@ -1454,9 +1447,10 @@ void AllStream::updateStream(Metadata* mdata) } loadStreams(); - createPlaylist(); +// createPlaylist(); } +#if 0 void AllStream::createPlaylist(void) { gMusicData->all_playlists->getStreamPlaylist()->disableSaves(); @@ -1465,16 +1459,17 @@ void AllStream::createPlaylist(void) for (int x = 0; x < m_streamList.count(); x++) { - Metadata *mdata = m_streamList.at(x); + MusicMetadata *mdata = m_streamList.at(x); gMusicData->all_playlists->getStreamPlaylist()->addTrack(mdata->ID(), false); } gMusicData->all_playlists->getStreamPlaylist()->enableSaves(); } +#endif /**************************************************************************/ -AlbumArtImages::AlbumArtImages(Metadata *metadata) +AlbumArtImages::AlbumArtImages(MusicMetadata *metadata) : m_parent(metadata) { findImages(); @@ -1570,7 +1565,7 @@ void AlbumArtImages::findImages(void) query.value(1).toString(), "Music"); else - image->filename = gMusicData->musicDir + query.value(1).toString(); + image->filename = getMusicDirectory() + query.value(1).toString(); } image->imageType = (ImageType) query.value(3).toInt(); @@ -1748,7 +1743,7 @@ void AlbumArtImages::addImage(const AlbumArtImage &newImage) /// saves or updates the image details in the DB void AlbumArtImages::dumpToDatabase(void) { - Metadata::IdType trackID = ID_TO_ID(m_parent->ID()); + MusicMetadata::IdType trackID = ID_TO_ID(m_parent->ID()); int directoryID = m_parent->getDirectoryId(); // sanity check we have a valid songid and directoryid @@ -1813,64 +1808,3 @@ void AlbumArtImages::dumpToDatabase(void) "add/update music_albumart", query); } } - - -/**************************************************************************/ - -MusicData::MusicData(void) -{ - all_playlists = NULL; - all_music = NULL; - all_streams = NULL; - initialized = false; -} - -MusicData::~MusicData(void) -{ - if (all_playlists) - { - delete all_playlists; - all_playlists = NULL; - } - - if (all_music) - { - delete all_music; - all_music = NULL; - } - - if (all_streams) - { - delete all_streams; - all_streams = NULL; - } -} - -/// reload music after a scan, rip or import -void MusicData::reloadMusic(void) -{ - if (!all_music || !all_playlists) - return; - - MythScreenStack *popupStack = GetMythMainWindow()->GetStack("popup stack"); - QString message = QObject::tr("Rebuilding music tree"); - - MythUIBusyDialog *busy = new MythUIBusyDialog(message, popupStack, - "musicscanbusydialog"); - - if (busy->Create()) - popupStack->AddScreen(busy, false); - else - busy = NULL; - - all_music->startLoading(); - while (!all_music->doneLoading()) - { - qApp->processEvents(); - usleep(50000); - } - - if (busy) - busy->Close(); -} - diff --git a/mythplugins/mythmusic/mythmusic/metadata.h b/mythtv/libs/libmythmetadata/musicmetadata.h similarity index 85% rename from mythplugins/mythmusic/mythmusic/metadata.h rename to mythtv/libs/libmythmetadata/musicmetadata.h index 6bf3eedad62..3c2035bd6f9 100644 --- a/mythplugins/mythmusic/mythmusic/metadata.h +++ b/mythtv/libs/libmythmetadata/musicmetadata.h @@ -1,5 +1,5 @@ -#ifndef METADATA_H_ -#define METADATA_H_ +#ifndef MUSICMETADATA_H_ +#define MUSICMETADATA_H_ // C/C++ #include @@ -15,17 +15,12 @@ using namespace std; #include // mythtv -#include "mythexp.h" +#include "mythmetaexp.h" #include - - -// mythmusic - - class AllMusic; class AlbumArtImages; -class PlaylistContainer; +//class PlaylistContainer; class MetaIO; enum ImageType @@ -39,7 +34,7 @@ enum ImageType IT_LAST }; -class AlbumArtImage +class META_PUBLIC AlbumArtImage { public: AlbumArtImage(void) : @@ -74,13 +69,13 @@ enum RepoType #define ID_TO_ID(x) x & METADATA_ID_MASK; #define ID_TO_REPO(x) x >> METADATA_REPO_SHIFT -class Metadata +class META_PUBLIC MusicMetadata { public: typedef uint32_t IdType; - Metadata(QString lfilename = "", QString lartist = "", QString lcompilation_artist = "", + MusicMetadata(QString lfilename = "", QString lartist = "", QString lcompilation_artist = "", QString lalbum = "", QString ltitle = "", QString lgenre = "", int lyear = 0, int ltracknum = 0, int llength = 0, int lid = 0, int lrating = 0, int lplaycount = 0, QDateTime llastplay = QDateTime(), @@ -123,18 +118,18 @@ class Metadata checkEmptyFields(); } - Metadata(int lid, QString lstation, QString lchannel, QString lurl, QString llogourl, + MusicMetadata(int lid, QString lstation, QString lchannel, QString lurl, QString llogourl, QString lgenre, QString lmetaformat, QString lformat); - ~Metadata(); + ~MusicMetadata(); - Metadata(const Metadata &other) + MusicMetadata(const MusicMetadata &other) { *this = other; m_changed = false; } - Metadata& operator=(const Metadata &other); + MusicMetadata& operator=(const MusicMetadata &other); QString Artist() const { return m_artist; } void setArtist(const QString &lartist) @@ -253,7 +248,7 @@ class Metadata void persist(void); void UpdateModTime(void) const; bool hasChanged() const { return m_changed; } - int compare(const Metadata *other) const; + int compare(const MusicMetadata *other) const; // static functions static void setArtistAndTrackFormats(); @@ -303,7 +298,7 @@ class Metadata IdType m_id; QString m_filename; - uint64_t m_fileSize; + uint64_t m_fileSize; bool m_changed; // radio stream stuff @@ -324,17 +319,17 @@ class Metadata static QString m_formatcompilationcdtrack; }; -bool operator==(const Metadata& a, const Metadata& b); -bool operator!=(const Metadata& a, const Metadata& b); +bool operator==(const MusicMetadata& a, const MusicMetadata& b); +bool operator!=(const MusicMetadata& a, const MusicMetadata& b); -Q_DECLARE_METATYPE(Metadata *) +Q_DECLARE_METATYPE(MusicMetadata *) -typedef QList MetadataPtrList; +typedef QList MetadataPtrList; Q_DECLARE_METATYPE(MetadataPtrList *) //--------------------------------------------------------------------------- -class MetadataLoadingThread : public MThread +class META_PUBLIC MetadataLoadingThread : public MThread { public: @@ -349,15 +344,15 @@ class MetadataLoadingThread : public MThread //--------------------------------------------------------------------------- -class AllMusic +class META_PUBLIC AllMusic { public: AllMusic(void); ~AllMusic(); - Metadata* getMetadata(int an_id); - bool updateMetadata(int an_id, Metadata *the_track); + MusicMetadata* getMetadata(int an_id); + bool updateMetadata(int an_id, MusicMetadata *the_track); int count() const { return m_numPcs; } int countLoaded() const { return m_numLoaded; } void save(); @@ -366,9 +361,9 @@ class AllMusic // cd stuff void clearCDData(void); - void addCDTrack(const Metadata &the_track); - bool checkCDTrack(Metadata *the_track); - Metadata* getCDMetadata(int m_the_track); + void addCDTrack(const MusicMetadata &the_track); + bool checkCDTrack(MusicMetadata *the_track); + MusicMetadata* getCDMetadata(int m_the_track); QString getCDTitle(void) const { return m_cdTitle; } void setCDTitle(const QString &a_title) { m_cdTitle = a_title; } int getCDTrackCount(void) const { return m_cdData.count(); } @@ -386,7 +381,7 @@ class AllMusic int m_numPcs; int m_numLoaded; - typedef QMap MusicMap; + typedef QMap MusicMap; MusicMap music_map; // cd stuff @@ -403,9 +398,9 @@ class AllMusic double m_lastplayMax; }; -typedef QList StreamList; +typedef QList StreamList; -class AllStream +class META_PUBLIC AllStream { public: @@ -414,17 +409,15 @@ class AllStream void loadStreams(void); - bool isValidID(Metadata::IdType an_id); + bool isValidID(MusicMetadata::IdType an_id); - Metadata* getMetadata(Metadata::IdType an_id); + MusicMetadata* getMetadata(MusicMetadata::IdType an_id); StreamList *getStreams(void) { return &m_streamList; } - void addStream(Metadata *mdata); - void removeStream(Metadata *mdata); - void updateStream(Metadata *mdata); - - void createPlaylist(void); + void addStream(MusicMetadata *mdata); + void removeStream(MusicMetadata *mdata); + void updateStream(MusicMetadata *mdata); private: StreamList m_streamList; @@ -432,36 +425,11 @@ class AllStream //---------------------------------------------------------------------------- -class MusicData : public QObject -{ - Q_OBJECT - - public: - - MusicData(); - ~MusicData(); - - public slots: - void reloadMusic(void); - - public: - QString musicDir; - PlaylistContainer *all_playlists; - AllMusic *all_music; - AllStream *all_streams; - bool initialized; -}; - -// This global variable contains the MusicData instance for the application -extern MPUBLIC MusicData *gMusicData; - -//---------------------------------------------------------------------------- - -class AlbumArtImages +class META_PUBLIC AlbumArtImages { public: - AlbumArtImages(Metadata *metadata); + AlbumArtImages(MusicMetadata *metadata); ~AlbumArtImages(); void addImage(const AlbumArtImage &newImage); @@ -480,8 +448,8 @@ class AlbumArtImages private: void findImages(void); - Metadata *m_parent; - AlbumArtList m_imageList; + MusicMetadata *m_parent; + AlbumArtList m_imageList; }; Q_DECLARE_METATYPE(AlbumArtImage*); diff --git a/mythplugins/mythmusic/mythmusic/musicutils.cpp b/mythtv/libs/libmythmetadata/musicutils.cpp similarity index 90% rename from mythplugins/mythmusic/mythmusic/musicutils.cpp rename to mythtv/libs/libmythmetadata/musicutils.cpp index 836f7604c43..33404822364 100644 --- a/mythplugins/mythmusic/mythmusic/musicutils.cpp +++ b/mythtv/libs/libmythmetadata/musicutils.cpp @@ -17,10 +17,30 @@ extern "C" { #include } -// mythmusic -#include "metadata.h" +// libmythmetadata +#include "musicmetadata.h" #include "musicutils.h" +static QString musicDirectory; + +QString getMusicDirectory(void) +{ + if (musicDirectory.isEmpty()) + { + musicDirectory = gCoreContext->GetSetting("MusicLocation"); + musicDirectory = QDir::cleanPath(musicDirectory); + if (!musicDirectory.isEmpty() && !musicDirectory.endsWith("/")) + musicDirectory += "/"; + } + + return musicDirectory; +} + +void setMusicDirectory(const QString &musicDir) +{ + musicDirectory = musicDir; +} + static QRegExp badChars = QRegExp("(/|\\\\|:|\'|\"|\\?|\\|)"); QString fixFilename(const QString &filename) @@ -162,9 +182,9 @@ inline QString fixFileToken_sl(QString token) return token; } -QString filenameFromMetadata(Metadata *track, bool createDir) +QString filenameFromMetadata(MusicMetadata *track, bool createDir) { - QDir directoryQD(gMusicData->musicDir); + QDir directoryQD(getMusicDirectory()); QString filename; QString fntempl = gCoreContext->GetSetting("FilenameTemplate"); bool no_ws = gCoreContext->GetNumSetting("NoWhitespace", 0); @@ -225,9 +245,9 @@ QString filenameFromMetadata(Metadata *track, bool createDir) if (createDir) { QFileInfo fi(filename); - if (!directoryQD.mkpath(gMusicData->musicDir + fi.path())) + if (!directoryQD.mkpath(getMusicDirectory() + fi.path())) LOG(VB_GENERAL, LOG_ERR, - QString("Ripper: Failed to create directory path: '%1'").arg(gMusicData->musicDir + filename)); + QString("filenameFromMetadata: Failed to create directory path: '%1'").arg(getMusicDirectory() + filename)); } return filename; diff --git a/mythtv/libs/libmythmetadata/musicutils.h b/mythtv/libs/libmythmetadata/musicutils.h new file mode 100644 index 00000000000..56fecdc0bd2 --- /dev/null +++ b/mythtv/libs/libmythmetadata/musicutils.h @@ -0,0 +1,34 @@ +// qt +#include + +// mythtv +#include "mythmetaexp.h" + +class MusicMetadata; + +// these are needed for QT4 compatibility +#undef QStringToTString +#define QStringToTString(s) TagLib::String(s.toUtf8().data(), TagLib::String::UTF8) +#undef TStringToQString +#define TStringToQString(s) QString::fromUtf8(s.toCString(true)) + +/// get music directory for this host +META_PUBLIC QString getMusicDirectory(void); + +// get music directory for this host +META_PUBLIC void setMusicDirectory(const QString &musicDir); + +/// remove any bad filename characters +META_PUBLIC QString fixFilename(const QString &filename); + +/// find an image for a artist or genre +META_PUBLIC QString findIcon(const QString &type, const QString &name); + +/// calculate a tracks length by parsing the frames +META_PUBLIC uint calcTrackLength(const QString &musicFile); + +/// create a filename using the template in the settings and a MusicMetadata object +META_PUBLIC QString filenameFromMetadata(MusicMetadata *track, bool createDir = true); + +/// try to find a track in the db using the given artist, album and title +META_PUBLIC bool isNewTune(const QString &artist, const QString &album, const QString &title);