diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2009-09-17 19:30:41 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2009-09-17 19:30:41 +0000 |
| commit | 7665da44a26a6e5d53435c1635b67173985d197a (patch) | |
| tree | fdff73f6fdecf26cea1c41f37eaeaec493d82197 | |
| parent | f0efac56e92cd23e07d58317c09f08591befd3bc (diff) | |
| download | qmmp-7665da44a26a6e5d53435c1635b67173985d197a.tar.gz qmmp-7665da44a26a6e5d53435c1635b67173985d197a.tar.bz2 qmmp-7665da44a26a6e5d53435c1635b67173985d197a.zip | |
fixed notifications
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@1229 90c681e8-e032-0410-971d-27865f9a5e38
| -rw-r--r-- | src/qmmp/decoder.h | 1 | ||||
| -rw-r--r-- | src/qmmp/downloader.cpp | 1 | ||||
| -rw-r--r-- | src/qmmp/fileinfo.cpp | 2 | ||||
| -rw-r--r-- | src/qmmp/inputsource.cpp | 20 | ||||
| -rw-r--r-- | src/qmmp/inputsource.h | 5 | ||||
| -rw-r--r-- | src/qmmp/qmmpaudioengine.cpp | 10 | ||||
| -rw-r--r-- | src/qmmp/soundcore.cpp | 3 | ||||
| -rw-r--r-- | src/qmmp/statehandler.cpp | 28 | ||||
| -rw-r--r-- | src/qmmp/statehandler.h | 5 | ||||
| -rw-r--r-- | src/qmmpui/playlistitem.cpp | 2 | ||||
| -rw-r--r-- | src/ui/mainwindow.cpp | 3 |
11 files changed, 33 insertions, 47 deletions
diff --git a/src/qmmp/decoder.h b/src/qmmp/decoder.h index 57cfa7f26..91d7507a0 100644 --- a/src/qmmp/decoder.h +++ b/src/qmmp/decoder.h @@ -63,7 +63,6 @@ public: const AudioParameters audioParameters(); QIODevice *input(); - /*! * Returns \b true if \b file is supported by input plugins, otherwise returns \b false */ diff --git a/src/qmmp/downloader.cpp b/src/qmmp/downloader.cpp index 183a7fd8d..5b076a148 100644 --- a/src/qmmp/downloader.cpp +++ b/src/qmmp/downloader.cpp @@ -352,6 +352,7 @@ void Downloader::parseICYMetaData(char *data) { QMap<Qmmp::MetaData, QString> metaData; metaData.insert(Qmmp::TITLE, m_title); + metaData.insert(Qmmp::URL, m_url); StateHandler::instance()->dispatch(metaData); } break; diff --git a/src/qmmp/fileinfo.cpp b/src/qmmp/fileinfo.cpp index 936fa1464..cb993ecab 100644 --- a/src/qmmp/fileinfo.cpp +++ b/src/qmmp/fileinfo.cpp @@ -23,6 +23,7 @@ FileInfo::FileInfo(const QString &path) { m_path = path; m_length = 0; + m_metaData.insert(Qmmp::URL, path); } FileInfo::FileInfo(const FileInfo &other) @@ -100,4 +101,5 @@ void FileInfo::setMetaData(Qmmp::MetaData key, int value) void FileInfo::setPath(const QString &path) { m_path = path; + m_metaData.insert(Qmmp::URL, path); } diff --git a/src/qmmp/inputsource.cpp b/src/qmmp/inputsource.cpp index f69912b42..51eceba4f 100644 --- a/src/qmmp/inputsource.cpp +++ b/src/qmmp/inputsource.cpp @@ -27,29 +27,21 @@ InputSource::InputSource(const QString &source, QObject *parent) : QObject(paren m_device = 0; m_isValid = FALSE; m_url = source; - QUrl url; if (source.contains("://")) //url - url = source; - else if (QFile::exists(source)) { - url = QUrl::fromLocalFile(source); + ; } - else + else if (!QFile::exists(source)) { qDebug("InputSource: file doesn't exist"); return; } - m_url = url; - if (url.scheme() == "file") + else { m_device = new QFile(source, this); - /*if (!m_device->open(QIODevice::ReadOnly)) - { - qDebug("InputSource: cannot open input"); - return FALSE; - }*/ + return; } - if (url.scheme() == "http") + if (m_url.section("://",0,0) == "http") { m_device = new StreamReader(source, this); //connect(m_input, SIGNAL(bufferingProgress(int)), SIGNAL(bufferingProgress(int))); @@ -60,7 +52,7 @@ InputSource::InputSource(const QString &source, QObject *parent) : QObject(paren m_isValid = FALSE; } -const QUrl InputSource::url() +const QString InputSource::url() { return m_url; } diff --git a/src/qmmp/inputsource.h b/src/qmmp/inputsource.h index d68ac91b7..cf1f03a62 100644 --- a/src/qmmp/inputsource.h +++ b/src/qmmp/inputsource.h @@ -23,7 +23,6 @@ #include <QObject> #include <QString> -#include <QUrl> #include <QIODevice> class InputSource : public QObject @@ -32,13 +31,13 @@ Q_OBJECT public: InputSource(const QString &source, QObject *parent = 0); QIODevice *ioDevice(); - const QUrl url(); + const QString url(); signals: void readyRead(); private: - QUrl m_url; + QString m_url; QIODevice *m_device; bool m_isValid; }; diff --git a/src/qmmp/qmmpaudioengine.cpp b/src/qmmp/qmmpaudioengine.cpp index fef8fc2e2..9aeb31ab3 100644 --- a/src/qmmp/qmmpaudioengine.cpp +++ b/src/qmmp/qmmpaudioengine.cpp @@ -78,8 +78,8 @@ bool QmmpAudioEngine::enqueue(InputSource *source) { DecoderFactory *factory = Decoder::findByURL(source->url()); - if(!factory && source->url().scheme() == "file") - factory = Decoder::findByPath(source->url().toLocalFile()); + if(!factory && !source->url().contains("://")) + factory = Decoder::findByPath(source->url()); if(!factory && source->ioDevice()) factory = Decoder::findByContent(source->ioDevice()); if(!factory) @@ -89,11 +89,7 @@ bool QmmpAudioEngine::enqueue(InputSource *source) } if(factory->properties().noInput && source->ioDevice()) source->ioDevice()->close(); - Decoder *decoder = 0; - if(source->url().scheme() == "file") - decoder = factory->create(source->url().toLocalFile(), source->ioDevice()); - else - decoder = factory->create(source->url().toString(), source->ioDevice()); + Decoder *decoder = factory->create(source->url(), source->ioDevice()); if(!decoder->initialize()) { qWarning("QmmpAudioEngine: invalid file format"); diff --git a/src/qmmp/soundcore.cpp b/src/qmmp/soundcore.cpp index c8881a9e1..5f4ea97e1 100644 --- a/src/qmmp/soundcore.cpp +++ b/src/qmmp/soundcore.cpp @@ -76,8 +76,6 @@ bool SoundCore::play(const QString &source, bool queue) if(!queue) stop(); - m_source = source; - m_inputSource = new InputSource(source, this); if(m_inputSource->ioDevice()) @@ -246,6 +244,7 @@ bool SoundCore::decode() if(m_engine->enqueue(m_inputSource)) { + m_source = m_inputSource->url(); m_inputSource->setParent(m_engine); m_engine->start(); } diff --git a/src/qmmp/statehandler.cpp b/src/qmmp/statehandler.cpp index 8ccd46e82..d5fcc20f6 100644 --- a/src/qmmp/statehandler.cpp +++ b/src/qmmp/statehandler.cpp @@ -39,7 +39,6 @@ StateHandler::StateHandler(QObject *parent) m_frequency = 0; m_precision = 0; m_channels = 0; - m_sendMeta = FALSE; m_sendAboutToFinish = TRUE; m_state = Qmmp::Stopped; } @@ -51,7 +50,6 @@ StateHandler::~StateHandler() m_instance = 0; } - void StateHandler::dispatch(qint64 elapsed, int bitrate, quint32 frequency, @@ -103,21 +101,22 @@ void StateHandler::dispatch(const QMap<Qmmp::MetaData, QString> &metaData) if (value.isEmpty() || value == "0") tmp.remove(tmp.key(value)); } - if(tmp.isEmpty() && SoundCore::instance()->url() == m_metaData.value(Qmmp::URL)) //skip empty tags + if(tmp.isEmpty() || tmp.value(Qmmp::URL).isEmpty()) //skip empty tags { + qWarning("StateHandler: empty metadata"); m_mutex.unlock(); return; } - tmp.insert(Qmmp::URL, SoundCore::instance()->url()); - if (m_metaData != tmp) + if (m_state == Qmmp::Playing && SoundCore::instance()->url() == metaData.value(Qmmp::URL)) { - m_metaData = tmp; - if (m_state == Qmmp::Playing) //send metadata in play state only + if (m_metaData != tmp) + { + m_metaData = tmp; emit metaDataChanged (); - else - m_sendMeta = TRUE; - + } } + else + m_cachedMetaData = tmp; m_mutex.unlock(); } @@ -134,7 +133,6 @@ void StateHandler::dispatch(const Qmmp::State &state) m_frequency = 0; m_precision = 0; m_channels = 0; - m_sendMeta = FALSE; m_sendAboutToFinish = TRUE; m_metaData.clear(); } @@ -145,12 +143,12 @@ void StateHandler::dispatch(const Qmmp::State &state) qDebug("StateHandler: Current state: %s; previous state: %s", qPrintable(states.at(state)), qPrintable(states.at(m_state))); m_state = state; - emit stateChanged(state); - if (m_state == Qmmp::Playing && m_sendMeta) + if(m_state == Qmmp::Playing && !m_cachedMetaData.isEmpty()) { - m_sendMeta = FALSE; - emit metaDataChanged (); + m_mutex.unlock(); + dispatch(m_cachedMetaData); + m_mutex.lock(); } } m_mutex.unlock(); diff --git a/src/qmmp/statehandler.h b/src/qmmp/statehandler.h index 3eb3c2036..b83ca635b 100644 --- a/src/qmmp/statehandler.h +++ b/src/qmmp/statehandler.h @@ -139,8 +139,7 @@ signals: */ void finished(); /*! - * Emitted before the playback ends. Use this signal inside decoder to check next url. - * This may be useful for multitrack formats like CDA or cue sheets. + * */ void aboutToFinish(); @@ -151,9 +150,9 @@ private: int m_bitrate, m_precision, m_channels; static StateHandler* m_instance; QMap <Qmmp::MetaData, QString> m_metaData; + QMap <Qmmp::MetaData, QString> m_cachedMetaData; Qmmp::State m_state; QMutex m_mutex; - bool m_sendMeta; }; #endif diff --git a/src/qmmpui/playlistitem.cpp b/src/qmmpui/playlistitem.cpp index b2e6f4f97..d76ba16cc 100644 --- a/src/qmmpui/playlistitem.cpp +++ b/src/qmmpui/playlistitem.cpp @@ -91,7 +91,7 @@ void PlayListItem::updateTags() m_info = 0; } QList <FileInfo *> list = Decoder::createPlayList(url()); - if(!list.isEmpty()) + if(!list.isEmpty() && !list.at(0)->path().contains("://")) { m_info = list.at(0); setMetaData(m_info->metaData()); diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index 7ac0461d2..0b78a3320 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -268,7 +268,8 @@ void MainWindow::showMetaData() qDebug("TRACK = %s", qPrintable(m_core->metaData(Qmmp::TRACK))); qDebug("== end of metadata =="); - if (m_playlist->currentItem() && !m_core->metaData().isEmpty()) + if (m_playlist->currentItem() && + m_playlist->currentItem()->url() == m_core->metaData().value(Qmmp::URL)) { m_playlist->currentItem()->updateMetaData(m_core->metaData()); m_playlist->updateList(); |
