File indexing completed on 2024-05-12 17:16:00

0001 /***************************************************************************
0002  *   Copyright (C) 2006-2009 by Rajko Albrecht                             *
0003  *   ral@alwins-world.de                                                   *
0004  *                                                                         *
0005  *   This program is free software; you can redistribute it and/or modify  *
0006  *   it under the terms of the GNU General Public License as published by  *
0007  *   the Free Software Foundation; either version 2 of the License, or     *
0008  *   (at your option) any later version.                                   *
0009  *                                                                         *
0010  *   This program is distributed in the hope that it will be useful,       *
0011  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
0012  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
0013  *   GNU General Public License for more details.                          *
0014  *                                                                         *
0015  *   You should have received a copy of the GNU General Public License     *
0016  *   along with this program; if not, write to the                         *
0017  *   Free Software Foundation, Inc.,                                       *
0018  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
0019  ***************************************************************************/
0020 #include "kiobytestream.h"
0021 
0022 #include <QMimeDatabase>
0023 
0024 KioByteStream::KioByteStream(StreamWrittenCb *aCb, const QString &filename)
0025     : svn::stream::SvnStream(false, true, nullptr),
0026       m_Cb(aCb), m_Written(0),
0027       m_mimeSend(false), m_Filename(filename)
0028 {
0029     m_MessageTick.start();
0030 }
0031 
0032 KioByteStream::~KioByteStream()
0033 {
0034 }
0035 
0036 bool KioByteStream::isOk() const
0037 {
0038     return m_Cb != nullptr;
0039 }
0040 
0041 long KioByteStream::write(const char *data, const unsigned long max)
0042 {
0043     bool forceInfo = !m_mimeSend;
0044     if (m_Cb) {
0045         if (!m_mimeSend) {
0046             m_mimeSend = true;
0047             array = QByteArray::fromRawData(data, max);
0048             QMimeDatabase db;
0049             QMimeType result = db.mimeTypeForFileNameAndData(m_Filename, array);
0050             m_Cb->streamSendMime(result);
0051             array.clear();
0052         }
0053         array = QByteArray::fromRawData(data, max);
0054         m_Cb->streamPushData(array);
0055         array.clear();
0056         m_Written += max;
0057         if (m_MessageTick.elapsed() >= 100 || forceInfo) {
0058             m_Cb->streamWritten(m_Written);
0059             m_MessageTick.restart();
0060         }
0061         return max;
0062     }
0063     return -1;
0064 }