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 }