aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2019-08-09 16:25:43 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2019-08-09 16:25:43 +0000
commitdc3192ca31794e2b7e172ed0b5b987893cd86824 (patch)
treebc4d662317d9139dc0701f8a7af9af3a81c7c237
parent0786570bb69b7c7e82a2c6166af2bc48ff228a6b (diff)
downloadqmmp-dc3192ca31794e2b7e172ed0b5b987893cd86824.tar.gz
qmmp-dc3192ca31794e2b7e172ed0b5b987893cd86824.tar.bz2
qmmp-dc3192ca31794e2b7e172ed0b5b987893cd86824.zip
improved singleton for MetaDataManager
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@9039 90c681e8-e032-0410-971d-27865f9a5e38
-rw-r--r--src/qmmp/metadatamanager.cpp9
-rw-r--r--src/qmmp/metadatamanager.h16
-rw-r--r--src/qmmp/soundcore.cpp1
3 files changed, 9 insertions, 17 deletions
diff --git a/src/qmmp/metadatamanager.cpp b/src/qmmp/metadatamanager.cpp
index ffacd817f..9080a25f6 100644
--- a/src/qmmp/metadatamanager.cpp
+++ b/src/qmmp/metadatamanager.cpp
@@ -22,6 +22,7 @@
#include <QFileInfo>
#include <QBuffer>
#include <QMutexLocker>
+#include <QCoreApplication>
#include "decoder.h"
#include "decoderfactory.h"
#include "abstractengine.h"
@@ -35,16 +36,12 @@ MetaDataManager* MetaDataManager::m_instance = nullptr;
MetaDataManager::MetaDataManager() : m_mutex(QMutex::Recursive)
{
- if(m_instance)
- qFatal("MetaDataManager is already created");
- m_instance = this;
m_settings = QmmpSettings::instance();
}
MetaDataManager::~MetaDataManager()
{
clearCoverCache();
- m_instance = nullptr;
}
QList<TrackInfo *> MetaDataManager::createPlayList(const QString &path, TrackInfo::Parts parts, QStringList *ignoredPaths) const
@@ -310,7 +307,10 @@ void MetaDataManager::prepareForAnotherThread()
MetaDataManager *MetaDataManager::instance()
{
if(!m_instance)
+ {
m_instance = new MetaDataManager();
+ qAddPostRoutine(&MetaDataManager::destroy);
+ }
return m_instance;
}
@@ -318,4 +318,5 @@ void MetaDataManager::destroy()
{
if(m_instance)
delete m_instance;
+ m_instance = nullptr;
}
diff --git a/src/qmmp/metadatamanager.h b/src/qmmp/metadatamanager.h
index 031a2e55c..fdce4ab1d 100644
--- a/src/qmmp/metadatamanager.h
+++ b/src/qmmp/metadatamanager.h
@@ -42,14 +42,6 @@ class QMMP_EXPORT MetaDataManager
{
public:
/*!
- * Constructor. Use MetaDataManager::instance() instead.
- */
- MetaDataManager();
- /*!
- * Destructor. Use MetaDataManager::destroy() instead.
- */
- ~MetaDataManager();
- /*!
* Extracts metadata and audio information from file \b path and returns a list of FileInfo items.
* One file may contain several playlist items (for example: cda disk or flac with embedded cue)
* @param path Local file path or URL.
@@ -114,12 +106,12 @@ public:
* Returns a pointer to the MetaDataManager instance.
*/
static MetaDataManager* instance();
- /*!
- * Destroys MetaDataManager object.
- */
- static void destroy();
private:
+ MetaDataManager();
+ ~MetaDataManager();
+ static void destroy();
+
struct CoverCacheItem
{
QString url;
diff --git a/src/qmmp/soundcore.cpp b/src/qmmp/soundcore.cpp
index a535b1b71..611d597fe 100644
--- a/src/qmmp/soundcore.cpp
+++ b/src/qmmp/soundcore.cpp
@@ -63,7 +63,6 @@ SoundCore::SoundCore(QObject *parent)
SoundCore::~SoundCore()
{
stop();
- MetaDataManager::destroy();
m_instance = nullptr;
}