From 13ac8c093a87c10e6ea9320cb010ddaa7e25181b Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Fri, 23 Sep 2011 12:44:25 -0400 Subject: [PATCH] Add a qnr mediastream WIP to support qnetworkreply QIODevices --- src/libtomahawk/CMakeLists.txt | 2 + src/libtomahawk/utils/qnr_iodevicestream.cpp | 86 ++++++++++++++++++++ src/libtomahawk/utils/qnr_iodevicestream.h | 54 ++++++++++++ 3 files changed, 142 insertions(+) create mode 100644 src/libtomahawk/utils/qnr_iodevicestream.cpp create mode 100644 src/libtomahawk/utils/qnr_iodevicestream.h diff --git a/src/libtomahawk/CMakeLists.txt b/src/libtomahawk/CMakeLists.txt index bc7b4c170..ef331994b 100644 --- a/src/libtomahawk/CMakeLists.txt +++ b/src/libtomahawk/CMakeLists.txt @@ -191,6 +191,7 @@ set( libSources utils/rdioparser.cpp utils/shortenedlinkparser.cpp utils/stylehelper.cpp + utils/qnr_iodevicestream.cpp widgets/checkdirtree.cpp widgets/querylabel.cpp @@ -407,6 +408,7 @@ set( libHeaders utils/itunesparser.h utils/rdioparser.h utils/shortenedlinkparser.h + utils/qnr_iodevicestream.h widgets/checkdirtree.h widgets/querylabel.h diff --git a/src/libtomahawk/utils/qnr_iodevicestream.cpp b/src/libtomahawk/utils/qnr_iodevicestream.cpp new file mode 100644 index 000000000..41ea2221a --- /dev/null +++ b/src/libtomahawk/utils/qnr_iodevicestream.cpp @@ -0,0 +1,86 @@ +/* This file is part of the KDE project + Copyright (C) 2007 Matthias Kretz + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) version 3, or any + later version accepted by the membership of KDE e.V. (or its + successor approved by the membership of KDE e.V.), Nokia Corporation + (or its successors, if any) and the KDE Free Qt Foundation, which shall + act as a proxy defined in Section 6 of version 3 of the license. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library. If not, see . + +*/ + +#include "qnr_iodevicestream.h" + +#include + +using namespace Tomahawk; + +QNR_IODeviceStream::QNR_IODeviceStream(QIODevice* ioDevice, QObject* parent) + : Phonon::AbstractMediaStream( parent ), + _ioDevice(ioDevice), + _networkReply(0) +{ + _ioDevice->reset(); + if (!_ioDevice->isOpen()) { + _ioDevice->open(QIODevice::ReadOnly); + } + + Q_ASSERT(ioDevice->isOpen()); + Q_ASSERT(ioDevice->isReadable()); +// streamSize = ioDevice->size(); +// streamSeekable = !ioDevice->isSequential(); +// + // Allow handling of QNetworkReplies WRT its isFinished() function.. + _networkReply = qobject_cast(_ioDevice); +} + + +QNR_IODeviceStream::~QNR_IODeviceStream() +{ +} + +void QNR_IODeviceStream::reset() +{ + _ioDevice->reset(); + //resetDone(); +} + +void QNR_IODeviceStream::needData() +{ + quint32 size = 4096; + const QByteArray data = _ioDevice->read(size); +// #ifdef __GNUC__ +// #warning TODO 4.5 - make sure we do not break anything without this, it is preventing IODs from working when they did not yet emit readyRead() +// #endif +// if (data.isEmpty() && !d->ioDevice->atEnd()) { +// error(Phonon::NormalError, d->ioDevice->errorString()); +// } + writeData(data); + if (_ioDevice->atEnd()) { + // If the IO device was identified as QNetworkReply also take its + // isFinished() into account, when triggering EOD. + if (!_networkReply || _networkReply->isFinished()) { + endOfData(); + } + } +} + +void QNR_IODeviceStream::seekStream(qint64 offset) +{ + _ioDevice->seek(offset); + //seekStreamDone(); +} + + +// vim: sw=4 sts=4 et tw=100 diff --git a/src/libtomahawk/utils/qnr_iodevicestream.h b/src/libtomahawk/utils/qnr_iodevicestream.h new file mode 100644 index 000000000..9d1a4aadf --- /dev/null +++ b/src/libtomahawk/utils/qnr_iodevicestream.h @@ -0,0 +1,54 @@ +/* This file is part of the KDE project + Copyright (C) 2007 Matthias Kretz + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) version 3, or any + later version accepted by the membership of KDE e.V. (or its + successor approved by the membership of KDE e.V.), Nokia Corporation + (or its successors, if any) and the KDE Free Qt Foundation, which shall + act as a proxy defined in Section 6 of version 3 of the license. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library. If not, see . + +*/ + +#ifndef QNR_IODEVICESTREAM_H +#define QNR_IODEVICESTREAM_H + +#include "dllmacro.h" + +#include + +class QNetworkReply; +class QIODevice; + +namespace Tomahawk +{ + +class DLLEXPORT QNR_IODeviceStream : public Phonon::AbstractMediaStream +{ + Q_OBJECT +public: + explicit QNR_IODeviceStream(QIODevice *ioDevice, QObject *parent = 0); + ~QNR_IODeviceStream(); + + void reset(); + void needData(); + void seekStream(qint64); + +private: + QIODevice *_ioDevice; + QNetworkReply *_networkReply; +}; + +} // namespace Tomahawk + +#endif // QNR_IODEVICESTREAM_H