aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2009-09-17 19:30:41 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2009-09-17 19:30:41 +0000
commit7665da44a26a6e5d53435c1635b67173985d197a (patch)
treefdff73f6fdecf26cea1c41f37eaeaec493d82197 /src
parentf0efac56e92cd23e07d58317c09f08591befd3bc (diff)
downloadqmmp-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
Diffstat (limited to 'src')
-rw-r--r--src/qmmp/decoder.h1
-rw-r--r--src/qmmp/downloader.cpp1
-rw-r--r--src/qmmp/fileinfo.cpp2
-rw-r--r--src/qmmp/inputsource.cpp20
-rw-r--r--src/qmmp/inputsource.h5
-rw-r--r--src/qmmp/qmmpaudioengine.cpp10
-rw-r--r--src/qmmp/soundcore.cpp3
-rw-r--r--src/qmmp/statehandler.cpp28
-rw-r--r--src/qmmp/statehandler.h5
-rw-r--r--src/qmmpui/playlistitem.cpp2
-rw-r--r--src/ui/mainwindow.cpp3
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();