aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Transports/mms/downloader.cpp
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/mms/downloader.cpp
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/mms/downloader.cpp')
-rw-r--r--src/plugins/Transports/mms/downloader.cpp163
1 files changed, 0 insertions, 163 deletions
diff --git a/src/plugins/Transports/mms/downloader.cpp b/src/plugins/Transports/mms/downloader.cpp
deleted file mode 100644
index 9acdcb813..000000000
--- a/src/plugins/Transports/mms/downloader.cpp
+++ /dev/null
@@ -1,163 +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. *
- ***************************************************************************/
-
-#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"
-
-Downloader::Downloader(QObject *parent, const QString &url)
- : QThread(parent)
-{
- m_url = url;
- m_handle = 0;
- m_aborted = false;
- QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
- m_prebuf_size = settings.value("MMS/buffer_size",128).toInt() * 1024;
- m_buffer_size = m_prebuf_size;
- m_buffer = (char *)malloc(m_buffer_size);
- m_ready = false;
- m_buffer_at = 0;
-}
-
-
-Downloader::~Downloader()
-{
- abort();
- free(m_buffer);
- m_buffer = 0;
- m_buffer_at = 0;
- m_buffer_size = 0;
-}
-
-qint64 Downloader::read(char* data, qint64 maxlen)
-{
- 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();
- return len;
-}
-
-QMutex *Downloader::mutex()
-{
- return &m_mutex;
-}
-
-void Downloader::abort()
-{
- m_mutex.lock();
- if (m_aborted)
- {
- m_mutex.unlock();
- return;
- }
- m_aborted = true;
- m_ready = false;
- m_mutex.unlock();
- wait();
- if (m_handle)
- mmsx_close(m_handle);
- m_handle = 0;
-}
-
-qint64 Downloader::bytesAvailable()
-{
- m_mutex.lock();
- qint64 b = m_buffer_at;
- m_mutex.unlock();
- return b;
-}
-
-void Downloader::run()
-{
- m_handle = mmsx_connect (0, 0, m_url.toLocal8Bit().constData(), 128 * 1024);
- if(!m_handle)
- {
- qWarning("Downloader: connection failed");
- return;
- }
- m_mutex.lock();
- if(m_aborted)
- {
- m_mutex.unlock();
- qDebug("Downloader: aborted");
- return;
- }
- m_mutex.unlock();
- qint64 len = 0;
- forever
- {
- m_mutex.lock();
- int to_read = 1024;
- if(m_buffer_at + to_read > m_buffer_size)
- {
- m_buffer_size = m_buffer_at + to_read;
- m_buffer = (char *)realloc(m_buffer, m_buffer_size);
- }
- len = mmsx_read (0, m_handle, m_buffer + m_buffer_at, to_read);
- if(len < 0)
- {
- qWarning("Downloader: error: %s", strerror(len));
- m_mutex.unlock();
- break;
- }
- m_buffer_at += len;
- if(!m_ready)
- checkBuffer();
- m_mutex.unlock();
- if(m_aborted)
- break;
- usleep(5000);
- }
-}
-
-void Downloader::checkBuffer()
-{
- if (m_buffer_at > m_prebuf_size && !m_ready)
- {
- m_ready = true;
- qDebug("Downloader: ready");
- QMap<Qmmp::MetaData, QString> metaData;
- metaData.insert(Qmmp::URL, m_url);
- StateHandler::instance()->dispatch(metaData);
- emit ready();
- }
- else if (!m_ready)
- {
- StateHandler::instance()->dispatchBuffer(100 * m_buffer_at / m_buffer_size);
- qApp->processEvents();
- }
-}
-
-bool Downloader::isReady()
-{
- return m_ready;
-}