2
Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies)
4
This library is free software; you can redistribute it and/or
5
modify it under the terms of the GNU Library General Public
6
License as published by the Free Software Foundation; either
7
version 2 of the License, or (at your option) any later version.
9
This library is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
Library General Public License for more details.
14
You should have received a copy of the GNU Library General Public License
15
along with this library; see the file COPYING.LIB. If not, write to
16
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17
Boston, MA 02110-1301, USA.
21
#include "QtMIMETypeSniffer.h"
23
#include "MIMESniffing.h"
24
#include <QCoreApplication>
25
#include <QNetworkReply>
27
QtMIMETypeSniffer::QtMIMETypeSniffer(QNetworkReply* reply, const QString& advertisedMimeType, bool isSupportedImageType)
30
, m_mimeType(advertisedMimeType)
31
, m_sniffer(advertisedMimeType.toLatin1().constData(), isSupportedImageType)
34
m_isFinished = !m_sniffer.isValid() || sniff();
38
connect(m_reply, SIGNAL(readyRead()), this, SLOT(trySniffing()));
39
connect(m_reply, SIGNAL(finished()), this, SLOT(trySniffing()));
42
bool QtMIMETypeSniffer::sniff()
44
// See QNetworkReplyWrapper::setFinished().
45
const bool isReplyFinished = m_reply->property("_q_isFinished").toBool();
47
if (!isReplyFinished && m_reply->bytesAvailable() < m_sniffer.dataSize())
50
QByteArray data = m_reply->peek(m_sniffer.dataSize());
51
const char* sniffedMimeType = m_sniffer.sniff(data.constData(), data.size());
53
m_mimeType = QString::fromLatin1(sniffedMimeType);
57
void QtMIMETypeSniffer::trySniffing()
62
m_reply->disconnect(this);
63
QCoreApplication::removePostedEvents(this, QEvent::MetaCall);