File indexing completed on 2024-12-22 04:40:13

0001 /*
0002     SPDX-FileCopyrightText: 2007-2009 Sergio Pistone <sergio_pistone@yahoo.com.ar>
0003     SPDX-FileCopyrightText: 2010-2022 Mladen Milinkovic <max@smoothware.net>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "fileloadhelper.h"
0009 
0010 #include <QIODevice>
0011 #include <QBuffer>
0012 #include <QDebug>
0013 
0014 #include <kio_version.h>
0015 #include <kio/statjob.h>
0016 #include <kio/storedtransferjob.h>
0017 
0018 FileLoadHelper::FileLoadHelper(const QUrl &url) :
0019     m_url(url),
0020     m_file(0)
0021 {}
0022 
0023 FileLoadHelper::~FileLoadHelper()
0024 {
0025     if(m_file)
0026         close();
0027 }
0028 
0029 const QUrl &
0030 FileLoadHelper::url()
0031 {
0032     return m_url;
0033 }
0034 
0035 QIODevice *
0036 FileLoadHelper::file()
0037 {
0038     return m_file;
0039 }
0040 
0041 bool
0042 FileLoadHelper::open()
0043 {
0044     if(m_file)
0045         return false;
0046 
0047     if(m_url.isLocalFile()) {
0048         m_file = new QFile(m_url.toLocalFile());
0049         if(!m_file->open(QIODevice::ReadOnly)) {
0050             qDebug() << "Couldn't open file" << static_cast<QFile *>(m_file)->fileName();
0051             delete m_file;
0052             m_file = nullptr;
0053             return false;
0054         }
0055     } else {
0056 #if KIO_VERSION < QT_VERSION_CHECK(5, 69, 0)
0057         KIO::Job *job = KIO::stat(m_url, KIO::StatJob::SourceSide, 2);
0058 #else
0059         KIO::Job *job = KIO::statDetails(m_url, KIO::StatJob::SourceSide, KIO::StatDefaultDetails, KIO::HideProgressInfo);
0060 #endif
0061         if(!job->exec()) {
0062             qDebug() << "Failed to start KIO::stat job" << m_url;
0063             return false;
0064         }
0065 
0066         KIO::StoredTransferJob *xjob = KIO::storedGet(m_url);
0067         if(!xjob) {
0068             qDebug() << "Couldn't open url" << m_url;
0069             return false;
0070         }
0071         connect(xjob, &KIO::StoredTransferJob::result, this, &FileLoadHelper::downloadComplete);
0072         m_file = new QBuffer(&m_data);
0073     }
0074 
0075     return true;
0076 }
0077 
0078 bool
0079 FileLoadHelper::close()
0080 {
0081     if(!m_file)
0082         return false;
0083 
0084     delete m_file;
0085     m_file = nullptr;
0086 
0087     return true;
0088 }
0089 
0090 bool
0091 FileLoadHelper::exists(const QUrl &url)
0092 {
0093 #if KIO_VERSION < QT_VERSION_CHECK(5, 69, 0)
0094     KIO::Job *job = KIO::stat(url, KIO::StatJob::SourceSide, 2);
0095 #else
0096     KIO::Job *job = KIO::statDetails(url, KIO::StatJob::SourceSide, KIO::StatDefaultDetails, KIO::HideProgressInfo);
0097 #endif
0098     return job->exec();
0099 }
0100 
0101 void
0102 FileLoadHelper::downloadComplete(KJob *job)
0103 {
0104     m_data = static_cast<KIO::StoredTransferJob *>(job)->data();
0105 }