aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Transports
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2011-02-25 19:50:26 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2011-02-25 19:50:26 +0000
commitac690c6ef39a1a2cca83c1b9d93ea69a3faefdeb (patch)
tree5b87069523fca722c4e4865c1bad236ca23b85ff /src/plugins/Transports
parent7e5c4a0b4e15941b8f57ea768e56aa101fe676c1 (diff)
downloadqmmp-ac690c6ef39a1a2cca83c1b9d93ea69a3faefdeb.tar.gz
qmmp-ac690c6ef39a1a2cca83c1b9d93ea69a3faefdeb.tar.bz2
qmmp-ac690c6ef39a1a2cca83c1b9d93ea69a3faefdeb.zip
mms plugin refactoring, fixed some regressions
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@2076 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Transports')
-rw-r--r--src/plugins/Transports/http/httpinputsource.cpp10
-rw-r--r--src/plugins/Transports/http/httpinputsource.h3
-rw-r--r--src/plugins/Transports/mms/CMakeLists.txt10
-rw-r--r--src/plugins/Transports/mms/downloader.h69
-rw-r--r--src/plugins/Transports/mms/mms.pro12
-rw-r--r--src/plugins/Transports/mms/mmsinputsource.cpp13
-rw-r--r--src/plugins/Transports/mms/mmsinputsource.h11
-rw-r--r--src/plugins/Transports/mms/mmsstreamreader.cpp (renamed from src/plugins/Transports/mms/downloader.cpp)121
-rw-r--r--src/plugins/Transports/mms/mmsstreamreader.h (renamed from src/plugins/Transports/mms/streamreader.h)55
-rw-r--r--src/plugins/Transports/mms/streamreader.cpp91
10 files changed, 168 insertions, 227 deletions
diff --git a/src/plugins/Transports/http/httpinputsource.cpp b/src/plugins/Transports/http/httpinputsource.cpp
index 5ded88078..64e18406c 100644
--- a/src/plugins/Transports/http/httpinputsource.cpp
+++ b/src/plugins/Transports/http/httpinputsource.cpp
@@ -24,7 +24,7 @@
HTTPInputSource::HTTPInputSource(const QString &url, QObject *parent) : InputSource(url,parent)
{
m_reader = new HttpStreamReader(url, this);
- connect(m_reader, SIGNAL(ready()),SIGNAL(ready()));
+ connect(m_reader, SIGNAL(ready()),SLOT(activate()));
}
QIODevice *HTTPInputSource::ioDevice()
@@ -43,8 +43,14 @@ bool HTTPInputSource::isReady()
return m_reader->isOpen();
}
-QString HTTPInputSource::contentType() const
+QString HTTPInputSource::contentType() const
{
return m_reader->contentType();
}
+void HTTPInputSource::activate()
+{
+ m_reader->open(QIODevice::ReadOnly);
+ emit ready();
+}
+
diff --git a/src/plugins/Transports/http/httpinputsource.h b/src/plugins/Transports/http/httpinputsource.h
index a41c615f1..3b41f3eba 100644
--- a/src/plugins/Transports/http/httpinputsource.h
+++ b/src/plugins/Transports/http/httpinputsource.h
@@ -39,6 +39,9 @@ public:
bool isReady();
QString contentType() const;
+private slots:
+ void activate();
+
private:
HttpStreamReader *m_reader;
diff --git a/src/plugins/Transports/mms/CMakeLists.txt b/src/plugins/Transports/mms/CMakeLists.txt
index f4e6314d3..b0682e31c 100644
--- a/src/plugins/Transports/mms/CMakeLists.txt
+++ b/src/plugins/Transports/mms/CMakeLists.txt
@@ -5,7 +5,7 @@ cmake_minimum_required(VERSION 2.4.7)
if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
cmake_policy(SET CMP0005 NEW)
-endif(COMMAND cmake_policy)
+endif(COMMAND cmake_policy)
# qt plugin
ADD_DEFINITIONS( -Wall )
@@ -33,18 +33,16 @@ link_directories(${MMS_LIBRARY_DIRS})
SET(libmms_SRCS
- streamreader.cpp
- downloader.cpp
+ mmsstreamreader.cpp
mmsinputfactory.cpp
mmsinputsource.cpp
settingsdialog.cpp
)
-SET(libmms_MOC_HDRS
- downloader.h
+SET(libmms_MOC_HDRS
mmsinputfactory.h
mmsinputsource.h
- streamreader.h
+ mmsstreamreader.h
settingsdialog.h
)
diff --git a/src/plugins/Transports/mms/downloader.h b/src/plugins/Transports/mms/downloader.h
deleted file mode 100644
index bfab9e24b..000000000
--- a/src/plugins/Transports/mms/downloader.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2010 by Ilya Kotov *
- * forkotov02@hotmail.ru *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
- ***************************************************************************/
-#ifndef DOWNLOADER_H
-#define DOWNLOADER_H
-
-#include <QThread>
-#include <QMutex>
-#include <QByteArray>
-#include <QMap>
-#define this var
-#include <libmms/mmsx.h>
-#undef this
-
-
-
-/*! @internal
- * @author Ilya Kotov <forkotov02@hotmail.ru>
- */
-class Downloader : public QThread
-{
- Q_OBJECT
-public:
- Downloader(QObject *parent, const QString &url);
-
- ~Downloader();
-
- qint64 read(char* data, qint64 maxlen);
- QMutex *mutex();
- void abort();
- qint64 bytesAvailable();
- void checkBuffer();
- bool isReady();
-
-signals:
- void ready();
-
-private:
- QMutex m_mutex;
- QString m_url;
- mmsx_t *m_handle;
- bool m_aborted;
- qint64 m_buffer_size, m_prebuf_size;
- char *m_buffer;
- qint64 m_buffer_at;
- bool m_ready;
-
-protected:
- void run();
-
-};
-
-#endif
diff --git a/src/plugins/Transports/mms/mms.pro b/src/plugins/Transports/mms/mms.pro
index ee93d9bbd..f732df71b 100644
--- a/src/plugins/Transports/mms/mms.pro
+++ b/src/plugins/Transports/mms/mms.pro
@@ -1,14 +1,14 @@
include(../../plugins.pri)
-HEADERS += downloader.h \
- streamreader.h \
+HEADERS += \
mmsinputfactory.h \
mmsinputsource.h \
- settingsdialog.h
-SOURCES += downloader.cpp \
- streamreader.cpp \
+ settingsdialog.h \
+ mmsstreamreader.h
+SOURCES += \
mmsinputfactory.cpp \
mmsinputsource.cpp \
- settingsdialog.cpp
+ settingsdialog.cpp \
+ mmsstreamreader.cpp
win32:HEADERS += ../../../../src/qmmp/inputsource.h \
../../../../src/qmmp/inputsourcefactory.h
TARGET = $$PLUGINS_PREFIX/Transports/mms
diff --git a/src/plugins/Transports/mms/mmsinputsource.cpp b/src/plugins/Transports/mms/mmsinputsource.cpp
index 10f9e6983..b734555dc 100644
--- a/src/plugins/Transports/mms/mmsinputsource.cpp
+++ b/src/plugins/Transports/mms/mmsinputsource.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2009 by Ilya Kotov *
+ * Copyright (C) 2009-2011 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -18,13 +18,13 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
-#include "streamreader.h"
+#include "mmsstreamreader.h"
#include "mmsinputsource.h"
MMSInputSource::MMSInputSource(const QString &url, QObject *parent) : InputSource(url,parent)
{
- m_reader = new StreamReader(url, this);
- connect(m_reader, SIGNAL(ready()),SLOT(ready()));
+ m_reader = new MMSStreamReader(url, this);
+ connect(m_reader, SIGNAL(ready()),SLOT(activate()));
}
QIODevice *MMSInputSource::ioDevice()
@@ -48,3 +48,8 @@ QString MMSInputSource::contentType() const
return "audio/x-ms-wma";
}
+void MMSInputSource::activate()
+{
+ m_reader->open(QIODevice::ReadOnly);
+ emit ready();
+}
diff --git a/src/plugins/Transports/mms/mmsinputsource.h b/src/plugins/Transports/mms/mmsinputsource.h
index c4e7bce67..710bb708a 100644
--- a/src/plugins/Transports/mms/mmsinputsource.h
+++ b/src/plugins/Transports/mms/mmsinputsource.h
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2009 by Ilya Kotov *
+ * Copyright (C) 2009-2011 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -23,7 +23,7 @@
#include <qmmp/inputsource.h>
-class StreamReader;
+class MMSStreamReader;
/**
@author Ilya Kotov <forkotov02@hotmail.ru>
@@ -39,9 +39,12 @@ public:
bool isReady();
QString contentType() const;
+private slots:
+ void activate();
+
private:
- StreamReader *m_reader;
+ MMSStreamReader *m_reader;
};
-#endif // HTTPINPUTSOURCE_H
+#endif // MMSINPUTSOURCE_H
diff --git a/src/plugins/Transports/mms/downloader.cpp b/src/plugins/Transports/mms/mmsstreamreader.cpp
index 9acdcb813..f48209a51 100644
--- a/src/plugins/Transports/mms/downloader.cpp
+++ b/src/plugins/Transports/mms/mmsstreamreader.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2010 by Ilya Kotov *
+ * Copyright (C) 2006-2008 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -17,23 +17,18 @@
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
-
#include <QApplication>
-#include <QStringList>
-#include <QDir>
-#include <QMap>
#include <QSettings>
-#include <QTextCodec>
#include <stdint.h>
#include <stdlib.h>
-#include <qmmp/qmmpsettings.h>
#include <qmmp/qmmp.h>
#include <qmmp/statehandler.h>
-#include "downloader.h"
+#include "mmsstreamreader.h"
-Downloader::Downloader(QObject *parent, const QString &url)
- : QThread(parent)
+MMSStreamReader::MMSStreamReader(const QString &url, QObject *parent)
+ : QIODevice(parent)
{
+ qDebug("%s", Q_FUNC_INFO);
m_url = url;
m_handle = 0;
m_aborted = false;
@@ -43,11 +38,12 @@ Downloader::Downloader(QObject *parent, const QString &url)
m_buffer = (char *)malloc(m_buffer_size);
m_ready = false;
m_buffer_at = 0;
+ m_thread = new DownloadThread(this);
}
-
-Downloader::~Downloader()
+MMSStreamReader::~MMSStreamReader()
{
+ qDebug("%s", Q_FUNC_INFO);
abort();
free(m_buffer);
m_buffer = 0;
@@ -55,24 +51,80 @@ Downloader::~Downloader()
m_buffer_size = 0;
}
-qint64 Downloader::read(char* data, qint64 maxlen)
+bool MMSStreamReader::atEnd () const
+{
+ qDebug("%s", Q_FUNC_INFO);
+ return false;
+}
+
+qint64 MMSStreamReader::bytesToWrite () const
+{
+ qDebug("%s", Q_FUNC_INFO);
+ return -1;
+}
+
+void MMSStreamReader::close ()
+{
+ qDebug("%s", Q_FUNC_INFO);
+ abort();
+ QIODevice::close();
+}
+
+bool MMSStreamReader::isSequential () const
+{
+ qDebug("%s", Q_FUNC_INFO);
+ return true;
+}
+
+bool MMSStreamReader::open (OpenMode mode)
+{
+ qDebug("%s", Q_FUNC_INFO);
+ if (mode != QIODevice::ReadOnly)
+ return false;
+ QIODevice::open(mode);
+ return m_ready;
+}
+
+bool MMSStreamReader::seek (qint64 pos)
{
+ qDebug("%s", Q_FUNC_INFO);
+ Q_UNUSED(pos);
+ return false;
+}
+
+qint64 MMSStreamReader::writeData(const char*, qint64)
+{
+ qDebug("%s", Q_FUNC_INFO);
+ return -1;
+}
+
+qint64 MMSStreamReader::readData(char* data, qint64 maxlen)
+{
+ qDebug("%s", Q_FUNC_INFO);
m_mutex.lock();
qint64 len = qMin<qint64>(m_buffer_at, maxlen);
memmove(data, m_buffer, len);
m_buffer_at -= len;
memmove(m_buffer, m_buffer + len, m_buffer_at);
m_mutex.unlock();
+ qDebug("read=%lld", len);
return len;
}
-QMutex *Downloader::mutex()
+void MMSStreamReader::downloadFile()
+{
+ qDebug("%s", Q_FUNC_INFO);
+ m_thread->start();
+}
+
+QMutex *MMSStreamReader::mutex()
{
return &m_mutex;
}
-void Downloader::abort()
+void MMSStreamReader::abort()
{
+ qDebug("%s", Q_FUNC_INFO);
m_mutex.lock();
if (m_aborted)
{
@@ -80,35 +132,34 @@ void Downloader::abort()
return;
}
m_aborted = true;
- m_ready = false;
m_mutex.unlock();
- wait();
+ m_thread->wait();
+ m_ready = false;
if (m_handle)
mmsx_close(m_handle);
m_handle = 0;
}
-qint64 Downloader::bytesAvailable()
+qint64 MMSStreamReader::bytesAvailable() const
{
- m_mutex.lock();
- qint64 b = m_buffer_at;
- m_mutex.unlock();
- return b;
+ qDebug("+++%lld",QIODevice::bytesAvailable() + m_buffer_at);
+ return QIODevice::bytesAvailable() + m_buffer_at;
}
-void Downloader::run()
+void MMSStreamReader::run()
{
+ qDebug("%s", Q_FUNC_INFO);
m_handle = mmsx_connect (0, 0, m_url.toLocal8Bit().constData(), 128 * 1024);
if(!m_handle)
{
- qWarning("Downloader: connection failed");
+ qWarning("MMSStreamReader: connection failed");
return;
}
m_mutex.lock();
if(m_aborted)
{
m_mutex.unlock();
- qDebug("Downloader: aborted");
+ qDebug("MMSStreamReader: aborted");
return;
}
m_mutex.unlock();
@@ -125,7 +176,7 @@ void Downloader::run()
len = mmsx_read (0, m_handle, m_buffer + m_buffer_at, to_read);
if(len < 0)
{
- qWarning("Downloader: error: %s", strerror(len));
+ qWarning("MMSStreamReader: error: %s", strerror(len));
m_mutex.unlock();
break;
}
@@ -139,12 +190,13 @@ void Downloader::run()
}
}
-void Downloader::checkBuffer()
+void MMSStreamReader::checkBuffer()
{
+ qDebug("%s", Q_FUNC_INFO);
if (m_buffer_at > m_prebuf_size && !m_ready)
{
- m_ready = true;
- qDebug("Downloader: ready");
+ m_ready = true;
+ qDebug("MMSStreamReader: ready");
QMap<Qmmp::MetaData, QString> metaData;
metaData.insert(Qmmp::URL, m_url);
StateHandler::instance()->dispatch(metaData);
@@ -157,7 +209,14 @@ void Downloader::checkBuffer()
}
}
-bool Downloader::isReady()
+DownloadThread::DownloadThread(MMSStreamReader *parent) : QThread(parent)
{
- return m_ready;
+ m_parent = parent;
+}
+
+DownloadThread::~DownloadThread (){}
+
+void DownloadThread::run()
+{
+ m_parent->run();
}
diff --git a/src/plugins/Transports/mms/streamreader.h b/src/plugins/Transports/mms/mmsstreamreader.h
index a0c18119c..206685937 100644
--- a/src/plugins/Transports/mms/streamreader.h
+++ b/src/plugins/Transports/mms/mmsstreamreader.h
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2006-2008 by Ilya Kotov *
+ * Copyright (C) 2006-2011 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -17,27 +17,31 @@
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
-#ifndef STREAMREADER_H
-#define STREAMREADER_H
+#ifndef MMSSTREAMREADER_H
+#define MMSSTREAMREADER_H
#include <QObject>
#include <QIODevice>
#include <QUrl>
+#include <QMutex>
+#include <QThread>
+#define this var
+#include <libmms/mmsx.h>
+#undef this
class QFileInfo;
-
-class Downloader;
+class DownloadThread;
/*! @internal
* @author Ilya Kotov <forkotov02@hotmail.ru>
*/
-class StreamReader : public QIODevice
+class MMSStreamReader : public QIODevice
{
Q_OBJECT
public:
- StreamReader(const QString &name, QObject *parent = 0);
+ MMSStreamReader(const QString &url, QObject *parent = 0);
- ~StreamReader();
+ ~MMSStreamReader();
/**
* QIODevice API
@@ -54,18 +58,41 @@ public:
*/
void downloadFile();
+
+ QMutex *mutex();
+ void abort();
+ void checkBuffer();
+ void run();
+
signals:
void ready();
void error();
-protected:
- qint64 readData(char*, qint64);
- qint64 writeData(const char*, qint64);
+private:
+ virtual qint64 readData(char*, qint64);
+ virtual qint64 writeData(const char*, qint64);
+
+ QMutex m_mutex;
+ QString m_url;
+ mmsx_t *m_handle;
+ bool m_aborted;
+ qint64 m_buffer_size, m_prebuf_size;
+ char *m_buffer;
+ qint64 m_buffer_at;
+ bool m_ready;
+ DownloadThread *m_thread;
+};
+
+class DownloadThread : public QThread
+{
+ Q_OBJECT
+public:
+ DownloadThread(MMSStreamReader *parent);
+ virtual ~DownloadThread ();
private:
- QUrl m_url;
- QString m_contentType;
- Downloader *m_downloader;
+ virtual void run();
+ MMSStreamReader *m_parent;
};
#endif
diff --git a/src/plugins/Transports/mms/streamreader.cpp b/src/plugins/Transports/mms/streamreader.cpp
deleted file mode 100644
index 951238e0e..000000000
--- a/src/plugins/Transports/mms/streamreader.cpp
+++ /dev/null
@@ -1,91 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2006-2008 by Ilya Kotov *
- * forkotov02@hotmail.ru *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
- ***************************************************************************/
-#include <QApplication>
-#include <QUrl>
-#include "downloader.h"
-#include "streamreader.h"
-
-StreamReader::StreamReader(const QString &name, QObject *parent)
- : QIODevice(parent)
-{
- m_downloader = new Downloader(this, name);
- connect(m_downloader, SIGNAL(ready()), SIGNAL(ready()));
-}
-
-StreamReader::~StreamReader()
-{
- m_downloader->abort();
- qDebug("%s", Q_FUNC_INFO);
-}
-
-bool StreamReader::atEnd () const
-{
- return false;
-}
-
-qint64 StreamReader::bytesAvailable () const
-{
- return m_downloader->bytesAvailable ();
-}
-
-qint64 StreamReader::bytesToWrite () const
-{
- return -1;
-}
-
-void StreamReader::close ()
-{
- m_downloader->abort();
- QIODevice::close();
-}
-
-bool StreamReader::isSequential () const
-{
- return true;
-}
-
-bool StreamReader::open (OpenMode mode)
-{
- if (mode != QIODevice::ReadOnly)
- return false;
- QIODevice::open(mode);
- return m_downloader->isReady();
-}
-
-bool StreamReader::seek (qint64 pos)
-{
- Q_UNUSED(pos);
- return false;
-}
-
-qint64 StreamReader::readData(char* data, qint64 maxlen)
-{
- return m_downloader->read (data, maxlen);
-}
-
-qint64 StreamReader::writeData(const char*, qint64)
-{
- return -1;
-}
-
-void StreamReader::downloadFile()
-{
- m_downloader->start();
-}