aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/qmmp/qmmpevents.cpp14
-rw-r--r--src/qmmp/qmmpevents_p.h16
-rw-r--r--src/qmmp/soundcore.cpp10
-rw-r--r--src/qmmp/soundcore.h4
-rw-r--r--src/qmmp/statehandler.cpp11
-rw-r--r--src/qmmp/statehandler.h1
-rw-r--r--src/qmmp/trackinfo.cpp13
-rw-r--r--src/qmmp/trackinfo.h2
8 files changed, 68 insertions, 3 deletions
diff --git a/src/qmmp/qmmpevents.cpp b/src/qmmp/qmmpevents.cpp
index 6ccf738b3..5f49629a1 100644
--- a/src/qmmp/qmmpevents.cpp
+++ b/src/qmmp/qmmpevents.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2011 by Ilya Kotov *
+ * Copyright (C) 2011-2018 by Ilya Kotov *
* forkotov02@ya.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -69,3 +69,15 @@ QHash<QString, QString>StreamInfoChangedEvent::streamInfo() const
{
return m_streamInfo;
}
+
+TrackInfoEvent::TrackInfoEvent(const TrackInfo &info) : QEvent(EVENT_TRACK_INFO_CHANGED)
+{
+ m_info = info;
+}
+
+TrackInfoEvent::~TrackInfoEvent(){}
+
+const TrackInfo &TrackInfoEvent::trackInfo() const
+{
+ return m_info;
+}
diff --git a/src/qmmp/qmmpevents_p.h b/src/qmmp/qmmpevents_p.h
index 39c866bbb..8fd316f70 100644
--- a/src/qmmp/qmmpevents_p.h
+++ b/src/qmmp/qmmpevents_p.h
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2011-2012 by Ilya Kotov *
+ * Copyright (C) 2011-2018 by Ilya Kotov *
* forkotov02@ya.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -24,6 +24,7 @@
#include <QMap>
#include <QHash>
#include <QEvent>
+#include "trackinfo.h"
#include "qmmp.h"
#define EVENT_STATE_CHANGED (QEvent::Type(QEvent::User)) /*!< @internal */
@@ -31,6 +32,7 @@
#define EVENT_FINISHED (QEvent::Type(QEvent::User + 2)) /*!< @internal */
#define EVENT_METADATA_CHANGED (QEvent::Type(QEvent::User + 3)) /*!< @internal */
#define EVENT_STREAM_INFO_CHANGED (QEvent::Type(QEvent::User + 4)) /*!< @internal */
+#define EVENT_TRACK_INFO_CHANGED (QEvent::Type(QEvent::User + 5)) /*!< @internal */
/*! @internal
* @author Ilya Kotov <forkotov02@ya.ru>
@@ -88,4 +90,16 @@ private:
QHash<QString, QString> m_streamInfo;
};
+class TrackInfoEvent : QEvent
+{
+public:
+ TrackInfoEvent(const TrackInfo &info);
+ virtual ~TrackInfoEvent();
+
+ const TrackInfo &trackInfo() const;
+
+private:
+ TrackInfo m_info;
+};
+
#endif // QMMPEVENTS_P_H
diff --git a/src/qmmp/soundcore.cpp b/src/qmmp/soundcore.cpp
index 90a28966a..bcf7369c5 100644
--- a/src/qmmp/soundcore.cpp
+++ b/src/qmmp/soundcore.cpp
@@ -255,6 +255,11 @@ QHash<QString, QString> SoundCore::streamInfo() const
return m_streamInfo;
}
+const TrackInfo &SoundCore::trackInfo() const
+{
+ return m_info;
+}
+
void SoundCore::startNextSource()
{
if(m_sources.isEmpty())
@@ -371,6 +376,11 @@ bool SoundCore::event(QEvent *e)
m_streamInfo = ((StreamInfoChangedEvent *) e)->streamInfo();
emit streamInfoChanged();
}
+ else if(e->type() == EVENT_TRACK_INFO_CHANGED)
+ {
+ m_info = ((TrackInfoEvent *) e)->trackInfo();
+ emit trackInfoChanged();
+ }
else if(e->type() == EVENT_NEXT_TRACK_REQUEST)
emit nextTrackRequest();
else if(e->type() == EVENT_FINISHED)
diff --git a/src/qmmp/soundcore.h b/src/qmmp/soundcore.h
index 5084fafe6..1b567aa16 100644
--- a/src/qmmp/soundcore.h
+++ b/src/qmmp/soundcore.h
@@ -31,6 +31,7 @@
#include "qmmpsettings.h"
#include "audioparameters.h"
#include "eqsettings.h"
+#include "trackinfo.h"
class VolumeControl;
class AbstractEngine;
@@ -113,6 +114,7 @@ public:
* Returns a hash of stream information if available
*/
QHash<QString, QString> streamInfo() const;
+ const TrackInfo &trackInfo() const;
/*!
* Indicates that the current active engine will be used for the next queued track.
* May be useful for some effect plugins.
@@ -209,6 +211,7 @@ signals:
* Emitted when new stream information is available.
*/
void streamInfoChanged();
+ void trackInfoChanged();
/*!
* This signal is emitted when the state of the SoundCore has changed.
*/
@@ -262,6 +265,7 @@ private:
};
QMap <Qmmp::MetaData, QString> m_metaData;
QHash <QString, QString> m_streamInfo;
+ TrackInfo m_info;
QString m_url;
static SoundCore* m_instance;
StateHandler *m_handler;
diff --git a/src/qmmp/statehandler.cpp b/src/qmmp/statehandler.cpp
index 4abc4669a..181e07435 100644
--- a/src/qmmp/statehandler.cpp
+++ b/src/qmmp/statehandler.cpp
@@ -122,6 +122,15 @@ void StateHandler::dispatch(const QMap<Qmmp::MetaData, QString> &metaData)
qApp->postEvent(parent(), new MetaDataChangedEvent(m_metaData));
}
}
+ if(m_info.isEmpty() || m_info.path() == metaData.value(Qmmp::URL))
+ {
+ if(m_info.metaData() != tmp)
+ {
+ m_info.setValues(tmp);
+ m_info.setPath(metaData.value(Qmmp::URL));
+ }
+ }
+
m_mutex.unlock();
}
@@ -152,7 +161,7 @@ void StateHandler::dispatch(Qmmp::State state)
{
m_elapsed = -1;
m_bitrate = 0;
- m_metaData.clear();
+ m_info.clear();
m_streamInfo.clear();
m_audioParameters = AudioParameters();
m_sendAboutToFinish = true;
diff --git a/src/qmmp/statehandler.h b/src/qmmp/statehandler.h
index 56692a517..a98be51f7 100644
--- a/src/qmmp/statehandler.h
+++ b/src/qmmp/statehandler.h
@@ -140,6 +140,7 @@ private:
int m_bitrate;
static StateHandler* m_instance;
QMap <Qmmp::MetaData, QString> m_metaData;
+ TrackInfo m_info;
QHash <QString, QString> m_streamInfo;
Qmmp::State m_state;
AudioParameters m_audioParameters;
diff --git a/src/qmmp/trackinfo.cpp b/src/qmmp/trackinfo.cpp
index b2170357e..6561bfb3b 100644
--- a/src/qmmp/trackinfo.cpp
+++ b/src/qmmp/trackinfo.cpp
@@ -21,6 +21,12 @@
#include <QRegExp>
#include "trackinfo.h"
+TrackInfo::TrackInfo()
+{
+ m_duration = 0;
+ m_parts = NoParts;
+}
+
TrackInfo::TrackInfo(const QString &path)
{
m_path = path;
@@ -213,3 +219,10 @@ void TrackInfo::clear(Parts parts)
m_replayGainInfo.clear();
m_parts &= ~parts;
}
+
+void TrackInfo::clear()
+{
+ clear(AllParts);
+ m_path.clear();
+ m_duration = 0;
+}
diff --git a/src/qmmp/trackinfo.h b/src/qmmp/trackinfo.h
index 6bde5ce50..ed8538eeb 100644
--- a/src/qmmp/trackinfo.h
+++ b/src/qmmp/trackinfo.h
@@ -28,6 +28,7 @@
class QMMP_EXPORT TrackInfo
{
public:
+ TrackInfo();
TrackInfo(const QString &path);
TrackInfo(const TrackInfo &other);
~TrackInfo();
@@ -70,6 +71,7 @@ public:
void setPath(const QString &path);
void setParts(Parts parts);
void clear(Parts parts);
+ void clear();
private:
QMap<Qmmp::MetaData, QString> m_metaData;