From db076cb6b4c06d923bf49656ebe472295bbce123 Mon Sep 17 00:00:00 2001 From: "craig.p.drummond" Date: Sat, 8 Dec 2012 11:25:32 +0000 Subject: [PATCH] Move MPD thread into MPDConnection class --- gui/mainwindow.cpp | 6 ++---- gui/mainwindow.h | 2 -- mpd/mpdconnection.cpp | 22 +++++++++++++++++++++- mpd/mpdconnection.h | 4 ++++ 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index 17ebb5449..c82d68b69 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -810,9 +810,7 @@ MainWindow::MainWindow(QWidget *parent) playQueue->setFocus(); playQueue->initHeader(); - mpdThread=new QThread(this); - MPDConnection::self()->moveToThread(mpdThread); - mpdThread->start(); + MPDConnection::self()->start(); connectToMpd(); QString page=Settings::self()->page(); @@ -885,7 +883,7 @@ MainWindow::~MainWindow() emit stop(); Utils::sleep(); } - Utils::stopThread(mpdThread); + MPDConnection::self()->stop(); Covers::self()->stop(); #if defined ENABLE_DEVICES_SUPPORT FileScheduler::self()->stop(); diff --git a/gui/mainwindow.h b/gui/mainwindow.h index b33399548..6778f138c 100644 --- a/gui/mainwindow.h +++ b/gui/mainwindow.h @@ -65,7 +65,6 @@ class ServerInfoPage; #ifdef ENABLE_DEVICES_SUPPORT class DevicesPage; #endif -class QThread; class QAbstractItemView; #ifndef Q_OS_WIN class Mpris; @@ -445,7 +444,6 @@ private: DevicesPage *devicesPage; #endif ServerInfoPage *serverInfoPage; - QThread *mpdThread; #ifndef Q_OS_WIN Mpris *mpris; GnomeMediaKeys *gnomeMediaKeys; diff --git a/mpd/mpdconnection.cpp b/mpd/mpdconnection.cpp index 4abea6920..a5e42b8bc 100644 --- a/mpd/mpdconnection.cpp +++ b/mpd/mpdconnection.cpp @@ -27,6 +27,7 @@ #include "mpdconnection.h" #include "mpdparseutils.h" #include "localize.h" +#include "utils.h" #ifdef ENABLE_KDE_SUPPORT #include #endif @@ -142,7 +143,8 @@ QString MPDConnectionDetails::description() const } MPDConnection::MPDConnection() - : ver(0) + : thread(0) + , ver(0) , sock(this) , idleSocket(this) , state(State_Blank) @@ -172,6 +174,24 @@ MPDConnection::~MPDConnection() idleSocket.disconnectFromHost(); } +void MPDConnection::start() +{ + if (!thread) { + thread=new QThread(); + moveToThread(thread); + thread->start(); + } +} + +void MPDConnection::stop() +{ + if (thread) { + Utils::stopThread(thread); + thread->deleteLater(); + thread=0; + } +} + MPDConnection::ConnectionReturn MPDConnection::connectToMPD(MpdSocket &socket, bool enableIdle) { if (QAbstractSocket::ConnectedState!=socket.state()) { diff --git a/mpd/mpdconnection.h b/mpd/mpdconnection.h index 2174378ca..72a47ee4e 100644 --- a/mpd/mpdconnection.h +++ b/mpd/mpdconnection.h @@ -41,6 +41,7 @@ class MusicLibraryItemArtist; class DirViewItemRoot; class MusicLibraryItemRoot; class QTimer; +class QThread; class MpdSocket : public QObject { @@ -175,6 +176,8 @@ public: MPDConnection(); ~MPDConnection(); + void start(); + void stop(); const MPDConnectionDetails & getDetails() const { return details; } void setDirReadable(bool r) { details.dirReadable=r; } bool isConnected() const { return State_Connected==state; } @@ -302,6 +305,7 @@ private: bool doMoveInPlaylist(const QString &name, const QList &items, quint32 pos, quint32 size); private: + QThread *thread; long ver; MPDConnectionDetails details; QDateTime dbUpdate;